@builder.io/mitosis 0.0.56-99 → 0.0.58

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 (254) hide show
  1. package/dist/src/__tests__/data/blocks/content-slot-jsx.raw.jsx +4 -1
  2. package/dist/src/__tests__/data/blocks/form.raw.jsx +5 -5
  3. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.d.ts +5 -1
  4. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +3 -3
  5. package/dist/src/__tests__/data/jsx-json.spec.d.ts +2 -0
  6. package/dist/src/__tests__/data/jsx-json.spec.js +10226 -0
  7. package/dist/src/__tests__/shared.d.ts +7 -2
  8. package/dist/src/__tests__/shared.js +66 -9
  9. package/dist/src/constants/method-literal-prefix.d.ts +0 -1
  10. package/dist/src/constants/method-literal-prefix.js +0 -3
  11. package/dist/src/generators/angular.d.ts +2 -2
  12. package/dist/src/generators/angular.js +14 -6
  13. package/dist/src/generators/builder.d.ts +4 -11
  14. package/dist/src/generators/builder.js +3 -2
  15. package/dist/src/generators/context/qwik.js +1 -1
  16. package/dist/src/generators/context/svelte.d.ts +3 -0
  17. package/dist/src/generators/context/svelte.js +3 -0
  18. package/dist/src/generators/helpers/functions.d.ts +2 -0
  19. package/dist/src/generators/helpers/functions.js +28 -0
  20. package/dist/src/generators/html.d.ts +3 -3
  21. package/dist/src/generators/html.js +9 -7
  22. package/dist/src/generators/liquid.d.ts +2 -2
  23. package/dist/src/generators/liquid.js +4 -4
  24. package/dist/src/generators/lit/generate.d.ts +2 -2
  25. package/dist/src/generators/lit/generate.js +3 -2
  26. package/dist/src/generators/marko/generate.d.ts +2 -2
  27. package/dist/src/generators/marko/generate.js +10 -8
  28. package/dist/src/generators/mitosis.d.ts +3 -4
  29. package/dist/src/generators/mitosis.js +3 -2
  30. package/dist/src/generators/qwik/component-generator.d.ts +2 -2
  31. package/dist/src/generators/qwik/component-generator.js +68 -64
  32. package/dist/src/generators/qwik/component.d.ts +0 -1
  33. package/dist/src/generators/qwik/component.js +22 -19
  34. package/dist/src/generators/qwik/directives.d.ts +1 -0
  35. package/dist/src/generators/qwik/directives.js +11 -14
  36. package/dist/src/generators/qwik/jsx.d.ts +1 -1
  37. package/dist/src/generators/qwik/jsx.js +9 -5
  38. package/dist/src/generators/qwik/src-generator.js +11 -3
  39. package/dist/src/generators/qwik/stable-serialize.d.ts +6 -0
  40. package/dist/src/generators/qwik/stable-serialize.js +51 -0
  41. package/dist/src/generators/react/generator.d.ts +6 -0
  42. package/dist/src/generators/{react.js → react/generator.js} +58 -150
  43. package/dist/src/generators/react/helpers.d.ts +2 -0
  44. package/dist/src/generators/react/helpers.js +14 -0
  45. package/dist/src/generators/react/index.d.ts +2 -0
  46. package/dist/src/generators/react/index.js +18 -0
  47. package/dist/src/generators/react/state.d.ts +9 -0
  48. package/dist/src/generators/react/state.js +107 -0
  49. package/dist/src/generators/react/types.d.ts +10 -0
  50. package/dist/src/{types/string-map.js → generators/react/types.js} +0 -0
  51. package/dist/src/generators/react-native.d.ts +2 -2
  52. package/dist/src/generators/solid/index.d.ts +3 -0
  53. package/dist/src/generators/{solid.js → solid/index.js} +80 -40
  54. package/dist/src/generators/solid/state.d.ts +19 -0
  55. package/dist/src/generators/solid/state.js +144 -0
  56. package/dist/src/generators/solid/types.d.ts +6 -0
  57. package/dist/src/generators/solid/types.js +2 -0
  58. package/dist/src/generators/stencil/generate.d.ts +2 -2
  59. package/dist/src/generators/stencil/generate.js +5 -2
  60. package/dist/src/generators/svelte.d.ts +6 -7
  61. package/dist/src/generators/svelte.js +43 -40
  62. package/dist/src/generators/swift-ui.d.ts +3 -5
  63. package/dist/src/generators/swift-ui.js +3 -2
  64. package/dist/src/generators/template.d.ts +2 -2
  65. package/dist/src/generators/template.js +3 -2
  66. package/dist/src/generators/vue.d.ts +5 -3
  67. package/dist/src/generators/vue.js +256 -113
  68. package/dist/src/helpers/babel-transform.d.ts +3 -1
  69. package/dist/src/helpers/babel-transform.js +52 -56
  70. package/dist/src/helpers/get-bindings.js +3 -5
  71. package/dist/src/helpers/get-props.js +14 -1
  72. package/dist/src/helpers/get-state-object-string.js +24 -21
  73. package/dist/src/helpers/getters-to-functions.js +1 -11
  74. package/dist/src/helpers/map-refs.js +25 -25
  75. package/dist/src/helpers/nodes/for.d.ts +4 -0
  76. package/dist/src/helpers/nodes/for.js +13 -0
  77. package/dist/src/helpers/nullable.d.ts +2 -0
  78. package/dist/src/helpers/nullable.js +7 -0
  79. package/dist/src/helpers/patterns.d.ts +2 -0
  80. package/dist/src/helpers/patterns.js +5 -1
  81. package/dist/src/helpers/render-imports.js +3 -3
  82. package/dist/src/helpers/replace-identifiers.d.ts +5 -0
  83. package/dist/src/helpers/{replace-idenifiers.js → replace-identifiers.js} +2 -1
  84. package/dist/src/helpers/slots.d.ts +2 -0
  85. package/dist/src/helpers/slots.js +15 -1
  86. package/dist/src/helpers/state.d.ts +0 -2
  87. package/dist/src/helpers/state.js +1 -10
  88. package/dist/src/helpers/strip-state-and-props-refs.d.ts +1 -1
  89. package/dist/src/helpers/strip-state-and-props-refs.js +43 -31
  90. package/dist/src/helpers/styles/helpers.d.ts +3 -2
  91. package/dist/src/index.d.ts +0 -2
  92. package/dist/src/index.js +0 -2
  93. package/dist/src/parsers/angular.js +2 -2
  94. package/dist/src/parsers/builder.d.ts +2 -2
  95. package/dist/src/parsers/builder.js +61 -43
  96. package/dist/src/parsers/constants/outdated-prefixes.d.ts +10 -0
  97. package/dist/src/parsers/constants/outdated-prefixes.js +13 -0
  98. package/dist/src/parsers/context.js +2 -2
  99. package/dist/src/parsers/helpers/state.d.ts +3 -0
  100. package/dist/src/parsers/helpers/state.js +30 -0
  101. package/dist/src/parsers/jsx/component-types.d.ts +1 -1
  102. package/dist/src/parsers/jsx/component-types.js +15 -2
  103. package/dist/src/parsers/jsx/context.js +1 -1
  104. package/dist/src/parsers/jsx/element-parser.d.ts +6 -0
  105. package/dist/src/parsers/jsx/element-parser.js +243 -0
  106. package/dist/src/parsers/jsx/exports.d.ts +3 -0
  107. package/dist/src/parsers/jsx/exports.js +78 -0
  108. package/dist/src/parsers/jsx/function-parser.d.ts +7 -0
  109. package/dist/src/parsers/jsx/function-parser.js +291 -0
  110. package/dist/src/parsers/jsx/helpers.d.ts +2 -0
  111. package/dist/src/parsers/jsx/helpers.js +30 -1
  112. package/dist/src/parsers/jsx/imports.d.ts +7 -0
  113. package/dist/src/parsers/jsx/imports.js +65 -0
  114. package/dist/src/parsers/jsx/index.d.ts +1 -1
  115. package/dist/src/parsers/jsx/index.js +1 -2
  116. package/dist/src/parsers/jsx/jsx.js +29 -516
  117. package/dist/src/parsers/jsx/state.d.ts +2 -3
  118. package/dist/src/parsers/jsx/state.js +15 -22
  119. package/dist/src/plugins/compile-away-builder-components.js +6 -0
  120. package/dist/src/symbols/symbol-processor.js +3 -0
  121. package/dist/src/targets.d.ts +21 -28
  122. package/dist/src/targets.js +2 -2
  123. package/dist/src/types/config.d.ts +11 -1
  124. package/dist/src/types/mitosis-component.d.ts +12 -6
  125. package/dist/src/types/mitosis-component.js +11 -0
  126. package/dist/src/types/mitosis-context.d.ts +2 -2
  127. package/dist/src/types/mitosis-node.d.ts +14 -5
  128. package/dist/src/types/mitosis-node.js +3 -0
  129. package/dist/src/types/transpiler.d.ts +6 -1
  130. package/dist/tsconfig.build.tsbuildinfo +1 -1
  131. package/package.json +9 -9
  132. package/dist/src/__tests__/angular.test.d.ts +0 -1
  133. package/dist/src/__tests__/angular.test.js +0 -10
  134. package/dist/src/__tests__/builder.test.d.ts +0 -1
  135. package/dist/src/__tests__/builder.test.js +0 -235
  136. package/dist/src/__tests__/context.test.d.ts +0 -1
  137. package/dist/src/__tests__/context.test.js +0 -35
  138. package/dist/src/__tests__/hash-code.test.d.ts +0 -1
  139. package/dist/src/__tests__/hash-code.test.js +0 -11
  140. package/dist/src/__tests__/html.test.d.ts +0 -1
  141. package/dist/src/__tests__/html.test.js +0 -7
  142. package/dist/src/__tests__/liquid.test.d.ts +0 -1
  143. package/dist/src/__tests__/liquid.test.js +0 -7
  144. package/dist/src/__tests__/lit.test.d.ts +0 -1
  145. package/dist/src/__tests__/lit.test.js +0 -7
  146. package/dist/src/__tests__/marko.test.d.ts +0 -1
  147. package/dist/src/__tests__/marko.test.js +0 -14
  148. package/dist/src/__tests__/parse-jsx.test.d.ts +0 -1
  149. package/dist/src/__tests__/parse-jsx.test.js +0 -37
  150. package/dist/src/__tests__/qwik/convert-method-to-function.test.d.ts +0 -1
  151. package/dist/src/__tests__/qwik/convert-method-to-function.test.js +0 -37
  152. package/dist/src/__tests__/qwik/src-generator.test.d.ts +0 -1
  153. package/dist/src/__tests__/qwik/src-generator.test.js +0 -65
  154. package/dist/src/__tests__/qwik.directive.test.d.ts +0 -1
  155. package/dist/src/__tests__/qwik.directive.test.js +0 -108
  156. package/dist/src/__tests__/qwik.test.d.ts +0 -1
  157. package/dist/src/__tests__/qwik.test.js +0 -465
  158. package/dist/src/__tests__/react-native.test.d.ts +0 -1
  159. package/dist/src/__tests__/react-native.test.js +0 -7
  160. package/dist/src/__tests__/react.test.d.ts +0 -1
  161. package/dist/src/__tests__/react.test.js +0 -20
  162. package/dist/src/__tests__/solid.test.d.ts +0 -1
  163. package/dist/src/__tests__/solid.test.js +0 -10
  164. package/dist/src/__tests__/stencil.test.d.ts +0 -1
  165. package/dist/src/__tests__/stencil.test.js +0 -7
  166. package/dist/src/__tests__/styles.test.d.ts +0 -1
  167. package/dist/src/__tests__/styles.test.js +0 -23
  168. package/dist/src/__tests__/svelte.test.d.ts +0 -1
  169. package/dist/src/__tests__/svelte.test.js +0 -7
  170. package/dist/src/__tests__/vue.test.d.ts +0 -1
  171. package/dist/src/__tests__/vue.test.js +0 -7
  172. package/dist/src/__tests__/webcomponent.test.d.ts +0 -1
  173. package/dist/src/__tests__/webcomponent.test.js +0 -15
  174. package/dist/src/constants/function-literal-prefix.d.ts +0 -1
  175. package/dist/src/constants/function-literal-prefix.js +0 -4
  176. package/dist/src/generators/react.d.ts +0 -14
  177. package/dist/src/generators/solid.d.ts +0 -5
  178. package/dist/src/helpers/babel-transform.test.d.ts +0 -1
  179. package/dist/src/helpers/babel-transform.test.js +0 -7
  180. package/dist/src/helpers/generic-format.test.d.ts +0 -1
  181. package/dist/src/helpers/generic-format.test.js +0 -8
  182. package/dist/src/helpers/map-to-attributes.d.ts +0 -2
  183. package/dist/src/helpers/map-to-attributes.js +0 -19
  184. package/dist/src/helpers/map-to-css.d.ts +0 -2
  185. package/dist/src/helpers/map-to-css.js +0 -16
  186. package/dist/src/helpers/parse-reactive-script.d.ts +0 -7
  187. package/dist/src/helpers/parse-reactive-script.js +0 -87
  188. package/dist/src/helpers/remove-surrounding-block.test.d.ts +0 -1
  189. package/dist/src/helpers/remove-surrounding-block.test.js +0 -9
  190. package/dist/src/helpers/render-imports.test.d.ts +0 -1
  191. package/dist/src/helpers/render-imports.test.js +0 -33
  192. package/dist/src/helpers/replace-idenifiers.d.ts +0 -1
  193. package/dist/src/helpers/styles/collect-css.test.d.ts +0 -1
  194. package/dist/src/helpers/styles/collect-css.test.js +0 -18
  195. package/dist/src/parsers/html.d.ts +0 -0
  196. package/dist/src/parsers/html.js +0 -2
  197. package/dist/src/parsers/liquid.d.ts +0 -70
  198. package/dist/src/parsers/liquid.js +0 -2538
  199. package/dist/src/types/string-map.d.ts +0 -3
  200. package/dist/test/qwik/Accordion/high.jsx +0 -0
  201. package/dist/test/qwik/Accordion/low.jsx +0 -240
  202. package/dist/test/qwik/Accordion/med.jsx +0 -4
  203. package/dist/test/qwik/For/high.jsx +0 -0
  204. package/dist/test/qwik/For/low.jsx +0 -52
  205. package/dist/test/qwik/For/med.jsx +0 -4
  206. package/dist/test/qwik/Image/high.js +0 -9
  207. package/dist/test/qwik/Image/low.js +0 -0
  208. package/dist/test/qwik/Image/med.js +0 -155
  209. package/dist/test/qwik/Image.slow/high.js +0 -9
  210. package/dist/test/qwik/Image.slow/low.js +0 -0
  211. package/dist/test/qwik/Image.slow/med.js +0 -155
  212. package/dist/test/qwik/bindings/high.cjs +0 -0
  213. package/dist/test/qwik/bindings/low.cjs +0 -45
  214. package/dist/test/qwik/bindings/med.cjs +0 -3
  215. package/dist/test/qwik/button/high.js +0 -3
  216. package/dist/test/qwik/button/low.js +0 -25
  217. package/dist/test/qwik/button/med.js +0 -31
  218. package/dist/test/qwik/component/bindings/high.jsx +0 -0
  219. package/dist/test/qwik/component/bindings/low.jsx +0 -104
  220. package/dist/test/qwik/component/bindings/med.jsx +0 -7
  221. package/dist/test/qwik/component/component/inputs/high.cjsx +0 -9
  222. package/dist/test/qwik/component/component/inputs/low.cjsx +0 -0
  223. package/dist/test/qwik/component/component/inputs/med.cjsx +0 -68
  224. package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
  225. package/dist/test/qwik/for-loop.bindings/low.cjs +0 -56
  226. package/dist/test/qwik/for-loop.bindings/med.cjs +0 -5
  227. package/dist/test/qwik/hello_world/stylesheet/high.jsx +0 -0
  228. package/dist/test/qwik/hello_world/stylesheet/low.jsx +0 -26
  229. package/dist/test/qwik/hello_world/stylesheet/med.jsx +0 -4
  230. package/dist/test/qwik/mount/high.cjs +0 -0
  231. package/dist/test/qwik/mount/low.cjs +0 -47
  232. package/dist/test/qwik/mount/med.cjs +0 -3
  233. package/dist/test/qwik/page-with-symbol/high.js +0 -0
  234. package/dist/test/qwik/page-with-symbol/low.js +0 -33
  235. package/dist/test/qwik/page-with-symbol/med.js +0 -4
  236. package/dist/test/qwik/show-hide/high.jsx +0 -9
  237. package/dist/test/qwik/show-hide/low.jsx +0 -0
  238. package/dist/test/qwik/show-hide/med.jsx +0 -181
  239. package/dist/test/qwik/svg/high.js +0 -0
  240. package/dist/test/qwik/svg/low.js +0 -30
  241. package/dist/test/qwik/svg/med.js +0 -4
  242. package/dist/test/qwik/todo/Todo.cjs/high.cjs +0 -19
  243. package/dist/test/qwik/todo/Todo.cjs/low.cjs +0 -0
  244. package/dist/test/qwik/todo/Todo.cjs/med.cjs +0 -51
  245. package/dist/test/qwik/todo/Todo.js/high.js +0 -19
  246. package/dist/test/qwik/todo/Todo.js/low.js +0 -0
  247. package/dist/test/qwik/todo/Todo.js/med.js +0 -47
  248. package/dist/test/qwik/todo/Todo.tsx/high.tsx +0 -19
  249. package/dist/test/qwik/todo/Todo.tsx/low.tsx +0 -0
  250. package/dist/test/qwik/todo/Todo.tsx/med.tsx +0 -43
  251. package/dist/test/qwik/todos/Todo.tsx/high.tsx +0 -7
  252. package/dist/test/qwik/todos/Todo.tsx/low.tsx +0 -32
  253. package/dist/test/qwik/todos/Todo.tsx/med.tsx +0 -4
  254. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -30,26 +30,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.componentToSolid = void 0;
