@builder.io/mitosis 0.0.56-13 → 0.0.56-16

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 (217) hide show
  1. package/dist/src/__tests__/angular.test.js +2 -104
  2. package/dist/src/__tests__/builder.test.js +3 -3
  3. package/dist/src/__tests__/data/basic-child-component.raw.jsx +1 -2
  4. package/dist/src/__tests__/data/basic-context.raw.d.ts +1 -0
  5. package/dist/src/__tests__/data/basic-context.raw.jsx +29 -0
  6. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.d.ts +1 -0
  7. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.jsx +10 -0
  8. package/dist/src/__tests__/data/basic-for-show.raw.jsx +2 -3
  9. package/dist/src/__tests__/data/basic-for.raw.jsx +2 -3
  10. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.d.ts +5 -0
  11. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.jsx +17 -0
  12. package/dist/src/__tests__/data/basic-forwardRef.raw.d.ts +5 -0
  13. package/dist/src/__tests__/data/basic-forwardRef.raw.jsx +14 -0
  14. package/dist/src/__tests__/data/basic-onChange.raw.d.ts +1 -0
  15. package/dist/src/__tests__/data/basic-onChange.raw.jsx +17 -0
  16. package/dist/src/__tests__/data/basic-onMount-update.raw.jsx +1 -1
  17. package/dist/src/__tests__/data/basic-onUpdate-return.raw.d.ts +1 -0
  18. package/dist/src/__tests__/data/basic-onUpdate-return.raw.jsx +24 -0
  19. package/dist/src/__tests__/data/basic-outputs-meta.raw.jsx +1 -1
  20. package/dist/src/__tests__/data/basic-outputs.raw.jsx +1 -1
  21. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.d.ts +6 -0
  22. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.jsx +14 -0
  23. package/dist/src/__tests__/data/basic-props-destructure.raw.d.ts +6 -0
  24. package/dist/src/__tests__/data/basic-props-destructure.raw.jsx +14 -0
  25. package/dist/src/__tests__/data/basic-props.raw.d.ts +6 -0
  26. package/dist/src/__tests__/data/basic-props.raw.jsx +13 -0
  27. package/dist/src/__tests__/data/basic-ref-assignment.raw.d.ts +4 -0
  28. package/dist/src/__tests__/data/basic-ref-assignment.raw.jsx +15 -0
  29. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.d.ts +5 -0
  30. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.jsx +35 -0
  31. package/dist/src/__tests__/data/basic-ref.raw.d.ts +4 -0
  32. package/dist/src/__tests__/data/basic-ref.raw.jsx +36 -0
  33. package/dist/src/__tests__/data/basic.raw.d.ts +6 -1
  34. package/dist/src/__tests__/data/basic.raw.jsx +10 -3
  35. package/dist/src/__tests__/data/blocks/classname-jsx.raw.jsx +1 -1
  36. package/dist/src/__tests__/data/blocks/columns.raw.jsx +1 -1
  37. package/dist/src/__tests__/data/blocks/custom-code.raw.jsx +3 -7
  38. package/dist/src/__tests__/data/blocks/embed.raw.jsx +3 -7
  39. package/dist/src/__tests__/data/blocks/form.raw.jsx +3 -3
  40. package/dist/src/__tests__/data/blocks/image.raw.jsx +8 -9
  41. package/dist/src/__tests__/data/blocks/img-state.raw.jsx +1 -1
  42. package/dist/src/__tests__/data/blocks/input.raw.jsx +1 -3
  43. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.jsx +7 -1
  44. package/dist/src/__tests__/data/blocks/onInit.raw.d.ts +8 -1
  45. package/dist/src/__tests__/data/blocks/onInit.raw.jsx +13 -3
  46. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +1 -1
  47. package/dist/src/__tests__/data/blocks/section-state.raw.jsx +1 -1
  48. package/dist/src/__tests__/data/blocks/select.raw.jsx +1 -3
  49. package/dist/src/__tests__/data/blocks/shadow-dom.raw.jsx +2 -4
  50. package/dist/src/__tests__/data/blocks/stamped-io.raw.jsx +2 -4
  51. package/dist/src/__tests__/data/blocks/text.raw.jsx +2 -5
  52. package/dist/src/__tests__/data/styles/class-and-className.raw.jsx +1 -3
  53. package/dist/src/__tests__/data/styles/className.raw.jsx +1 -3
  54. package/dist/src/__tests__/data/styles/classState.raw.d.ts +1 -0
  55. package/dist/src/__tests__/data/styles/classState.raw.jsx +12 -0
  56. package/dist/src/__tests__/data/types/component-props-interface.raw.d.ts +6 -0
  57. package/dist/src/__tests__/data/types/component-props-interface.raw.jsx +6 -0
  58. package/dist/src/__tests__/data/types/component-props-type.raw.d.ts +6 -0
  59. package/dist/src/__tests__/data/types/component-props-type.raw.jsx +6 -0
  60. package/dist/src/__tests__/data/types/preserve-typing.raw.d.ts +8 -0
  61. package/dist/src/__tests__/data/types/preserve-typing.raw.jsx +6 -0
  62. package/dist/src/__tests__/html.test.js +2 -145
  63. package/dist/src/__tests__/liquid.test.js +2 -109
  64. package/dist/src/__tests__/parse-jsx.test.js +22 -0
  65. package/dist/src/__tests__/qwik/convertMethodToFunction.test.d.ts +1 -0
  66. package/dist/src/__tests__/qwik/convertMethodToFunction.test.js +34 -0
  67. package/dist/src/__tests__/qwik/src-generator.test.d.ts +1 -0
  68. package/dist/src/__tests__/qwik/src-generator.test.js +65 -0
  69. package/dist/src/__tests__/qwik.test.js +44 -21
  70. package/dist/src/__tests__/react-native.test.js +2 -135
  71. package/dist/src/__tests__/react.test.js +5 -177
  72. package/dist/src/__tests__/shared.d.ts +3 -0
  73. package/dist/src/__tests__/shared.js +224 -0
  74. package/dist/src/__tests__/solid.test.js +2 -103
  75. package/dist/src/__tests__/stencil.test.js +3 -98
  76. package/dist/src/__tests__/styles.test.js +9 -1
  77. package/dist/src/__tests__/svelte.test.js +6 -0
  78. package/dist/src/__tests__/vue.test.js +2 -134
  79. package/dist/src/__tests__/webcomponent.test.js +6 -165
  80. package/dist/src/constants/hooks.d.ts +6 -0
  81. package/dist/src/constants/hooks.js +9 -0
  82. package/dist/src/generators/angular.d.ts +1 -1
  83. package/dist/src/generators/angular.js +66 -34
  84. package/dist/src/generators/builder.d.ts +1 -1
  85. package/dist/src/generators/builder.js +6 -12
  86. package/dist/src/generators/context/{react copy.d.ts → qwik.d.ts} +2 -2
  87. package/dist/src/generators/context/{react copy.js → qwik.js} +4 -5
  88. package/dist/src/generators/context/svelte.d.ts +1 -1
  89. package/dist/src/generators/helpers/context.js +1 -2
  90. package/dist/src/generators/html.d.ts +1 -1
  91. package/dist/src/generators/html.js +206 -120
  92. package/dist/src/generators/liquid.d.ts +1 -1
  93. package/dist/src/generators/liquid.js +6 -14
  94. package/dist/src/generators/mitosis.d.ts +1 -1
  95. package/dist/src/generators/mitosis.js +30 -29
  96. package/dist/src/generators/qwik/component-generator.d.ts +4 -0
  97. package/dist/src/generators/qwik/component-generator.js +271 -0
  98. package/dist/src/generators/qwik/component.js +4 -5
  99. package/dist/src/generators/qwik/convertMethodToFunction.d.ts +1 -0
  100. package/dist/src/generators/qwik/convertMethodToFunction.js +161 -0
  101. package/dist/src/generators/qwik/directives.js +20 -18
  102. package/dist/src/generators/qwik/index.d.ts +3 -1
  103. package/dist/src/generators/qwik/index.js +3 -1
  104. package/dist/src/generators/qwik/jsx.js +10 -6
  105. package/dist/src/generators/qwik/src-generator.d.ts +19 -7
  106. package/dist/src/generators/qwik/src-generator.js +149 -31
  107. package/dist/src/generators/qwik/styles.js +1 -2
  108. package/dist/src/generators/react-native.d.ts +2 -2
  109. package/dist/src/generators/react-native.js +3 -6
  110. package/dist/src/generators/react.d.ts +4 -2
  111. package/dist/src/generators/react.js +88 -68
  112. package/dist/src/generators/solid.d.ts +1 -1
  113. package/dist/src/generators/solid.js +9 -12
  114. package/dist/src/generators/stencil/generate.d.ts +1 -1
  115. package/dist/src/generators/stencil/generate.js +5 -11
  116. package/dist/src/generators/svelte.d.ts +1 -1
  117. package/dist/src/generators/svelte.js +19 -26
  118. package/dist/src/generators/swift-ui.d.ts +1 -1
  119. package/dist/src/generators/swift-ui.js +6 -12
  120. package/dist/src/generators/template.d.ts +1 -1
  121. package/dist/src/generators/template.js +6 -14
  122. package/dist/src/generators/vue.d.ts +12 -6
  123. package/dist/src/generators/vue.js +62 -31
  124. package/dist/src/helpers/babel-transform.js +3 -8
  125. package/dist/src/helpers/create-mitosis-component.d.ts +1 -1
  126. package/dist/src/helpers/create-mitosis-component.js +1 -1
  127. package/dist/src/helpers/fast-clone.js +1 -3
  128. package/dist/src/helpers/filter-empty-text-nodes.js +1 -2
  129. package/dist/src/helpers/get-bindings.d.ts +2 -0
  130. package/dist/src/helpers/get-bindings.js +18 -0
  131. package/dist/src/helpers/get-props-ref.d.ts +2 -0
  132. package/dist/src/helpers/get-props-ref.js +32 -0
  133. package/dist/src/helpers/getters-to-functions.d.ts +1 -1
  134. package/dist/src/helpers/getters-to-functions.js +1 -1
  135. package/dist/src/helpers/has-bindings-text.d.ts +2 -0
  136. package/dist/src/helpers/has-bindings-text.js +21 -0
  137. package/dist/src/helpers/has-stateful-dom.d.ts +2 -0
  138. package/dist/src/helpers/has-stateful-dom.js +21 -0
  139. package/dist/src/helpers/is-children.js +1 -2
  140. package/dist/src/helpers/is-component.js +1 -3
  141. package/dist/src/helpers/is-html-attribute.d.ts +1 -1
  142. package/dist/src/helpers/is-html-attribute.js +4 -19
  143. package/dist/src/helpers/map-refs.js +4 -1
  144. package/dist/src/helpers/parsers.js +1 -2
  145. package/dist/src/helpers/render-imports.d.ts +18 -2
  146. package/dist/src/helpers/render-imports.js +86 -45
  147. package/dist/src/helpers/render-imports.test.d.ts +1 -0
  148. package/dist/src/helpers/render-imports.test.js +19 -0
  149. package/dist/src/helpers/replace-idenifiers.js +2 -5
  150. package/dist/src/helpers/strip-state-and-props-refs.d.ts +2 -1
  151. package/dist/src/helpers/strip-state-and-props-refs.js +5 -8
  152. package/dist/src/helpers/styles/collect-css.d.ts +6 -0
  153. package/dist/src/helpers/styles/collect-css.js +87 -0
  154. package/dist/src/helpers/styles/collect-css.test.d.ts +1 -0
  155. package/dist/src/helpers/styles/collect-css.test.js +18 -0
  156. package/dist/src/helpers/styles/collect-styled-components.d.ts +2 -0
  157. package/dist/src/helpers/styles/collect-styled-components.js +61 -0
  158. package/dist/src/helpers/styles/helpers.d.ts +30 -0
  159. package/dist/src/helpers/styles/helpers.js +61 -0
  160. package/dist/src/helpers/typescript.d.ts +2 -0
  161. package/dist/src/helpers/typescript.js +2 -0
  162. package/dist/src/index.d.ts +7 -4
  163. package/dist/src/index.js +24 -8
  164. package/dist/src/jsx-types.d.ts +1 -0
  165. package/dist/src/modules/plugins.d.ts +1 -1
  166. package/dist/src/parsers/angular.js +10 -28
  167. package/dist/src/parsers/builder.d.ts +23 -23
  168. package/dist/src/parsers/builder.js +15 -33
  169. package/dist/src/parsers/jsx.d.ts +2 -1
  170. package/dist/src/parsers/jsx.js +214 -64
  171. package/dist/src/parsers/liquid.js +51 -149
  172. package/dist/src/plugins/compile-away-builder-components.js +4 -10
  173. package/dist/src/symbols/symbol-processor.js +4 -6
  174. package/dist/src/targets.d.ts +5 -3
  175. package/dist/src/targets.js +7 -1
  176. package/dist/src/types/config.d.ts +37 -17
  177. package/dist/src/types/mitosis-component.d.ts +30 -10
  178. package/dist/src/types/transpiler.d.ts +14 -0
  179. package/dist/src/types/transpiler.js +2 -0
  180. package/dist/test/qwik/Accordion/low.jsx +1 -0
  181. package/dist/test/qwik/For/low.jsx +1 -0
  182. package/dist/test/qwik/Image/med.js +2 -1
  183. package/dist/test/qwik/Image.slow/med.js +2 -1
  184. package/dist/test/qwik/bindings/low.cjs +3 -2
  185. package/dist/test/qwik/button/low.js +1 -0
  186. package/dist/test/qwik/component/bindings/low.jsx +2 -1
  187. package/dist/test/qwik/component/component/inputs/med.cjsx +2 -1
  188. package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
  189. package/dist/test/qwik/for-loop.bindings/low.cjs +47 -0
  190. package/dist/test/qwik/for-loop.bindings/med.cjs +5 -0
  191. package/dist/test/qwik/hello_world/stylesheet/low.jsx +1 -0
  192. package/dist/test/qwik/mount/high.cjs +0 -0
  193. package/dist/test/qwik/mount/low.cjs +44 -0
  194. package/dist/test/qwik/mount/med.cjs +3 -0
  195. package/dist/test/qwik/page-with-symbol/low.js +1 -0
  196. package/dist/test/qwik/show-hide/med.jsx +2 -1
  197. package/dist/test/qwik/svg/low.js +1 -0
  198. package/dist/test/qwik/todo/Todo.cjs/med.cjs +1 -0
  199. package/dist/test/qwik/todo/Todo.js/med.js +1 -0
  200. package/dist/test/qwik/todo/Todo.tsx/med.tsx +1 -0
  201. package/dist/test/qwik/todos/Todo.tsx/low.tsx +1 -0
  202. package/dist/tsconfig.build.tsbuildinfo +1 -1
  203. package/dist/tsconfig.tsbuildinfo +1 -1
  204. package/package.json +6 -3
  205. package/README.md +0 -239
  206. package/dist/src/__tests__/data/blocks/content-slot.raw.d.ts +0 -6
  207. package/dist/src/__tests__/data/blocks/content-slot.raw.jsx +0 -13
  208. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.d.ts +0 -1
  209. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.jsx +0 -10
  210. package/dist/src/__tests__/data/blocks/slot.raw.d.ts +0 -5
  211. package/dist/src/__tests__/data/blocks/slot.raw.jsx +0 -6
  212. package/dist/src/__tests__/data/blocks/styles.raw.d.ts +0 -1
  213. package/dist/src/__tests__/data/blocks/styles.raw.jsx +0 -10
  214. package/dist/src/helpers/babel-transform copy.d.ts +0 -8
  215. package/dist/src/helpers/babel-transform copy.js +0 -138
  216. package/dist/src/helpers/collect-styles.d.ts +0 -29
  217. package/dist/src/helpers/collect-styles.js +0 -176
