Find responsible line in Javascript code based on this user query "supported language check". Use this code: function plugin() {
    return transformer;

    function transformer(tree, file) {
      const hintNodes = getAllBetween(tree, '--hints--');
      if (hintNodes.length % 2 !== 0) throw Error('Tests must be in (text, 
testString
) order');
      const tests = chunk(hintNodes, 2).map(getTest);
      file.data.tests = tests;
    }
  }

  function transformer(tree, file) {
    const hintNodes = getAllBetween(tree, '--hints--');
    if (hintNodes.length % 2 !== 0) throw Error('Tests must be in (text, 
testString
) order');
    const tests = chunk(hintNodes, 2).map(getTest);
    file.data.tests = tests;
  }

  function getSolution(solutionNodes) {
    let solution;
    try {
      if (solutionNodes.length > 1) throw Error('Too many nodes');
      if (solutionNodes[0].children.length > 1) throw Error('Too many child nodes');
      const solutionString = solutionNodes[0].children[0].value;
      if (solutionString === '') throw Error('Non-empty string required');
      solution = Number(solutionString);
      if (Number.isNaN(solution)) throw Error('Not a number');
      if (solution < 1) throw Error('Not positive number');
    } catch (e) {
      console.log(e);
      throw Error('A video solution should be a positive integer');
    }
    return solution;
  }

  function codeToData(node, seeds, seedKey, validate) {
    if (validate) validate(node);
    const lang = node.lang;
    if (!supportedLanguages.includes(lang)) throw Error(On line ${position.start(node).line} '${lang}' is not a supported language.  Please use one of js, css, html, jsx or py );
    const fileId = index${lang};
    const id = seeds[fileId] ? seeds[fileId].id : '';   // the contents will be missing if there is an id preceding this code   // block.
    if (!seeds[fileId]) {
      seeds[fileId] = defaultFile(lang, id);
    }
    if (isEmpty(node.value) && seedKey !== 'contents') {
      const section = keyToSection[seedKey];
      throw Error(Empty code block in --${section}-- section);
    }
    seeds[fileId][seedKey] = isEmpty(seeds[fileId][seedKey]) ? node.value : seeds[fileId][seedKey] + '\n' + node.value;
  }

  function idToData(node, index, parent, seeds) {
    const id = getId(node);    // If this is reached, the node type is neither root nor code. If it is not   // an id, there must be a syntax error.
    if (!id) {
      throw Error('Unexpected syntax in seed/solution. Must be ::id{#id} or a code ' + 'block (
) \n');
    }
    const codeNode = parent.children[index + 1];
    if (codeNode && is(codeNode, 'code')) {
      const fileKey = `index${codeNode.lang}`;
      if (seeds[fileKey]) throw Error('::id{#id}s must come before code blocks');
      seeds[fileKey] = defaultFile(codeNode.lang, id);
    } else {
      throw Error('::id{#id}s must come before code blocks');
    }
  }

  function getSuperOrder(superblock, {showNewCurriculum} = {showNewCurriculum: false}) {
    let orderMap = superBlockToOrder;
    if (showNewCurriculum) {
      orderMap = superBlockToNewOrder;
    }
    if (!languagesWithAuditedBetaReleases.includes(process.env.CURRICULUM_LOCALE)) {
      orderMap = superBlockNonAuditedOrder;
    }
    if (typeof superblock !== 'string') throw Error('superblock must be a string');
    const order = orderMap[superblock];
    if (typeof order === 'undefined') throw Error(`${superblock} is not a valid superblock`);
    return order;
  }