31
31
  var dedent_1 = __importDefault(require("dedent"));
32
32
  var standalone_1 = require("prettier/standalone");
33
- var helpers_1 = require("../helpers/styles/helpers");
34
- var get_refs_1 = require("../helpers/get-refs");
35
- var get_state_object_string_1 = require("../helpers/get-state-object-string");
36
- var render_imports_1 = require("../helpers/render-imports");
37
- var jsx_1 = require("../parsers/jsx");
38
- var plugins_1 = require("../modules/plugins");
39
- var fast_clone_1 = require("../helpers/fast-clone");
40
- var strip_meta_properties_1 = require("../helpers/strip-meta-properties");
41
- var get_components_used_1 = require("../helpers/get-components-used");
33
+ var helpers_1 = require("../../helpers/styles/helpers");
34
+ var get_refs_1 = require("../../helpers/get-refs");
35
+ var render_imports_1 = require("../../helpers/render-imports");
36
+ var jsx_1 = require("../../parsers/jsx");
37
+ var mitosis_node_1 = require("../../types/mitosis-node");
38
+ var plugins_1 = require("../../modules/plugins");
39
+ var fast_clone_1 = require("../../helpers/fast-clone");
40
+ var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
41
+ var get_components_used_1 = require("../../helpers/get-components-used");
42
42
  var traverse_1 = __importDefault(require("traverse"));
