@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,57 +1,57 @@
|
|
|
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
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
4
|
};
|
|
9
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
6
|
exports.componentToSwift = void 0;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
const legacy_1 = __importDefault(require("neotraverse/legacy"));
|
|
8
|
+
const dedent_1 = require("../helpers/dedent");
|
|
9
|
+
const fast_clone_1 = require("../helpers/fast-clone");
|
|
10
|
+
const filter_empty_text_nodes_1 = require("../helpers/filter-empty-text-nodes");
|
|
11
|
+
const generic_format_1 = require("../helpers/generic-format");
|
|
12
|
+
const get_state_object_string_1 = require("../helpers/get-state-object-string");
|
|
13
|
+
const get_styles_1 = require("../helpers/get-styles");
|
|
14
|
+
const is_children_1 = __importDefault(require("../helpers/is-children"));
|
|
15
|
+
const is_mitosis_node_1 = require("../helpers/is-mitosis-node");
|
|
16
|
+
const state_1 = require("../helpers/state");
|
|
17
|
+
const try_prettier_format_1 = require("../helpers/try-prettier-format");
|
|
18
|
+
const mitosis_node_1 = require("../types/mitosis-node");
|
|
19
|
+
const scrolls = (json) => {
|
|
24
20
|
var _a;
|
|
25
21
|
return ((_a = (0, get_styles_1.getStyles)(json)) === null || _a === void 0 ? void 0 : _a.overflow) === 'auto';
|
|
26
22
|
};
|
|
27
|
-
|
|
28
|
-
Fragment:
|
|
29
|
-
return
|
|
23
|
+
const mappers = {
|
|
24
|
+
Fragment: (json, options) => {
|
|
25
|
+
return `${json.children.map((item) => blockToSwift(item, options)).join('\n')}`;
|
|
30
26
|
},
|
|
31
|
-
link:
|
|
32
|
-
Image:
|
|
27
|
+
link: () => '',
|
|
28
|
+
Image: (json, options) => {
|
|
33
29
|
var _a;
|
|
34
|
-
return (
|
|
30
|
+
return (`Image(${processBinding((_a = json.bindings.image) === null || _a === void 0 ? void 0 : _a.code, options) || `"${json.properties.image}"`})` +
|
|
35
31
|
getStyleString(json, options) +
|
|
36
32
|
getActionsString(json, options));
|
|
37
33
|
},
|
|
38
|
-
input:
|
|
34
|
+
input: (json, options) => {
|
|
39
35
|
var _a, _b;
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
const name = json.properties.$name;
|
|
37
|
+
let str = `TextField(${json.bindings.placeholder
|
|
42
38
|
? processBinding((_a = json.bindings.placeholder) === null || _a === void 0 ? void 0 : _a.code, options)
|
|
43
39
|
: json.properties.placeholder
|
|
44
40
|
? JSON.stringify(json.bindings.placeholder.code)
|
|
45
|
-
: '""',
|
|
41
|
+
: '""'}, text: $${name})` +
|
|
46
42
|
getStyleString(json, options) +
|
|
47
43
|
getActionsString(json, options);
|
|
48
44
|
if (json.bindings.onChange) {
|
|
49
|
-
str +=
|
|
45
|
+
str += `
|
|
46
|
+
.onChange(of: ${name}) { ${name} in
|
|
47
|
+
${processBinding(wrapAction(`var event = { target: { value: "\\(${name})" } };
|
|
48
|
+
${(_b = json.bindings.onChange) === null || _b === void 0 ? void 0 : _b.code}`), options)}
|
|
49
|
+
}`;
|
|
50
50
|
}
|
|
51
51
|
return str;
|
|
52
52
|
},
|
|
53
53
|
};
|
|
54
|
-
|
|
54
|
+
const blockToSwift = (json, options) => {
|
|
55
55
|
var _a, _b;
|
|
56
56
|
if (mappers[json.name]) {
|
|
57
57
|
return mappers[json.name](json, options);
|
|
@@ -66,17 +66,17 @@ var blockToSwift = function (json, options) {
|
|
|
66
66
|
if (!json.properties._text.trim().length) {
|
|
67
67
|
return '';
|
|
68
68
|
}
|
|
69
|
-
return
|
|
69
|
+
return `Text("${json.properties._text.trim().replace(/\s+/g, ' ')}")`;
|
|
70
70
|
}
|
|
71
71
|
if (json.bindings._text) {
|
|
72
|
-
return
|
|
72
|
+
return `Text(${processBinding(json.bindings._text.code, options)}.toString())`;
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
let str = '';
|
|
75
|
+
const children = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes);
|
|
76
|
+
const style = (0, get_styles_1.getStyles)(json);
|
|
77
77
|
// TODO: do as preprocess step and do more mappings of dom attributes to special
|
|
78
78
|
// Image, TextField, etc component props
|
|
79
|
-
|
|
79
|
+
const name = json.name === 'input'
|
|
80
80
|
? 'TextField'
|
|
81
81
|
: json.name === 'img'
|
|
82
82
|
? 'Image'
|
|
@@ -88,30 +88,32 @@ var blockToSwift = function (json, options) {
|
|
|
88
88
|
: 'VStack'
|
|
89
89
|
: json.name;
|
|
90
90
|
if (name === 'TextField') {
|
|
91
|
-
|
|
91
|
+
const placeholder = json.properties.placeholder;
|
|
92
92
|
delete json.properties.placeholder;
|
|
93
93
|
json.properties._ = placeholder || '';
|
|
94
94
|
}
|
|
95
95
|
if ((0, mitosis_node_1.checkIsForNode)(json)) {
|
|
96
|
-
str +=
|
|
97
|
-
.map(
|
|
98
|
-
.join('\n')
|
|
96
|
+
str += `ForEach(${processBinding((_a = json.bindings.each) === null || _a === void 0 ? void 0 : _a.code, options)}, id: \\.self) { ${json.scope.forName} in ${children
|
|
97
|
+
.map((item) => blockToSwift(item, options))
|
|
98
|
+
.join('\n')} }`;
|
|
99
99
|
}
|
|
100
100
|
else if (json.name === 'Show') {
|
|
101
|
-
str +=
|
|
101
|
+
str += `if ${processBinding((_b = json.bindings.when) === null || _b === void 0 ? void 0 : _b.code, options)} {
|
|
102
|
+
${children.map((item) => blockToSwift(item, options)).join('\n')}
|
|
103
|
+
}`;
|
|
102
104
|
}
|
|
103
105
|
else {
|
|
104
|
-
str +=
|
|
105
|
-
for (
|
|
106
|
+
str += `${name}(`;
|
|
107
|
+
for (const key in json.properties) {
|
|
106
108
|
if (key === 'class' || key === 'className') {
|
|
107
109
|
continue;
|
|
108
110
|
}
|
|
109
111
|
// TODO: binding mappings
|
|
110
112
|
// const value = json.properties[key];
|
|
111
113
|
// str += ` ${key}: "${(value as string).replace(/"/g, '"')}", `;
|
|
112
|
-
console.warn(
|
|
114
|
+
console.warn(`Unsupported property "${key}"`);
|
|
113
115
|
}
|
|
114
|
-
for (
|
|
116
|
+
for (const key in json.bindings) {
|
|
115
117
|
if (
|
|
116
118
|
// TODO: implement spread, ref, more css
|
|
117
119
|
key === '_spread' ||
|
|
@@ -127,58 +129,66 @@ var blockToSwift = function (json, options) {
|
|
|
127
129
|
}
|
|
128
130
|
else {
|
|
129
131
|
// TODO: other event mappings
|
|
130
|
-
console.warn(
|
|
132
|
+
console.warn(`Unsupported event binding "${key}"`);
|
|
131
133
|
}
|
|
132
134
|
}
|
|
133
135
|
else {
|
|
134
|
-
console.warn(
|
|
136
|
+
console.warn(`Unsupported binding "${key}"`);
|
|
135
137
|
// TODO: need binding mappings
|
|
136
138
|
// str += ` ${key}: ${processBinding(value, options)}, `;
|
|
137
139
|
}
|
|
138
140
|
}
|
|
139
|
-
str +=
|
|
140
|
-
str +=
|
|
141
|
+
str += `)`;
|
|
142
|
+
str += ` {`;
|
|
141
143
|
if (json.children) {
|
|
142
|
-
str += json.children.map(
|
|
144
|
+
str += json.children.map((item) => blockToSwift(item, options)).join('\n');
|
|
143
145
|
}
|
|
144
|
-
str +=
|
|
146
|
+
str += `}`;
|
|
145
147
|
str += getStyleString(json, options);
|
|
146
148
|
str += getActionsString(json, options);
|
|
147
149
|
}
|
|
148
150
|
return str;
|
|
149
151
|
};
|
|
150
|
-
|
|
152
|
+
const wrapAction = (str) => `(() => { ${str} })()`;
|
|
151
153
|
function getActionsString(json, options) {
|
|
152
|
-
|
|
154
|
+
let str = '';
|
|
153
155
|
if (json.bindings.onClick) {
|
|
154
|
-
str +=
|
|
156
|
+
str += `\n.onTapGesture {
|
|
157
|
+
${processBinding(wrapAction(json.bindings.onClick.code), options)}
|
|
158
|
+
}`;
|
|
155
159
|
}
|
|
156
160
|
return str;
|
|
157
161
|
}
|
|
158
162
|
function getStyleString(node, options) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
for (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
const style = (0, get_styles_1.getStyles)(node);
|
|
164
|
+
let str = '';
|
|
165
|
+
for (const key in style) {
|
|
166
|
+
let useKey = key;
|
|
167
|
+
const rawValue = style[key];
|
|
168
|
+
let value = `"${rawValue}"`;
|
|
165
169
|
if (['padding', 'margin'].includes(key)) {
|
|
166
170
|
// TODO: throw error if calc()
|
|
167
171
|
value = parseFloat(rawValue);
|
|
168
|
-
str +=
|
|
172
|
+
str += `\n.${useKey}(${value})`;
|
|
169
173
|
}
|
|
170
174
|
else if (key === 'color') {
|
|
171
175
|
useKey = 'foregroundColor';
|
|
172
176
|
// TODO: convert to RBG and use Color(red: ..., ....)
|
|
173
177
|
}
|
|
174
178
|
else {
|
|
175
|
-
console.warn(
|
|
179
|
+
console.warn(`Styling key "${key}" is not supported`);
|
|
176
180
|
}
|
|
177
181
|
}
|
|
178
182
|
return str;
|
|
179
183
|
}
|
|
180
184
|
function getJsSource(json, options) {
|
|
181
|
-
|
|
185
|
+
const str = `const state = new Proxy(${(0, get_state_object_string_1.getStateObjectStringFromComponent)(json)}, {
|
|
186
|
+
set: (target, key, value) => {
|
|
187
|
+
const returnVal = Reflect.set(target, key, value);
|
|
188
|
+
update();
|
|
189
|
+
return returnVal;
|
|
190
|
+
}
|
|
191
|
+
});`;
|
|
182
192
|
if (options.prettier === false) {
|
|
183
193
|
return str.trim();
|
|
184
194
|
}
|
|
@@ -186,23 +196,25 @@ function getJsSource(json, options) {
|
|
|
186
196
|
return (0, try_prettier_format_1.tryPrettierFormat)(str, 'typescript').trim();
|
|
187
197
|
}
|
|
188
198
|
}
|
|
189
|
-
|
|
199
|
+
const processBinding = (str, options) => {
|
|
190
200
|
// Use triple quotes for multiline strings or strings including '"'
|
|
191
201
|
if (str.includes('\n') || str.includes('"')) {
|
|
192
|
-
return
|
|
202
|
+
return `eval(code: """
|
|
203
|
+
${str}
|
|
204
|
+
""")`;
|
|
193
205
|
}
|
|
194
206
|
// Use double quotes for simple strings
|
|
195
|
-
return
|
|
207
|
+
return `eval(code: "${str}")`;
|
|
196
208
|
};
|
|
197
209
|
function componentHasDynamicData(json) {
|
|
198
|
-
|
|
210
|
+
const hasState = (0, state_1.checkHasState)(json);
|
|
199
211
|
if (hasState) {
|
|
200
212
|
return true;
|
|
201
213
|
}
|
|
202
|
-
|
|
214
|
+
let found = false;
|
|
203
215
|
(0, legacy_1.default)(json).forEach(function (node) {
|
|
204
216
|
if ((0, is_mitosis_node_1.isMitosisNode)(node)) {
|
|
205
|
-
if (Object.keys(node.bindings).filter(
|
|
217
|
+
if (Object.keys(node.bindings).filter((item) => item !== 'css').length) {
|
|
206
218
|
found = true;
|
|
207
219
|
this.stop();
|
|
208
220
|
}
|
|
@@ -211,17 +223,17 @@ function componentHasDynamicData(json) {
|
|
|
211
223
|
return found;
|
|
212
224
|
}
|
|
213
225
|
function mapDataForSwiftCompatability(json) {
|
|
214
|
-
|
|
226
|
+
let inputIndex = 0;
|
|
215
227
|
json.meta.inputNames = json.meta.inputNames || [];
|
|
216
228
|
(0, legacy_1.default)(json).forEach(function (node) {
|
|
217
229
|
var _a;
|
|
218
230
|
if ((0, is_mitosis_node_1.isMitosisNode)(node)) {
|
|
219
231
|
if (node.name === 'input') {
|
|
220
|
-
if (!Object.keys(node.bindings).filter(
|
|
232
|
+
if (!Object.keys(node.bindings).filter((item) => item !== 'css').length) {
|
|
221
233
|
return;
|
|
222
234
|
}
|
|
223
235
|
if (!node.properties.$name) {
|
|
224
|
-
node.properties.$name =
|
|
236
|
+
node.properties.$name = `input${++inputIndex}`;
|
|
225
237
|
}
|
|
226
238
|
json.meta.inputNames[node.properties.$name] =
|
|
227
239
|
((_a = node.bindings.value) === null || _a === void 0 ? void 0 : _a.code) || '';
|
|
@@ -230,43 +242,92 @@ function mapDataForSwiftCompatability(json) {
|
|
|
230
242
|
});
|
|
231
243
|
}
|
|
232
244
|
function getInputBindings(json, options) {
|
|
233
|
-
|
|
234
|
-
|
|
245
|
+
let str = '';
|
|
246
|
+
const inputNames = json.meta.inputNames;
|
|
235
247
|
if (!inputNames) {
|
|
236
248
|
return str;
|
|
237
249
|
}
|
|
238
|
-
for (
|
|
239
|
-
str +=
|
|
250
|
+
for (const item in inputNames) {
|
|
251
|
+
str += `\n@State private var ${item}: String = ""`;
|
|
240
252
|
}
|
|
241
253
|
return str;
|
|
242
254
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
255
|
+
const componentToSwift = (options = {}) => ({ component }) => {
|
|
256
|
+
const json = (0, fast_clone_1.fastClone)(component);
|
|
257
|
+
mapDataForSwiftCompatability(json);
|
|
258
|
+
const hasDyanmicData = componentHasDynamicData(json);
|
|
259
|
+
let children = json.children.map((item) => blockToSwift(item, options)).join('\n');
|
|
260
|
+
const hasInputNames = Object.keys(json.meta.inputNames || {}).length > 0;
|
|
261
|
+
let str = (0, dedent_1.dedent) `
|
|
262
|
+
import SwiftUI
|
|
263
|
+
${!hasDyanmicData
|
|
264
|
+
? ''
|
|
265
|
+
: `import JavaScriptCore
|
|
266
|
+
|
|
267
|
+
final class UpdateTracker: ObservableObject {
|
|
268
|
+
@Published var value = 0;
|
|
269
|
+
|
|
270
|
+
func update() {
|
|
271
|
+
value += 1
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
`}
|
|
275
|
+
|
|
276
|
+
struct ${component.name}: View {
|
|
277
|
+
${!hasDyanmicData
|
|
278
|
+
? ''
|
|
279
|
+
: `
|
|
280
|
+
@ObservedObject var updateTracker = UpdateTracker()
|
|
281
|
+
private var jsContext = JSContext()
|
|
282
|
+
${getInputBindings(json, options)}
|
|
283
|
+
|
|
284
|
+
func eval(code: String) -> JSValue! {
|
|
285
|
+
return jsContext?.evaluateScript(code)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
${!hasInputNames
|
|
263
289
|
? ''
|
|
264
|
-
:
|
|
265
|
-
|
|
266
|
-
|
|
290
|
+
: `
|
|
291
|
+
func setComputedState() {
|
|
292
|
+
${Object.keys(json.meta.inputNames || {})
|
|
293
|
+
.map((item) => {
|
|
294
|
+
return `${item} = ${processBinding(json.meta.inputNames[item], options)}.toString()!`;
|
|
295
|
+
})
|
|
296
|
+
.join('\n')}
|
|
297
|
+
}`}
|
|
298
|
+
|
|
299
|
+
init() {
|
|
300
|
+
let jsSource = """
|
|
301
|
+
${getJsSource(json, options)}
|
|
302
|
+
"""
|
|
303
|
+
jsContext?.exceptionHandler = { context, exception in
|
|
304
|
+
print("JS Error: \\(exception!)")
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
let updateRef = updateTracker.update
|
|
308
|
+
let updateFn : @convention(block) () -> Void = { updateRef() }
|
|
309
|
+
jsContext?.setObject(updateFn, forKeyedSubscript: "update" as NSString)
|
|
310
|
+
|
|
311
|
+
jsContext?.evaluateScript(jsSource)
|
|
267
312
|
}
|
|
268
|
-
|
|
269
|
-
|
|
313
|
+
`.trim()}
|
|
314
|
+
|
|
315
|
+
var body: some View {
|
|
316
|
+
VStack {
|
|
317
|
+
${children}
|
|
318
|
+
}${!hasInputNames
|
|
319
|
+
? ''
|
|
320
|
+
: `
|
|
321
|
+
.onAppear {
|
|
322
|
+
setComputedState()
|
|
323
|
+
}
|
|
324
|
+
`}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
`;
|
|
328
|
+
if (options.prettier !== false) {
|
|
329
|
+
str = (0, generic_format_1.format)(str);
|
|
330
|
+
}
|
|
331
|
+
return str;
|
|
270
332
|
};
|
|
271
333
|
exports.componentToSwift = componentToSwift;
|
|
272
|
-
var templateObject_1;
|
|
@@ -4,14 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.componentToTaro = exports.TagMap = exports.collectTaroStyles = exports.DEFAULT_Component_SET = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const json5_1 = __importDefault(require("json5"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const legacy_1 = __importDefault(require("neotraverse/legacy"));
|
|
10
|
+
const bindings_1 = require("../helpers/bindings");
|
|
11
|
+
const fast_clone_1 = require("../helpers/fast-clone");
|
|
12
|
+
const is_mitosis_node_1 = require("../helpers/is-mitosis-node");
|
|
13
|
+
const merge_options_1 = require("../helpers/merge-options");
|
|
14
|
+
const react_1 = require("./react");
|
|
15
15
|
// @tarojs/components
|
|
16
16
|
exports.DEFAULT_Component_SET = new Set([
|
|
17
17
|
'View',
|
|
@@ -65,28 +65,28 @@ exports.DEFAULT_Component_SET = new Set([
|
|
|
65
65
|
'AdCustom',
|
|
66
66
|
]);
|
|
67
67
|
// TODO: px to 2 px
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
const collectTaroStyles = (json) => {
|
|
69
|
+
const styleMap = {};
|
|
70
|
+
const componentIndexes = {};
|
|
71
71
|
(0, legacy_1.default)(json).forEach(function (item) {
|
|
72
72
|
var _a;
|
|
73
73
|
if (!(0, is_mitosis_node_1.isMitosisNode)(item) || typeof ((_a = item.bindings.css) === null || _a === void 0 ? void 0 : _a.code) !== 'string') {
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
const value = json5_1.default.parse(item.bindings.css.code);
|
|
77
77
|
delete item.bindings.css;
|
|
78
78
|
if (!(0, lodash_1.size)(value)) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
-
for (
|
|
82
|
-
|
|
81
|
+
for (const key in value) {
|
|
82
|
+
const propertyValue = value[key];
|
|
83
83
|
// convert px to 2 * px, PX to PX
|
|
84
84
|
if (typeof propertyValue === 'string' && propertyValue.match(/^\d/)) {
|
|
85
|
-
|
|
85
|
+
let newValue = parseFloat(propertyValue);
|
|
86
86
|
if (!isNaN(newValue)) {
|
|
87
87
|
if (propertyValue.endsWith('px')) {
|
|
88
88
|
newValue = 2 * newValue;
|
|
89
|
-
value[key] =
|
|
89
|
+
value[key] = `${newValue}px`;
|
|
90
90
|
}
|
|
91
91
|
else {
|
|
92
92
|
value[key] = newValue;
|
|
@@ -94,10 +94,10 @@ var collectTaroStyles = function (json) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
item.bindings.style = (0, bindings_1.createSingleBinding)({ code:
|
|
97
|
+
const componentName = (0, lodash_1.camelCase)(item.name || 'view');
|
|
98
|
+
const index = (componentIndexes[componentName] = (componentIndexes[componentName] || 0) + 1);
|
|
99
|
+
const className = `${componentName}${index}`;
|
|
100
|
+
item.bindings.style = (0, bindings_1.createSingleBinding)({ code: `styles.${className}` });
|
|
101
101
|
styleMap[className] = value;
|
|
102
102
|
});
|
|
103
103
|
return styleMap;
|
|
@@ -116,12 +116,12 @@ exports.TagMap = {
|
|
|
116
116
|
* - Converts DOM tags to @tarojs/components
|
|
117
117
|
* - Removes redundant `class`/`className` attributes
|
|
118
118
|
*/
|
|
119
|
-
|
|
119
|
+
const PROCESS_TARO_PLUGIN = () => ({
|
|
120
120
|
json: {
|
|
121
|
-
pre:
|
|
122
|
-
|
|
121
|
+
pre: (json) => {
|
|
122
|
+
const TaroComponentsImports = { path: '@tarojs/components', imports: {} };
|
|
123
123
|
json.imports.push(TaroComponentsImports);
|
|
124
|
-
(0, legacy_1.default)(json).forEach(
|
|
124
|
+
(0, legacy_1.default)(json).forEach((node) => {
|
|
125
125
|
var _a, _b, _c, _d;
|
|
126
126
|
if ((0, is_mitosis_node_1.isMitosisNode)(node)) {
|
|
127
127
|
// TODO: More dom tags convert to @tarojs/components
|
|
@@ -153,20 +153,16 @@ var PROCESS_TARO_PLUGIN = function () { return ({
|
|
|
153
153
|
});
|
|
154
154
|
},
|
|
155
155
|
},
|
|
156
|
-
});
|
|
157
|
-
|
|
156
|
+
});
|
|
157
|
+
const DEFAULT_OPTIONS = {
|
|
158
158
|
stateType: 'useState',
|
|
159
159
|
plugins: [PROCESS_TARO_PLUGIN],
|
|
160
160
|
};
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
type: 'taro',
|
|
168
|
-
});
|
|
169
|
-
return (0, react_1.componentToReact)(options)({ component: json, path: path });
|
|
170
|
-
};
|
|
161
|
+
const componentToTaro = (_options = {}) => ({ component, path }) => {
|
|
162
|
+
const json = (0, fast_clone_1.fastClone)(component);
|
|
163
|
+
const options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, _options, {
|
|
164
|
+
type: 'taro',
|
|
165
|
+
});
|
|
166
|
+
return (0, react_1.componentToReact)(options)({ component: json, path });
|
|
171
167
|
};
|
|
172
168
|
exports.componentToTaro = componentToTaro;
|