static create(target, options) {
    let targetNodes;

    if (typeof target === 'string') {
      targetNodes = arrayFrom(document.querySelectorAll(target));
    } else if (target instanceof Node) {
      targetNodes = [target];
    } else if (target instanceof NodeList === false) {
      throw new Error(`'target' type should be string|Node|NodeList, ${typeof target} given`);
    }

    // Return empty array if there is no nodes attach to
    if (targetNodes.length === 0) {
      return Promise.resolve([]);
    }

    return WebDemoApi.getCompilerVersions().then((versions) => {
      const instances = [];

      targetNodes.forEach((node) => {
        const config = getConfigFromElement(node, true);
        const minCompilerVersion = config.minCompilerVersion;
        let latestStableVersion = null;
        let compilerVersion = null;

        // Skip empty and already initialized nodes
        if (
          node.textContent.trim() === '' ||
          node.getAttribute(INITED_ATTRIBUTE_NAME) === 'true'
        ) {
          return;
        }

        if (versions) {
          versions.sort(function({ version: version1 }, { version: version2 }) {
            if (version1 < version2) return -1;
            if (version1 > version2) return 1;
            return 0;
          });

          let listOfVersions = versions.map(version => version.version);

          if (listOfVersions.includes(config.version)) {
            compilerVersion = config.version;
          } else if (listOfVersions.includes(options.version)) {
            compilerVersion = options.version;
          } else {
            versions.forEach((compilerConfig) => {
              if (compilerConfig.latestStable) {
                latestStableVersion = compilerConfig.version;
              }
            });
            compilerVersion = latestStableVersion;
          }

          if (minCompilerVersion) {
            compilerVersion = minCompilerVersion > latestStableVersion
              ? versions[versions.length - 1].version
              : latestStableVersion;
          }
          instances.push(new ExecutableCode(node, {compilerVersion}, options));
        } else {
          console.error('Cann\'t get kotlin version from server');
          instances.push(new ExecutableCode(node, {highlightOnly: true}));
        }
      });

      return instances;
    });
  }
@param {string|Node|NodeList} target
@param {Object} options
@return {Promise<Array<ExecutableCode>>}