System.register([], function (_export, _context) {
  "use strict";

  function convertTemplateType(tokens, tt) {
    let curlyBrace = null;
    let templateTokens = [];
    const result = [];

    function addTemplateType() {
      const start = templateTokens[0];
      const end = templateTokens[templateTokens.length - 1];

      const value = templateTokens.reduce((result, token) => {
        if (token.value) {
          result += token.value;
        } else if (token.type !== tt.template) {
          result += token.type.label;
        }

        return result;
      }, "");

      result.push({
        type: "Template",
        value: value,
        start: start.start,
        end: end.end,
        loc: {
          start: start.loc.start,
          end: end.loc.end
        }
      });

      templateTokens = [];
    }

    tokens.forEach(token => {
      switch (token.type) {
        case tt.backQuote:
          if (curlyBrace) {
            result.push(curlyBrace);
            curlyBrace = null;
          }

          templateTokens.push(token);

          if (templateTokens.length > 1) {
            addTemplateType();
          }

          break;

        case tt.dollarBraceL:
          templateTokens.push(token);
          addTemplateType();
          break;

        case tt.braceR:
          if (curlyBrace) {
            result.push(curlyBrace);
          }

          curlyBrace = token;
          break;

        case tt.template:
          if (curlyBrace) {
            templateTokens.push(curlyBrace);
            curlyBrace = null;
          }

          templateTokens.push(token);
          break;

        case tt.eof:
          if (curlyBrace) {
            result.push(curlyBrace);
          }

          break;

        default:
          if (curlyBrace) {
            result.push(curlyBrace);
            curlyBrace = null;
          }

          result.push(token);
      }
    });

    return result;
  }

  _export("convertTemplateType", convertTemplateType);

  return {
    setters: [],
    execute: function () {}
  };
});