From 1e62e0b3b40b8dfabf41692c2d8e90378fff5d44 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:12:56 +0100 Subject: [PATCH] simplify --- src/compiler/compile/render_ssr/Renderer.ts | 1 - .../utils/collapse_template_literal.ts | 47 ++++++++----------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/compiler/compile/render_ssr/Renderer.ts b/src/compiler/compile/render_ssr/Renderer.ts index 0e4724ea0e..99a2ee3d68 100644 --- a/src/compiler/compile/render_ssr/Renderer.ts +++ b/src/compiler/compile/render_ssr/Renderer.ts @@ -125,4 +125,3 @@ export default class Renderer { }); } } - diff --git a/src/compiler/compile/utils/collapse_template_literal.ts b/src/compiler/compile/utils/collapse_template_literal.ts index bace266ce5..7658e50f02 100644 --- a/src/compiler/compile/utils/collapse_template_literal.ts +++ b/src/compiler/compile/utils/collapse_template_literal.ts @@ -1,37 +1,30 @@ import { TemplateLiteral } from 'estree'; import { escape_template } from './stringify'; -// Collapse string literals together +/** + * Collapse string literals together + */ export function collapse_template_literal(literal: TemplateLiteral) { - if (literal.quasis.length) { - // flatMap() to produce an array containing [quasi, expr, quasi, expr, ..., quasi] - const zip = literal.quasis.reduce((acc, cur, index) => { - const expr = literal.expressions[index]; - acc.push(cur); - if (expr) { - acc.push(expr); - } - return acc; - }, []); + const collapsed_quasis = []; + const collapsed_expressions = []; + let cur_quasi = literal.quasis[0]; + + // An expression always follows a quasi and vice versa, ending with a quasi + for (let i = 0; i < literal.quasis.length; i++) { + const expr = literal.expressions[i]; + const next_quasi = literal.quasis[i + 1]; // If an expression is a simple string literal, combine it with its preceding // and following quasi - let cur_quasi = zip[0]; - const new_zip = [cur_quasi]; - for (let i = 1; i < zip.length; i += 2) { - const expr = zip[i]; - const next_quasi = zip[i + 1]; - if (expr.type === 'Literal' && typeof expr.value === 'string') { - cur_quasi.value.raw += escape_template(expr.value) + next_quasi.value.raw; - } else { - new_zip.push(expr); - new_zip.push(next_quasi); - cur_quasi = next_quasi; - } + if (next_quasi && expr.type === 'Literal' && typeof expr.value === 'string') { + cur_quasi.value.raw += escape_template(expr.value) + next_quasi.value.raw; + } else { + collapsed_expressions.push(expr); + collapsed_quasis.push(next_quasi); + cur_quasi = next_quasi; } - - // Reconstitute the quasi and expressions arrays - literal.quasis = new_zip.filter((_, index) => index % 2 === 0); - literal.expressions = new_zip.filter((_, index) => index % 2 === 1); } + + literal.quasis = collapsed_quasis; + literal.expressions = collapsed_expressions; }