From a3d65cad88d4a08460c09ef25cd7173d92093a21 Mon Sep 17 00:00:00 2001 From: Sami Jaber Date: Wed, 14 Jun 2023 17:21:49 -0300 Subject: [PATCH] Feature/use target (#1206) * init useTarget * l * v * f * f * add test * get parseJsx working * f * clean * clean * f * f * f * f * f * f * f * f * f * rmv * throw * f --- package.json | 9 +- .../__snapshots__/alpine.test.ts.snap | 30 ++ .../__snapshots__/angular.import.test.ts.snap | 56 +++ .../__snapshots__/angular.mapper.test.ts.snap | 58 +++ .../__snapshots__/angular.test.ts.snap | 98 ++++ .../__tests__/__snapshots__/html.test.ts.snap | 122 +++++ .../__snapshots__/liquid.test.ts.snap | 10 + .../__tests__/__snapshots__/lit.test.ts.snap | 52 +++ .../__snapshots__/marko.test.ts.snap | 22 + .../__snapshots__/parse-jsx.test.ts.snap | 258 +++++++++++ .../__snapshots__/preact.test.ts.snap | 34 ++ .../__tests__/__snapshots__/qwik.test.ts.snap | 32 ++ .../__snapshots__/react-native.test.ts.snap | 56 +++ .../__snapshots__/react.test.ts.snap | 32 ++ .../__tests__/__snapshots__/rsc.test.ts.snap | 40 ++ .../__snapshots__/solid.test.ts.snap | 76 +++ .../__snapshots__/stencil.test.ts.snap | 38 ++ .../__snapshots__/svelte.test.ts.snap | 22 + .../__tests__/__snapshots__/taro.test.ts.snap | 34 ++ .../vue-composition.test.ts.snap | 30 ++ .../__tests__/__snapshots__/vue.test.ts.snap | 42 ++ .../__snapshots__/webcomponent.test.ts.snap | 436 +++++++++++++----- .../src/__tests__/data/use-target.raw.tsx | 37 ++ packages/core/src/__tests__/test-generator.ts | 2 + packages/core/src/constants/hooks.ts | 7 + packages/core/src/constants/html_tags.ts | 17 + .../core/src/generators/alpine/generate.ts | 9 +- packages/core/src/generators/angular.ts | 19 +- packages/core/src/generators/html.ts | 148 +++--- packages/core/src/generators/liquid.ts | 4 +- packages/core/src/generators/lit/generate.ts | 9 +- .../core/src/generators/marko/generate.ts | 10 +- packages/core/src/generators/mitosis.ts | 7 +- .../generators/qwik/component-generator.ts | 4 +- .../core/src/generators/qwik/src-generator.ts | 4 +- packages/core/src/generators/react/blocks.ts | 4 +- .../core/src/generators/react/generator.ts | 15 +- packages/core/src/generators/react/types.ts | 1 + packages/core/src/generators/rsc.ts | 1 + packages/core/src/generators/solid/blocks.ts | 4 +- packages/core/src/generators/solid/index.ts | 4 +- .../core/src/generators/stencil/generate.ts | 8 +- packages/core/src/generators/svelte/blocks.ts | 4 +- packages/core/src/generators/svelte/svelte.ts | 4 +- packages/core/src/generators/template.ts | 4 +- packages/core/src/generators/vue/blocks.ts | 4 +- packages/core/src/generators/vue/vue.ts | 9 +- packages/core/src/helpers/merge-options.ts | 22 +- .../core/src/helpers/plugins/process-code.ts | 103 ----- .../src/helpers/plugins/process-code/index.ts | 87 ++++ .../src/helpers/plugins/process-code/types.ts | 21 + .../helpers/plugins/process-target-blocks.ts | 60 +++ packages/core/src/index.ts | 58 +-- .../core/src/parsers/jsx/element-parser.ts | 6 +- .../core/src/parsers/jsx/function-parser.ts | 75 ++- packages/core/src/parsers/jsx/helpers.ts | 17 - packages/core/src/parsers/jsx/hooks.ts | 69 --- .../core/src/parsers/jsx/hooks/helpers.ts | 29 ++ packages/core/src/parsers/jsx/hooks/index.ts | 62 +++ .../core/src/parsers/jsx/hooks/use-target.ts | 77 ++++ packages/core/src/parsers/jsx/index.ts | 2 - packages/core/src/parsers/jsx/jsx.ts | 45 +- packages/core/src/targets.ts | 2 + packages/core/src/types/mitosis-component.ts | 10 + yarn.lock | 26 +- 65 files changed, 2147 insertions(+), 550 deletions(-) create mode 100644 packages/core/src/__tests__/data/use-target.raw.tsx delete mode 100644 packages/core/src/helpers/plugins/process-code.ts create mode 100644 packages/core/src/helpers/plugins/process-code/index.ts create mode 100644 packages/core/src/helpers/plugins/process-code/types.ts create mode 100644 packages/core/src/helpers/plugins/process-target-blocks.ts delete mode 100644 packages/core/src/parsers/jsx/hooks.ts create mode 100644 packages/core/src/parsers/jsx/hooks/helpers.ts create mode 100644 packages/core/src/parsers/jsx/hooks/index.ts create mode 100644 packages/core/src/parsers/jsx/hooks/use-target.ts diff --git a/package.json b/package.json index 307721c483..099726cf3f 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "ci:e2e": "yarn workspace @builder.io/e2e-app run e2e", "ci": "run-s \"ci:*\"", "commit": "git-cz", - "fix": "run-p -c 'lint:* --fix'", - "fmt": "yarn fmt:prettier", + "fmt": "run-s 'fmt:*'", + "fmt:eslint": "yarn lint:eslint --fix", "fmt:prettier": "yarn lint:prettier --write", - "lint": "run-p -c lint:*", + "lint": "run-p -c 'lint:*'", "lint:eslint": "eslint --cache 'packages/**/*.ts{,x}'", "lint:prettier": "yarn run prettier --check", "prerelease": "yarn build", @@ -71,6 +71,7 @@ "@builder.io/e2e-app": "workspace:*" }, "resolutions": { - "@sveltejs/package@1.0.0-next.1": "patch:@sveltejs/package@npm:1.0.0-next.1#.yarn/patches/@sveltejs-package-npm-1.0.0-next.1-2fd015530b.patch" + "@sveltejs/package@1.0.0-next.1": "patch:@sveltejs/package@npm:1.0.0-next.1#.yarn/patches/@sveltejs-package-npm-1.0.0-next.1-2fd015530b.patch", + "prettier": "^2.8.7" } } diff --git a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap index 4e9fe08d9f..d3eeca0722 100644 --- a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap @@ -2544,6 +2544,21 @@ exports[`Alpine.js > jsx > Javascript Test > use-style-outside-component 1`] = ` " `; +exports[`Alpine.js > jsx > Javascript Test > useTarget 1`] = ` +"
+ +" +`; + exports[`Alpine.js > jsx > Remove Internal mitosis package 1`] = ` "
Hello @@ -5096,6 +5111,21 @@ exports[`Alpine.js > jsx > Typescript Test > use-style-outside-component 1`] = ` " `; +exports[`Alpine.js > jsx > Typescript Test > useTarget 1`] = ` +"
+ +" +`; + exports[`Alpine.js > svelte > Javascript Test > basic 1`] = ` "
diff --git a/packages/core/src/__tests__/__snapshots__/angular.import.test.ts.snap b/packages/core/src/__tests__/__snapshots__/angular.import.test.ts.snap index 4ab97bf43c..3b2253e1a8 100644 --- a/packages/core/src/__tests__/__snapshots__/angular.import.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/angular.import.test.ts.snap @@ -4064,6 +4064,34 @@ export class MyComponentModule {} " `; +exports[`Angular with Preserve Imports and File Extensions > jsx > Javascript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], +}) +export class UseTargetComponentModule {} +" +`; + exports[`Angular with Preserve Imports and File Extensions > jsx > Remove Internal mitosis package 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; @@ -8554,6 +8582,34 @@ export class MyComponentModule {} " `; +exports[`Angular with Preserve Imports and File Extensions > jsx > Typescript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], +}) +export class UseTargetComponentModule {} +" +`; + exports[`Angular with Preserve Imports and File Extensions > svelte > Javascript Test > basic 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; diff --git a/packages/core/src/__tests__/__snapshots__/angular.mapper.test.ts.snap b/packages/core/src/__tests__/__snapshots__/angular.mapper.test.ts.snap index e421947e6a..2369901532 100644 --- a/packages/core/src/__tests__/__snapshots__/angular.mapper.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/angular.mapper.test.ts.snap @@ -4156,6 +4156,35 @@ export class MyComponentModule {} " `; +exports[`Angular with Import Mapper Tests > jsx > Javascript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], + bootstrap: [SomeOtherComponent], +}) +export class UseTargetComponentModule {} +" +`; + exports[`Angular with Import Mapper Tests > jsx > Remove Internal mitosis package 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; @@ -8741,6 +8770,35 @@ export class MyComponentModule {} " `; +exports[`Angular with Import Mapper Tests > jsx > Typescript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], + bootstrap: [SomeOtherComponent], +}) +export class UseTargetComponentModule {} +" +`; + exports[`Angular with Import Mapper Tests > svelte > Javascript Test > basic 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; diff --git a/packages/core/src/__tests__/__snapshots__/angular.test.ts.snap b/packages/core/src/__tests__/__snapshots__/angular.test.ts.snap index 7d92f49657..c145582a5d 100644 --- a/packages/core/src/__tests__/__snapshots__/angular.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/angular.test.ts.snap @@ -7465,6 +7465,55 @@ export class MyComponent {} " `; +exports[`Angular > jsx > Javascript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], +}) +export class UseTargetComponentModule {} +" +`; + +exports[`Angular > jsx > Javascript Test > useTarget 2`] = ` +"import { Component } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, + standalone: true, + imports: [CommonModule], +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} +" +`; + exports[`Angular > jsx > Remove Internal mitosis package 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; @@ -15773,6 +15822,55 @@ export class MyComponent {} " `; +exports[`Angular > jsx > Typescript Test > useTarget 1`] = ` +"import { NgModule } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +import { Component } from \\"@angular/core\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} + +@NgModule({ + declarations: [UseTargetComponent], + imports: [CommonModule], + exports: [UseTargetComponent], +}) +export class UseTargetComponentModule {} +" +`; + +exports[`Angular > jsx > Typescript Test > useTarget 2`] = ` +"import { Component } from \\"@angular/core\\"; +import { CommonModule } from \\"@angular/common\\"; + +@Component({ + selector: \\"use-target-component, UseTargetComponent\\", + template: \` +
{{name}}
+ \`, + standalone: true, + imports: [CommonModule], +}) +export class UseTargetComponent { + get name() { + const prefix = true; + return prefix + \\"foo\\"; + } +} +" +`; + exports[`Angular > svelte > Javascript Test > basic 1`] = ` "import { NgModule } from \\"@angular/core\\"; import { CommonModule } from \\"@angular/common\\"; diff --git a/packages/core/src/__tests__/__snapshots__/html.test.ts.snap b/packages/core/src/__tests__/__snapshots__/html.test.ts.snap index 79247cfb78..a374c01470 100644 --- a/packages/core/src/__tests__/__snapshots__/html.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/html.test.ts.snap @@ -5930,6 +5930,67 @@ exports[`Html > jsx > Javascript Test > use-style-outside-component 1`] = ` " `; +exports[`Html > jsx > Javascript Test > useTarget 1`] = ` +"
+ +
+ +" +`; + exports[`Html > jsx > Remove Internal mitosis package 1`] = ` "
Hello @@ -11921,6 +11982,67 @@ exports[`Html > jsx > Typescript Test > use-style-outside-component 1`] = ` " `; +exports[`Html > jsx > Typescript Test > useTarget 1`] = ` +"
+ +
+ +" +`; + exports[`Html > svelte > Javascript Test > basic 1`] = ` "
diff --git a/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap b/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap index aebfe629d7..8f510804d6 100644 --- a/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap @@ -857,6 +857,11 @@ exports[`Liquid > jsx > Javascript Test > use-style-outside-component 1`] = ` " `; +exports[`Liquid > jsx > Javascript Test > useTarget 1`] = ` +"
{{name}}
+" +`; + exports[`Liquid > jsx > Remove Internal mitosis package 1`] = ` "
Hello {{name}} ! I can run in React, Qwik, Vue, Solid, or Liquid!
" @@ -1719,6 +1724,11 @@ exports[`Liquid > jsx > Typescript Test > use-style-outside-component 1`] = ` " `; +exports[`Liquid > jsx > Typescript Test > useTarget 1`] = ` +"
{{name}}
+" +`; + exports[`Liquid > svelte > Javascript Test > basic 1`] = ` "
diff --git a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap index 756213ac77..5e3b2f6a08 100644 --- a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap @@ -3949,6 +3949,32 @@ export default class MyComponent extends LitElement { " `; +exports[`Lit > jsx > Javascript Test > useTarget 1`] = ` +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; + +@customElement(\\"use-target-component\\") +export default class UseTargetComponent extends LitElement { + createRenderRoot() { + return this; + } + + get name() { + const prefix = \\"li\\"; + return prefix + \\"foo\\"; + } + + render() { + return html\` + +
\${this.name}
+ + \`; + } +} +" +`; + exports[`Lit > jsx > Remove Internal mitosis package 1`] = ` "import { LitElement, html, css } from \\"lit\\"; import { customElement, property, state, query } from \\"lit/decorators.js\\"; @@ -8326,6 +8352,32 @@ export default class MyComponent extends LitElement { " `; +exports[`Lit > jsx > Typescript Test > useTarget 1`] = ` +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; + +@customElement(\\"use-target-component\\") +export default class UseTargetComponent extends LitElement { + createRenderRoot() { + return this; + } + + get name() { + const prefix = \\"li\\"; + return prefix + \\"foo\\"; + } + + render() { + return html\` + +
\${this.name}
+ + \`; + } +} +" +`; + exports[`Lit > svelte > Javascript Test > basic 1`] = ` "import { LitElement, html, css } from \\"lit\\"; import { customElement, property, state, query } from \\"lit/decorators.js\\"; diff --git a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap index a141eb3efb..425f1f5d0a 100644 --- a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap @@ -2317,6 +2317,17 @@ style { " `; +exports[`Marko > jsx > Javascript Test > useTarget 1`] = ` +"class { + get name() { + const prefix = \\"m\\"; + return prefix + \\"foo\\"; + } +} + +
\${component.name}
" +`; + exports[`Marko > jsx > Remove Internal mitosis package 1`] = ` "class { onCreate() { @@ -4613,6 +4624,17 @@ style { " `; +exports[`Marko > jsx > Typescript Test > useTarget 1`] = ` +"class { + get name() { + const prefix = \\"m\\"; + return prefix + \\"foo\\"; + } +} + +
\${component.name}
" +`; + exports[`Marko > svelte > Javascript Test > basic 1`] = ` "class { onCreate() { diff --git a/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap b/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap index 3fbc2dadea..616adc6aac 100644 --- a/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap @@ -11662,6 +11662,135 @@ exports[`Parse JSX > Javascript > use-style-outside-component 1`] = ` } `; +exports[`Parse JSX > Javascript > useTarget 1`] = ` +{ + "@type": "@builder.io/mitosis/component", + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": { + "_text": { + "code": "state.name", + "type": "single", + }, + }, + "children": [], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "context": { + "get": {}, + "set": {}, + }, + "exports": {}, + "hooks": {}, + "imports": [], + "inputs": [], + "meta": {}, + "name": "UseTargetComponent", + "refs": {}, + "state": { + "name": { + "code": "get name() { + const prefix = \\"USE_TARGET_BLOCK_1\\"; + return prefix + 'foo'; +}", + "type": "getter", + }, + }, + "subComponents": [], + "targetBlocks": { + "1": { + "alpine": { + "code": "'a'", + }, + "angular": { + "code": "true", + }, + "customElement": { + "code": "'c'", + }, + "default": { + "code": "'Default str'", + }, + "html": { + "code": "'h'", + }, + "liquid": { + "code": "'l'", + }, + "lit": { + "code": "'li'", + }, + "marko": { + "code": "'m'", + }, + "mitosis": { + "code": "'mi'", + }, + "preact": { + "code": "'p'", + }, + "qwik": { + "code": "'q'", + }, + "react": { + "code": "123", + }, + "reactNative": { + "code": "'rn'", + }, + "rsc": { + "code": "'rsc'", + }, + "solid": { + "code": "'so'", + }, + "stencil": { + "code": "'st'", + }, + "svelte": { + "code": "'s'", + }, + "swift": { + "code": "'sw'", + }, + "taro": { + "code": "'t'", + }, + "template": { + "code": "'te'", + }, + "vue": { + "code": "'v'", + }, + "vue2": { + "code": "'v2'", + }, + "vue3": { + "code": "'v3'", + }, + "webcomponent": { + "code": "'wc'", + }, + }, + }, +} +`; + exports[`Parse JSX > Remove Internal mitosis package 1`] = ` { "@type": "@builder.io/mitosis/component", @@ -23969,6 +24098,135 @@ exports[`Parse JSX > Typescript > use-style-outside-component 1`] = ` } `; +exports[`Parse JSX > Typescript > useTarget 1`] = ` +{ + "@type": "@builder.io/mitosis/component", + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": { + "_text": { + "code": "state.name", + "type": "single", + }, + }, + "children": [], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "context": { + "get": {}, + "set": {}, + }, + "exports": {}, + "hooks": {}, + "imports": [], + "inputs": [], + "meta": {}, + "name": "UseTargetComponent", + "refs": {}, + "state": { + "name": { + "code": "get name() { + const prefix = \\"USE_TARGET_BLOCK_1\\"; + return prefix + 'foo'; +}", + "type": "getter", + }, + }, + "subComponents": [], + "targetBlocks": { + "1": { + "alpine": { + "code": "'a'", + }, + "angular": { + "code": "true", + }, + "customElement": { + "code": "'c'", + }, + "default": { + "code": "'Default str'", + }, + "html": { + "code": "'h'", + }, + "liquid": { + "code": "'l'", + }, + "lit": { + "code": "'li'", + }, + "marko": { + "code": "'m'", + }, + "mitosis": { + "code": "'mi'", + }, + "preact": { + "code": "'p'", + }, + "qwik": { + "code": "'q'", + }, + "react": { + "code": "123", + }, + "reactNative": { + "code": "'rn'", + }, + "rsc": { + "code": "'rsc'", + }, + "solid": { + "code": "'so'", + }, + "stencil": { + "code": "'st'", + }, + "svelte": { + "code": "'s'", + }, + "swift": { + "code": "'sw'", + }, + "taro": { + "code": "'t'", + }, + "template": { + "code": "'te'", + }, + "vue": { + "code": "'v'", + }, + "vue2": { + "code": "'v2'", + }, + "vue3": { + "code": "'v3'", + }, + "webcomponent": { + "code": "'wc'", + }, + }, + }, +} +`; + exports[`Parse JSX > boolean attribute 1`] = ` { "@type": "@builder.io/mitosis/component", diff --git a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap index 3da952f070..89160a9d7a 100644 --- a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap @@ -3149,6 +3149,23 @@ export default MyComponent; " `; +exports[`Preact > jsx > Javascript Test > useTarget 1`] = ` +"/** @jsx h */ +import { h, Fragment } from \\"preact\\"; + +function UseTargetComponent(props) { + function name() { + const prefix = \\"p\\"; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + exports[`Preact > jsx > Remove Internal mitosis package 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; @@ -6716,6 +6733,23 @@ export default MyComponent; " `; +exports[`Preact > jsx > Typescript Test > useTarget 1`] = ` +"/** @jsx h */ +import { h, Fragment } from \\"preact\\"; + +function UseTargetComponent(props: any) { + function name() { + const prefix = \\"p\\"; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + exports[`Preact > svelte > Javascript Test > basic 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; diff --git a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap index e2cf6cb110..11871a5c80 100644 --- a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap @@ -4755,6 +4755,22 @@ button { " `; +exports[`qwik > jsx > Javascript Test > useTarget 1`] = ` +"import { Fragment, component$, h, useComputed$ } from \\"@builder.io/qwik\\"; + +export const UseTargetComponent = component$((props) => { + const state = {}; + const name = useComputed$(() => { + const prefix = \\"q\\"; + return prefix + \\"foo\\"; + }); + return
{name.value}
; +}); + +export default UseTargetComponent; +" +`; + exports[`qwik > jsx > Remove Internal mitosis package 1`] = ` "import { Fragment, component$, h, useStore } from \\"@builder.io/qwik\\"; @@ -8123,6 +8139,22 @@ button { " `; +exports[`qwik > jsx > Typescript Test > useTarget 1`] = ` +"import { Fragment, component$, h, useComputed$ } from \\"@builder.io/qwik\\"; + +export const UseTargetComponent = component$((props: any) => { + const state: any = {}; + const name = useComputed$(() => { + const prefix = \\"q\\"; + return prefix + \\"foo\\"; + }); + return
{name.value}
; +}); + +export default UseTargetComponent; +" +`; + exports[`qwik > mount 1`] = ` { "high.cjs": "const __proxyMerge__ = (exports.__proxyMerge__ = function __proxyMerge__( 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 1927ce89be..5ce7d503ad 100644 --- a/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap @@ -3672,6 +3672,34 @@ export default MyComponent; " `; +exports[`React Native > jsx > Javascript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; +import { + FlatList, + ScrollView, + View, + StyleSheet, + Image, + Text, +} from \\"react-native\\"; + +function UseTargetComponent(props) { + function name() { + const prefix = \\"rn\\"; + return prefix + \\"foo\\"; + } + + return ( + + {name()} + + ); +} + +export default UseTargetComponent; +" +`; + exports[`React Native > jsx > Remove Internal mitosis package 1`] = ` "import * as React from \\"react\\"; import { @@ -7770,6 +7798,34 @@ export default MyComponent; " `; +exports[`React Native > jsx > Typescript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; +import { + FlatList, + ScrollView, + View, + StyleSheet, + Image, + Text, +} from \\"react-native\\"; + +function UseTargetComponent(props: any) { + function name() { + const prefix = \\"rn\\"; + return prefix + \\"foo\\"; + } + + return ( + + {name()} + + ); +} + +export default UseTargetComponent; +" +`; + exports[`React Native > svelte > Javascript Test > basic 1`] = ` "import * as React from \\"react\\"; import { diff --git a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap index cd1a4624b8..3bd44ed791 100644 --- a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap @@ -3057,6 +3057,22 @@ export default MyComponent; " `; +exports[`React > jsx > Javascript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; + +function UseTargetComponent(props) { + function name() { + const prefix = 123; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + exports[`React > jsx > Remove Internal mitosis package 1`] = ` "import * as React from \\"react\\"; import { useState } from \\"react\\"; @@ -6531,6 +6547,22 @@ export default MyComponent; " `; +exports[`React > jsx > Typescript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; + +function UseTargetComponent(props: any) { + function name() { + const prefix = 123; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + exports[`React > stamped (mobx) 1`] = ` "import * as React from \\"react\\"; import { useEffect } from \\"react\\"; diff --git a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap index 2a348e17db..4ef7f6d833 100644 --- a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap @@ -2899,6 +2899,26 @@ export default MyComponent; " `; +exports[`RSC > jsx > Javascript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; + +function UseTargetComponent(props) { + const _context = { ...props[\\"_context\\"] }; + + const state = { + get name() { + const prefix = \\"rsc\\"; + return prefix + \\"foo\\"; + }, + }; + + return
{state.name}
; +} + +export default UseTargetComponent; +" +`; + exports[`RSC > jsx > Remove Internal mitosis package 1`] = ` "import * as React from \\"react\\"; @@ -6216,6 +6236,26 @@ export default MyComponent; " `; +exports[`RSC > jsx > Typescript Test > useTarget 1`] = ` +"import * as React from \\"react\\"; + +function UseTargetComponent(props: any) { + const _context = { ...props[\\"_context\\"] }; + + const state = { + get name() { + const prefix = \\"rsc\\"; + return prefix + \\"foo\\"; + }, + }; + + return
{state.name}
; +} + +export default UseTargetComponent; +" +`; + exports[`RSC > svelte > Javascript Test > basic 1`] = ` "import * as React from \\"react\\"; diff --git a/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap b/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap index 5a9a6378ea..6f2ccf371d 100644 --- a/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/solid.test.ts.snap @@ -6192,6 +6192,44 @@ export default MyComponent; " `; +exports[`Solid > jsx > Javascript Test > useTarget 1`] = ` +"import { createSignal } from \\"solid-js\\"; + +function UseTargetComponent(props) { + function name() { + const prefix = \\"so\\"; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + +exports[`Solid > jsx > Javascript Test > useTarget 2`] = ` +"import { createSignal } from \\"solid-js\\"; + +import { css } from \\"solid-styled-components\\"; + +function UseTargetComponent(props) { + function name() { + const prefix = \\"so\\"; + return prefix + \\"foo\\"; + } + + return ( + <> +
{name()}
+ + ); +} + +export default UseTargetComponent; +" +`; + exports[`Solid > jsx > Remove Internal mitosis package 1`] = ` "import { createSignal } from \\"solid-js\\"; @@ -13148,6 +13186,44 @@ export default MyComponent; " `; +exports[`Solid > jsx > Typescript Test > useTarget 1`] = ` +"import { createSignal } from \\"solid-js\\"; + +function UseTargetComponent(props: any) { + function name() { + const prefix = \\"so\\"; + return prefix + \\"foo\\"; + } + + return
{name()}
; +} + +export default UseTargetComponent; +" +`; + +exports[`Solid > jsx > Typescript Test > useTarget 2`] = ` +"import { createSignal } from \\"solid-js\\"; + +import { css } from \\"solid-styled-components\\"; + +function UseTargetComponent(props: any) { + function name() { + const prefix = \\"so\\"; + return prefix + \\"foo\\"; + } + + return ( + <> +
{name()}
+ + ); +} + +export default UseTargetComponent; +" +`; + exports[`Solid > svelte > Javascript Test > basic 1`] = ` "import { createSignal } from \\"solid-js\\"; diff --git a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap index f2400c603e..863e395e1c 100644 --- a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap @@ -2879,6 +2879,25 @@ export default class MyComponent { " `; +exports[`Stencil > jsx > Javascript Test > useTarget 1`] = ` +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"use-target-component\\", +}) +export default class UseTargetComponent { + get name() { + const prefix = \\"st\\"; + return prefix + \\"foo\\"; + } + + render() { + return
{this.name}
; + } +} +" +`; + exports[`Stencil > jsx > Remove Internal mitosis package 1`] = ` "import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; @@ -5794,6 +5813,25 @@ export default class MyComponent { " `; +exports[`Stencil > jsx > Typescript Test > useTarget 1`] = ` +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"use-target-component\\", +}) +export default class UseTargetComponent { + get name() { + const prefix = \\"st\\"; + return prefix + \\"foo\\"; + } + + render() { + return
{this.name}
; + } +} +" +`; + exports[`Stencil > svelte > Javascript Test > basic 1`] = ` "import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; diff --git a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap index af5e59e599..658dff915f 100644 --- a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap @@ -2553,6 +2553,17 @@ exports[`Svelte > jsx > Javascript Test > use-style-outside-component 1`] = ` " `; +exports[`Svelte > jsx > Javascript Test > useTarget 1`] = ` +" + +
{name()}
" +`; + exports[`Svelte > jsx > Remove Internal mitosis package 1`] = ` " + +
{name()}
" +`; + exports[`Svelte > svelte > Javascript Test > basic 1`] = ` "" +`; + exports[`Vue > jsx > Remove Internal mitosis package 1`] = ` "