{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eslint/src/external/eslint/babylon-to-espree/convertTemplateType.js"],"names":["convertTemplateType","tokens","tt","startingToken","currentToken","numBraces","numBackQuotes","isBackQuote","token","type","backQuote","isTemplateStarter","braceR","isTemplateEnder","dollarBraceL","createTemplateValue","start","end","value","template","label","replaceWithTemplateType","templateToken","loc","splice","trackNumBraces","braceL","length"],"mappings":"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","file":"convertTemplateType.js","sourcesContent":["export function convertTemplateType (tokens, tt) {\n  var startingToken    = 0;\n  var currentToken     = 0;\n  var numBraces        = 0; // track use of {}\n  var numBackQuotes    = 0; // track number of nested templates\n\n  function isBackQuote(token) {\n    return tokens[token].type === tt.backQuote;\n  }\n\n  function isTemplateStarter(token) {\n    return isBackQuote(token) ||\n           // only can be a template starter when in a template already\n           tokens[token].type === tt.braceR && numBackQuotes > 0;\n  }\n\n  function isTemplateEnder(token) {\n    return isBackQuote(token) ||\n           tokens[token].type === tt.dollarBraceL;\n  }\n\n  // append the values between start and end\n  function createTemplateValue(start, end) {\n    var value = \"\";\n    while (start <= end) {\n      if (tokens[start].value) {\n        value += tokens[start].value;\n      } else if (tokens[start].type !== tt.template) {\n        value += tokens[start].type.label;\n      }\n      start++;\n    }\n    return value;\n  }\n\n  // create Template token\n  function replaceWithTemplateType(start, end) {\n    var templateToken = {\n      type: \"Template\",\n      value: createTemplateValue(start, end),\n      start: tokens[start].start,\n      end: tokens[end].end,\n      loc: {\n        start: tokens[start].loc.start,\n        end: tokens[end].loc.end\n      }\n    };\n\n    // put new token in place of old tokens\n    tokens.splice(start, end - start + 1, templateToken);\n  }\n\n  function trackNumBraces(token) {\n    if (tokens[token].type === tt.braceL) {\n      numBraces++;\n    } else if (tokens[token].type === tt.braceR) {\n      numBraces--;\n    }\n  }\n\n  while (startingToken < tokens.length) {\n    // template start: check if ` or }\n    if (isTemplateStarter(startingToken) && numBraces === 0) {\n      if (isBackQuote(startingToken)) {\n        numBackQuotes++;\n      }\n\n      currentToken = startingToken + 1;\n\n      // check if token after template start is \"template\"\n      if (currentToken >= tokens.length - 1 || tokens[currentToken].type !== tt.template) {\n        break;\n      }\n\n      // template end: find ` or ${\n      while (!isTemplateEnder(currentToken)) {\n        if (currentToken >= tokens.length - 1) {\n          break;\n        }\n        currentToken++;\n      }\n\n      if (isBackQuote(currentToken)) {\n        numBackQuotes--;\n      }\n      // template start and end found: create new token\n      replaceWithTemplateType(startingToken, currentToken);\n    } else if (numBackQuotes > 0) {\n      trackNumBraces(startingToken);\n    }\n    startingToken++;\n  }\n}\n"]}