@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.
Files changed (196) hide show
  1. package/dist/src/constants/media-sizes.js +4 -5
  2. package/dist/src/generators/alpine/generate.js +114 -132
  3. package/dist/src/generators/alpine/render-mount-hook.js +8 -5
  4. package/dist/src/generators/alpine/render-update-hooks.js +13 -13
  5. package/dist/src/generators/angular/helpers.js +19 -9
  6. package/dist/src/generators/angular/index.js +599 -584
  7. package/dist/src/generators/builder.js +200 -165
  8. package/dist/src/generators/context/angular.js +32 -26
  9. package/dist/src/generators/context/helpers/context-with-symbol-key.js +25 -21
  10. package/dist/src/generators/context/qwik.js +21 -21
  11. package/dist/src/generators/context/react.js +22 -22
  12. package/dist/src/generators/context/rsc.js +20 -22
  13. package/dist/src/generators/context/solid.js +22 -22
  14. package/dist/src/generators/context/svelte.js +33 -28
  15. package/dist/src/generators/context/vue.js +1 -1
  16. package/dist/src/generators/helpers/context.js +6 -13
  17. package/dist/src/generators/helpers/functions.js +8 -8
  18. package/dist/src/generators/helpers/on-mount.js +9 -5
  19. package/dist/src/generators/helpers/rsc.js +7 -9
  20. package/dist/src/generators/html.js +995 -534
  21. package/dist/src/generators/liquid.js +81 -79
  22. package/dist/src/generators/lit/collect-class-string.js +10 -12
  23. package/dist/src/generators/lit/generate.js +204 -159
  24. package/dist/src/generators/marko/generate.js +193 -183
  25. package/dist/src/generators/minify.js +5 -9
  26. package/dist/src/generators/mitosis.js +135 -134
  27. package/dist/src/generators/qwik/component-generator.js +159 -154
  28. package/dist/src/generators/qwik/component.js +51 -81
  29. package/dist/src/generators/qwik/directives.js +68 -84
  30. package/dist/src/generators/qwik/helpers/add-prevent-default.js +6 -7
  31. package/dist/src/generators/qwik/helpers/convert-method-to-function.js +38 -38
  32. package/dist/src/generators/qwik/helpers/handlers.js +16 -25
  33. package/dist/src/generators/qwik/helpers/stable-inject.js +7 -8
  34. package/dist/src/generators/qwik/helpers/stable-serialize.js +7 -8
  35. package/dist/src/generators/qwik/helpers/state.js +36 -43
  36. package/dist/src/generators/qwik/helpers/styles.js +19 -40
  37. package/dist/src/generators/qwik/jsx.js +63 -75
  38. package/dist/src/generators/qwik/src-generator.js +134 -167
  39. package/dist/src/generators/react/blocks.js +122 -127
  40. package/dist/src/generators/react/generator.js +314 -259
  41. package/dist/src/generators/react/helpers.js +23 -28
  42. package/dist/src/generators/react/state.js +34 -51
  43. package/dist/src/generators/react-native/index.js +72 -84
  44. package/dist/src/generators/react-native/sanitize-react-native-block-styles.js +14 -26
  45. package/dist/src/generators/rsc.js +30 -36
  46. package/dist/src/generators/solid/blocks.js +46 -43
  47. package/dist/src/generators/solid/helpers/styles.js +11 -11
  48. package/dist/src/generators/solid/index.js +199 -190
  49. package/dist/src/generators/solid/state/helpers.js +76 -90
  50. package/dist/src/generators/solid/state/signals.js +30 -37
  51. package/dist/src/generators/solid/state/state.js +35 -48
  52. package/dist/src/generators/solid/state/store.js +40 -46
  53. package/dist/src/generators/stencil/collect-class-string.js +10 -12
  54. package/dist/src/generators/stencil/generate.js +158 -145
  55. package/dist/src/generators/svelte/blocks.js +146 -144
  56. package/dist/src/generators/svelte/helpers.js +10 -17
  57. package/dist/src/generators/svelte/svelte.js +321 -287
  58. package/dist/src/generators/swift-ui.js +162 -101
  59. package/dist/src/generators/taro.js +32 -36
  60. package/dist/src/generators/template.js +71 -74
  61. package/dist/src/generators/vue/blocks.js +116 -107
  62. package/dist/src/generators/vue/compositionApi.js +67 -50
  63. package/dist/src/generators/vue/helpers.js +71 -96
  64. package/dist/src/generators/vue/optionsApi.js +134 -105
  65. package/dist/src/generators/vue/vue.js +210 -207
  66. package/dist/src/helpers/babel-transform.js +40 -63
  67. package/dist/src/helpers/bindings.js +4 -12
  68. package/dist/src/helpers/camel-case.js +4 -5
  69. package/dist/src/helpers/capitalize.js +1 -1
  70. package/dist/src/helpers/component-file-extensions.js +23 -35
  71. package/dist/src/helpers/create-mitosis-component.js +22 -26
  72. package/dist/src/helpers/create-mitosis-context.js +5 -12
  73. package/dist/src/helpers/create-mitosis-node.js +10 -12
  74. package/dist/src/helpers/dash-case.js +2 -2
  75. package/dist/src/helpers/dedent.js +18 -22
  76. package/dist/src/helpers/event-handlers.js +1 -1
  77. package/dist/src/helpers/fast-clone.js +1 -1
  78. package/dist/src/helpers/filter-empty-text-nodes.js +2 -2
  79. package/dist/src/helpers/generic-format.js +7 -8
  80. package/dist/src/helpers/get-bindings.js +4 -4
  81. package/dist/src/helpers/get-components-used.js +3 -3
  82. package/dist/src/helpers/get-components.js +4 -4
  83. package/dist/src/helpers/get-custom-imports.js +10 -12
  84. package/dist/src/helpers/get-prop-functions.js +7 -8
  85. package/dist/src/helpers/get-props-ref.js +8 -8
  86. package/dist/src/helpers/get-props.js +12 -13
  87. package/dist/src/helpers/get-refs.js +4 -4
  88. package/dist/src/helpers/get-state-object-string.js +42 -61
  89. package/dist/src/helpers/get-state-used.js +7 -8
  90. package/dist/src/helpers/get-styles.js +6 -6
  91. package/dist/src/helpers/getters-to-functions.js +8 -12
  92. package/dist/src/helpers/handle-missing-state.js +3 -3
  93. package/dist/src/helpers/has-bindings-text.js +6 -6
  94. package/dist/src/helpers/has-component.js +4 -4
  95. package/dist/src/helpers/has-props.js +3 -3
  96. package/dist/src/helpers/has-stateful-dom.js +4 -4
  97. package/dist/src/helpers/has.js +3 -3
  98. package/dist/src/helpers/indent.js +2 -3
  99. package/dist/src/helpers/is-children.js +4 -5
  100. package/dist/src/helpers/is-component.js +1 -1
  101. package/dist/src/helpers/is-html-attribute.js +2 -11
  102. package/dist/src/helpers/is-mitosis-node.js +1 -1
  103. package/dist/src/helpers/is-root-text-node.js +1 -1
  104. package/dist/src/helpers/is-upper-case.js +1 -1
  105. package/dist/src/helpers/is-valid-attribute-name.js +1 -1
  106. package/dist/src/helpers/json.js +2 -2
  107. package/dist/src/helpers/map-refs.js +29 -40
  108. package/dist/src/helpers/merge-options.js +20 -31
  109. package/dist/src/helpers/mitosis-imports.js +5 -6
  110. package/dist/src/helpers/nodes/for.js +2 -3
  111. package/dist/src/helpers/nullable.js +1 -3
  112. package/dist/src/helpers/on-event.js +32 -36
  113. package/dist/src/helpers/output.js +4 -5
  114. package/dist/src/helpers/parse-node.js +13 -5
  115. package/dist/src/helpers/parsers.js +10 -14
  116. package/dist/src/helpers/patterns.js +6 -8
  117. package/dist/src/helpers/plugins/process-code/index.js +114 -120
  118. package/dist/src/helpers/plugins/process-signals.js +114 -125
  119. package/dist/src/helpers/plugins/process-target-blocks.js +18 -20
  120. package/dist/src/helpers/process-http-requests.js +8 -4
  121. package/dist/src/helpers/remove-surrounding-block.js +2 -2
  122. package/dist/src/helpers/render-imports.js +99 -111
  123. package/dist/src/helpers/replace-identifiers.js +40 -49
  124. package/dist/src/helpers/replace-new-lines-in-strings.js +3 -3
  125. package/dist/src/helpers/signals/signals.js +27 -35
  126. package/dist/src/helpers/slots.js +11 -20
  127. package/dist/src/helpers/state.js +1 -3
  128. package/dist/src/helpers/strip-meta-properties.js +6 -6
  129. package/dist/src/helpers/strip-state-and-props-refs.js +21 -32
  130. package/dist/src/helpers/styles/collect-css.js +39 -44
  131. package/dist/src/helpers/styles/collect-styled-components.js +30 -28
  132. package/dist/src/helpers/styles/helpers.js +23 -29
  133. package/dist/src/helpers/trace-reference-to-module-path.js +3 -4
  134. package/dist/src/helpers/transform-state-setters.js +16 -19
  135. package/dist/src/helpers/traverse-nodes.js +2 -2
  136. package/dist/src/helpers/try-prettier-format.js +3 -3
  137. package/dist/src/helpers/typescript-project.js +25 -25
  138. package/dist/src/helpers/typescript.js +1 -3
  139. package/dist/src/modules/plugins.js +20 -28
  140. package/dist/src/parsers/angular.js +49 -57
  141. package/dist/src/parsers/builder/builder.js +448 -343
  142. package/dist/src/parsers/builder/helpers.js +10 -10
  143. package/dist/src/parsers/context.js +15 -17
  144. package/dist/src/parsers/jsx/ast.js +11 -11
  145. package/dist/src/parsers/jsx/component-types.js +22 -32
  146. package/dist/src/parsers/jsx/context.js +12 -12
  147. package/dist/src/parsers/jsx/element-parser.js +43 -54
  148. package/dist/src/parsers/jsx/exports.js +12 -14
  149. package/dist/src/parsers/jsx/function-parser.js +108 -119
  150. package/dist/src/parsers/jsx/helpers.js +11 -13
  151. package/dist/src/parsers/jsx/hooks/helpers.js +14 -16
  152. package/dist/src/parsers/jsx/hooks/index.js +34 -44
  153. package/dist/src/parsers/jsx/hooks/use-target.js +27 -27
  154. package/dist/src/parsers/jsx/imports.js +7 -17
  155. package/dist/src/parsers/jsx/jsx.js +92 -91
  156. package/dist/src/parsers/jsx/props-types.js +8 -10
  157. package/dist/src/parsers/jsx/props.js +15 -23
  158. package/dist/src/parsers/jsx/signals.js +28 -29
  159. package/dist/src/parsers/jsx/state.d.ts +2 -4
  160. package/dist/src/parsers/jsx/state.js +59 -93
  161. package/dist/src/parsers/svelte/css/index.js +1 -1
  162. package/dist/src/parsers/svelte/helpers/bindings.js +18 -19
  163. package/dist/src/parsers/svelte/helpers/children.js +5 -6
  164. package/dist/src/parsers/svelte/helpers/expressions.js +7 -9
  165. package/dist/src/parsers/svelte/helpers/hooks.js +2 -2
  166. package/dist/src/parsers/svelte/helpers/post-process.js +49 -70
  167. package/dist/src/parsers/svelte/helpers/string.js +5 -5
  168. package/dist/src/parsers/svelte/html/actions.js +17 -10
  169. package/dist/src/parsers/svelte/html/each.js +11 -16
  170. package/dist/src/parsers/svelte/html/element.js +68 -78
  171. package/dist/src/parsers/svelte/html/fragment.js +3 -3
  172. package/dist/src/parsers/svelte/html/if-else.js +11 -18
  173. package/dist/src/parsers/svelte/html/index.js +14 -14
  174. package/dist/src/parsers/svelte/html/mustache-tag.js +5 -5
  175. package/dist/src/parsers/svelte/html/slot.js +5 -5
  176. package/dist/src/parsers/svelte/html/text.js +7 -14
  177. package/dist/src/parsers/svelte/index.js +23 -72
  178. package/dist/src/parsers/svelte/instance/context.js +17 -17
  179. package/dist/src/parsers/svelte/instance/expressions.js +2 -2
  180. package/dist/src/parsers/svelte/instance/functions.js +35 -30
  181. package/dist/src/parsers/svelte/instance/hooks.js +4 -5
  182. package/dist/src/parsers/svelte/instance/imports.js +11 -21
  183. package/dist/src/parsers/svelte/instance/index.js +22 -22
  184. package/dist/src/parsers/svelte/instance/properties.js +11 -23
  185. package/dist/src/parsers/svelte/instance/reactive.js +11 -11
  186. package/dist/src/parsers/svelte/instance/references.js +13 -13
  187. package/dist/src/parsers/svelte/instance/statements.js +3 -3
  188. package/dist/src/parsers/svelte/module/index.js +14 -26
  189. package/dist/src/parsers/svelte/typescript/index.js +27 -36
  190. package/dist/src/plugins/compile-away-builder-components.js +223 -156
  191. package/dist/src/plugins/compile-away-components.js +13 -21
  192. package/dist/src/plugins/map-styles.js +7 -7
  193. package/dist/src/symbols/symbol-processor.js +44 -62
  194. package/dist/src/targets.js +19 -19
  195. package/dist/src/types/mitosis-node.js +1 -1
  196. 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
