diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap index 22883caa7..4babbb9fd 100644 --- a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap +++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap @@ -2,345 +2,320 @@ exports[`compile > bindings 1`] = ` "export function render(_ctx) { - const t0 = _template('
count is .
'); - const n0 = t0(); - const { - 0: [ - n3, - { - 1: [n2], - }, - ], - } = _children(n0); - const n1 = _createTextNode(count.value); - _insert(n1, n3, n2); + const t0 = _template(\\"
count is .
\\") + const n0 = t0() + const { 0: [n3, { 1: [n2],}],} = _children(n0) + const n1 = _createTextNode(count.value) + _insert(n1, n3, n2) _effect(() => { - _setText(n1, undefined, count.value); - }); - return n0; + _setText(n1, undefined, count.value) + }) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, insert as _insert, effect as _effect, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, insert as _insert, effect as _effect, setText as _setText } from 'vue/vapor' " `; exports[`compile > directives > v-bind > simple expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _setAttr(n1, 'id', undefined, id.value); - }); - return n0; + _setAttr(n1, \\"id\\", undefined, id.value) + }) + return n0 } -import { template as _template, children as _children, effect as _effect, setAttr as _setAttr } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, setAttr as _setAttr } from 'vue/vapor' " `; exports[`compile > directives > v-html > no expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _setHtml(n1, undefined, ''); - }); - return n0; + _setHtml(n1, undefined, \\"\\") + }) + return n0 } -import { template as _template, children as _children, effect as _effect, setHtml as _setHtml } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, setHtml as _setHtml } from 'vue/vapor' " `; exports[`compile > directives > v-html > simple expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _setHtml(n1, undefined, code.value); - }); - return n0; + _setHtml(n1, undefined, code.value) + }) + return n0 } -import { template as _template, children as _children, effect as _effect, setHtml as _setHtml } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, setHtml as _setHtml } from 'vue/vapor' " `; exports[`compile > directives > v-on > event modifier 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _on(n1, 'click', _withModifiers(handleClick, ['prevent', 'stop'])); - }); - return n0; + _on(n1, \\"click\\", _withModifiers(handleClick, [\\"prevent\\", \\"stop\\"])) + }) + return n0 } -import { template as _template, children as _children, effect as _effect, withModifiers as _withModifiers, on as _on } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, withModifiers as _withModifiers, on as _on } from 'vue/vapor' " `; exports[`compile > directives > v-on > simple expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _on(n1, 'click', handleClick); - }); - return n0; + _on(n1, \\"click\\", handleClick) + }) + return n0 } -import { template as _template, children as _children, effect as _effect, on as _on } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, on as _on } from 'vue/vapor' " `; exports[`compile > directives > v-once > as root node 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); - _setAttr(n1, 'id', undefined, foo); - return n0; + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) + _setAttr(n1, \\"id\\", undefined, foo) + return n0 } -import { template as _template, children as _children, setAttr as _setAttr } from 'vue/vapor'; + +import { template as _template, children as _children, setAttr as _setAttr } from 'vue/vapor' " `; exports[`compile > directives > v-once > basic 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [ - n3, - { - 1: [n2], - }, - ], - } = _children(n0); - const n1 = _createTextNode(msg.value); - _setText(n1, undefined, msg.value); - _setAttr(n2, 'class', undefined, clz.value); - _prepend(n3, n1); - return n0; + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n3, { 1: [n2],}],} = _children(n0) + const n1 = _createTextNode(msg.value) + _setText(n1, undefined, msg.value) + _setAttr(n2, \\"class\\", undefined, clz.value) + _prepend(n3, n1) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setAttr as _setAttr, prepend as _prepend } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, setText as _setText, setAttr as _setAttr, prepend as _prepend } from 'vue/vapor' " `; exports[`compile > directives > v-pre > basic 1`] = ` "export function render(_ctx) { - const t0 = _template('
{{ bar }}
'); - const n0 = t0(); - return n0; + const t0 = _template(\\"
{{ bar }}
\\") + const n0 = t0() + return n0 } -import { template as _template } from 'vue/vapor'; + +import { template as _template } from 'vue/vapor' " `; exports[`compile > directives > v-pre > self-closing v-pre 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 1: [n1], - } = _children(n0); - const n2 = _createTextNode(bar); - _append(n1, n2); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 1: [n1],} = _children(n0) + const n2 = _createTextNode(bar) + _append(n1, n2) _effect(() => { - _setAttr(n1, 'id', undefined, foo); - }); + _setAttr(n1, \\"id\\", undefined, foo) + }) _effect(() => { - _setText(n2, undefined, bar); - }); - return n0; + _setText(n2, undefined, bar) + }) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, effect as _effect, setAttr as _setAttr, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, effect as _effect, setAttr as _setAttr, setText as _setText } from 'vue/vapor' " `; exports[`compile > directives > v-pre > should not affect siblings after it 1`] = ` "export function render(_ctx) { - const t0 = _template('
{{ bar }}
'); - const n0 = t0(); - const { - 1: [n1], - } = _children(n0); - const n2 = _createTextNode(bar.value); - _append(n1, n2); + const t0 = _template(\\"
{{ bar }}
\\") + const n0 = t0() + const { 1: [n1],} = _children(n0) + const n2 = _createTextNode(bar.value) + _append(n1, n2) _effect(() => { - _setAttr(n1, 'id', undefined, foo.value); - }); + _setAttr(n1, \\"id\\", undefined, foo.value) + }) _effect(() => { - _setText(n2, undefined, bar.value); - }); - return n0; + _setText(n2, undefined, bar.value) + }) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, effect as _effect, setAttr as _setAttr, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, effect as _effect, setAttr as _setAttr, setText as _setText } from 'vue/vapor' " `; exports[`compile > directives > v-text > no expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _setText(n1, undefined, ''); - }); - return n0; + _setText(n1, undefined, \\"\\") + }) + return n0 } -import { template as _template, children as _children, effect as _effect, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, setText as _setText } from 'vue/vapor' " `; exports[`compile > directives > v-text > simple expression 1`] = ` "export function render(_ctx) { - const t0 = _template('
'); - const n0 = t0(); - const { - 0: [n1], - } = _children(n0); + const t0 = _template(\\"
\\") + const n0 = t0() + const { 0: [n1],} = _children(n0) _effect(() => { - _setText(n1, undefined, str.value); - }); - return n0; + _setText(n1, undefined, str.value) + }) + return n0 } -import { template as _template, children as _children, effect as _effect, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, effect as _effect, setText as _setText } from 'vue/vapor' " `; exports[`compile > dynamic root 1`] = ` "export function render(_ctx) { - const t0 = _fragment(); - const n0 = t0(); - const n1 = _createTextNode(1); - const n2 = _createTextNode(2); - _append(n0, n1, n2); + const t0 = _fragment() + + const n0 = t0() + const n1 = _createTextNode(1) + const n2 = _createTextNode(2) + _append(n0, n1, n2) _effect(() => { - _setText(n1, undefined, 1); - }); + _setText(n1, undefined, 1) + }) _effect(() => { - _setText(n2, undefined, 2); - }); - return n0; + _setText(n2, undefined, 2) + }) + return n0 } -import { fragment as _fragment, createTextNode as _createTextNode, append as _append, effect as _effect, setText as _setText } from 'vue/vapor'; + +import { fragment as _fragment, createTextNode as _createTextNode, append as _append, effect as _effect, setText as _setText } from 'vue/vapor' " `; exports[`compile > dynamic root nodes and interpolation 1`] = ` "export function render(_ctx) { - const t0 = _template(''); - const n0 = t0(); - const { - 0: [ - n1, - { - 1: [n5], - }, - ], - } = _children(n0); - const n2 = _createTextNode(count); - const n3 = _createTextNode(count); - const n4 = _createTextNode(count); - _prepend(n1, n2); - _insert(n3, n1, n5); - _append(n1, n4); + const t0 = _template(\\"\\") + const n0 = t0() + const { 0: [n1, { 1: [n5],}],} = _children(n0) + const n2 = _createTextNode(count) + const n3 = _createTextNode(count) + const n4 = _createTextNode(count) + _prepend(n1, n2) + _insert(n3, n1, n5) + _append(n1, n4) _effect(() => { - _on(n1, 'click', handleClick); - }); + _on(n1, \\"click\\", handleClick) + }) _effect(() => { - _setAttr(n1, 'id', undefined, count); - _setText(n2, undefined, count); - _setText(n3, undefined, count); - _setText(n4, undefined, count); - }); - return n0; + _setAttr(n1, \\"id\\", undefined, count) + _setText(n2, undefined, count) + _setText(n3, undefined, count) + _setText(n4, undefined, count) + }) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, effect as _effect, on as _on, setAttr as _setAttr, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, effect as _effect, on as _on, setAttr as _setAttr, setText as _setText } from 'vue/vapor' " `; exports[`compile > fragment 1`] = ` "export function render(_ctx) { - const t0 = _template('

'); - const n0 = t0(); - return n0; + const t0 = _template(\\"

\\") + const n0 = t0() + return n0 } -import { template as _template } from 'vue/vapor'; + +import { template as _template } from 'vue/vapor' " `; exports[`compile > static + dynamic root 1`] = ` "export function render(_ctx) { - const t0 = _template('369'); - const n0 = t0(); - const { - 1: [n9], - 3: [n10], - } = _children(n0); - const n1 = _createTextNode(1); - const n2 = _createTextNode(2); - const n3 = _createTextNode(4); - const n4 = _createTextNode(5); - const n5 = _createTextNode(7); - const n6 = _createTextNode(8); - const n7 = _createTextNode('A'); - const n8 = _createTextNode('B'); - _prepend(n0, n1, n2); - _insert([n3, n4], n0, n9); - _insert([n5, n6], n0, n10); - _append(n0, n7, n8); + const t0 = _template(\\"369\\") + const n0 = t0() + const { 1: [n9], 3: [n10],} = _children(n0) + const n1 = _createTextNode(1) + const n2 = _createTextNode(2) + const n3 = _createTextNode(4) + const n4 = _createTextNode(5) + const n5 = _createTextNode(7) + const n6 = _createTextNode(8) + const n7 = _createTextNode('A') + const n8 = _createTextNode('B') + _prepend(n0, n1, n2) + _insert([n3, n4], n0, n9) + _insert([n5, n6], n0, n10) + _append(n0, n7, n8) _effect(() => { - _setText(n1, undefined, 1); - }); + _setText(n1, undefined, 1) + }) _effect(() => { - _setText(n2, undefined, 2); - }); + _setText(n2, undefined, 2) + }) _effect(() => { - _setText(n3, undefined, 4); - }); + _setText(n3, undefined, 4) + }) _effect(() => { - _setText(n4, undefined, 5); - }); + _setText(n4, undefined, 5) + }) _effect(() => { - _setText(n5, undefined, 7); - }); + _setText(n5, undefined, 7) + }) _effect(() => { - _setText(n6, undefined, 8); - }); + _setText(n6, undefined, 8) + }) _effect(() => { - _setText(n7, undefined, 'A'); - }); + _setText(n7, undefined, 'A') + }) _effect(() => { - _setText(n8, undefined, 'B'); - }); - return n0; + _setText(n8, undefined, 'B') + }) + return n0 } -import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, effect as _effect, setText as _setText } from 'vue/vapor'; + +import { template as _template, children as _children, createTextNode as _createTextNode, prepend as _prepend, insert as _insert, append as _append, effect as _effect, setText as _setText } from 'vue/vapor' " `; exports[`compile > static template 1`] = ` "export function render(_ctx) { - const t0 = _template('

hello

'); - const n0 = t0(); - return n0; + const t0 = _template(\\"

hello

\\") + const n0 = t0() + return n0 } -import { template as _template } from 'vue/vapor'; + +import { template as _template } from 'vue/vapor' " `; diff --git a/packages/compiler-vapor/__tests__/__snapshots__/fixtures.test.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/fixtures.test.ts.snap index 99a139145..665784958 100644 --- a/packages/compiler-vapor/__tests__/__snapshots__/fixtures.test.ts.snap +++ b/packages/compiler-vapor/__tests__/__snapshots__/fixtures.test.ts.snap @@ -16,30 +16,31 @@ const increment = () => count.value++ return (() => { -const t0 = _template(\\"

Counter

Count:

Double:

once:

{{ count }}

\\") -const n0 = t0() -const { 1: [n2], 2: [n4], 3: [n5], 4: [n6], 6: [n8],} = _children(n0) -const n1 = _createTextNode(count.value) -_append(n2, n1) -const n3 = _createTextNode(double.value) -_append(n4, n3) -const n7 = _createTextNode(count.value) -_setText(n7, undefined, count.value) -_append(n8, n7) -_effect(() => { -_setText(n1, undefined, count.value) -}) -_effect(() => { -_setText(n3, undefined, double.value) -}) -_effect(() => { -_on(n5, \\"click\\", increment) -}) -_effect(() => { -_setHtml(n6, undefined, html) -}) -return n0 + const t0 = _template(\\"

Counter

Count:

Double:

once:

{{ count }}

\\") + const n0 = t0() + const { 1: [n2], 2: [n4], 3: [n5], 4: [n6], 6: [n8],} = _children(n0) + const n1 = _createTextNode(count.value) + _append(n2, n1) + const n3 = _createTextNode(double.value) + _append(n4, n3) + const n7 = _createTextNode(count.value) + _setText(n7, undefined, count.value) + _append(n8, n7) + _effect(() => { + _setText(n1, undefined, count.value) + }) + _effect(() => { + _setText(n3, undefined, double.value) + }) + _effect(() => { + _on(n5, \\"click\\", increment) + }) + _effect(() => { + _setHtml(n6, undefined, html) + }) + return n0 })() + import { template as _template, children as _children, createTextNode as _createTextNode, append as _append, setText as _setText, effect as _effect, on as _on, setHtml as _setHtml } from 'vue/vapor' } diff --git a/packages/compiler-vapor/__tests__/compile.test.ts b/packages/compiler-vapor/__tests__/compile.test.ts index e4b8e295f..e71894775 100644 --- a/packages/compiler-vapor/__tests__/compile.test.ts +++ b/packages/compiler-vapor/__tests__/compile.test.ts @@ -1,19 +1,8 @@ import { type RootNode, BindingTypes, ErrorCodes } from '@vue/compiler-dom' import { type CompilerOptions, compile as _compile } from '../src' -// TODO remove it -import { format } from 'prettier' - -async function compile( - template: string | RootNode, - options: CompilerOptions = {}, -) { +function compile(template: string | RootNode, options: CompilerOptions = {}) { let { code } = _compile(template, options) - code = await format(code, { - parser: 'babel', - printWidth: 999999, - singleQuote: true, - }) return code } @@ -203,7 +192,9 @@ describe('compile', () => { ) expect(code).toMatchSnapshot() - expect(code).contains('
{{ bar }}
') + expect(code).contains( + JSON.stringify('
{{ bar }}
'), + ) expect(code).not.contains('effect') }) diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index 5eff9a940..69bef1b0c 100644 --- a/packages/compiler-vapor/src/generate.ts +++ b/packages/compiler-vapor/src/generate.ts @@ -30,9 +30,10 @@ export interface CodegenContext indentLevel: number map?: SourceMapGenerator - push(code: string, newlineIndex?: NewlineType, node?: IRNode): void + push(code: string, newlineIndex?: number, node?: IRNode): void + pushWithNewline(code: string, newlineIndex?: number, node?: IRNode): void indent(): void - deindent(withoutNewLine?: boolean): void + deindent(): void newline(): void helpers: Set @@ -90,7 +91,7 @@ function createCodegenContext( vaporHelpers.add(name) return `_${name}` }, - push(code, newlineIndex: NewlineType = NewlineType.None, node) { + push(code, newlineIndex = NewlineType.None, node) { context.code += code if (!__BROWSER__ && context.map) { if (node) { @@ -144,15 +145,15 @@ function createCodegenContext( } } }, - indent() { - newline(++context.indentLevel) + pushWithNewline(code, newlineIndex, node) { + context.newline() + context.push(code, newlineIndex, node) }, - deindent(withoutNewLine = false) { - if (withoutNewLine) { - --context.indentLevel - } else { - newline(--context.indentLevel) - } + indent() { + ++context.indentLevel + }, + deindent() { + --context.indentLevel }, newline() { newline(context.indentLevel) @@ -196,74 +197,82 @@ export function generate( options: CodegenOptions = {}, ): CodegenResult { const ctx = createCodegenContext(ir, options) + const { push, pushWithNewline, indent, deindent, newline } = ctx const { vaporHelper, helpers, vaporHelpers } = ctx const functionName = 'render' const isSetupInlined = !!options.inline if (isSetupInlined) { - ctx.push(`(() => {\n`, NewlineType.End) + push(`(() => {`) } else { - ctx.push(`export function ${functionName}(_ctx) {\n`, NewlineType.End) + push(`export function ${functionName}(_ctx) {`) } + indent() ir.template.forEach((template, i) => { if (template.type === IRNodeTypes.TEMPLATE_FACTORY) { // TODO source map? - ctx.push( + pushWithNewline( `const t${i} = ${vaporHelper('template')}(${JSON.stringify( template.template, - )})\n`, - NewlineType.End, + )})`, ) } else { // fragment - ctx.push(`const t0 = ${vaporHelper('fragment')}()\n`, NewlineType.End) + pushWithNewline( + `const t0 = ${vaporHelper('fragment')}()\n`, + NewlineType.End, + ) } }) { - ctx.push(`const n${ir.dynamic.id} = t0()\n`, NewlineType.End, ir) + pushWithNewline(`const n${ir.dynamic.id} = t0()`) + const children = genChildren(ir.dynamic.children) if (children) { - ctx.push( - `const ${children} = ${vaporHelper('children')}(n${ir.dynamic.id})\n`, - NewlineType.End, + pushWithNewline( + `const ${children} = ${vaporHelper('children')}(n${ir.dynamic.id})`, ) } for (const operation of ir.operation) { - genOperation(operation, ctx).forEach((args) => ctx.push(...args)) + genOperation(operation, ctx) } for (const [_expr, operations] of Object.entries(ir.effect)) { - ctx.push(`${vaporHelper('effect')}(() => {\n`, NewlineType.End) + pushWithNewline(`${vaporHelper('effect')}(() => {`) + indent() for (const operation of operations) { - genOperation(operation, ctx).forEach((args) => ctx.push(...args)) + genOperation(operation, ctx) } - ctx.push('})\n', NewlineType.End) + deindent() + pushWithNewline('})') } // TODO multiple-template // TODO return statement in IR - ctx.push(`return n${ir.dynamic.id}\n`, NewlineType.End) + pushWithNewline(`return n${ir.dynamic.id}`) } + deindent() + newline() if (isSetupInlined) { - ctx.push('})()') + push('})()') } else { - ctx.push('}') + push('}') } ctx.newline() if (vaporHelpers.size) // TODO: extract - ctx.push( + pushWithNewline( `import { ${[...vaporHelpers] .map((h) => `${h} as _${h}`) .join(', ')} } from 'vue/vapor'\n`, NewlineType.End, ) if (helpers.size) - ctx.push( + pushWithNewline( `import { ${[...helpers] .map((h) => `${h} as _${h}`) .join(', ')} } from 'vue'\n`, @@ -280,30 +289,24 @@ export function generate( function genOperation( oper: OperationNode, - { vaporHelper }: CodegenContext, -): Parameters[] { + { vaporHelper, pushWithNewline }: CodegenContext, +) { // TODO: cache old value switch (oper.type) { case IRNodeTypes.SET_PROP: { - return [ - [ - `${vaporHelper('setAttr')}(n${oper.element}, ${JSON.stringify( - oper.name, - )}, undefined, ${oper.value})\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('setAttr')}(n${oper.element}, ${JSON.stringify( + oper.name, + )}, undefined, ${oper.value})`, + ) + return } case IRNodeTypes.SET_TEXT: { - return [ - [ - `${vaporHelper('setText')}(n${oper.element}, undefined, ${ - oper.value - })\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('setText')}(n${oper.element}, undefined, ${oper.value})`, + ) + return } case IRNodeTypes.SET_EVENT: { @@ -313,70 +316,54 @@ function genOperation( oper.modifiers, )})` } - return [ - [ - `${vaporHelper('on')}(n${oper.element}, ${JSON.stringify( - oper.name, - )}, ${value})\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('on')}(n${oper.element}, ${JSON.stringify( + oper.name, + )}, ${value})`, + ) + return } case IRNodeTypes.SET_HTML: { - return [ - [ - `${vaporHelper('setHtml')}(n${oper.element}, undefined, ${ - oper.value - })\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('setHtml')}(n${oper.element}, undefined, ${oper.value})`, + ) + return } case IRNodeTypes.CREATE_TEXT_NODE: { - return [ - [ - `const n${oper.id} = ${vaporHelper('createTextNode')}(${ - oper.value - })\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `const n${oper.id} = ${vaporHelper('createTextNode')}(${oper.value})`, + ) + return } case IRNodeTypes.INSERT_NODE: { const elements = ([] as number[]).concat(oper.element) let element = elements.map((el) => `n${el}`).join(', ') if (elements.length > 1) element = `[${element}]` - return [ - [ - `${vaporHelper('insert')}(${element}, n${ - oper.parent - }${`, n${oper.anchor}`})\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('insert')}(${element}, n${ + oper.parent + }${`, n${oper.anchor}`})`, + ) + return } case IRNodeTypes.PREPEND_NODE: { - return [ - [ - `${vaporHelper('prepend')}(n${oper.parent}, ${oper.elements - .map((el) => `n${el}`) - .join(', ')})\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('prepend')}(n${oper.parent}, ${oper.elements + .map((el) => `n${el}`) + .join(', ')})`, + ) + return } case IRNodeTypes.APPEND_NODE: { - return [ - [ - `${vaporHelper('append')}(n${oper.parent}, ${oper.elements - .map((el) => `n${el}`) - .join(', ')})\n`, - NewlineType.End, - ], - ] + pushWithNewline( + `${vaporHelper('append')}(n${oper.parent}, ${oper.elements + .map((el) => `n${el}`) + .join(', ')})`, + ) + return } default: return checkNever(oper)