43
- var is_mitosis_node_1 = require("../helpers/is-mitosis-node");
44
- var filter_empty_text_nodes_1 = require("../helpers/filter-empty-text-nodes");
45
- var create_mitosis_node_1 = require("../helpers/create-mitosis-node");
46
- var context_1 = require("./helpers/context");
47
- var babel_transform_1 = require("../helpers/babel-transform");
43
+ var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
44
+ var filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
45
+ var create_mitosis_node_1 = require("../../helpers/create-mitosis-node");
46
+ var context_1 = require("../helpers/context");
47
+ var babel_transform_1 = require("../../helpers/babel-transform");
48
48
  var core_1 = require("@babel/core");
49
49
  var lodash_1 = require("lodash");
50
- var state_1 = require("../helpers/state");
51
- var collect_css_1 = require("../helpers/styles/collect-css");
50
+ var state_1 = require("./state");
51
+ var nullable_1 = require("../../helpers/nullable");
52
+ var get_state_object_string_1 = require("../../helpers/get-state-object-string");
53
+ var collect_css_1 = require("../../helpers/styles/collect-css");
52
54
  var hash_sum_1 = __importDefault(require("hash-sum"));
55
+ var DEFAULT_OPTIONS = {
56
+ state: 'signals',
57
+ stylesType: 'styled-components',
58
+ };
53
59
  // Transform <foo.bar key="value" /> to <component :is="foo.bar" key="value" />
