From 30e1e80ffaabaf43bf99f7ad260b1316323463ec Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Wed, 17 May 2023 17:13:17 +0200 Subject: [PATCH 1/6] Treat ArrowFunctions and FunctionDeclarations equally We do this by converting ArrowFunctions into FunctionDeclarations. --- packages/core/src/parsers/svelte/instance/index.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/core/src/parsers/svelte/instance/index.ts b/packages/core/src/parsers/svelte/instance/index.ts index 137bd9201a..541e191fe4 100644 --- a/packages/core/src/parsers/svelte/instance/index.ts +++ b/packages/core/src/parsers/svelte/instance/index.ts @@ -127,6 +127,17 @@ export function parseInstance(ast: Ast, json: SveltosisComponent) { case 'ExpressionStatement': handleExpressionStatement(json, node as ExpressionStatement, parent); break; + case 'ArrowFunctionExpression': + if (parent.type === 'VariableDeclarator') { + // Convert ArrowFunctions into regular FunctionDeclarations + // TODO 1: Converting might change the meaning of "this"! + // TODO 2: Figure out a way if the ArrowFunction does not contain a BlockStatement! + node.type = 'FunctionDeclaration' + node.id = parent.id // Name the created function after the variable! + handleFunctionDeclaration(json, node as FunctionDeclaration); + } + // Do nothing if this was an IIFE + break; case 'FunctionDeclaration': handleFunctionDeclaration(json, node as FunctionDeclaration); break; From 89c3d1c00778deb0ddf51a1c21488905035d69dc Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Wed, 17 May 2023 17:15:45 +0200 Subject: [PATCH 2/6] Add Tests for ArrowFunctions being treated as FunctionDeclarations --- .../__snapshots__/alpine.test.ts.snap | 40 +++ .../__snapshots__/angular.import.test.ts.snap | 66 +++++ .../__snapshots__/angular.mapper.test.ts.snap | 68 +++++ .../__snapshots__/angular.test.ts.snap | 118 +++++++++ .../__tests__/__snapshots__/html.test.ts.snap | 130 ++++++++++ .../__snapshots__/liquid.test.ts.snap | 16 ++ .../__tests__/__snapshots__/lit.test.ts.snap | 60 +++++ .../__snapshots__/marko.test.ts.snap | 28 ++ .../__snapshots__/parse-svelte.test.ts.snap | 104 ++++++++ .../__snapshots__/preact.test.ts.snap | 50 ++++ .../__tests__/__snapshots__/qwik.test.ts.snap | 48 ++++ .../__snapshots__/react-native.test.ts.snap | 72 ++++++ .../__snapshots__/react.test.ts.snap | 48 ++++ .../__tests__/__snapshots__/rsc.test.ts.snap | 54 ++++ .../__snapshots__/solid.test.ts.snap | 104 ++++++++ .../__snapshots__/stencil.test.ts.snap | 52 ++++ .../__snapshots__/svelte.test.ts.snap | 46 ++++ .../__tests__/__snapshots__/taro.test.ts.snap | 50 ++++ .../vue-composition.test.ts.snap | 32 +++ .../__tests__/__snapshots__/vue.test.ts.snap | 52 ++++ .../__snapshots__/webcomponent.test.ts.snap | 240 ++++++++++++++++++ .../syntax/svelte/fat-arrow.raw.svelte | 8 + packages/core/src/__tests__/test-generator.ts | 1 + 23 files changed, 1487 insertions(+) create mode 100644 packages/core/src/__tests__/syntax/svelte/fat-arrow.raw.svelte diff --git a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap index 6e9edc2831..67bd1465e0 100644 --- a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap @@ -5251,6 +5251,26 @@ exports[`Alpine.js > svelte > Javascript Test > eventHandlers 1`] = ` " `; +exports[`Alpine.js > svelte > Javascript Test > fatArrowFunctions 1`] = ` +"
+ + +
+ +" +`; + exports[`Alpine.js > svelte > Javascript Test > html 1`] = ` "
+" +`; + exports[`Alpine.js > svelte > Typescript Test > html 1`] = ` "
+" +`; + exports[`Html > svelte > Javascript Test > html 1`] = ` "
+" +`; + exports[`Html > svelte > Typescript Test > html 1`] = ` "
+ + +" +`; + exports[`Svelte > svelte > Javascript Test > html 1`] = ` " + + +" +`; + exports[`Svelte > svelte > Typescript Test > html 1`] = ` "" `; +exports[`Vue > svelte > Javascript Test > fatArrowFunctions 1`] = ` +" + +" +`; + exports[`Vue > svelte > Javascript Test > html 1`] = ` " " `; diff --git a/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap b/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap index 1ff7fcf2cc..88c50e9267 100644 --- a/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap @@ -26880,7 +26880,7 @@ class MyComponent extends HTMLElement { this.pendingUpdate = false; // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = (a) => { + this.onButtonMyComponent1Click = () => { this.state.log(\\"hi\\"); }; @@ -26998,9 +26998,8 @@ class MyComponent extends HTMLElement { const self = this; this.state = { - clickHandler1: function clickHandler1(event) { - console.log(\\"do something 1\\"); - }, + clickHandler1: + 'const state.clickHandler1 = event => {\\\\n console.log(\\"do something 1\\");\\\\n};', clickHandler2: function clickHandler2(event) { console.log(\\"do something 2\\"); }, @@ -29239,7 +29238,7 @@ class MyComponent extends HTMLElement { this.pendingUpdate = false; // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = (a) => { + this.onButtonMyComponent1Click = () => { this.state.log(\\"hi\\"); }; @@ -29357,9 +29356,8 @@ class MyComponent extends HTMLElement { const self = this; this.state = { - clickHandler1: function clickHandler1(event) { - console.log(\\"do something 1\\"); - }, + clickHandler1: + 'const state.clickHandler1 = event => {\\\\n console.log(\\"do something 1\\");\\\\n};', clickHandler2: function clickHandler2(event) { console.log(\\"do something 2\\"); }, From 4cea3707dd8a866f65e700469f15cfcec2457037 Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Wed, 31 May 2023 18:15:40 +0200 Subject: [PATCH 5/6] Treat ArrowFunctions as FunctionDeclarations by passing the AssignmentExpression to handleFunctionDeclaration(). --- packages/core/src/parsers/svelte/instance/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/parsers/svelte/instance/index.ts b/packages/core/src/parsers/svelte/instance/index.ts index e3337a4aa0..678187836d 100644 --- a/packages/core/src/parsers/svelte/instance/index.ts +++ b/packages/core/src/parsers/svelte/instance/index.ts @@ -132,9 +132,9 @@ export function parseInstance(ast: Ast, json: SveltosisComponent) { handleExpressionStatement(json, node as ExpressionStatement, parent); break; case 'ArrowFunctionExpression': - const parentIndexModifier = 4 + const parentIndexModifier :number = 3 // TODO: May cause problems on VariableDeclarations like `const foo, bar = () => {}` or on destructured Variables.. - parent.type === 'VariableDeclarator' && handleVariableDeclaration(json, nodeList[currentIndex - parentIndexModifier] as VariableDeclaration); + parent.type === 'VariableDeclarator' && handleFunctionDeclaration(json, nodeList[currentIndex - parentIndexModifier] as FunctionDeclaration); // Do nothing if this was an IIFE break; case 'FunctionDeclaration': From d3058179175ca1c0a7a70cef92f1f47859b4e458 Mon Sep 17 00:00:00 2001 From: Dominik Ritter Date: Wed, 31 May 2023 18:23:28 +0200 Subject: [PATCH 6/6] Update Snapshots --- .../__snapshots__/alpine.test.ts.snap | 10 +- .../__snapshots__/angular.import.test.ts.snap | 134 ++--- .../__snapshots__/angular.mapper.test.ts.snap | 136 ++--- .../__snapshots__/angular.test.ts.snap | 268 +++------ .../__tests__/__snapshots__/html.test.ts.snap | 236 ++++---- .../__tests__/__snapshots__/lit.test.ts.snap | 224 +++----- .../__snapshots__/marko.test.ts.snap | 30 +- .../__snapshots__/parse-svelte.test.ts.snap | 6 +- .../__snapshots__/preact.test.ts.snap | 12 +- .../__tests__/__snapshots__/qwik.test.ts.snap | 115 ++-- .../__snapshots__/react-native.test.ts.snap | 12 +- .../__snapshots__/react.test.ts.snap | 12 +- .../__tests__/__snapshots__/rsc.test.ts.snap | 10 +- .../__snapshots__/solid.test.ts.snap | 132 +++-- .../__snapshots__/stencil.test.ts.snap | 120 ++-- .../__snapshots__/svelte.test.ts.snap | 188 ++----- .../__tests__/__snapshots__/taro.test.ts.snap | 12 +- .../vue-composition.test.ts.snap | 36 +- .../__tests__/__snapshots__/vue.test.ts.snap | 92 +--- .../__snapshots__/webcomponent.test.ts.snap | 512 +++++++++++------- 20 files changed, 1056 insertions(+), 1241 deletions(-) diff --git a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap index 6c5a70e922..cd6b6c6471 100644 --- a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap @@ -5259,8 +5259,9 @@ exports[`Alpine.js > svelte > Javascript Test > fatArrowFunctions 1`] = ` " `; @@ -13583,7 +13607,7 @@ exports[`Html > svelte > Typescript Test > eventHandlers 1`] = ` } // Event handler for 'click' event on button-1 - function onButton1Click() { + function onButton1Click(a) { state.log(\\"hi\\"); } @@ -13608,62 +13632,86 @@ exports[`Html > svelte > Typescript Test > fatArrowFunctions 1`] = ` " " `; diff --git a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap index 37c436e4c8..19ebee9213 100644 --- a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap @@ -8531,91 +8531,59 @@ export default class MyComponent extends LitElement { `; exports[`Lit > svelte > Javascript Test > eventHandlers 1`] = ` -"import { LitElement, html, css } from 'lit'; - import { customElement, property, state, query } from 'lit/decorators.js'; - - - - - @customElement('my-component') - export default class MyComponent extends LitElement { - - createRenderRoot() { - return this; - } - - - - - - +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; +@customElement(\\"my-component\\") +export default class MyComponent extends LitElement { + createRenderRoot() { + return this; + } + log = function log(msg = \\"hello\\") { + console.log(msg); + }; + render() { + return html\` - log = function log(msg = 'hello') { -console.log(msg); +
+ +
+ \`; + } } - - - - - - - render() { - return html\` - -
- -
- \` - } - }" +" `; exports[`Lit > svelte > Javascript Test > fatArrowFunctions 1`] = ` -"import { LitElement, html, css } from 'lit'; - import { customElement, property, state, query } from 'lit/decorators.js'; - - - - - @customElement('my-component') - export default class MyComponent extends LitElement { - - createRenderRoot() { - return this; - } - - - - - - +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; +@customElement(\\"my-component\\") +export default class MyComponent extends LitElement { + createRenderRoot() { + return this; + } + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; + render() { + return html\` - clickHandler1 = \\"const state.clickHandler1 = event => { - console.log(\\\\\\"do something 1\\\\\\"); -};\\" -clickHandler2 = function clickHandler2(event) { - console.log(\\"do something 2\\"); + + + \`; + } } - - - - - - - render() { - return html\` - - - - \` - } - }" +" `; exports[`Lit > svelte > Javascript Test > html 1`] = ` @@ -9088,91 +9056,59 @@ export default class MyComponent extends LitElement { `; exports[`Lit > svelte > Typescript Test > eventHandlers 1`] = ` -"import { LitElement, html, css } from 'lit'; - import { customElement, property, state, query } from 'lit/decorators.js'; - - - - - @customElement('my-component') - export default class MyComponent extends LitElement { - - createRenderRoot() { - return this; - } - - - - - - +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; +@customElement(\\"my-component\\") +export default class MyComponent extends LitElement { + createRenderRoot() { + return this; + } + log = function log(msg = \\"hello\\") { + console.log(msg); + }; + render() { + return html\` - log = function log(msg = 'hello') { -console.log(msg); +
+ +
+ \`; + } } - - - - - - - render() { - return html\` - -
- -
- \` - } - }" +" `; exports[`Lit > svelte > Typescript Test > fatArrowFunctions 1`] = ` -"import { LitElement, html, css } from 'lit'; - import { customElement, property, state, query } from 'lit/decorators.js'; - - - - - @customElement('my-component') - export default class MyComponent extends LitElement { - - createRenderRoot() { - return this; - } - - - - - - +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; +@customElement(\\"my-component\\") +export default class MyComponent extends LitElement { + createRenderRoot() { + return this; + } + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; + render() { + return html\` - clickHandler1 = \\"const state.clickHandler1 = event => { - console.log(\\\\\\"do something 1\\\\\\"); -};\\" -clickHandler2 = function clickHandler2(event) { - console.log(\\"do something 2\\"); + + + \`; + } } - - - - - - - render() { - return html\` - - - - \` - } - }" +" `; exports[`Lit > svelte > Typescript Test > html 1`] = ` diff --git a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap index 6e02a43e98..16bb2ea2e5 100644 --- a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap @@ -4741,7 +4741,7 @@ exports[`Marko > svelte > Javascript Test > eventHandlers 1`] = ` }
- +
" @@ -4749,15 +4749,14 @@ exports[`Marko > svelte > Javascript Test > eventHandlers 1`] = ` exports[`Marko > svelte > Javascript Test > fatArrowFunctions 1`] = ` "class { - clickHandler1 = \\"const state.clickHandler1 = event => { - console.log(\\\\\\"do something 1\\\\\\"); -};\\" -clickHandler2 = function clickHandler2(event) { - console.log(\\"do something 2\\"); + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; } - } - " `; @@ -5034,7 +5033,7 @@ exports[`Marko > svelte > Typescript Test > eventHandlers 1`] = ` }
- +
" @@ -5042,15 +5041,14 @@ exports[`Marko > svelte > Typescript Test > eventHandlers 1`] = ` exports[`Marko > svelte > Typescript Test > fatArrowFunctions 1`] = ` "class { - clickHandler1 = \\"const state.clickHandler1 = event => { - console.log(\\\\\\"do something 1\\\\\\"); -};\\" -clickHandler2 = function clickHandler2(event) { - console.log(\\"do something 2\\"); + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; } - } - " `; diff --git a/packages/core/src/__tests__/__snapshots__/parse-svelte.test.ts.snap b/packages/core/src/__tests__/__snapshots__/parse-svelte.test.ts.snap index 56308c1ae2..067930dec1 100644 --- a/packages/core/src/__tests__/__snapshots__/parse-svelte.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/parse-svelte.test.ts.snap @@ -597,7 +597,7 @@ exports[`Parse JSX > eventHandlers 1`] = ` "bindings": { "onClick": { "arguments": [ - [], + "a", ], "code": "state.log('hi')", "type": "single", @@ -789,7 +789,9 @@ exports[`Parse JSX > fatArrowFunctions 1`] = ` "refs": {}, "state": { "clickHandler1": { - "code": "\\"const state.clickHandler1 = event => {\\\\n console.log(\\\\\\"do something 1\\\\\\");\\\\n};\\"", + "code": "state.clickHandler1 = event => { + console.log(\\"do something 1\\"); +}", "type": "function", }, "clickHandler2": { diff --git a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap index a39d11dec3..2f17a1fe36 100644 --- a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap @@ -6899,7 +6899,7 @@ function MyComponent(props) { return (
- +
@@ -6915,7 +6915,9 @@ exports[`Preact > svelte > Javascript Test > fatArrowFunctions 1`] = ` import { h, Fragment } from \\"preact\\"; function MyComponent(props) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); @@ -7342,7 +7344,7 @@ function MyComponent(props: any) { return (
- +
@@ -7358,7 +7360,9 @@ exports[`Preact > svelte > Typescript Test > fatArrowFunctions 1`] = ` import { h, Fragment } from \\"preact\\"; function MyComponent(props: any) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); diff --git a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap index b47cff73b2..5f64aec651 100644 --- a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap @@ -8812,77 +8812,31 @@ export default MyComponent; `; exports[`qwik > svelte > Javascript Test > fatArrowFunctions 1`] = ` -"SyntaxError: unknown: Expecting Unicode escape sequence \\\\uXXXX. (1:39) - -> 1 | let _ = ate.clickHandler1 = event => {\\\\n console.log(props,state,\\\\\\"do something 1\\\\\\");\\\\n};\\" - | ^ - at instantiate (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:72:32) - at constructor (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:358:12) - at Parser.raise (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:3341:19) - at Parser.readWord1 (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:3281:16) - at Parser.readWord (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:3311:23) - at Parser.getTokenFromCode (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:2675:14) - at Parser.getTokenFromCode (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:8077:18) - at Parser.getTokenFromCode (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10982:18) - at Parser.nextToken (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:2025:10) - at Parser.next (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:1929:10) - at Parser.eat (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:1934:12) - at Parser.expect (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:4008:10) - at Parser.parseBlock (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:15250:10) - at Parser.parseFunctionBody (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:13946:24) - at Parser.parseArrowExpression (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:13917:10) - at Parser.parseExprAtom (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:13113:25) - at Parser.parseExprAtom (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:8041:20) - at Parser.parseExprSubscripts (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12643:23) - at Parser.parseUpdate (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12622:21) - at Parser.parseMaybeUnary (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12593:23) - at Parser.parseMaybeUnary (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10795:20) - at Parser.parseMaybeUnaryOrPrivate (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12387:61) - at Parser.parseExprOps (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12394:23) - at Parser.parseMaybeConditional (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12364:23) - at Parser.parseMaybeAssign (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12316:21) - at Parser.parseMaybeAssign (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10725:20) - at Parser.parseMaybeAssign (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12348:25) - at Parser.parseMaybeAssign (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10725:20) - at /home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12274:39 - at Parser.allowInAnd (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:14341:16) - at Parser.parseMaybeAssignAllowIn (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:12274:17) - at Parser.parseVar (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:15369:91) - at Parser.parseVarStatement (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:15171:10) - at Parser.parseVarStatement (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10318:31) - at Parser.parseStatementContent (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:14713:21) - at Parser.parseStatementContent (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:10359:18) - at Parser.parseStatement (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:14638:17) - at Parser.parseBlockOrModuleBlockBody (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:15281:25) - at Parser.parseBlockBody (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:15272:10) - at Parser.parseProgram (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:14556:10) - at Parser.parseTopLevel (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:14543:25) - at Parser.parse (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:16506:10) - at Parser.parse (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:11149:18) - at parse (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/parser/lib/index.js:16558:38) - at parser (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/core/lib/parser/index.js:52:34) - at parser.next () - at normalizeFile (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/core/lib/transformation/normalize-file.js:82:38) - at normalizeFile.next () - at run (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/core/lib/transformation/index.js:29:50) - at run.next () - at Function.transform (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/core/lib/transform.js:25:41) - at transform.next () - at evaluateSync (/home/dritter/Projekte/mitosis/packages/core/node_modules/gensync/index.js:251:28) - at Function.sync (/home/dritter/Projekte/mitosis/packages/core/node_modules/gensync/index.js:89:14) - at Proxy.transform (/home/dritter/Projekte/mitosis/packages/core/node_modules/@babel/core/lib/transform.js:34:54) - at babelTransform (/home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:48:32) - at babelTransformCode (/home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:61:67) - at /home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:31:18 - at Proxy.pipe (/home/dritter/Projekte/mitosis/packages/core/node_modules/fp-ts/lib/function.js:290:26) - at handleErrorOrExpression (/home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:29:36) - at /home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:99:18 - at Proxy.pipe (/home/dritter/Projekte/mitosis/packages/core/node_modules/fp-ts/lib/function.js:292:23) - at babelTransformExpression (/home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:86:32) - at Module.convertTypeScriptToJS (/home/dritter/Projekte/mitosis/packages/core/src/helpers/babel-transform.ts:109:41) - at emitStateMethods (/home/dritter/Projekte/mitosis/packages/core/src/generators/qwik/helpers/state.ts:49:40) - at Module.emitStateMethodsAndRewriteBindings (/home/dritter/Projekte/mitosis/packages/core/src/generators/qwik/helpers/state.ts:62:17) - at /home/dritter/Projekte/mitosis/packages/core/src/generators/qwik/component-generator.ts:105:42 +"Error: SyntaxError: '(' expected. (4:35) + 2 | + 3 | export const ckHandler1 = event => { +> 4 | console.log=function ckHandler1 = event => { + | ^ + 5 | console.log(props, state, \\"do something 1\\"); + 6 | };export const clickHandler2=function clickHandler2(props, state, event) { + 7 | console.log(\\"do something 2\\"); +======================================================================== +import{Fragment,component$,h}from\\"@builder.io/qwik\\"; + +export const ckHandler1 = event => { + console.log=function ckHandler1 = event => { + console.log(props, state, \\"do something 1\\"); +};export const clickHandler2=function clickHandler2(props, state, event) { + console.log(\\"do something 2\\"); +};export const MyComponent=component$((props)=>{const state = {}; + +return ()}); + +export default MyComponent; + +======================================================================== + at File.toString (/home/dritter/Projekte/mitosis/packages/core/src/generators/qwik/src-generator.ts:84:15) + at /home/dritter/Projekte/mitosis/packages/core/src/generators/qwik/component-generator.ts:135:27 at getOutput (/home/dritter/Projekte/mitosis/packages/core/src/__tests__/test-generator.ts:502:62) at /home/dritter/Projekte/mitosis/packages/core/src/__tests__/test-generator.ts:504:28 at async runTest (/home/dritter/Projekte/mitosis/packages/core/node_modules/vitest/dist/chunk-runtime-setup.ab6b6274.js:417:7) @@ -9301,18 +9255,21 @@ export default MyComponent; `; exports[`qwik > svelte > Typescript Test > fatArrowFunctions 1`] = ` -"Error: SyntaxError: ',' expected. (3:17) - 1 | import{Fragment,component$,h}from\\"@builder.io/qwik\\"; +"Error: SyntaxError: '(' expected. (4:35) 2 | -> 3 | export const ate.clickHandler1 = event => {\\\\n console.log=function ate.clickHandler1 = event => {\\\\n console.log(props,state,\\\\\\"do something 1\\\\\\");\\\\n};\\";export const clickHandler2=function clickHandler2(props,state,event) { - | ^ - 4 | console.log(\\"do something 2\\"); - 5 | };export const MyComponent=component$((props:any)=>{const state: any = {}; - 6 | + 3 | export const ckHandler1 = event => { +> 4 | console.log=function ckHandler1 = event => { + | ^ + 5 | console.log(props,state,\\"do something 1\\"); + 6 | };export const clickHandler2=function clickHandler2(props,state,event) { + 7 | console.log(\\"do something 2\\"); ======================================================================== import{Fragment,component$,h}from\\"@builder.io/qwik\\"; -export const ate.clickHandler1 = event => {\\\\n console.log=function ate.clickHandler1 = event => {\\\\n console.log(props,state,\\\\\\"do something 1\\\\\\");\\\\n};\\";export const clickHandler2=function clickHandler2(props,state,event) { +export const ckHandler1 = event => { + console.log=function ckHandler1 = event => { + console.log(props,state,\\"do something 1\\"); +};export const clickHandler2=function clickHandler2(props,state,event) { console.log(\\"do something 2\\"); };export const MyComponent=component$((props:any)=>{const state: any = {}; diff --git a/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap b/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap index b644699f17..960ef0dbcb 100644 --- a/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap @@ -8000,7 +8000,7 @@ function MyComponent(props) { return ( - log(\\"hi\\")}> + log(\\"hi\\")}> Log log(event)}> @@ -8029,7 +8029,9 @@ import { } from \\"react-native\\"; function MyComponent(props) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); @@ -8566,7 +8568,7 @@ function MyComponent(props: any) { return ( - log(\\"hi\\")}> + log(\\"hi\\")}> Log log(event)}> @@ -8595,7 +8597,9 @@ import { } from \\"react-native\\"; function MyComponent(props: any) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); diff --git a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap index 069baeb384..a69a79e9bd 100644 --- a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap @@ -6913,7 +6913,7 @@ function MyComponent(props) { return (
- +
@@ -6928,7 +6928,9 @@ exports[`React > svelte > Javascript Test > fatArrowFunctions 1`] = ` "import * as React from \\"react\\"; function MyComponent(props) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); @@ -7339,7 +7341,7 @@ function MyComponent(props: any) { return (
- +
@@ -7354,7 +7356,9 @@ exports[`React > svelte > Typescript Test > fatArrowFunctions 1`] = ` "import * as React from \\"react\\"; function MyComponent(props: any) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); diff --git a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap index a4cac33e42..8cc9491b8a 100644 --- a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap @@ -6357,8 +6357,9 @@ function MyComponent(props) { const _context = { ...props[\\"_context\\"] }; const state = { - clickHandler1: - 'const state.clickHandler1 = event => { console.log(\\"do something 1\\"); };', + clickHandler1: (state.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }), clickHandler2: function clickHandler2(event) { console.log(\\"do something 2\\"); }, @@ -6747,8 +6748,9 @@ function MyComponent(props: any) { const _context = { ...props[\\"_context\\"] }; const state = { - clickHandler1: - 'const state.clickHandler1 = event => { console.log(\\"do something 1\\"); };', + clickHandler1: (state.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }), clickHandler2: function clickHandler2(event) { console.log(\\"do something 2\\"); }, diff --git a/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap b/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap index 9a8df4d208..6e615fd2e1 100644 --- a/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap @@ -13419,7 +13419,7 @@ function MyComponent(props) { return (
- +
@@ -13443,7 +13443,7 @@ function MyComponent(props) { return ( <>
- +
@@ -13456,25 +13456,55 @@ export default MyComponent; `; exports[`Solid > svelte > Javascript Test > fatArrowFunctions 1`] = ` -"Unterminated string literal. (15:40) - 13 | - 14 | -> 15 | \\"const state.clickHandler1 = event => { - | ^ - 16 | console.log(\\\\\\"do something 1\\\\\\"); - 17 | };\\" - 18 |" +"import { createSignal } from \\"solid-js\\"; + +function MyComponent(props) { + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); + + function clickHandler2(event) { + console.log(\\"do something 2\\"); + } + + return ( + <> + + + + ); +} + +export default MyComponent; +" `; exports[`Solid > svelte > Javascript Test > fatArrowFunctions 2`] = ` -"Unterminated string literal. (15:40) - 13 | - 14 | -> 15 | \\"const state.clickHandler1 = event => { - | ^ - 16 | console.log(\\\\\\"do something 1\\\\\\"); - 17 | };\\" - 18 |" +"import { createSignal } from \\"solid-js\\"; + +import { css } from \\"solid-styled-components\\"; + +function MyComponent(props) { + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); + + function clickHandler2(event) { + console.log(\\"do something 2\\"); + } + + return ( + <> + <> + + + + + ); +} + +export default MyComponent; +" `; exports[`Solid > svelte > Javascript Test > html 1`] = ` @@ -14242,7 +14272,7 @@ function MyComponent(props: any) { return (
- +
@@ -14266,7 +14296,7 @@ function MyComponent(props: any) { return ( <>
- +
@@ -14279,25 +14309,55 @@ export default MyComponent; `; exports[`Solid > svelte > Typescript Test > fatArrowFunctions 1`] = ` -"Unterminated string literal. (15:40) - 13 | - 14 | -> 15 | \\"const state.clickHandler1 = event => { - | ^ - 16 | console.log(\\\\\\"do something 1\\\\\\"); - 17 | };\\" - 18 |" +"import { createSignal } from \\"solid-js\\"; + +function MyComponent(props: any) { + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); + + function clickHandler2(event) { + console.log(\\"do something 2\\"); + } + + return ( + <> + + + + ); +} + +export default MyComponent; +" `; exports[`Solid > svelte > Typescript Test > fatArrowFunctions 2`] = ` -"Unterminated string literal. (15:40) - 13 | - 14 | -> 15 | \\"const state.clickHandler1 = event => { - | ^ - 16 | console.log(\\\\\\"do something 1\\\\\\"); - 17 | };\\" - 18 |" +"import { createSignal } from \\"solid-js\\"; + +import { css } from \\"solid-styled-components\\"; + +function MyComponent(props: any) { + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); + + function clickHandler2(event) { + console.log(\\"do something 2\\"); + } + + return ( + <> + <> + + + + + ); +} + +export default MyComponent; +" `; exports[`Solid > svelte > Typescript Test > html 1`] = ` diff --git a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap index b5a76f9a4c..e69a84e0ad 100644 --- a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap @@ -5969,25 +5969,53 @@ export default class MyComponent { `; exports[`Stencil > svelte > Javascript Test > eventHandlers 1`] = ` -"'(' expected. (24:34) - 22 | return ( - 23 | -> 24 |
- | ^ - 25 | - 26 |
- 27 |" +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"my-component\\", +}) +export default class MyComponent { + log = function log(msg = \\"hello\\") { + console.log(msg); + }; + + render() { + return ( +
+ + + +
+ ); + } +} +" `; exports[`Stencil > svelte > Javascript Test > fatArrowFunctions 1`] = ` -"Unterminated string literal. (12:64) - 10 | - 11 | -> 12 | clickHandler1 = \\"const state.clickHandler1 = event => { - | ^ - 13 | console.log(\\\\\\"do something 1\\\\\\"); - 14 | };\\" - 15 | clickHandler2 = function clickHandler2(event) {" +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"my-component\\", +}) +export default class MyComponent { + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; + + render() { + return ( + + + + + ); + } +} +" `; exports[`Stencil > svelte > Javascript Test > html 1`] = ` @@ -6377,25 +6405,53 @@ export default class MyComponent { `; exports[`Stencil > svelte > Typescript Test > eventHandlers 1`] = ` -"'(' expected. (24:34) - 22 | return ( - 23 | -> 24 |
- | ^ - 25 | - 26 |
- 27 |" +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"my-component\\", +}) +export default class MyComponent { + log = function log(msg = \\"hello\\") { + console.log(msg); + }; + + render() { + return ( +
+ + + +
+ ); + } +} +" `; exports[`Stencil > svelte > Typescript Test > fatArrowFunctions 1`] = ` -"Unterminated string literal. (12:64) - 10 | - 11 | -> 12 | clickHandler1 = \\"const state.clickHandler1 = event => { - | ^ - 13 | console.log(\\\\\\"do something 1\\\\\\"); - 14 | };\\" - 15 | clickHandler2 = function clickHandler2(event) {" +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"my-component\\", +}) +export default class MyComponent { + clickHandler1 = (this.clickHandler1 = (event) => { + console.log(\\"do something 1\\"); + }); + clickHandler2 = function clickHandler2(event) { + console.log(\\"do something 2\\"); + }; + + render() { + return ( + + + + + ); + } +} +" `; exports[`Stencil > svelte > Typescript Test > html 1`] = ` diff --git a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap index eb77855707..82913ac265 100644 --- a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap @@ -5802,80 +5802,38 @@ exports[`Svelte > svelte > Javascript Test > each 1`] = ` `; exports[`Svelte > svelte > Javascript Test > eventHandlers 1`] = ` -" +" -
" +
+ +
" `; exports[`Svelte > svelte > Javascript Test > fatArrowFunctions 1`] = ` " " +
+ +
" `; exports[`Svelte > svelte > Typescript Test > fatArrowFunctions 1`] = ` " +
@@ -6867,7 +6867,9 @@ exports[`Taro > svelte > Javascript Test > fatArrowFunctions 1`] = ` import { Button, View, Text } from \\"@tarojs/components\\"; function MyComponent(props) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); @@ -7288,7 +7290,7 @@ function MyComponent(props: any) { return ( - + @@ -7304,7 +7306,9 @@ exports[`Taro > svelte > Typescript Test > fatArrowFunctions 1`] = ` import { Button, View, Text } from \\"@tarojs/components\\"; function MyComponent(props: any) { - \\"const state.clickHandler1 = event => { console.log(\\\\\\"do something 1\\\\\\"); };\\"; + setClickHandler1((event) => { + console.log(\\"do something 1\\"); + }); function clickHandler2(event) { console.log(\\"do something 2\\"); diff --git a/packages/core/src/__tests__/__snapshots__/vue-composition.test.ts.snap b/packages/core/src/__tests__/__snapshots__/vue-composition.test.ts.snap index bab0d5f38d..4d46bc4cbe 100644 --- a/packages/core/src/__tests__/__snapshots__/vue-composition.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/vue-composition.test.ts.snap @@ -6174,21 +6174,11 @@ exports[`Vue > svelte > Javascript Test > fatArrowFunctions 1`] = ` " `; @@ -6520,21 +6510,11 @@ exports[`Vue > svelte > Typescript Test > fatArrowFunctions 1`] = ` " `; diff --git a/packages/core/src/__tests__/__snapshots__/vue.test.ts.snap b/packages/core/src/__tests__/__snapshots__/vue.test.ts.snap index 05fc88917e..89a82cf1b0 100644 --- a/packages/core/src/__tests__/__snapshots__/vue.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/vue.test.ts.snap @@ -7573,42 +7573,20 @@ exports[`Vue > svelte > Javascript Test > fatArrowFunctions 1`] = ` " `; @@ -8057,42 +8035,20 @@ exports[`Vue > svelte > Typescript Test > fatArrowFunctions 1`] = ` " `; diff --git a/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap b/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap index 88c50e9267..18da35527e 100644 --- a/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/webcomponent.test.ts.snap @@ -26880,7 +26880,7 @@ class MyComponent extends HTMLElement { this.pendingUpdate = false; // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = () => { + this.onButtonMyComponent1Click = (a) => { this.state.log(\\"hi\\"); }; @@ -26982,122 +26982,176 @@ customElements.define(\\"my-component\\", MyComponent); `; exports[`webcomponent > svelte > Javascript Test > fatArrowFunctions 1`] = ` -"/** - * Usage: - * - * - * - */ -class MyComponent extends HTMLElement { - get _root() { - return this.shadowRoot || this; - } +" + + + + + + + /** + * Usage: + * + * + * + */ + class MyComponent extends HTMLElement { + + + get _root() { + return this.shadowRoot || this; + } + + constructor() { + super(); + const self = this; + + + + + this.state = { clickHandler1 : self.state.clickHandler1 = event => { + console.log(\\"do something 1\\"); +}; - constructor() { - super(); - const self = this; +self.update(), clickHandler2 : function clickHandler2(event) { + console.log(\\"do something 2\\"); +},}; + if (!this.props) { + this.props = {}; + } + - this.state = { - clickHandler1: - 'const state.clickHandler1 = event => {\\\\n console.log(\\"do something 1\\");\\\\n};', - clickHandler2: function clickHandler2(event) { - console.log(\\"do something 2\\"); - }, - }; - if (!this.props) { - this.props = {}; - } + - // used to keep track of all nodes created by show/for - this.nodesToDestroy = []; - // batch updates - this.pendingUpdate = false; + // used to keep track of all nodes created by show/for + this.nodesToDestroy = []; + // batch updates + this.pendingUpdate = false; + - // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = (event) => { - this.state.clickHandler1(event); - }; - - // Event handler for 'click' event on button-my-component-2 - this.onButtonMyComponent2Click = (event) => { - this.state.clickHandler2(event); - }; + + // Event handler for 'click' event on button-my-component-1 + this.onButtonMyComponent1Click = (event) => { + + this.state.clickHandler1(event) + } + + // Event handler for 'click' event on button-my-component-2 + this.onButtonMyComponent2Click = (event) => { + + this.state.clickHandler2(event) + } + - if (undefined) { - this.attachShadow({ mode: \\"open\\" }); - } - } + - destroyAnyNodes() { - // destroy current view template refs before rendering again - this.nodesToDestroy.forEach((el) => el.remove()); - this.nodesToDestroy = []; - } + if (undefined) { + this.attachShadow({ mode: 'open' }) + } + } - connectedCallback() { - this._root.innerHTML = \` - - \`; - this.pendingUpdate = true; - this.render(); - this.onMount(); - this.pendingUpdate = false; - this.update(); - } + - onMount() {} + destroyAnyNodes() { + // destroy current view template refs before rendering again + this.nodesToDestroy.forEach(el => el.remove()); + this.nodesToDestroy = []; + } - onUpdate() {} + connectedCallback() { + + + + this._root.innerHTML = \` + + \`; + this.pendingUpdate = true; + + this.render(); + this.onMount(); + this.pendingUpdate = false; + this.update(); + + } + - update() { - if (this.pendingUpdate === true) { - return; - } - this.pendingUpdate = true; - this.render(); - this.onUpdate(); - this.pendingUpdate = false; - } + + - render() { - // re-rendering needs to ensure that all nodes generated by for/show are refreshed - this.destroyAnyNodes(); - this.updateBindings(); - } + onMount() { + + } - updateBindings() { - this._root - .querySelectorAll(\\"[data-el='button-my-component-1']\\") - .forEach((el) => { - el.removeEventListener(\\"click\\", this.onButtonMyComponent1Click); - el.addEventListener(\\"click\\", this.onButtonMyComponent1Click); - }); + onUpdate() { + + } - this._root - .querySelectorAll(\\"[data-el='button-my-component-2']\\") - .forEach((el) => { - el.removeEventListener(\\"click\\", this.onButtonMyComponent2Click); - el.addEventListener(\\"click\\", this.onButtonMyComponent2Click); - }); - } + update() { + if (this.pendingUpdate === true) { + return; + } + this.pendingUpdate = true; + this.render(); + this.onUpdate(); + this.pendingUpdate = false; + } + + render() { + + + // re-rendering needs to ensure that all nodes generated by for/show are refreshed + this.destroyAnyNodes(); + this.updateBindings(); + + + } + + + updateBindings() { + + + this._root.querySelectorAll(\\"[data-el='button-my-component-1']\\").forEach((el) => { + ; +el.removeEventListener('click', this.onButtonMyComponent1Click); +; +el.addEventListener('click', this.onButtonMyComponent1Click) + }) + + + + + + this._root.querySelectorAll(\\"[data-el='button-my-component-2']\\").forEach((el) => { + ; +el.removeEventListener('click', this.onButtonMyComponent2Click); +; +el.addEventListener('click', this.onButtonMyComponent2Click) + }) + + + } + + // Helper to render content + renderTextNode(el, text) { + const textNode = document.createTextNode(text); + if (el?.scope) { + textNode.scope = el.scope; + } + if (el?.context) { + textNode.context = el.context; + } + el.after(textNode); + this.nodesToDestroy.push(el.nextSibling); + } + + - // Helper to render content - renderTextNode(el, text) { - const textNode = document.createTextNode(text); - if (el?.scope) { - textNode.scope = el.scope; - } - if (el?.context) { - textNode.context = el.context; - } - el.after(textNode); - this.nodesToDestroy.push(el.nextSibling); - } -} + + } -customElements.define(\\"my-component\\", MyComponent); -" + customElements.define('my-component', MyComponent); + " `; exports[`webcomponent > svelte > Javascript Test > html 1`] = ` @@ -29238,7 +29292,7 @@ class MyComponent extends HTMLElement { this.pendingUpdate = false; // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = () => { + this.onButtonMyComponent1Click = (a) => { this.state.log(\\"hi\\"); }; @@ -29340,122 +29394,176 @@ customElements.define(\\"my-component\\", MyComponent); `; exports[`webcomponent > svelte > Typescript Test > fatArrowFunctions 1`] = ` -"/** - * Usage: - * - * - * - */ -class MyComponent extends HTMLElement { - get _root() { - return this.shadowRoot || this; - } +" + + + + + + + /** + * Usage: + * + * + * + */ + class MyComponent extends HTMLElement { + + + get _root() { + return this.shadowRoot || this; + } + + constructor() { + super(); + const self = this; + + + + + this.state = { clickHandler1 : self.state.clickHandler1 = event => { + console.log(\\"do something 1\\"); +}; - constructor() { - super(); - const self = this; +self.update(), clickHandler2 : function clickHandler2(event) { + console.log(\\"do something 2\\"); +},}; + if (!this.props) { + this.props = {}; + } + - this.state = { - clickHandler1: - 'const state.clickHandler1 = event => {\\\\n console.log(\\"do something 1\\");\\\\n};', - clickHandler2: function clickHandler2(event) { - console.log(\\"do something 2\\"); - }, - }; - if (!this.props) { - this.props = {}; - } + - // used to keep track of all nodes created by show/for - this.nodesToDestroy = []; - // batch updates - this.pendingUpdate = false; + // used to keep track of all nodes created by show/for + this.nodesToDestroy = []; + // batch updates + this.pendingUpdate = false; + - // Event handler for 'click' event on button-my-component-1 - this.onButtonMyComponent1Click = (event) => { - this.state.clickHandler1(event); - }; - - // Event handler for 'click' event on button-my-component-2 - this.onButtonMyComponent2Click = (event) => { - this.state.clickHandler2(event); - }; + + // Event handler for 'click' event on button-my-component-1 + this.onButtonMyComponent1Click = (event) => { + + this.state.clickHandler1(event) + } + + // Event handler for 'click' event on button-my-component-2 + this.onButtonMyComponent2Click = (event) => { + + this.state.clickHandler2(event) + } + - if (undefined) { - this.attachShadow({ mode: \\"open\\" }); - } - } + - destroyAnyNodes() { - // destroy current view template refs before rendering again - this.nodesToDestroy.forEach((el) => el.remove()); - this.nodesToDestroy = []; - } + if (undefined) { + this.attachShadow({ mode: 'open' }) + } + } - connectedCallback() { - this._root.innerHTML = \` - - \`; - this.pendingUpdate = true; - this.render(); - this.onMount(); - this.pendingUpdate = false; - this.update(); - } + - onMount() {} + destroyAnyNodes() { + // destroy current view template refs before rendering again + this.nodesToDestroy.forEach(el => el.remove()); + this.nodesToDestroy = []; + } - onUpdate() {} + connectedCallback() { + + + + this._root.innerHTML = \` + + \`; + this.pendingUpdate = true; + + this.render(); + this.onMount(); + this.pendingUpdate = false; + this.update(); + + } + - update() { - if (this.pendingUpdate === true) { - return; - } - this.pendingUpdate = true; - this.render(); - this.onUpdate(); - this.pendingUpdate = false; - } + + - render() { - // re-rendering needs to ensure that all nodes generated by for/show are refreshed - this.destroyAnyNodes(); - this.updateBindings(); - } + onMount() { + + } - updateBindings() { - this._root - .querySelectorAll(\\"[data-el='button-my-component-1']\\") - .forEach((el) => { - el.removeEventListener(\\"click\\", this.onButtonMyComponent1Click); - el.addEventListener(\\"click\\", this.onButtonMyComponent1Click); - }); + onUpdate() { + + } - this._root - .querySelectorAll(\\"[data-el='button-my-component-2']\\") - .forEach((el) => { - el.removeEventListener(\\"click\\", this.onButtonMyComponent2Click); - el.addEventListener(\\"click\\", this.onButtonMyComponent2Click); - }); - } + update() { + if (this.pendingUpdate === true) { + return; + } + this.pendingUpdate = true; + this.render(); + this.onUpdate(); + this.pendingUpdate = false; + } + + render() { + + + // re-rendering needs to ensure that all nodes generated by for/show are refreshed + this.destroyAnyNodes(); + this.updateBindings(); + + + } + + + updateBindings() { + + + this._root.querySelectorAll(\\"[data-el='button-my-component-1']\\").forEach((el) => { + ; +el.removeEventListener('click', this.onButtonMyComponent1Click); +; +el.addEventListener('click', this.onButtonMyComponent1Click) + }) + + + + + + this._root.querySelectorAll(\\"[data-el='button-my-component-2']\\").forEach((el) => { + ; +el.removeEventListener('click', this.onButtonMyComponent2Click); +; +el.addEventListener('click', this.onButtonMyComponent2Click) + }) + + + } + + // Helper to render content + renderTextNode(el, text) { + const textNode = document.createTextNode(text); + if (el?.scope) { + textNode.scope = el.scope; + } + if (el?.context) { + textNode.context = el.context; + } + el.after(textNode); + this.nodesToDestroy.push(el.nextSibling); + } + + - // Helper to render content - renderTextNode(el, text) { - const textNode = document.createTextNode(text); - if (el?.scope) { - textNode.scope = el.scope; - } - if (el?.context) { - textNode.context = el.context; - } - el.after(textNode); - this.nodesToDestroy.push(el.nextSibling); - } -} + + } -customElements.define(\\"my-component\\", MyComponent); -" + customElements.define('my-component', MyComponent); + " `; exports[`webcomponent > svelte > Typescript Test > html 1`] = `