mirror of https://github.com/sveltejs/svelte
parent
737bc427a2
commit
a77830b7bc
@ -0,0 +1,37 @@
|
|||||||
|
import { TemplateLiteral } from 'estree';
|
||||||
|
import { escape_template } from './stringify';
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reconstitute the quasi and expressions arrays
|
||||||
|
literal.quasis = new_zip.filter((_, index) => index % 2 === 0);
|
||||||
|
literal.expressions = new_zip.filter((_, index) => index % 2 === 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
options: {
|
||||||
|
generate: 'ssr',
|
||||||
|
dev: true
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
/* generated by Svelte vX.Y.Z */
|
||||||
|
import { add_attribute, create_ssr_component, escape } from "svelte/internal";
|
||||||
|
|
||||||
|
const const1 = 1;
|
||||||
|
const const2 = 'const2';
|
||||||
|
|
||||||
|
function foo() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const Component = create_ssr_component(($$result, $$props, $$bindings, slots) => {
|
||||||
|
return `
|
||||||
|
<div class="class1 class2" style="color:red;">-</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div${add_attribute("class", const1, 0)}>-</div>
|
||||||
|
<div${add_attribute("class", const1, 0)}>-</div>
|
||||||
|
<div${add_attribute("class", const1, 0)}>-</div>
|
||||||
|
<div${add_attribute("class", const1, 0)}>-</div>
|
||||||
|
<div${add_attribute("class", const2, 0)}>-</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="${"class1 " + escape('class2', true)}">-</div>
|
||||||
|
<div class="${"class1 " + escape(const2, true)}">-</div>
|
||||||
|
<div class="${"class1 " + escape(const2, true)}"${add_attribute("style", foo(), 0)}>-</div>`;
|
||||||
|
});
|
||||||
|
|
||||||
|
export default Component;
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
<script>
|
||||||
|
const const1 = 1;
|
||||||
|
const const2 = 'const2';
|
||||||
|
|
||||||
|
function foo() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- canonical case - only markup -->
|
||||||
|
<div class="class1 class2" style="color:red;">-</div>
|
||||||
|
|
||||||
|
<!-- various forms of variable syntax -->
|
||||||
|
<div class="{const1}">-</div>
|
||||||
|
<div class={const1}>-</div>
|
||||||
|
<div class="{const1}">-</div>
|
||||||
|
<div class={const1}>-</div>
|
||||||
|
<div class={const2}>-</div>
|
||||||
|
|
||||||
|
<!-- mixed static string + expressions -->
|
||||||
|
<div class="class1 {'class2'}">-</div>
|
||||||
|
<div class="class1 {const2}">-</div>
|
||||||
|
<div class="class1 {const2}" style={foo()}>-</div>
|
||||||
Loading…
Reference in new issue