1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- "use strict";
- module.exports = function(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;
- };
|