@builder.io/mitosis 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/constants/media-sizes.js +4 -5
- package/dist/src/generators/alpine/generate.js +114 -132
- package/dist/src/generators/alpine/render-mount-hook.js +8 -5
- package/dist/src/generators/alpine/render-update-hooks.js +13 -13
- package/dist/src/generators/angular/helpers.js +19 -9
- package/dist/src/generators/angular/index.js +599 -584
- package/dist/src/generators/builder.js +200 -165
- package/dist/src/generators/context/angular.js +32 -26
- package/dist/src/generators/context/helpers/context-with-symbol-key.js +25 -21
- package/dist/src/generators/context/qwik.js +21 -21
- package/dist/src/generators/context/react.js +22 -22
- package/dist/src/generators/context/rsc.js +20 -22
- package/dist/src/generators/context/solid.js +22 -22
- package/dist/src/generators/context/svelte.js +33 -28
- package/dist/src/generators/context/vue.js +1 -1
- package/dist/src/generators/helpers/context.js +6 -13
- package/dist/src/generators/helpers/functions.js +8 -8
- package/dist/src/generators/helpers/on-mount.js +9 -5
- package/dist/src/generators/helpers/rsc.js +7 -9
- package/dist/src/generators/html.js +995 -534
- package/dist/src/generators/liquid.js +81 -79
- package/dist/src/generators/lit/collect-class-string.js +10 -12
- package/dist/src/generators/lit/generate.js +204 -159
- package/dist/src/generators/marko/generate.js +193 -183
- package/dist/src/generators/minify.js +5 -9
- package/dist/src/generators/mitosis.js +135 -134
- package/dist/src/generators/qwik/component-generator.js +159 -154
- package/dist/src/generators/qwik/component.js +51 -81
- package/dist/src/generators/qwik/directives.js +68 -84
- package/dist/src/generators/qwik/helpers/add-prevent-default.js +6 -7
- package/dist/src/generators/qwik/helpers/convert-method-to-function.js +38 -38
- package/dist/src/generators/qwik/helpers/handlers.js +16 -25
- package/dist/src/generators/qwik/helpers/stable-inject.js +7 -8
- package/dist/src/generators/qwik/helpers/stable-serialize.js +7 -8
- package/dist/src/generators/qwik/helpers/state.js +36 -43
- package/dist/src/generators/qwik/helpers/styles.js +19 -40
- package/dist/src/generators/qwik/jsx.js +63 -75
- package/dist/src/generators/qwik/src-generator.js +134 -167
- package/dist/src/generators/react/blocks.js +122 -127
- package/dist/src/generators/react/generator.js +314 -259
- package/dist/src/generators/react/helpers.js +23 -28
- package/dist/src/generators/react/state.js +34 -51
- package/dist/src/generators/react-native/index.js +72 -84
- package/dist/src/generators/react-native/sanitize-react-native-block-styles.js +14 -26
- package/dist/src/generators/rsc.js +30 -36
- package/dist/src/generators/solid/blocks.js +46 -43
- package/dist/src/generators/solid/helpers/styles.js +11 -11
- package/dist/src/generators/solid/index.js +199 -190
- package/dist/src/generators/solid/state/helpers.js +76 -90
- package/dist/src/generators/solid/state/signals.js +30 -37
- package/dist/src/generators/solid/state/state.js +35 -48
- package/dist/src/generators/solid/state/store.js +40 -46
- package/dist/src/generators/stencil/collect-class-string.js +10 -12
- package/dist/src/generators/stencil/generate.js +158 -145
- package/dist/src/generators/svelte/blocks.js +146 -144
- package/dist/src/generators/svelte/helpers.js +10 -17
- package/dist/src/generators/svelte/svelte.js +321 -287
- package/dist/src/generators/swift-ui.js +162 -101
- package/dist/src/generators/taro.js +32 -36
- package/dist/src/generators/template.js +71 -74
- package/dist/src/generators/vue/blocks.js +116 -107
- package/dist/src/generators/vue/compositionApi.js +67 -50
- package/dist/src/generators/vue/helpers.js +71 -96
- package/dist/src/generators/vue/optionsApi.js +134 -105
- package/dist/src/generators/vue/vue.js +210 -207
- package/dist/src/helpers/babel-transform.js +40 -63
- package/dist/src/helpers/bindings.js +4 -12
- package/dist/src/helpers/camel-case.js +4 -5
- package/dist/src/helpers/capitalize.js +1 -1
- package/dist/src/helpers/component-file-extensions.js +23 -35
- package/dist/src/helpers/create-mitosis-component.js +22 -26
- package/dist/src/helpers/create-mitosis-context.js +5 -12
- package/dist/src/helpers/create-mitosis-node.js +10 -12
- package/dist/src/helpers/dash-case.js +2 -2
- package/dist/src/helpers/dedent.js +18 -22
- package/dist/src/helpers/event-handlers.js +1 -1
- package/dist/src/helpers/fast-clone.js +1 -1
- package/dist/src/helpers/filter-empty-text-nodes.js +2 -2
- package/dist/src/helpers/generic-format.js +7 -8
- package/dist/src/helpers/get-bindings.js +4 -4
- package/dist/src/helpers/get-components-used.js +3 -3
- package/dist/src/helpers/get-components.js +4 -4
- package/dist/src/helpers/get-custom-imports.js +10 -12
- package/dist/src/helpers/get-prop-functions.js +7 -8
- package/dist/src/helpers/get-props-ref.js +8 -8
- package/dist/src/helpers/get-props.js +12 -13
- package/dist/src/helpers/get-refs.js +4 -4
- package/dist/src/helpers/get-state-object-string.js +42 -61
- package/dist/src/helpers/get-state-used.js +7 -8
- package/dist/src/helpers/get-styles.js +6 -6
- package/dist/src/helpers/getters-to-functions.js +8 -12
- package/dist/src/helpers/handle-missing-state.js +3 -3
- package/dist/src/helpers/has-bindings-text.js +6 -6
- package/dist/src/helpers/has-component.js +4 -4
- package/dist/src/helpers/has-props.js +3 -3
- package/dist/src/helpers/has-stateful-dom.js +4 -4
- package/dist/src/helpers/has.js +3 -3
- package/dist/src/helpers/indent.js +2 -3
- package/dist/src/helpers/is-children.js +4 -5
- package/dist/src/helpers/is-component.js +1 -1
- package/dist/src/helpers/is-html-attribute.js +2 -11
- package/dist/src/helpers/is-mitosis-node.js +1 -1
- package/dist/src/helpers/is-root-text-node.js +1 -1
- package/dist/src/helpers/is-upper-case.js +1 -1
- package/dist/src/helpers/is-valid-attribute-name.js +1 -1
- package/dist/src/helpers/json.js +2 -2
- package/dist/src/helpers/map-refs.js +29 -40
- package/dist/src/helpers/merge-options.js +20 -31
- package/dist/src/helpers/mitosis-imports.js +5 -6
- package/dist/src/helpers/nodes/for.js +2 -3
- package/dist/src/helpers/nullable.js +1 -3
- package/dist/src/helpers/on-event.js +32 -36
- package/dist/src/helpers/output.js +4 -5
- package/dist/src/helpers/parse-node.js +13 -5
- package/dist/src/helpers/parsers.js +10 -14
- package/dist/src/helpers/patterns.js +6 -8
- package/dist/src/helpers/plugins/process-code/index.js +114 -120
- package/dist/src/helpers/plugins/process-signals.js +114 -125
- package/dist/src/helpers/plugins/process-target-blocks.js +18 -20
- package/dist/src/helpers/process-http-requests.js +8 -4
- package/dist/src/helpers/remove-surrounding-block.js +2 -2
- package/dist/src/helpers/render-imports.js +99 -111
- package/dist/src/helpers/replace-identifiers.js +40 -49
- package/dist/src/helpers/replace-new-lines-in-strings.js +3 -3
- package/dist/src/helpers/signals/signals.js +27 -35
- package/dist/src/helpers/slots.js +11 -20
- package/dist/src/helpers/state.js +1 -3
- package/dist/src/helpers/strip-meta-properties.js +6 -6
- package/dist/src/helpers/strip-state-and-props-refs.js +21 -32
- package/dist/src/helpers/styles/collect-css.js +39 -44
- package/dist/src/helpers/styles/collect-styled-components.js +30 -28
- package/dist/src/helpers/styles/helpers.js +23 -29
- package/dist/src/helpers/trace-reference-to-module-path.js +3 -4
- package/dist/src/helpers/transform-state-setters.js +16 -19
- package/dist/src/helpers/traverse-nodes.js +2 -2
- package/dist/src/helpers/try-prettier-format.js +3 -3
- package/dist/src/helpers/typescript-project.js +25 -25
- package/dist/src/helpers/typescript.js +1 -3
- package/dist/src/modules/plugins.js +20 -28
- package/dist/src/parsers/angular.js +49 -57
- package/dist/src/parsers/builder/builder.js +448 -343
- package/dist/src/parsers/builder/helpers.js +10 -10
- package/dist/src/parsers/context.js +15 -17
- package/dist/src/parsers/jsx/ast.js +11 -11
- package/dist/src/parsers/jsx/component-types.js +22 -32
- package/dist/src/parsers/jsx/context.js +12 -12
- package/dist/src/parsers/jsx/element-parser.js +43 -54
- package/dist/src/parsers/jsx/exports.js +12 -14
- package/dist/src/parsers/jsx/function-parser.js +108 -119
- package/dist/src/parsers/jsx/helpers.js +11 -13
- package/dist/src/parsers/jsx/hooks/helpers.js +14 -16
- package/dist/src/parsers/jsx/hooks/index.js +34 -44
- package/dist/src/parsers/jsx/hooks/use-target.js +27 -27
- package/dist/src/parsers/jsx/imports.js +7 -17
- package/dist/src/parsers/jsx/jsx.js +92 -91
- package/dist/src/parsers/jsx/props-types.js +8 -10
- package/dist/src/parsers/jsx/props.js +15 -23
- package/dist/src/parsers/jsx/signals.js +28 -29
- package/dist/src/parsers/jsx/state.d.ts +2 -4
- package/dist/src/parsers/jsx/state.js +59 -93
- package/dist/src/parsers/svelte/css/index.js +1 -1
- package/dist/src/parsers/svelte/helpers/bindings.js +18 -19
- package/dist/src/parsers/svelte/helpers/children.js +5 -6
- package/dist/src/parsers/svelte/helpers/expressions.js +7 -9
- package/dist/src/parsers/svelte/helpers/hooks.js +2 -2
- package/dist/src/parsers/svelte/helpers/post-process.js +49 -70
- package/dist/src/parsers/svelte/helpers/string.js +5 -5
- package/dist/src/parsers/svelte/html/actions.js +17 -10
- package/dist/src/parsers/svelte/html/each.js +11 -16
- package/dist/src/parsers/svelte/html/element.js +68 -78
- package/dist/src/parsers/svelte/html/fragment.js +3 -3
- package/dist/src/parsers/svelte/html/if-else.js +11 -18
- package/dist/src/parsers/svelte/html/index.js +14 -14
- package/dist/src/parsers/svelte/html/mustache-tag.js +5 -5
- package/dist/src/parsers/svelte/html/slot.js +5 -5
- package/dist/src/parsers/svelte/html/text.js +7 -14
- package/dist/src/parsers/svelte/index.js +23 -72
- package/dist/src/parsers/svelte/instance/context.js +17 -17
- package/dist/src/parsers/svelte/instance/expressions.js +2 -2
- package/dist/src/parsers/svelte/instance/functions.js +35 -30
- package/dist/src/parsers/svelte/instance/hooks.js +4 -5
- package/dist/src/parsers/svelte/instance/imports.js +11 -21
- package/dist/src/parsers/svelte/instance/index.js +22 -22
- package/dist/src/parsers/svelte/instance/properties.js +11 -23
- package/dist/src/parsers/svelte/instance/reactive.js +11 -11
- package/dist/src/parsers/svelte/instance/references.js +13 -13
- package/dist/src/parsers/svelte/instance/statements.js +3 -3
- package/dist/src/parsers/svelte/module/index.js +14 -26
- package/dist/src/parsers/svelte/typescript/index.js +27 -36
- package/dist/src/plugins/compile-away-builder-components.js +223 -156
- package/dist/src/plugins/compile-away-components.js +13 -21
- package/dist/src/plugins/map-styles.js +7 -7
- package/dist/src/symbols/symbol-processor.js +44 -62
- package/dist/src/targets.js +19 -19
- package/dist/src/types/mitosis-node.js +1 -1
- package/package.json +1 -1
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
-
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
-
return cooked;
|
|
5
|
-
};
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
3
|
exports.componentToTemplate = void 0;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Fragment:
|
|
18
|
-
return
|
|
4
|
+
const standalone_1 = require("prettier/standalone");
|
|
5
|
+
const html_tags_1 = require("../constants/html_tags");
|
|
6
|
+
const dedent_1 = require("../helpers/dedent");
|
|
7
|
+
const fast_clone_1 = require("../helpers/fast-clone");
|
|
8
|
+
const get_state_object_string_1 = require("../helpers/get-state-object-string");
|
|
9
|
+
const collect_css_1 = require("../helpers/styles/collect-css");
|
|
10
|
+
const plugins_1 = require("../modules/plugins");
|
|
11
|
+
const mitosis_node_1 = require("../types/mitosis-node");
|
|
12
|
+
const mappers = {
|
|
13
|
+
Fragment: (json, options) => {
|
|
14
|
+
return `<div>${json.children.map((item) => blockToTemplate(item, options)).join('\n')}</div>`;
|
|
19
15
|
},
|
|
20
16
|
};
|
|
21
17
|
// TODO: spread support
|
|
22
|
-
|
|
18
|
+
const blockToTemplate = (json, options = {}) => {
|
|
23
19
|
var _a, _b, _c, _d, _e;
|
|
24
|
-
if (options === void 0) { options = {}; }
|
|
25
20
|
if (mappers[json.name]) {
|
|
26
21
|
return mappers[json.name](json, options);
|
|
27
22
|
}
|
|
@@ -29,25 +24,25 @@ var blockToTemplate = function (json, options) {
|
|
|
29
24
|
return json.properties._text;
|
|
30
25
|
}
|
|
31
26
|
if (json.bindings._text) {
|
|
32
|
-
return
|
|
27
|
+
return `\${${(_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code}}`;
|
|
33
28
|
}
|
|
34
|
-
|
|
29
|
+
let str = '';
|
|
35
30
|
if ((0, mitosis_node_1.checkIsForNode)(json)) {
|
|
36
|
-
str +=
|
|
31
|
+
str += `\${${(_b = json.bindings.each) === null || _b === void 0 ? void 0 : _b.code}?.map(${json.scope.forName} => \``;
|
|
37
32
|
if (json.children) {
|
|
38
|
-
str += json.children.map(
|
|
33
|
+
str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
|
|
39
34
|
}
|
|
40
35
|
str += '`).join("")}';
|
|
41
36
|
}
|
|
42
37
|
else if (json.name === 'Show') {
|
|
43
|
-
str +=
|
|
38
|
+
str += `\${!(${(_c = json.bindings.when) === null || _c === void 0 ? void 0 : _c.code}) ? '' : \``;
|
|
44
39
|
if (json.children) {
|
|
45
|
-
str += json.children.map(
|
|
40
|
+
str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
|
|
46
41
|
}
|
|
47
42
|
str += '`}';
|
|
48
43
|
}
|
|
49
44
|
else {
|
|
50
|
-
str +=
|
|
45
|
+
str += `<${json.name} `;
|
|
51
46
|
// TODO: JS iteration or with helper
|
|
52
47
|
// if (json.bindings._spread === '_spread') {
|
|
53
48
|
// str += `
|
|
@@ -56,22 +51,22 @@ var blockToTemplate = function (json, options) {
|
|
|
56
51
|
// {% endfor %}
|
|
57
52
|
// `;
|
|
58
53
|
// }
|
|
59
|
-
for (
|
|
60
|
-
|
|
61
|
-
str +=
|
|
54
|
+
for (const key in json.properties) {
|
|
55
|
+
const value = json.properties[key];
|
|
56
|
+
str += ` ${key}="${value}" `;
|
|
62
57
|
}
|
|
63
|
-
for (
|
|
58
|
+
for (const key in json.bindings) {
|
|
64
59
|
if (((_d = json.bindings[key]) === null || _d === void 0 ? void 0 : _d.type) === 'spread' || key === 'ref' || key === 'css') {
|
|
65
60
|
continue;
|
|
66
61
|
}
|
|
67
|
-
|
|
62
|
+
const value = (_e = json.bindings[key]) === null || _e === void 0 ? void 0 : _e.code;
|
|
68
63
|
// TODO: proper babel transform to replace. Util for this
|
|
69
|
-
|
|
64
|
+
const useValue = value;
|
|
70
65
|
if (key.startsWith('on')) {
|
|
71
66
|
// Do nothing
|
|
72
67
|
}
|
|
73
68
|
else {
|
|
74
|
-
str +=
|
|
69
|
+
str += ` ${key}="\${${useValue}}" `;
|
|
75
70
|
}
|
|
76
71
|
}
|
|
77
72
|
if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
|
|
@@ -79,55 +74,57 @@ var blockToTemplate = function (json, options) {
|
|
|
79
74
|
}
|
|
80
75
|
str += '>';
|
|
81
76
|
if (json.children) {
|
|
82
|
-
str += json.children.map(
|
|
77
|
+
str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
|
|
83
78
|
}
|
|
84
|
-
str +=
|
|
79
|
+
str += `</${json.name}>`;
|
|
85
80
|
}
|
|
86
81
|
return str;
|
|
87
82
|
};
|
|
88
83
|
// TODO: add JS support similar to componentToHtml()
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
84
|
+
const componentToTemplate = (options = {}) => ({ component }) => {
|
|
85
|
+
let json = (0, fast_clone_1.fastClone)(component);
|
|
86
|
+
if (options.plugins) {
|
|
87
|
+
json = (0, plugins_1.runPreJsonPlugins)({ json, plugins: options.plugins });
|
|
88
|
+
}
|
|
89
|
+
const css = (0, collect_css_1.collectCss)(json);
|
|
90
|
+
if (options.plugins) {
|
|
91
|
+
json = (0, plugins_1.runPostJsonPlugins)({ json, plugins: options.plugins });
|
|
92
|
+
}
|
|
93
|
+
let str = json.children.map((item) => blockToTemplate(item)).join('\n');
|
|
94
|
+
if (css.trim().length) {
|
|
95
|
+
str += `<style>${css}</style>`;
|
|
96
|
+
}
|
|
97
|
+
str = (0, dedent_1.dedent) `
|
|
98
|
+
export default function template(props) {
|
|
99
|
+
let state = ${(0, get_state_object_string_1.getStateObjectStringFromComponent)(json)}
|
|
100
|
+
|
|
101
|
+
return \`${str.replace(/\s+/g, ' ')}\`
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
`;
|
|
105
|
+
if (options.plugins) {
|
|
106
|
+
str = (0, plugins_1.runPreCodePlugins)({ json, code: str, plugins: options.plugins });
|
|
107
|
+
}
|
|
108
|
+
if (options.prettier !== false) {
|
|
109
|
+
try {
|
|
110
|
+
str = (0, standalone_1.format)(str, {
|
|
111
|
+
parser: 'typescript',
|
|
112
|
+
htmlWhitespaceSensitivity: 'ignore',
|
|
113
|
+
plugins: [
|
|
114
|
+
// To support running in browsers
|
|
115
|
+
require('prettier/parser-typescript'),
|
|
116
|
+
require('prettier/parser-postcss'),
|
|
117
|
+
require('prettier/parser-babel'),
|
|
118
|
+
],
|
|
119
|
+
});
|
|
125
120
|
}
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.warn('Could not prettify', { string: str }, err);
|
|
128
123
|
}
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
}
|
|
125
|
+
if (options.plugins) {
|
|
126
|
+
str = (0, plugins_1.runPostCodePlugins)({ json, code: str, plugins: options.plugins });
|
|
127
|
+
}
|
|
128
|
+
return str;
|
|
131
129
|
};
|
|
132
130
|
exports.componentToTemplate = componentToTemplate;
|
|
133
|
-
var templateObject_1;
|
|
@@ -4,17 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.blockToVue = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
const filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
|
|
8
|
+
const is_children_1 = __importDefault(require("../../helpers/is-children"));
|
|
9
|
+
const is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
|
|
10
|
+
const nullable_1 = require("../../helpers/nullable");
|
|
11
|
+
const remove_surrounding_block_1 = require("../../helpers/remove-surrounding-block");
|
|
12
|
+
const replace_identifiers_1 = require("../../helpers/replace-identifiers");
|
|
13
|
+
const slots_1 = require("../../helpers/slots");
|
|
14
|
+
const function_1 = require("fp-ts/lib/function");
|
|
15
|
+
const html_tags_1 = require("../../constants/html_tags");
|
|
16
|
+
const helpers_1 = require("./helpers");
|
|
17
|
+
const SPECIAL_PROPERTIES = {
|
|
18
18
|
V_IF: 'v-if',
|
|
19
19
|
V_FOR: 'v-for',
|
|
20
20
|
V_ELSE: 'v-else',
|
|
@@ -28,173 +28,182 @@ var SPECIAL_PROPERTIES = {
|
|
|
28
28
|
* when processBinding is executed,
|
|
29
29
|
* SLOT_PREFIX from `slot` change to `$slots.`
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
const SLOT_PREFIX = '$slots.';
|
|
32
32
|
// TODO: Maybe in the future allow defining `string | function` as values
|
|
33
|
-
|
|
33
|
+
const BINDING_MAPPERS = {
|
|
34
34
|
innerHTML: 'v-html',
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
Fragment
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
const NODE_MAPPERS = {
|
|
37
|
+
Fragment(json, options, scope) {
|
|
38
|
+
const children = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes);
|
|
39
|
+
const childrenStr = children.map((item) => (0, exports.blockToVue)(item, options)).join('\n');
|
|
40
40
|
return childrenStr;
|
|
41
41
|
},
|
|
42
|
-
For
|
|
42
|
+
For(_json, options) {
|
|
43
43
|
var _a;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
const json = _json;
|
|
45
|
+
const keyValue = json.bindings.key || { code: 'index', type: 'single' };
|
|
46
|
+
const forValue = `(${json.scope.forName}, index) in ${(_a = json.bindings.each) === null || _a === void 0 ? void 0 : _a.code}`;
|
|
47
47
|
// TODO: tmk key goes on different element (parent vs child) based on Vue 2 vs Vue 3
|
|
48
|
-
return
|
|
48
|
+
return `<template :key="${(0, helpers_1.encodeQuotes)((keyValue === null || keyValue === void 0 ? void 0 : keyValue.code) || 'index')}" v-for="${(0, helpers_1.encodeQuotes)(forValue)}">
|
|
49
|
+
${json.children.map((item) => (0, exports.blockToVue)(item, options)).join('\n')}
|
|
50
|
+
</template>`;
|
|
49
51
|
},
|
|
50
|
-
Show
|
|
52
|
+
Show(json, options, scope) {
|
|
51
53
|
var _a;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
const ifValue = ((_a = json.bindings.when) === null || _a === void 0 ? void 0 : _a.code) || '';
|
|
55
|
+
const defaultShowTemplate = `
|
|
56
|
+
<template ${SPECIAL_PROPERTIES.V_IF}="${(0, helpers_1.encodeQuotes)(ifValue)}">
|
|
57
|
+
${json.children.map((item) => (0, exports.blockToVue)(item, options)).join('\n')}
|
|
58
|
+
</template>
|
|
59
|
+
${(0, is_mitosis_node_1.isMitosisNode)(json.meta.else)
|
|
60
|
+
? `
|
|
61
|
+
<template ${SPECIAL_PROPERTIES.V_ELSE}>
|
|
62
|
+
${(0, exports.blockToVue)(json.meta.else, options)}
|
|
63
|
+
</template>`
|
|
64
|
+
: ''}
|
|
65
|
+
`;
|
|
56
66
|
return defaultShowTemplate;
|
|
57
67
|
},
|
|
58
|
-
Slot
|
|
68
|
+
Slot(json, options) {
|
|
59
69
|
var _a, _b, _c;
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
const slotName = ((_a = json.bindings.name) === null || _a === void 0 ? void 0 : _a.code) || json.properties.name;
|
|
71
|
+
const renderChildren = () => { var _a; return (_a = json.children) === null || _a === void 0 ? void 0 : _a.map((item) => (0, exports.blockToVue)(item, options)).join('\n'); };
|
|
62
72
|
if (!slotName) {
|
|
63
|
-
|
|
73
|
+
const key = Object.keys(json.bindings).find(Boolean);
|
|
64
74
|
if (!key) {
|
|
65
75
|
if (!((_b = json.children) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
66
76
|
return '<slot/>';
|
|
67
77
|
}
|
|
68
|
-
return
|
|
78
|
+
return `<slot>${renderChildren()}</slot>`;
|
|
69
79
|
}
|
|
70
|
-
return
|
|
80
|
+
return `
|
|
81
|
+
<template #${key}>
|
|
82
|
+
${(_c = json.bindings[key]) === null || _c === void 0 ? void 0 : _c.code}
|
|
83
|
+
</template>
|
|
84
|
+
`;
|
|
71
85
|
}
|
|
72
86
|
if (slotName === 'default') {
|
|
73
|
-
return
|
|
87
|
+
return `<slot>${renderChildren()}</slot>`;
|
|
74
88
|
}
|
|
75
|
-
return
|
|
89
|
+
return `<slot name="${(0, slots_1.toKebabSlot)(slotName, SLOT_PREFIX)}">${renderChildren()}</slot>`;
|
|
76
90
|
},
|
|
77
91
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
const SPECIAL_HTML_TAGS = ['style', 'script'];
|
|
93
|
+
const stringifyBinding = (node, options) => ([key, value]) => {
|
|
94
|
+
const isValidHtmlTag = html_tags_1.VALID_HTML_TAGS.includes(node.name);
|
|
95
|
+
if (value.type === 'spread') {
|
|
96
|
+
return ''; // we handle this after
|
|
97
|
+
}
|
|
98
|
+
else if (key === 'class' && options.convertClassStringToObject) {
|
|
99
|
+
return `:class="_classStringToObject(${value === null || value === void 0 ? void 0 : value.code})"`;
|
|
100
|
+
// TODO: support dynamic classes as objects somehow like Vue requires
|
|
101
|
+
// https://vuejs.org/v2/guide/class-and-style.html
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// TODO: proper babel transform to replace. Util for this
|
|
105
|
+
const useValue = (value === null || value === void 0 ? void 0 : value.code) || '';
|
|
106
|
+
if (key.startsWith('on') && isValidHtmlTag) {
|
|
107
|
+
// handle html native on[event] props
|
|
108
|
+
const { arguments: cusArgs = ['event'] } = value;
|
|
109
|
+
let event = key.replace('on', '').toLowerCase();
|
|
110
|
+
const isAssignmentExpression = useValue.includes('=');
|
|
111
|
+
const eventHandlerValue = (0, function_1.pipe)((0, replace_identifiers_1.replaceIdentifiers)({
|
|
112
|
+
code: useValue,
|
|
113
|
+
from: cusArgs[0],
|
|
114
|
+
to: '$event',
|
|
115
|
+
}), isAssignmentExpression ? function_1.identity : remove_surrounding_block_1.removeSurroundingBlock, remove_surrounding_block_1.removeSurroundingBlock, helpers_1.encodeQuotes);
|
|
116
|
+
const eventHandlerKey = `${SPECIAL_PROPERTIES.V_ON_AT}${event}`;
|
|
117
|
+
return `${eventHandlerKey}="${eventHandlerValue}"`;
|
|
118
|
+
}
|
|
119
|
+
else if (key.startsWith('on')) {
|
|
120
|
+
// handle on[custom event] props
|
|
121
|
+
const { arguments: cusArgs = ['event'] } = node.bindings[key];
|
|
122
|
+
return `:${key}="(${cusArgs.join(',')}) => ${(0, helpers_1.encodeQuotes)(useValue)}"`;
|
|
85
123
|
}
|
|
86
|
-
else if (key === '
|
|
87
|
-
return "
|
|
88
|
-
|
|
89
|
-
|
|
124
|
+
else if (key === 'ref') {
|
|
125
|
+
return `ref="${(0, helpers_1.encodeQuotes)(useValue)}"`;
|
|
126
|
+
}
|
|
127
|
+
else if (BINDING_MAPPERS[key]) {
|
|
128
|
+
return `${BINDING_MAPPERS[key]}="${(0, helpers_1.encodeQuotes)(useValue.replace(/"/g, "\\'"))}"`;
|
|
90
129
|
}
|
|
91
130
|
else {
|
|
92
|
-
|
|
93
|
-
var useValue = (value === null || value === void 0 ? void 0 : value.code) || '';
|
|
94
|
-
if (key.startsWith('on') && isValidHtmlTag) {
|
|
95
|
-
// handle html native on[event] props
|
|
96
|
-
var _b = value.arguments, cusArgs = _b === void 0 ? ['event'] : _b;
|
|
97
|
-
var event_1 = key.replace('on', '').toLowerCase();
|
|
98
|
-
var isAssignmentExpression = useValue.includes('=');
|
|
99
|
-
var eventHandlerValue = (0, function_1.pipe)((0, replace_identifiers_1.replaceIdentifiers)({
|
|
100
|
-
code: useValue,
|
|
101
|
-
from: cusArgs[0],
|
|
102
|
-
to: '$event',
|
|
103
|
-
}), isAssignmentExpression ? function_1.identity : remove_surrounding_block_1.removeSurroundingBlock, remove_surrounding_block_1.removeSurroundingBlock, helpers_1.encodeQuotes);
|
|
104
|
-
var eventHandlerKey = "".concat(SPECIAL_PROPERTIES.V_ON_AT).concat(event_1);
|
|
105
|
-
return "".concat(eventHandlerKey, "=\"").concat(eventHandlerValue, "\"");
|
|
106
|
-
}
|
|
107
|
-
else if (key.startsWith('on')) {
|
|
108
|
-
// handle on[custom event] props
|
|
109
|
-
var _c = node.bindings[key].arguments, cusArgs = _c === void 0 ? ['event'] : _c;
|
|
110
|
-
return ":".concat(key, "=\"(").concat(cusArgs.join(','), ") => ").concat((0, helpers_1.encodeQuotes)(useValue), "\"");
|
|
111
|
-
}
|
|
112
|
-
else if (key === 'ref') {
|
|
113
|
-
return "ref=\"".concat((0, helpers_1.encodeQuotes)(useValue), "\"");
|
|
114
|
-
}
|
|
115
|
-
else if (BINDING_MAPPERS[key]) {
|
|
116
|
-
return "".concat(BINDING_MAPPERS[key], "=\"").concat((0, helpers_1.encodeQuotes)(useValue.replace(/"/g, "\\'")), "\"");
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
return ":".concat(key, "=\"").concat((0, helpers_1.encodeQuotes)(useValue), "\"");
|
|
120
|
-
}
|
|
131
|
+
return `:${key}="${(0, helpers_1.encodeQuotes)(useValue)}"`;
|
|
121
132
|
}
|
|
122
|
-
}
|
|
133
|
+
}
|
|
123
134
|
};
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
var spreads = Object.values(node.bindings)
|
|
135
|
+
const stringifySpreads = ({ node, spreadType }) => {
|
|
136
|
+
const spreads = Object.values(node.bindings)
|
|
127
137
|
.filter(nullable_1.checkIsDefined)
|
|
128
|
-
.filter(
|
|
129
|
-
.map(
|
|
138
|
+
.filter((binding) => binding.type === 'spread' && binding.spreadType === spreadType)
|
|
139
|
+
.map((value) => (value.code === 'props' ? '$props' : value.code));
|
|
130
140
|
if (spreads.length === 0) {
|
|
131
141
|
return '';
|
|
132
142
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return
|
|
143
|
+
const stringifiedValue = spreads.length > 1 ? `{${spreads.map((spread) => `...${spread}`).join(', ')}}` : spreads[0];
|
|
144
|
+
const key = spreadType === 'normal' ? SPECIAL_PROPERTIES.V_BIND : SPECIAL_PROPERTIES.V_ON;
|
|
145
|
+
return ` ${key}="${(0, helpers_1.encodeQuotes)(stringifiedValue)}" `;
|
|
136
146
|
};
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
.map(
|
|
140
|
-
var key = _a[0], value = _a[1];
|
|
147
|
+
const getBlockBindings = (node, options) => {
|
|
148
|
+
const stringifiedProperties = Object.entries(node.properties)
|
|
149
|
+
.map(([key, value]) => {
|
|
141
150
|
if (key === 'className') {
|
|
142
151
|
return '';
|
|
143
152
|
}
|
|
144
153
|
else if (key === SPECIAL_PROPERTIES.V_ELSE) {
|
|
145
|
-
return
|
|
154
|
+
return `${key}`;
|
|
146
155
|
}
|
|
147
156
|
else if (typeof value === 'string') {
|
|
148
|
-
return
|
|
157
|
+
return `${key}="${(0, helpers_1.encodeQuotes)(value)}"`;
|
|
149
158
|
}
|
|
150
159
|
})
|
|
151
160
|
.join(' ');
|
|
152
|
-
|
|
161
|
+
const stringifiedBindings = Object.entries(node.bindings)
|
|
153
162
|
.map(stringifyBinding(node, options))
|
|
154
163
|
.join(' ');
|
|
155
164
|
return [
|
|
156
165
|
stringifiedProperties,
|
|
157
166
|
stringifiedBindings,
|
|
158
|
-
stringifySpreads({ node
|
|
159
|
-
stringifySpreads({ node
|
|
167
|
+
stringifySpreads({ node, spreadType: 'normal' }),
|
|
168
|
+
stringifySpreads({ node, spreadType: 'event-handlers' }),
|
|
160
169
|
].join(' ');
|
|
161
170
|
};
|
|
162
|
-
|
|
171
|
+
const blockToVue = (node, options, scope) => {
|
|
163
172
|
var _a;
|
|
164
|
-
|
|
173
|
+
const nodeMapper = NODE_MAPPERS[node.name];
|
|
165
174
|
if (nodeMapper) {
|
|
166
175
|
return nodeMapper(node, options, scope);
|
|
167
176
|
}
|
|
168
|
-
if ((0, is_children_1.default)({ node
|
|
169
|
-
return
|
|
177
|
+
if ((0, is_children_1.default)({ node })) {
|
|
178
|
+
return `<slot/>`;
|
|
170
179
|
}
|
|
171
180
|
if (SPECIAL_HTML_TAGS.includes(node.name)) {
|
|
172
181
|
// Vue doesn't allow style/script tags in templates, but does support them through dynamic components.
|
|
173
|
-
node.bindings.is = { code:
|
|
182
|
+
node.bindings.is = { code: `'${node.name}'`, type: 'single' };
|
|
174
183
|
node.name = 'component';
|
|
175
184
|
}
|
|
176
185
|
if (node.properties._text) {
|
|
177
|
-
return
|
|
186
|
+
return `${node.properties._text}`;
|
|
178
187
|
}
|
|
179
|
-
|
|
188
|
+
const textCode = (_a = node.bindings._text) === null || _a === void 0 ? void 0 : _a.code;
|
|
180
189
|
if (textCode) {
|
|
181
190
|
if ((0, slots_1.isSlotProperty)(textCode, SLOT_PREFIX)) {
|
|
182
|
-
|
|
191
|
+
const slotName = (0, slots_1.stripSlotPrefix)(textCode, SLOT_PREFIX).toLowerCase();
|
|
183
192
|
if (slotName === 'default')
|
|
184
|
-
return
|
|
185
|
-
return
|
|
193
|
+
return `<slot/>`;
|
|
194
|
+
return `<slot name="${slotName}"/>`;
|
|
186
195
|
}
|
|
187
|
-
return
|
|
196
|
+
return `{{${textCode}}}`;
|
|
188
197
|
}
|
|
189
|
-
|
|
198
|
+
let str = `<${node.name} `;
|
|
190
199
|
str += getBlockBindings(node, options);
|
|
191
200
|
if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(node.name)) {
|
|
192
201
|
return str + ' />';
|
|
193
202
|
}
|
|
194
203
|
str += '>';
|
|
195
204
|
if (node.children) {
|
|
196
|
-
str += node.children.map(
|
|
205
|
+
str += node.children.map((item) => (0, exports.blockToVue)(item, options)).join('');
|
|
197
206
|
}
|
|
198
|
-
return str +
|
|
207
|
+
return str + `</${node.name}>`;
|
|
199
208
|
};
|
|
200
209
|
exports.blockToVue = blockToVue;
|