54
60
  function processDynamicComponents(json, options) {
55
61
  var found = false;
@@ -114,22 +120,41 @@ var collectClassString = function (json, options) {
114
120
  }
115
121
  return null;
116
122
  };
117
- var blockToSolid = function (json, options) {
118
- var _a, _b, _c;
119
- if (options === void 0) { options = {}; }
123
+ var preProcessBlockCode = function (_a) {
124
+ var json = _a.json, options = _a.options, component = _a.component;
125
+ for (var key in json.properties) {
126
+ var value = json.properties[key];
127
+ if (value) {
128
+ json.properties[key] = (0, state_1.updateStateCode)({ options: options, component: component, updateSetters: false })(value);
129
+ }
130
+ }
131
+ for (var key in json.bindings) {
132
+ var value = json.bindings[key];
133
+ if (value === null || value === void 0 ? void 0 : value.code) {
134
+ json.bindings[key] = {
135
+ arguments: value.arguments,
136
+ code: (0, state_1.updateStateCode)({ options: options, component: component, updateSetters: true })(value.code),
137
+ };
138
+ }
139
+ }
140
+ };
141
+ var blockToSolid = function (_a) {
142
+ var _b, _c, _d;
143
+ var json = _a.json, options = _a.options, component = _a.component;
144
+ preProcessBlockCode({ json: json, options: options, component: component });
120
145
  if (json.properties._text) {
121
146
  return json.properties._text;
122
147
  }
123
- if ((_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code) {
148
+ if ((_b = json.bindings._text) === null || _b === void 0 ? void 0 : _b.code) {
124
149
  return "{".concat(json.bindings._text.code, "}");
125
150
  }
126
- if (json.name === 'For') {
151
+ if ((0, mitosis_node_1.checkIsForNode)(json)) {
127
152
  var needsWrapper = json.children.length !== 1;
128
153
  // The SolidJS `<For>` component has a special index() signal function.
129
154
  // https://www.solidjs.com/docs/latest#%3Cfor%3E
130
- return "<For each={".concat((_b = json.bindings.each) === null || _b === void 0 ? void 0 : _b.code, "}>\n {(").concat(json.properties._forName, ", _index) => {\n const index = _index();\n return ").concat(needsWrapper ? '<>' : '').concat(json.children
155
+ return "<For each={".concat((_c = json.bindings.each) === null || _c === void 0 ? void 0 : _c.code, "}>\n {(").concat(json.scope.forName, ", _index) => {\n const ").concat(json.scope.indexName || 'index', " = _index();\n return ").concat(needsWrapper ? '<>' : '').concat(json.children
131
156
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
132
- .map(function (child) { return blockToSolid(child, options); }), "}}\n ").concat(needsWrapper ? '</>' : '', "\n </For>");
157
+ .map(function (child) { return blockToSolid({ component: component, json: child, options: options }); }), "}}\n ").concat(needsWrapper ? '</>' : '', "\n </For>");
133
158
  }
134
159
  var str = '';
135
160
  if (json.name === 'Fragment') {
@@ -139,13 +164,13 @@ var blockToSolid = function (json, options) {
139
164
  str += "<".concat(json.name, " ");
140
165
  }
141
166
  if (json.name === 'Show' && json.meta.else) {
142
- str += "fallback={".concat(blockToSolid(json.meta.else, options), "}");
167
+ str += "fallback={".concat(blockToSolid({ component: component, json: json.meta.else, options: options }), "}");
143
168
  }
144
169
  var classString = collectClassString(json, options);
145
170
  if (classString) {
146
171
  str += " class=".concat(classString, " ");
147
172
  }
148
- if ((_c = json.bindings._spread) === null || _c === void 0 ? void 0 : _c.code) {
173
+ if ((_d = json.bindings._spread) === null || _d === void 0 ? void 0 : _d.code) {
149
174
  str += " {...(".concat(json.bindings._spread.code, ")} ");
150
175
  }
151
176
  for (var key in json.properties) {
@@ -153,7 +178,7 @@ var blockToSolid = function (json, options) {
153
178
  str += " ".concat(key, "=\"").concat(value, "\" ");
154
179
  }
155
180
  for (var key in json.bindings) {
156
- var _d = json.bindings[key], code = _d.code, _e = _d.arguments, cusArg = _e === void 0 ? ['event'] : _e;
181
+ var _e = json.bindings[key], code = _e.code, _f = _e.arguments, cusArg = _f === void 0 ? ['event'] : _f;
157
182
  if (key === '_spread' || key === '_forName') {
158
183
  continue;
159
184
  }
@@ -198,7 +223,7 @@ var blockToSolid = function (json, options) {
198
223
  if (json.children) {
199
224
  str += json.children
200
225
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
201
- .map(function (item) { return blockToSolid(item, options); })
226
+ .map(function (item) { return blockToSolid({ component: component, json: item, options: options }); })
202
227
  .join('\n');
203
228
  }
204
229
  if (json.name === 'Fragment') {
@@ -226,12 +251,28 @@ function addProviderComponents(json, options) {
226
251
  ];
227
252
  }
228
253
  }
229
- var componentToSolid = function (_options) {
230
- if (_options === void 0) { _options = {}; }
254
+ var preProcessComponentCode = function (json, options) {
255
+ var _a;
256
+ var processCode = (0, state_1.updateStateCode)({ options: options, component: json });
257
+ if ((_a = json.hooks.onMount) === null || _a === void 0 ? void 0 : _a.code) {
258
+ json.hooks.onMount.code = processCode(json.hooks.onMount.code);
259
+ }
260
+ if (json.hooks.onUpdate) {
261
+ for (var _i = 0, _b = json.hooks.onUpdate; _i < _b.length; _i++) {
262
+ var hook = _b[_i];
263
+ hook.code = processCode(hook.code);
264
+ if (hook.deps) {
265
+ hook.deps = processCode(hook.deps);
266
+ }
267
+ }
268
+ }
269
+ };
270
+ var componentToSolid = function (passedOptions) {
271
+ if (passedOptions === void 0) { passedOptions = DEFAULT_OPTIONS; }
231
272
  return function (_a) {
232
- var _b, _c, _d;
273
+ var _b, _c, _d, _e, _f, _g;
233
274
  var component = _a.component;
234
- var options = __assign({ stylesType: 'styled-components' }, _options);
275
+ var options = __assign(__assign({}, DEFAULT_OPTIONS), passedOptions);
235
276
  var json = (0, fast_clone_1.fastClone)(component);
236
277
  if (options.plugins) {
237
278
  json = (0, plugins_1.runPreJsonPlugins)(json, options.plugins);
@@ -242,29 +283,28 @@ var componentToSolid = function (_options) {
242
283
  if (options.plugins) {
243
284
  json = (0, plugins_1.runPostJsonPlugins)(json, options.plugins);
244
285
  }
286
+ preProcessComponentCode(json, options);
245
287
  (0, strip_meta_properties_1.stripMetaProperties)(json);
246
288
  var foundDynamicComponents = processDynamicComponents(json, options);
247
289
  var css = options.stylesType === 'style-tag' &&
248
290
  (0, collect_css_1.collectCss)(json, {
249
291
  prefix: (0, hash_sum_1.default)(json),
250
292
  });
251
- var stateString = (0, get_state_object_string_1.getStateObjectStringFromComponent)(json);
252
- var hasState = (0, state_1.checkHasState)(json);
293
+ var state = (0, state_1.getState)({ json: json, options: options });
253
294
  var componentsUsed = (0, get_components_used_1.getComponentsUsed)(json);
254
295
  var componentHasContext = (0, context_1.hasContext)(json);
255
296
  var hasShowComponent = componentsUsed.has('Show');
256
297
  var hasForComponent = componentsUsed.has('For');
257
- var solidJSImports = __spreadArray([
298
+ var solidJSImports = __spreadArray(__spreadArray([
258
299
  componentHasContext ? 'useContext' : undefined,
259
300
  hasShowComponent ? 'Show' : undefined,
260
301
  hasForComponent ? 'For' : undefined,
261
302
  ((_b = json.hooks.onMount) === null || _b === void 0 ? void 0 : _b.code) ? 'onMount' : undefined
262
- ], (((_c = json.hooks.onUpdate) === null || _c === void 0 ? void 0 : _c.length) ? ['on', 'createEffect'] : []), true).filter(Boolean);
263
- var str = (0, dedent_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n ", "\n ", "\n ", "\n ", "\n\n function ", "(props) {\n ", "\n \n ", "\n ", "\n\n ", "\n ", "\n\n return (", "\n ", "\n ", "\n ", ")\n }\n\n export default ", ";\n "], ["\n ", "\n ", "\n ", "\n ", "\n ", "\n\n function ", "(props) {\n ", "\n \n ", "\n ", "\n\n ", "\n ", "\n\n return (", "\n ", "\n ", "\n ", ")\n }\n\n export default ", ";\n "])), solidJSImports.length > 0
264
- ? "import { \n ".concat(solidJSImports.map(function (item) { return item; }).join(', '), "\n } from 'solid-js';")
265
- : '', !foundDynamicComponents ? '' : "import { Dynamic } from 'solid-js/web';", !hasState ? '' : "import { createMutable } from 'solid-js/store';", !componentHasStyles && options.stylesType === 'styled-components'
303
+ ], (((_c = json.hooks.onUpdate) === null || _c === void 0 ? void 0 : _c.length) ? ['on', 'createEffect'] : []), true), ((_d = state === null || state === void 0 ? void 0 : state.import.solidjs) !== null && _d !== void 0 ? _d : []), true).filter(nullable_1.checkIsDefined);
304
+ var storeImports = (_e = state === null || state === void 0 ? void 0 : state.import.store) !== null && _e !== void 0 ? _e : [];
305
+ var str = (0, dedent_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n ", "\n ", "\n ", "\n ", "\n\n function ", "(props) {\n ", "\n \n ", "\n ", "\n\n ", "\n ", "\n\n return (", "\n ", "\n ", "\n ", ")\n }\n\n export default ", ";\n "], ["\n ", "\n ", "\n ", "\n ", "\n ", "\n\n function ", "(props) {\n ", "\n \n ", "\n ", "\n\n ", "\n ", "\n\n return (", "\n ", "\n ", "\n ", ")\n }\n\n export default ", ";\n "])), solidJSImports.length > 0 ? "import { ".concat(solidJSImports.join(', '), " } from 'solid-js';") : '', !foundDynamicComponents ? '' : "import { Dynamic } from 'solid-js/web';", storeImports.length > 0 ? "import { ".concat(storeImports.join(', '), " } from 'solid-js/store';") : '', !componentHasStyles && options.stylesType === 'styled-components'
266
306
  ? ''
267
- : "import { css } from \"solid-styled-components\";", (0, render_imports_1.renderPreComponent)({ component: json, target: 'solid' }), json.name, !hasState ? '' : "const state = createMutable(".concat(stateString, ");"), getRefsString(json), getContextString(json, options), !((_d = json.hooks.onMount) === null || _d === void 0 ? void 0 : _d.code) ? '' : "onMount(() => { ".concat(json.hooks.onMount.code, " })"), json.hooks.onUpdate
307
+ : "import { css } from \"solid-styled-components\";", (0, render_imports_1.renderPreComponent)({ component: json, target: 'solid' }), json.name, (_f = state === null || state === void 0 ? void 0 : state.str) !== null && _f !== void 0 ? _f : '', getRefsString(json), getContextString(json, options), !((_g = json.hooks.onMount) === null || _g === void 0 ? void 0 : _g.code) ? '' : "onMount(() => { ".concat(json.hooks.onMount.code, " })"), json.hooks.onUpdate
268
308
  ? json.hooks.onUpdate
269
309
  .map(function (hook, index) {
270
310
  if (hook.deps) {
@@ -279,7 +319,7 @@ var componentToSolid = function (_options) {
279
319
  .join('\n')
280
320
  : '', addWrapper ? '<>' : '', json.children
281
321
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
282
- .map(function (item) { return blockToSolid(item, options); })
322
+ .map(function (item) { return blockToSolid({ component: component, json: item, options: options }); })
283
323
  .join('\n'), options.stylesType === 'style-tag' && css && css.trim().length > 4
284
324
  ? // We add the jsx attribute so prettier formats this nicely
285
325
  "<style jsx>{`".concat(css, "`}</style>")
@@ -0,0 +1,19 @@
1
+ import { MitosisComponent } from '../../types/mitosis-component';
2
+ import { ToSolidOptions } from './types';
3
+ declare type State = {
4
+ str: string;
5
+ import: {
6
+ store?: [string];
7
+ solidjs?: [string];
8
+ };
9
+ };
10
+ export declare const updateStateCode: ({ options, component, updateSetters, }: {
11
+ options: ToSolidOptions;
12
+ component: MitosisComponent;
13
+ updateSetters?: boolean | undefined;
14
+ }) => (value: string) => string;
15
+ export declare const getState: ({ json, options, }: {
16
+ json: MitosisComponent;
17
+ options: ToSolidOptions;
18
+ }) => State | undefined;
19
+ export {};
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getState = exports.updateStateCode = void 0;
7
+ var core_1 = require("@babel/core");
8
+ var json5_1 = __importDefault(require("json5"));
9
+ var strip_state_and_props_refs_1 = require("../../helpers/strip-state-and-props-refs");
10
+ var babel_transform_1 = require("../../helpers/babel-transform");
11
+ var capitalize_1 = require("../../helpers/capitalize");
12
+ var get_state_object_string_1 = require("../../helpers/get-state-object-string");
13
+ var function_1 = require("fp-ts/lib/function");
14
+ var state_1 = require("../../helpers/state");
15
+ var patterns_1 = require("../../helpers/patterns");
16
+ var getStateSetterName = function (stateName) { return "set".concat((0, capitalize_1.capitalize)(stateName)); };
17
+ var updateStateSettersInCode = function (options) { return function (value) {
18
+ switch (options.state) {
19
+ case 'mutable':
20
+ return value;
21
+ case 'signals':
22
+ try {
23
+ return (0, babel_transform_1.babelTransformExpression)(value, {
24
+ AssignmentExpression: function (path) {
25
+ var node = path.node;
26
+ if (core_1.types.isMemberExpression(node.left)) {
27
+ if (core_1.types.isIdentifier(node.left.object)) {
28
+ // TODO: utillity to properly trace this reference to the beginning
29
+ if (node.left.object.name === 'state') {
30
+ // TODO: ultimately support other property access like strings
31
+ var propertyName = node.left.property.name;
32
+ path.replaceWith(core_1.types.callExpression(core_1.types.identifier(getStateSetterName(propertyName)), [
33
+ node.right,
34
+ ]));
35
+ }
36
+ }
37
+ }
38
+ },
39
+ });
40
+ }
41
+ catch (error) {
42
+ console.log('[Solid.js]: could not update state setters in signals code', value);
43
+ throw error;
44
+ }
45
+ }
46
+ }; };
47
+ var updateStateGettersInCode = function (options, component) { return function (value) {
48
+ switch (options.state) {
49
+ case 'mutable':
50
+ return value;
51
+ case 'signals':
52
+ return (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(value, {
53
+ includeState: true,
54
+ includeProps: false,
55
+ replaceWith: function (name) {
56
+ var state = component.state[name];
57
+ if (options.state === 'signals' &&
58
+ // signal accessors are lazy, so we need to add a function call to property calls
59
+ ((state === null || state === void 0 ? void 0 : state.type) === 'property' ||
60
+ // getters become plain functions, requiring a function call to access their value
61
+ (state === null || state === void 0 ? void 0 : state.type) === 'getter')) {
62
+ return "".concat(name, "()");
63
+ }
64
+ return name;
65
+ },
66
+ });
67
+ }
68
+ }; };
69
+ var updateStateCode = function (_a) {
70
+ var options = _a.options, component = _a.component, _b = _a.updateSetters, updateSetters = _b === void 0 ? true : _b;
71
+ return (0, function_1.flow)(updateSetters ? updateStateSettersInCode(options) : function_1.identity, updateStateGettersInCode(options, component), function (x) { return x.trim(); });
72
+ };
73
+ exports.updateStateCode = updateStateCode;
74
+ var processStateValue = function (_a) {
75
+ var options = _a.options, component = _a.component;
76
+ var mapValue = (0, exports.updateStateCode)({ options: options, component: component });
77
+ return function (_a) {
78
+ var key = _a[0], stateVal = _a[1];
79
+ var getDefaultCase = function () {
80
+ return (0, function_1.pipe)(value, json5_1.default.stringify, mapValue, function (x) { return "const [".concat(key, ", ").concat(getStateSetterName(key), "] = createSignal(").concat(x, ")"); });
81
+ };
82
+ var value = stateVal === null || stateVal === void 0 ? void 0 : stateVal.code;
83
+ var type = stateVal === null || stateVal === void 0 ? void 0 : stateVal.type;
84
+ if (typeof value === 'string') {
85
+ switch (type) {
86
+ case 'getter':
87
+ return (0, function_1.pipe)(value, patterns_1.replaceGetterWithFunction, mapValue);
88
+ case 'function':
89
+ return mapValue(value);
90
+ case 'method':
91
+ return (0, function_1.pipe)(value, patterns_1.prefixWithFunction, mapValue);
92
+ default:
93
+ return getDefaultCase();
94
+ }
95
+ }
96
+ else {
97
+ return getDefaultCase();
98
+ }
99
+ };
100
+ };
101
+ var LINE_ITEM_DELIMITER = '\n\n\n';
102
+ var getSignalsCode = function (_a) {
103
+ var json = _a.json, options = _a.options;
104
+ return Object.entries(json.state)
105
+ .map(processStateValue({ options: options, component: json }))
106
+ /**
107
+ * We need to sort state so that signals are at the top.
108
+ */
109
+ .sort(function (a, b) {
110
+ var aHasSignal = a.includes('createSignal(');
111
+ var bHasSignal = b.includes('createSignal(');
112
+ if (aHasSignal && !bHasSignal) {
113
+ return -1;
114
+ }
115
+ else if (!aHasSignal && bHasSignal) {
116
+ return 1;
117
+ }
118
+ else {
119
+ return 0;
120
+ }
121
+ })
122
+ .join(LINE_ITEM_DELIMITER);
123
+ };
124
+ var getState = function (_a) {
125
+ var json = _a.json, options = _a.options;
126
+ var hasState = (0, state_1.checkHasState)(json);
127
+ if (!hasState) {
128
+ return undefined;
129
+ }
130
+ switch (options.state) {
131
+ case 'mutable':
132
+ var stateString = (0, function_1.pipe)((0, get_state_object_string_1.getStateObjectStringFromComponent)(json), function (str) { return "const state = createMutable(".concat(str, ");"); });
133
+ return {
134
+ str: stateString,
135
+ import: { store: ['createMutable'] },
136
+ };
137
+ case 'signals':
138
+ return {
139
+ str: getSignalsCode({ json: json, options: options }),
140
+ import: { solidjs: ['createSignal'] },
141
+ };
142
+ }
143
+ };
144
+ exports.getState = getState;
@@ -0,0 +1,6 @@
1
+ import { BaseTranspilerOptions } from '../../types/transpiler';
2
+ export declare type SolidState = 'mutable' | 'signals';
3
+ export interface ToSolidOptions extends BaseTranspilerOptions {
4
+ state: SolidState;
5
+ stylesType?: 'styled-components' | 'style-tag';
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,4 @@
1
- import { BaseTranspilerOptions, Transpiler } from '../../types/transpiler';
1
+ import { BaseTranspilerOptions, TranspilerGenerator } from '../../types/transpiler';
2
2
  export interface ToStencilOptions extends BaseTranspilerOptions {
3
3
  }
4
- export declare const componentToStencil: (options?: ToStencilOptions) => Transpiler;
4
+ export declare const componentToStencil: TranspilerGenerator<ToStencilOptions>;
@@ -13,6 +13,7 @@ var standalone_1 = require("prettier/standalone");
13
13
  var get_state_object_string_1 = require("../../helpers/get-state-object-string");
14
14
  var render_imports_1 = require("../../helpers/render-imports");
15
15
  var jsx_1 = require("../../parsers/jsx");
16
+ var mitosis_node_1 = require("../../types/mitosis-node");
16
17
  var plugins_1 = require("../../modules/plugins");
17
18
  var fast_clone_1 = require("../../helpers/fast-clone");
18
19
  var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
@@ -24,6 +25,7 @@ var dash_case_1 = require("../../helpers/dash-case");
24
25
  var collect_css_1 = require("../../helpers/styles/collect-css");
25
26
  var indent_1 = require("../../helpers/indent");
26
27
  var map_refs_1 = require("../../helpers/map-refs");
28
+ var for_1 = require("../../helpers/nodes/for");
27
29
  var blockToStencil = function (json, options) {
28
30
  var _a, _b, _c, _d, _e;
29
31
  if (options === void 0) { options = {}; }
@@ -33,9 +35,10 @@ var blockToStencil = function (json, options) {
33
35
  if ((_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code) {
34
36
  return "{".concat(processBinding((_b = json.bindings) === null || _b === void 0 ? void 0 : _b._text.code), "}");
35
37
  }
36
- if (json.name === 'For') {
38
+ if ((0, mitosis_node_1.checkIsForNode)(json)) {
37
39
  var wrap = json.children.length !== 1;
38
- return "{".concat(processBinding((_c = json.bindings.each) === null || _c === void 0 ? void 0 : _c.code), "?.map((").concat(json.properties._forName, ", index) => (\n ").concat(wrap ? '<>' : '').concat(json.children
40
+ var forArgs = (0, for_1.getForArguments)(json).join(', ');
41
+ return "{".concat(processBinding((_c = json.bindings.each) === null || _c === void 0 ? void 0 : _c.code), "?.map((").concat(forArgs, ") => (\n ").concat(wrap ? '<>' : '').concat(json.children
39
42
  .filter(filter_empty_text_nodes_1.filterEmptyTextNodes)
40
43
  .map(function (item) { return blockToStencil(item, options); })
41
44
  .join('\n')).concat(wrap ? '</>' : '', "\n ))}");
@@ -1,15 +1,14 @@
1
1
  import { MitosisComponent } from '../types/mitosis-component';
2
- import { MitosisNode } from '../types/mitosis-node';
3
- import { BaseTranspilerOptions, Transpiler } from '../types/transpiler';
2
+ import { BaseNode, MitosisNode } from '../types/mitosis-node';
3
+ import { BaseTranspilerOptions, TranspilerGenerator } from '../types/transpiler';
4
4
  export interface ToSvelteOptions extends BaseTranspilerOptions {
5
5
  stateType?: 'proxies' | 'variables';
6
6
  }
7
- interface BlockToSvelteProps {
8
- json: MitosisNode;
7
+ declare type BlockToSvelte<T extends BaseNode = MitosisNode> = (props: {
8
+ json: T;
9
9
  options: ToSvelteOptions;
10
10
  parentComponent: MitosisComponent;
11
- }
12
- declare type BlockToSvelte = (props: BlockToSvelteProps) => string;
11
+ }) => string;
13
12
  export declare const blockToSvelte: BlockToSvelte;
14
- export declare const componentToSvelte: ({ plugins, ...userProvidedOptions }?: ToSvelteOptions) => Transpiler;
13
+ export declare const componentToSvelte: TranspilerGenerator<ToSvelteOptions>;
15
14
  export {};