@@ -59,8 +59,10 @@ var create_mitosis_component_1 = require("../helpers/create-mitosis-component");
59
59
  var create_mitosis_node_1 = require("../helpers/create-mitosis-node");
60
60
  var is_mitosis_node_1 = require("../helpers/is-mitosis-node");
61
61
  var replace_idenifiers_1 = require("../helpers/replace-idenifiers");
62
+ var get_bindings_1 = require("../helpers/get-bindings");
62
63
  var replace_new_lines_in_strings_1 = require("../helpers/replace-new-lines-in-strings");
63
64
  var json_1 = require("../helpers/json");
65
+ var hooks_1 = require("../constants/hooks");
64
66
  var jsxPlugin = require('@babel/plugin-syntax-jsx');
65
67
  var tsPreset = require('@babel/preset-typescript');
66
68
  exports.selfClosingTags = new Set([
@@ -80,9 +82,7 @@ exports.selfClosingTags = new Set([
80
82
  'wbr',
81
83
  ]);
82
84
  var types = babel.types;
83
- var arrayToAst = function (array) {
84
- return types.arrayExpression(array.map(function (item) { return jsonToAst(item); }));
85
- };
85
+ var arrayToAst = function (array) { return types.arrayExpression(array.map(jsonToAst)); };
86
86
  var jsonToAst = function (json) {
87
87
  if (types.isNode(json)) {
88
88
  if (types.isJSXText(json)) {
@@ -111,6 +111,7 @@ var jsonToAst = function (json) {
111
111
  };
112
112
  var jsonObjectToAst = function (json) {
113
113
  if (!json) {
114
+ // TO-DO: This looks concerning...
114
115
  return json;
115
116
  }
116
117
  var properties = [];
@@ -144,8 +145,7 @@ var parseStateObject = function (object) {
144
145
  var properties = object.properties;
145
146
  var useProperties = properties.map(function (item) {
146
147
  if (types.isObjectProperty(item)) {
147
- if (types.isFunctionExpression(item.value) ||
148
- types.isArrowFunctionExpression(item.value)) {
148
+ if (types.isFunctionExpression(item.value) || types.isArrowFunctionExpression(item.value)) {
149
149
  return (0, exports.createFunctionStringLiteralObjectProperty)(item.key, item.value);
150
150
  }
151
151
  }
@@ -172,12 +172,28 @@ var parseCodeJson = function (node) {
172
172
  var code = (0, generator_1.default)(node).code;
173
173
  return (0, json_1.tryParseJson)(code);
174
174
  };
175
+ var getPropsTypeRef = function (node) {
176
+ var param = node.params[0];
177
+ // TODO: component function params name must be props
178
+ if (babel.types.isIdentifier(param) &&
179
+ param.name === 'props' &&
180
+ babel.types.isTSTypeAnnotation(param.typeAnnotation)) {
181
+ var paramIdentifier = babel.types.variableDeclaration('let', [
182
+ babel.types.variableDeclarator(param),
183
+ ]);
184
+ return (0, generator_1.default)(paramIdentifier)
185
+ .code.replace(/^let\sprops:\s+/, '')
186
+ .replace(/;/g, '');
187
+ }
188
+ return undefined;
189
+ };
175
190
  var componentFunctionToJson = function (node, context) {
176
191
  var _a;
177
192
  var hooks = {};
178
193
  var state = {};
179
194
  var accessedContext = {};
180
195
  var setContext = {};
196
+ var refs = {};
181
197
  for (var _i = 0, _b = node.body.body; _i < _b.length; _i++) {
182
198
  var item = _b[_i];
183
199
  if (types.isExpressionStatement(item)) {
@@ -191,19 +207,28 @@ var componentFunctionToJson = function (node, context) {
191
207
  var key = keyNode.name;
192
208
  var keyPath = (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, key);
193
209
  var valueNode = expression.arguments[1];
194
- setContext[keyPath] = {
195
- name: keyNode.name,
196
- value: valueNode && types.isObjectExpression(valueNode)
197
- ? (0, exports.parseStateObject)(valueNode)
198
- : undefined,
199
- };
210
+ if (valueNode) {
211
+ if (types.isObjectExpression(valueNode)) {
212
+ var value = (0, exports.parseStateObject)(valueNode);
213
+ setContext[keyPath] = {
214
+ name: keyNode.name,
215
+ value: value,
216
+ };
217
+ }
218
+ else {
219
+ var ref = (0, generator_1.default)(valueNode).code;
220
+ setContext[keyPath] = {
221
+ name: keyNode.name,
222
+ ref: ref,
223
+ };
224
+ }
225
+ }
200
226
  }
201
227
  }
202
228
  else if (expression.callee.name === 'onMount' ||
203
229
  expression.callee.name === 'useEffect') {
204
230
  var firstArg = expression.arguments[0];
205
- if (types.isFunctionExpression(firstArg) ||
206
- types.isArrowFunctionExpression(firstArg)) {
231
+ if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
207
232
  var code = (0, generator_1.default)(firstArg.body)
208
233
  .code.trim()
209
234
  // Remove arbitrary block wrapping if any
@@ -218,8 +243,7 @@ var componentFunctionToJson = function (node, context) {
218
243
  else if (expression.callee.name === 'onUpdate') {
219
244
  var firstArg = expression.arguments[0];
220
245
  var secondArg = expression.arguments[1];
221
- if (types.isFunctionExpression(firstArg) ||
222
- types.isArrowFunctionExpression(firstArg)) {
246
+ if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
223
247
  var code = (0, generator_1.default)(firstArg.body)
224
248
  .code.trim()
225
249
  // Remove arbitrary block wrapping if any
@@ -228,8 +252,7 @@ var componentFunctionToJson = function (node, context) {
228
252
  .replace(/^{/, '')
229
253
  .replace(/}$/, '');
230
254
  if (!secondArg ||
231
- (types.isArrayExpression(secondArg) &&
232
- secondArg.elements.length > 0)) {
255
+ (types.isArrayExpression(secondArg) && secondArg.elements.length > 0)) {
233
256
  var depsCode = secondArg ? (0, generator_1.default)(secondArg).code : '';
234
257
  hooks.onUpdate = __spreadArray(__spreadArray([], (hooks.onUpdate || []), true), [
235
258
  {
@@ -242,8 +265,7 @@ var componentFunctionToJson = function (node, context) {
242
265
  }
243
266
  else if (expression.callee.name === 'onUnMount') {
244
267
  var firstArg = expression.arguments[0];
245
- if (types.isFunctionExpression(firstArg) ||
246
- types.isArrowFunctionExpression(firstArg)) {
268
+ if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
247
269
  var code = (0, generator_1.default)(firstArg.body)
248
270
  .code.trim()
249
271
  // Remove arbitrary block wrapping if any
@@ -256,8 +278,7 @@ var componentFunctionToJson = function (node, context) {
256
278
  }
257
279
  else if (expression.callee.name === 'onInit') {
258
280
  var firstArg = expression.arguments[0];
259
- if (types.isFunctionExpression(firstArg) ||
260
- types.isArrowFunctionExpression(firstArg)) {
281
+ if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
261
282
  var code = (0, generator_1.default)(firstArg.body)
262
283
  .code.trim()
263
284
  // Remove arbitrary block wrapping if any
@@ -283,8 +304,7 @@ var componentFunctionToJson = function (node, context) {
283
304
  // React format, like:
284
305
  // const [foo, setFoo] = useState(...)
285
306
  if (types.isArrayPattern(declaration.id)) {
286
- var varName = types.isIdentifier(declaration.id.elements[0]) &&
287
- declaration.id.elements[0].name;
307
+ var varName = types.isIdentifier(declaration.id.elements[0]) && declaration.id.elements[0].name;
288
308
  if (varName) {
289
309
  var value = init.arguments[0];
290
310
  // Function as init, like:
@@ -300,18 +320,17 @@ var componentFunctionToJson = function (node, context) {
300
320
  }
301
321
  }
302
322
  // Legacy format, like:
303
- // const state = useState({...})
323
+ // const state = useStore({...})
304
324
  else if (types.isIdentifier(init.callee)) {
305
- if (init.callee.name === 'useState') {
325
+ if (init.callee.name === hooks_1.HOOKS.STATE || init.callee.name === hooks_1.HOOKS.STORE) {
306
326
  var firstArg = init.arguments[0];
307
327
  if (types.isObjectExpression(firstArg)) {
308
- state = (0, exports.parseStateObject)(firstArg);
328
+ Object.assign(state, (0, exports.parseStateObject)(firstArg));
309
329
  }
310
330
  }
311
- else if (init.callee.name === 'useContext') {
331
+ else if (init.callee.name === hooks_1.HOOKS.CONTEXT) {
312
332
  var firstArg = init.arguments[0];
313
- if (types.isVariableDeclarator(declaration) &&
314
- types.isIdentifier(declaration.id)) {
333
+ if (types.isVariableDeclarator(declaration) && types.isIdentifier(declaration.id)) {
315
334
  if (types.isIdentifier(firstArg)) {
316
335
  var varName = declaration.id.name;
317
336
  var name_1 = firstArg.name;
@@ -320,15 +339,34 @@ var componentFunctionToJson = function (node, context) {
320
339
  path: (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, name_1),
321
340
  };
322
341
  }
342
+ else {
343
+ var varName = declaration.id.name;
344
+ var name_2 = (0, generator_1.default)(firstArg).code;
345
+ accessedContext[varName] = {
346
+ name: name_2,
347
+ path: '',
348
+ };
349
+ }
350
+ }
351
+ }
352
+ else if (init.callee.name === hooks_1.HOOKS.REF) {
353
+ if (types.isIdentifier(declaration.id)) {
354
+ var firstArg = init.arguments[0];
355
+ var varName = declaration.id.name;
356
+ refs[varName] = {
357
+ argument: (0, generator_1.default)(firstArg).code,
358
+ };
359
+ // Typescript Parameter
360
+ if (types.isTSTypeParameterInstantiation(init.typeParameters)) {
361
+ refs[varName].typeParameter = (0, generator_1.default)(init.typeParameters.params[0]).code;
362
+ }
323
363
  }
324
364
  }
325
365
  }
326
366
  }
327
367
  }
328
368
  }
329
- var theReturn = node.body.body.find(function (item) {
330
- return types.isReturnStatement(item);
331
- });
369
+ var theReturn = node.body.body.find(function (item) { return types.isReturnStatement(item); });
332
370
  var children = [];
333
371
  if (theReturn) {
334
372
  var value = theReturn.argument;
@@ -336,10 +374,19 @@ var componentFunctionToJson = function (node, context) {
336
374
  children.push(jsxElementToJson(value));
337
375
  }
338
376
  }
339
- return (0, create_mitosis_component_1.createMitosisComponent)(__assign(__assign({}, context.builder.component), { name: (_a = node.id) === null || _a === void 0 ? void 0 : _a.name, state: state, children: children, hooks: hooks, context: {
377
+ var localExports = context.builder.component.exports;
378
+ if (localExports) {
379
+ var bindingsCode_1 = (0, get_bindings_1.getBindingsCode)(children);
380
+ Object.keys(localExports).forEach(function (name) {
381
+ var found = bindingsCode_1.find(function (code) { return code.match(new RegExp("\\b".concat(name, "\\b"))); });
382
+ localExports[name].usedInLocal = Boolean(found);
383
+ });
384
+ context.builder.component.exports = localExports;
385
+ }
386
+ return (0, create_mitosis_component_1.createMitosisComponent)(__assign(__assign({}, context.builder.component), { name: (_a = node.id) === null || _a === void 0 ? void 0 : _a.name, state: state, children: children, refs: refs, hooks: hooks, context: {
340
387
  get: accessedContext,
341
388
  set: setContext,
342
- } }));
389
+ }, propsTypeRef: getPropsTypeRef(node) }));
343
390
  };
344
391
  var jsxElementToJson = function (node) {
345
392
  if (types.isJSXText(node)) {
@@ -422,9 +469,7 @@ var jsxElementToJson = function (node) {
422
469
  if (types.isJSXFragment(node)) {
423
470
  return (0, create_mitosis_node_1.createMitosisNode)({
424
471
  name: 'Fragment',
425
- children: node.children
426
- .map(function (item) { return jsxElementToJson(item); })
427
- .filter(Boolean),
472
+ children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
428
473
  });
429
474
  }
430
475
  var nodeName = (0, generator_1.default)(node.openingElement.name).code;
@@ -443,16 +488,12 @@ var jsxElementToJson = function (node) {
443
488
  else: elseValue || undefined,
444
489
  },
445
490
  bindings: __assign({}, (whenValue ? { when: { code: whenValue } } : {})),
446
- children: node.children
447
- .map(function (item) { return jsxElementToJson(item); })
448
- .filter(Boolean),
491
+ children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
449
492
  });
450
493
  }
451
494
  // <For ...> control flow component
452
495
  if (nodeName === 'For') {
453
- var child = node.children.find(function (item) {
454
- return types.isJSXExpressionContainer(item);
455
- });
496
+ var child = node.children.find(function (item) { return types.isJSXExpressionContainer(item); });
456
497
  if (types.isJSXExpressionContainer(child)) {
457
498
  var childExpression = child.expression;
458
499
  if (types.isArrowFunctionExpression(childExpression)) {
@@ -461,8 +502,8 @@ var jsxElementToJson = function (node) {
461
502
  name: 'For',
462
503
  bindings: {
463
504
  each: {
464
- code: (0, generator_1.default)(node.openingElement
465
- .attributes[0].value.expression).code,
505
+ code: (0, generator_1.default)(node.openingElement.attributes[0]
506
+ .value.expression).code,
466
507
  },
467
508
  },
468
509
  scope: {
@@ -524,9 +565,7 @@ var jsxElementToJson = function (node) {
524
565
  }
525
566
  return memo;
526
567
  }, {}),
527
- children: node.children
528
- .map(function (item) { return jsxElementToJson(item); })
529
- .filter(Boolean),
568
+ children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
530
569
  });
531
570
  };
532
571
  var getHook = function (node) {
@@ -645,8 +684,7 @@ function mapReactIdentifiers(json) {
645
684
  }
646
685
  var expressionToNode = function (str) {
647
686
  var code = "export default ".concat(str);
648
- return babel.parse(code).program
649
- .body[0].declaration;
687
+ return babel.parse(code).program.body[0].declaration;
650
688
  };
651
689
  /**
652
690
  * Convert <Context.Provider /> to hooks formats by mutating the
@@ -658,10 +696,10 @@ function extractContextComponents(json) {
658
696
  if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
659
697
  if (item.name.endsWith('.Provider')) {
660
698
  var value = (_b = (_a = item.bindings) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.code;
661
- var name_2 = item.name.split('.')[0];
662
- var refPath = (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(json.imports, name_2);
699
+ var name_3 = item.name.split('.')[0];
700
+ var refPath = (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(json.imports, name_3);
663
701
  json.context.set[refPath] = {
664
- name: name_2,
702
+ name: name_3,
665
703
  value: value
666
704
  ? (0, exports.parseStateObject)(expressionToNode(value))
667
705
  : undefined,
@@ -679,6 +717,63 @@ function extractContextComponents(json) {
679
717
  var isImportOrDefaultExport = function (node) {
680
718
  return types.isExportDefaultDeclaration(node) || types.isImportDeclaration(node);
681
719
  };
720
+ var isTypeOrInterface = function (node) {
721
+ return types.isTSTypeAliasDeclaration(node) ||
722
+ types.isTSInterfaceDeclaration(node) ||
723
+ (types.isExportNamedDeclaration(node) && types.isTSTypeAliasDeclaration(node.declaration)) ||
724
+ (types.isExportNamedDeclaration(node) && types.isTSInterfaceDeclaration(node.declaration));
725
+ };
726
+ var collectTypes = function (node, context) {
727
+ var typeStr = (0, generator_1.default)(node).code;
728
+ var _a = context.builder.component.types, types = _a === void 0 ? [] : _a;
729
+ types.push(typeStr);
730
+ context.builder.component.types = types.filter(Boolean);
731
+ };
732
+ var collectInterfaces = function (node, context) {
733
+ var interfaceStr = (0, generator_1.default)(node).code;
734
+ var _a = context.builder.component.interfaces, interfaces = _a === void 0 ? [] : _a;
735
+ interfaces.push(interfaceStr);
736
+ context.builder.component.interfaces = interfaces.filter(Boolean);
737
+ };
738
+ var beforeParse = function (path) {
739
+ path.traverse({
740
+ FunctionDeclaration: function (path) {
741
+ undoPropsDestructure(path);
742
+ },
743
+ });
744
+ };
745
+ function undoPropsDestructure(path) {
746
+ var node = path.node;
747
+ if (node.params.length && types.isObjectPattern(node.params[0])) {
748
+ var param = node.params[0];
749
+ var propsMap_1 = param.properties.reduce(function (pre, cur) {
750
+ if (types.isObjectProperty(cur) &&
751
+ types.isIdentifier(cur.key) &&
752
+ types.isIdentifier(cur.value)) {
753
+ pre[cur.value.name] = "props.".concat(cur.key.name);
754
+ return pre;
755
+ }
756
+ return pre;
757
+ }, {});
758
+ if (param.typeAnnotation) {
759
+ node.params = [
760
+ __assign(__assign({}, babel.types.identifier('props')), { typeAnnotation: param.typeAnnotation }),
761
+ ];
762
+ path.replaceWith(node);
763
+ }
764
+ path.traverse({
765
+ JSXExpressionContainer: function (path) {
766
+ var node = path.node;
767
+ if (types.isIdentifier(node.expression)) {
768
+ var name_4 = node.expression.name;
769
+ if (propsMap_1[name_4]) {
770
+ path.replaceWith(babel.types.jsxExpressionContainer(babel.types.identifier(propsMap_1[name_4])));
771
+ }
772
+ }
773
+ },
774
+ });
775
+ }
776
+ }
682
777
  /**
683
778
  * This function takes the raw string from a Mitosis component, and converts it into a JSON that can be processed by
684
779
  * each generator function.
@@ -708,17 +803,56 @@ function parseJsx(jsx, options) {
708
803
  if (context.builder) {
709
804
  return;
710
805
  }
806
+ beforeParse(path);
711
807
  context.builder = {
712
808
  component: (0, create_mitosis_component_1.createMitosisComponent)(),
713
809
  };
714
- var keepStatements = path.node.body.filter(function (statement) {
715
- return isImportOrDefaultExport(statement);
810
+ var keepStatements = path.node.body.filter(function (statement) { return isImportOrDefaultExport(statement) || isTypeOrInterface(statement); });
811
+ var exportsOrLocalVariables = path.node.body.filter(function (statement) {
812
+ return !isImportOrDefaultExport(statement) &&
813
+ !isTypeOrInterface(statement) &&
814
+ !types.isExpressionStatement(statement);
716
815
  });
816
+ context.builder.component.exports = exportsOrLocalVariables.reduce(function (pre, node) {
817
+ var _a, _b;
818
+ var name, isFunction;
819
+ if (babel.types.isExportNamedDeclaration(node)) {
820
+ if (babel.types.isVariableDeclaration(node.declaration) &&
821
+ babel.types.isIdentifier(node.declaration.declarations[0].id)) {
822
+ name = node.declaration.declarations[0].id.name;
823
+ isFunction = babel.types.isFunction(node.declaration.declarations[0].init);
824
+ }
825
+ if (babel.types.isFunctionDeclaration(node.declaration)) {
826
+ name = (_a = node.declaration.id) === null || _a === void 0 ? void 0 : _a.name;
827
+ isFunction = true;
828
+ }
829
+ }
830
+ else {
831
+ if (babel.types.isVariableDeclaration(node) &&
832
+ babel.types.isIdentifier(node.declarations[0].id)) {
833
+ name = node.declarations[0].id.name;
834
+ isFunction = babel.types.isFunction(node.declarations[0].init);
835
+ }
836
+ if (babel.types.isFunctionDeclaration(node)) {
837
+ name = (_b = node.id) === null || _b === void 0 ? void 0 : _b.name;
838
+ isFunction = true;
839
+ }
840
+ }
841
+ if (name) {
842
+ pre[name] = {
843
+ code: (0, generator_1.default)(node).code,
844
+ isFunction: isFunction,
845
+ };
846
+ }
847
+ else {
848
+ console.warn('Could not parse export or variable: ignoring node', node);
849
+ }
850
+ return pre;
851
+ }, {});
717
852
  var cutStatements = path.node.body.filter(function (statement) { return !isImportOrDefaultExport(statement); });
718
853
  subComponentFunctions = path.node.body
719
854
  .filter(function (node) {
720
- return !types.isExportDefaultDeclaration(node) &&
721
- types.isFunctionDeclaration(node);
855
+ return !types.isExportDefaultDeclaration(node) && types.isFunctionDeclaration(node);
722
856
  })
723
857
  .map(function (node) { return "export default ".concat((0, generator_1.default)(node).code); });
724
858
  cutStatements = collectMetadata(cutStatements, context.builder.component, useOptions);
@@ -731,15 +865,16 @@ function parseJsx(jsx, options) {
731
865
  FunctionDeclaration: function (path, context) {
732
866
  var node = path.node;
733
867
  if (types.isIdentifier(node.id)) {
734
- var name_3 = node.id.name;
735
- if (name_3[0].toUpperCase() === name_3[0]) {
868
+ var name_5 = node.id.name;
869
+ if (name_5[0].toUpperCase() === name_5[0]) {
736
870
  path.replaceWith(jsonToAst(componentFunctionToJson(node, context)));
737
871
  }
738
872
  }
739
873
  },
740
874
  ImportDeclaration: function (path, context) {
741
875
  // @builder.io/mitosis or React imports compile away
742
- if (['react', '@builder.io/mitosis', '@emotion/react'].includes(path.node.source.value)) {
876
+ var customPackages = (options === null || options === void 0 ? void 0 : options.compileAwayPackages) || [];
877
+ if (__spreadArray(['react', '@builder.io/mitosis', '@emotion/react'], customPackages, true).includes(path.node.source.value)) {
743
878
  path.remove();
744
879
  return;
745
880
  }
@@ -750,7 +885,8 @@ function parseJsx(jsx, options) {
750
885
  for (var _i = 0, _a = path.node.specifiers; _i < _a.length; _i++) {
751
886
  var specifier = _a[_i];
752
887
  if (types.isImportSpecifier(specifier)) {
753
- importObject.imports[specifier.imported.name] = specifier.local.name;
888
+ importObject.imports[specifier.imported.name] =
889
+ specifier.local.name;
754
890
  }
755
891
  else if (types.isImportDefaultSpecifier(specifier)) {
756
892
  importObject.imports[specifier.local.name] = 'default';
@@ -769,6 +905,22 @@ function parseJsx(jsx, options) {
769
905
  var node = path.node;
770
906
  path.replaceWith(jsonToAst(jsxElementToJson(node)));
771
907
  },
908
+ ExportNamedDeclaration: function (path, context) {
909
+ var node = path.node;
910
+ var newTypeStr = (0, generator_1.default)(node).code;
911
+ if (babel.types.isTSInterfaceDeclaration(node.declaration)) {
912
+ collectInterfaces(path.node, context);
913
+ }
914
+ if (babel.types.isTSTypeAliasDeclaration(node.declaration)) {
915
+ collectTypes(path.node, context);
916
+ }
917
+ },
918
+ TSTypeAliasDeclaration: function (path, context) {
919
+ collectTypes(path.node, context);
920
+ },
921
+ TSInterfaceDeclaration: function (path, context) {
922
+ collectInterfaces(path.node, context);
923
+ },
772
924
  },
773
925
  }); },
774
926
  ],
@@ -785,9 +937,7 @@ function parseJsx(jsx, options) {
785
937
  var parsed = (0, json_1.tryParseJson)(toParse);
786
938
  mapReactIdentifiers(parsed);
787
939
  extractContextComponents(parsed);
788
- parsed.subComponents = subComponentFunctions.map(function (item) {
789
- return parseJsx(item, useOptions);
790
- });
940
+ parsed.subComponents = subComponentFunctions.map(function (item) { return parseJsx(item, useOptions); });
791
941
  return parsed;
792
942
  }
793
943
  exports.parseJsx = parseJsx;