- var legacy_1 = __importDefault(require("neotraverse/legacy"));
12
- var dedent_1 = require("../helpers/dedent");
13
- var fast_clone_1 = require("../helpers/fast-clone");
14
- var filter_empty_text_nodes_1 = require("../helpers/filter-empty-text-nodes");
15
- var generic_format_1 = require("../helpers/generic-format");
16
- var get_state_object_string_1 = require("../helpers/get-state-object-string");
17
- var get_styles_1 = require("../helpers/get-styles");
18
- var is_children_1 = __importDefault(require("../helpers/is-children"));
19
- var is_mitosis_node_1 = require("../helpers/is-mitosis-node");
20
- var state_1 = require("../helpers/state");
21
- var try_prettier_format_1 = require("../helpers/try-prettier-format");
22
- var mitosis_node_1 = require("../types/mitosis-node");
23
- var scrolls = function (json) {
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
- var mappers = {
28
- Fragment: function (json, options) {
29
- return "".concat(json.children.map(function (item) { return blockToSwift(item, options); }).join('\n'));
23
+ const mappers = {
24
+ Fragment: (json, options) => {
25
+ return `${json.children.map((item) => blockToSwift(item, options)).join('\n')}`;
30
26
  },
31
- link: function () { return ''; },
32
- Image: function (json, options) {
27
+ link: () => '',
28
+ Image: (json, options) => {
33
29
  var _a;
34
- return ("Image(".concat(processBinding((_a = json.bindings.image) === null || _a === void 0 ? void 0 : _a.code, options) || "\"".concat(json.properties.image, "\""), ")") +
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: function (json, options) {
34
+ input: (json, options) => {
39
35
  var _a, _b;
40
- var name = json.properties.$name;
41
- var str = "TextField(".concat(json.bindings.placeholder
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
- : '""', ", text: $").concat(name, ")") +
41
+ : '""'}, text: $${name})` +
46
42
  getStyleString(json, options) +
47
43
  getActionsString(json, options);
48
44
  if (json.bindings.onChange) {
49
- str += "\n .onChange(of: ".concat(name, ") { ").concat(name, " in \n ").concat(processBinding(wrapAction("var event = { target: { value: \"\\(".concat(name, ")\" } };\n ").concat((_b = json.bindings.onChange) === null || _b === void 0 ? void 0 : _b.code)), options), " \n }");
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
- var blockToSwift = function (json, options) {
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 "Text(\"".concat(json.properties._text.trim().replace(/\s+/g, ' '), "\")");
69
+ return `Text("${json.properties._text.trim().replace(/\s+/g, ' ')}")`;
70
70
  }
71
71
  if (json.bindings._text) {
72
- return "Text(".concat(processBinding(json.bindings._text.code, options), ".toString())");
72
+ return `Text(${processBinding(json.bindings._text.code, options)}.toString())`;
73
73
  }
74
- var str = '';
75
- var children = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes);
76
- var style = (0, get_styles_1.getStyles)(json);
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
- var name = json.name === 'input'
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
- var placeholder = json.properties.placeholder;
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 += "ForEach(".concat(processBinding((_a = json.bindings.each) === null || _a === void 0 ? void 0 : _a.code, options), ", id: \\.self) { ").concat(json.scope.forName, " in ").concat(children
97
- .map(function (item) { return blockToSwift(item, options); })
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 += "if ".concat(processBinding((_b = json.bindings.when) === null || _b === void 0 ? void 0 : _b.code, options), " {\n ").concat(children.map(function (item) { return blockToSwift(item, options); }).join('\n'), "\n }");
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 += "".concat(name, "(");
105
- for (var key in json.properties) {
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("Unsupported property \"".concat(key, "\""));
114
+ console.warn(`Unsupported property "${key}"`);
113
115
  }
114
- for (var key in json.bindings) {
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("Unsupported event binding \"".concat(key, "\""));
132
+ console.warn(`Unsupported event binding "${key}"`);
131
133
  }
132
134
  }
133
135
  else {
134
- console.warn("Unsupported binding \"".concat(key, "\""));
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(function (item) { return blockToSwift(item, options); }).join('\n');
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
- var wrapAction = function (str) { return "(() => { ".concat(str, " })()"); };
152
+ const wrapAction = (str) => `(() => { ${str} })()`;
151
153
  function getActionsString(json, options) {
152
- var str = '';
154
+ let str = '';
153
155
  if (json.bindings.onClick) {
154
- str += "\n.onTapGesture {\n ".concat(processBinding(wrapAction(json.bindings.onClick.code), options), "\n }");
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
- var style = (0, get_styles_1.getStyles)(node);
160
- var str = '';
161
- for (var key in style) {
162
- var useKey = key;
163
- var rawValue = style[key];
164
- var value = "\"".concat(rawValue, "\"");
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 += "\n.".concat(useKey, "(").concat(value, ")");
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("Styling key \"".concat(key, "\" is not supported"));
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
- var str = "const state = new Proxy(".concat((0, get_state_object_string_1.getStateObjectStringFromComponent)(json), ", {\n set: (target, key, value) => {\n const returnVal = Reflect.set(target, key, value);\n update();\n return returnVal;\n }\n });");
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
- var processBinding = function (str, options) {
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 "eval(code: \"\"\"\n ".concat(str, "\n \"\"\")");
202
+ return `eval(code: """
203
+ ${str}
204
+ """)`;
193
205
  }
194
206
  // Use double quotes for simple strings
195
- return "eval(code: \"".concat(str, "\")");
207
+ return `eval(code: "${str}")`;
196
208
  };
197
209
  function componentHasDynamicData(json) {
198
- var hasState = (0, state_1.checkHasState)(json);
210
+ const hasState = (0, state_1.checkHasState)(json);
199
211
  if (hasState) {
200
212
  return true;
201
213
  }
202
- var found = false;
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(function (item) { return item !== 'css'; }).length) {
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
- var inputIndex = 0;
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(function (item) { return item !== 'css'; }).length) {
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 = "input".concat(++inputIndex);
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
- var str = '';
234
- var inputNames = json.meta.inputNames;
245
+ let str = '';
246
+ const inputNames = json.meta.inputNames;
235
247
  if (!inputNames) {
236
248
  return str;
237
249
  }
238
- for (var item in inputNames) {
239
- str += "\n@State private var ".concat(item, ": String = \"\"");
250
+ for (const item in inputNames) {
251
+ str += `\n@State private var ${item}: String = ""`;
240
252
  }
241
253
  return str;
242
254
  }
243
- var componentToSwift = function (options) {
244
- if (options === void 0) { options = {}; }
245
- return function (_a) {
246
- var component = _a.component;
247
- var json = (0, fast_clone_1.fastClone)(component);
248
- mapDataForSwiftCompatability(json);
249
- var hasDyanmicData = componentHasDynamicData(json);
250
- var children = json.children.map(function (item) { return blockToSwift(item, options); }).join('\n');
251
- var hasInputNames = Object.keys(json.meta.inputNames || {}).length > 0;
252
- var str = (0, dedent_1.dedent)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n import SwiftUI\n ", "\n\n struct ", ": View {\n ", "\n\n var body: some View {\n VStack {\n ", "\n }", "\n }\n }\n "], ["\n import SwiftUI\n ", "\n\n struct ", ": View {\n ", "\n\n var body: some View {\n VStack {\n ", "\n }", "\n }\n }\n "])), !hasDyanmicData
253
- ? ''
254
- : "import JavaScriptCore\n \n final class UpdateTracker: ObservableObject {\n @Published var value = 0;\n \n func update() {\n value += 1\n }\n }\n ", component.name, !hasDyanmicData
255
- ? ''
256
- : "\n @ObservedObject var updateTracker = UpdateTracker()\n private var jsContext = JSContext()\n ".concat(getInputBindings(json, options), "\n\n func eval(code: String) -> JSValue! {\n return jsContext?.evaluateScript(code)\n }\n\n ").concat(!hasInputNames
257
- ? ''
258
- : "\n func setComputedState() {\n ".concat(Object.keys(json.meta.inputNames || {})
259
- .map(function (item) {
260
- return "".concat(item, " = ").concat(processBinding(json.meta.inputNames[item], options), ".toString()!");
261
- })
262
- .join('\n'), "\n }"), "\n\n init() {\n let jsSource = \"\"\"\n ").concat(getJsSource(json, options), "\n \"\"\"\n jsContext?.exceptionHandler = { context, exception in\n print(\"JS Error: \\(exception!)\") \n }\n\n let updateRef = updateTracker.update\n let updateFn : @convention(block) () -> Void = { updateRef() }\n jsContext?.setObject(updateFn, forKeyedSubscript: \"update\" as NSString)\n\n jsContext?.evaluateScript(jsSource)\n }\n ").trim(), children, !hasInputNames
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
- : "\n .onAppear {\n setComputedState()\n }\n ");
265
- if (options.prettier !== false) {
266
- str = (0, generic_format_1.format)(str);
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
- return str;
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
- var json5_1 = __importDefault(require("json5"));
8
- var lodash_1 = require("lodash");
9
- var legacy_1 = __importDefault(require("neotraverse/legacy"));
10
- var bindings_1 = require("../helpers/bindings");
11
- var fast_clone_1 = require("../helpers/fast-clone");
12
- var is_mitosis_node_1 = require("../helpers/is-mitosis-node");
13
- var merge_options_1 = require("../helpers/merge-options");
14
- var react_1 = require("./react");
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
- var collectTaroStyles = function (json) {
69
- var styleMap = {};
70
- var componentIndexes = {};
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
- var value = json5_1.default.parse(item.bindings.css.code);
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 (var key in value) {
82
- var propertyValue = value[key];
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
- var newValue = parseFloat(propertyValue);
85
+ let newValue = parseFloat(propertyValue);
86
86
  if (!isNaN(newValue)) {
87
87
  if (propertyValue.endsWith('px')) {
88
88
  newValue = 2 * newValue;
89
- value[key] = "".concat(newValue, "px");
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
- var componentName = (0, lodash_1.camelCase)(item.name || 'view');
98
- var index = (componentIndexes[componentName] = (componentIndexes[componentName] || 0) + 1);
99
- var className = "".concat(componentName).concat(index);
100
- item.bindings.style = (0, bindings_1.createSingleBinding)({ code: "styles.".concat(className) });
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
- var PROCESS_TARO_PLUGIN = function () { return ({
119
+ const PROCESS_TARO_PLUGIN = () => ({
120
120
  json: {
121
- pre: function (json) {
122
- var TaroComponentsImports = { path: '@tarojs/components', imports: {} };
121
+ pre: (json) => {
122
+ const TaroComponentsImports = { path: '@tarojs/components', imports: {} };
123
123
  json.imports.push(TaroComponentsImports);
124
- (0, legacy_1.default)(json).forEach(function (node) {
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
- var DEFAULT_OPTIONS = {
156
+ });
157
+ const DEFAULT_OPTIONS = {
158
158
  stateType: 'useState',
159
159
  plugins: [PROCESS_TARO_PLUGIN],
160
160
  };
161
- var componentToTaro = function (_options) {
162
- if (_options === void 0) { _options = {}; }
163
- return function (_a) {
164
- var component = _a.component, path = _a.path;
165
- var json = (0, fast_clone_1.fastClone)(component);
166
- var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, _options, {
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;