@builder.io/mitosis 0.0.56-97 → 0.0.56

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 (248) 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/default-props/default-props.raw.d.ts +7 -0
  6. package/dist/src/__tests__/data/default-props/default-props.raw.jsx +23 -0
  7. package/dist/src/__tests__/data/jsx-json.spec.d.ts +2 -0
  8. package/dist/src/__tests__/data/jsx-json.spec.js +10226 -0
  9. package/dist/src/__tests__/data/types/component-with-default-values-types.raw.d.ts +5 -0
  10. package/dist/src/__tests__/data/types/component-with-default-values-types.raw.jsx +9 -0
  11. package/dist/src/__tests__/shared.d.ts +7 -2
  12. package/dist/src/__tests__/shared.js +69 -9
  13. package/dist/src/constants/hooks.d.ts +1 -0
  14. package/dist/src/constants/hooks.js +1 -0
  15. package/dist/src/constants/method-literal-prefix.d.ts +0 -1
  16. package/dist/src/constants/method-literal-prefix.js +0 -3
  17. package/dist/src/generators/angular.d.ts +2 -2
  18. package/dist/src/generators/angular.js +12 -5
  19. package/dist/src/generators/builder.d.ts +4 -11
  20. package/dist/src/generators/builder.js +3 -2
  21. package/dist/src/generators/context/svelte.d.ts +3 -0
  22. package/dist/src/generators/context/svelte.js +3 -0
  23. package/dist/src/generators/helpers/functions.d.ts +2 -0
  24. package/dist/src/generators/helpers/functions.js +28 -0
  25. package/dist/src/generators/html.d.ts +3 -3
  26. package/dist/src/generators/html.js +9 -7
  27. package/dist/src/generators/liquid.d.ts +2 -2
  28. package/dist/src/generators/liquid.js +4 -4
  29. package/dist/src/generators/lit/generate.d.ts +2 -2
  30. package/dist/src/generators/lit/generate.js +14 -6
  31. package/dist/src/generators/marko/generate.d.ts +2 -2
  32. package/dist/src/generators/marko/generate.js +10 -8
  33. package/dist/src/generators/mitosis.d.ts +3 -4
  34. package/dist/src/generators/mitosis.js +3 -2
  35. package/dist/src/generators/qwik/component-generator.d.ts +2 -2
  36. package/dist/src/generators/qwik/component-generator.js +49 -55
  37. package/dist/src/generators/qwik/component.d.ts +0 -1
  38. package/dist/src/generators/qwik/component.js +22 -19
  39. package/dist/src/generators/qwik/directives.d.ts +1 -0
  40. package/dist/src/generators/qwik/directives.js +11 -14
  41. package/dist/src/generators/qwik/jsx.d.ts +1 -1
  42. package/dist/src/generators/qwik/jsx.js +9 -5
  43. package/dist/src/generators/qwik/src-generator.js +9 -3
  44. package/dist/src/generators/qwik/stable-serialize.d.ts +6 -0
  45. package/dist/src/generators/qwik/stable-serialize.js +51 -0
  46. package/dist/src/generators/react/generator.d.ts +6 -0
  47. package/dist/src/generators/{react.js → react/generator.js} +63 -156
  48. package/dist/src/generators/react/helpers.d.ts +2 -0
  49. package/dist/src/generators/react/helpers.js +14 -0
  50. package/dist/src/generators/react/index.d.ts +2 -0
  51. package/dist/src/generators/react/index.js +18 -0
  52. package/dist/src/generators/react/state.d.ts +9 -0
  53. package/dist/src/generators/react/state.js +107 -0
  54. package/dist/src/generators/react/types.d.ts +10 -0
  55. package/dist/src/generators/react/types.js +2 -0
  56. package/dist/src/generators/react-native.d.ts +2 -2
  57. package/dist/src/generators/solid/index.d.ts +3 -0
  58. package/dist/src/generators/{solid.js → solid/index.js} +80 -40
  59. package/dist/src/generators/solid/state.d.ts +19 -0
  60. package/dist/src/generators/solid/state.js +144 -0
  61. package/dist/src/generators/solid/types.d.ts +6 -0
  62. package/dist/src/generators/solid/types.js +2 -0
  63. package/dist/src/generators/stencil/generate.d.ts +2 -2
  64. package/dist/src/generators/stencil/generate.js +5 -2
  65. package/dist/src/generators/svelte.d.ts +6 -7
  66. package/dist/src/generators/svelte.js +47 -40
  67. package/dist/src/generators/swift-ui.d.ts +3 -5
  68. package/dist/src/generators/swift-ui.js +3 -2
  69. package/dist/src/generators/template.d.ts +2 -2
  70. package/dist/src/generators/template.js +3 -2
  71. package/dist/src/generators/vue.d.ts +5 -3
  72. package/dist/src/generators/vue.js +262 -107
  73. package/dist/src/helpers/babel-transform.d.ts +3 -1
  74. package/dist/src/helpers/babel-transform.js +52 -56
  75. package/dist/src/helpers/get-bindings.js +3 -5
  76. package/dist/src/helpers/get-custom-imports.js +7 -1
  77. package/dist/src/helpers/get-state-object-string.js +24 -21
  78. package/dist/src/helpers/getters-to-functions.js +1 -11
  79. package/dist/src/helpers/map-refs.js +25 -25
  80. package/dist/src/helpers/nodes/for.d.ts +4 -0
  81. package/dist/src/helpers/nodes/for.js +13 -0
  82. package/dist/src/helpers/nullable.d.ts +2 -0
  83. package/dist/src/helpers/nullable.js +7 -0
  84. package/dist/src/helpers/parse-reactive-script.js +66 -78
  85. package/dist/src/helpers/patterns.d.ts +2 -0
  86. package/dist/src/helpers/patterns.js +5 -1
  87. package/dist/src/helpers/render-imports.js +3 -3
  88. package/dist/src/helpers/replace-identifiers.d.ts +5 -0
  89. package/dist/src/helpers/{replace-idenifiers.js → replace-identifiers.js} +2 -1
  90. package/dist/src/helpers/slots.d.ts +2 -0
  91. package/dist/src/helpers/slots.js +15 -1
  92. package/dist/src/helpers/state.d.ts +0 -2
  93. package/dist/src/helpers/state.js +1 -10
  94. package/dist/src/helpers/strip-state-and-props-refs.d.ts +1 -1
  95. package/dist/src/helpers/strip-state-and-props-refs.js +43 -31
  96. package/dist/src/index.d.ts +3 -0
  97. package/dist/src/index.js +3 -1
  98. package/dist/src/parsers/angular.js +2 -2
  99. package/dist/src/parsers/builder.d.ts +4 -2
  100. package/dist/src/parsers/builder.js +61 -43
  101. package/dist/src/parsers/constants/outdated-prefixes.d.ts +10 -0
  102. package/dist/src/parsers/constants/outdated-prefixes.js +13 -0
  103. package/dist/src/parsers/context.js +2 -2
  104. package/dist/src/parsers/helpers/state.d.ts +3 -0
  105. package/dist/src/parsers/helpers/state.js +30 -0
  106. package/dist/src/parsers/jsx/component-types.d.ts +1 -1
  107. package/dist/src/parsers/jsx/component-types.js +15 -2
  108. package/dist/src/parsers/jsx/context.js +1 -1
  109. package/dist/src/parsers/jsx/element-parser.d.ts +6 -0
  110. package/dist/src/parsers/jsx/element-parser.js +243 -0
  111. package/dist/src/parsers/jsx/exports.d.ts +3 -0
  112. package/dist/src/parsers/jsx/exports.js +78 -0
  113. package/dist/src/parsers/jsx/function-parser.d.ts +7 -0
  114. package/dist/src/parsers/jsx/function-parser.js +291 -0
  115. package/dist/src/parsers/jsx/helpers.d.ts +2 -0
  116. package/dist/src/parsers/jsx/helpers.js +30 -1
  117. package/dist/src/parsers/jsx/imports.d.ts +7 -0
  118. package/dist/src/parsers/jsx/imports.js +65 -0
  119. package/dist/src/parsers/jsx/index.d.ts +1 -1
  120. package/dist/src/parsers/jsx/index.js +1 -2
  121. package/dist/src/parsers/jsx/jsx.js +29 -501
  122. package/dist/src/parsers/jsx/state.d.ts +2 -3
  123. package/dist/src/parsers/jsx/state.js +15 -22
  124. package/dist/src/plugins/compile-away-builder-components.js +6 -0
  125. package/dist/src/symbols/symbol-processor.js +3 -0
  126. package/dist/src/targets.d.ts +21 -28
  127. package/dist/src/targets.js +2 -2
  128. package/dist/src/types/config.d.ts +11 -1
  129. package/dist/src/types/mitosis-component.d.ts +13 -6
  130. package/dist/src/types/mitosis-component.js +11 -0
  131. package/dist/src/types/mitosis-context.d.ts +2 -2
  132. package/dist/src/types/mitosis-node.d.ts +14 -5
  133. package/dist/src/types/mitosis-node.js +3 -0
  134. package/dist/src/types/transpiler.d.ts +6 -1
  135. package/dist/tsconfig.build.tsbuildinfo +1 -1
  136. package/package.json +13 -9
  137. package/dist/src/__tests__/angular.test.d.ts +0 -1
  138. package/dist/src/__tests__/angular.test.js +0 -10
  139. package/dist/src/__tests__/builder.test.d.ts +0 -1
  140. package/dist/src/__tests__/builder.test.js +0 -235
  141. package/dist/src/__tests__/context.test.d.ts +0 -1
  142. package/dist/src/__tests__/context.test.js +0 -35
  143. package/dist/src/__tests__/hash-code.test.d.ts +0 -1
  144. package/dist/src/__tests__/hash-code.test.js +0 -11
  145. package/dist/src/__tests__/html.test.d.ts +0 -1
  146. package/dist/src/__tests__/html.test.js +0 -7
  147. package/dist/src/__tests__/liquid.test.d.ts +0 -1
  148. package/dist/src/__tests__/liquid.test.js +0 -7
  149. package/dist/src/__tests__/lit.test.d.ts +0 -1
  150. package/dist/src/__tests__/lit.test.js +0 -7
  151. package/dist/src/__tests__/marko.test.d.ts +0 -1
  152. package/dist/src/__tests__/marko.test.js +0 -14
  153. package/dist/src/__tests__/parse-jsx.test.d.ts +0 -1
  154. package/dist/src/__tests__/parse-jsx.test.js +0 -37
  155. package/dist/src/__tests__/qwik/convert-method-to-function.test.d.ts +0 -1
  156. package/dist/src/__tests__/qwik/convert-method-to-function.test.js +0 -37
  157. package/dist/src/__tests__/qwik/src-generator.test.d.ts +0 -1
  158. package/dist/src/__tests__/qwik/src-generator.test.js +0 -65
  159. package/dist/src/__tests__/qwik.directive.test.d.ts +0 -1
  160. package/dist/src/__tests__/qwik.directive.test.js +0 -108
  161. package/dist/src/__tests__/qwik.test.d.ts +0 -1
  162. package/dist/src/__tests__/qwik.test.js +0 -465
  163. package/dist/src/__tests__/react-native.test.d.ts +0 -1
  164. package/dist/src/__tests__/react-native.test.js +0 -7
  165. package/dist/src/__tests__/react.test.d.ts +0 -1
  166. package/dist/src/__tests__/react.test.js +0 -20
  167. package/dist/src/__tests__/solid.test.d.ts +0 -1
  168. package/dist/src/__tests__/solid.test.js +0 -10
  169. package/dist/src/__tests__/stencil.test.d.ts +0 -1
  170. package/dist/src/__tests__/stencil.test.js +0 -7
  171. package/dist/src/__tests__/styles.test.d.ts +0 -1
  172. package/dist/src/__tests__/styles.test.js +0 -23
  173. package/dist/src/__tests__/svelte.test.d.ts +0 -1
  174. package/dist/src/__tests__/svelte.test.js +0 -7
  175. package/dist/src/__tests__/vue.test.d.ts +0 -1
  176. package/dist/src/__tests__/vue.test.js +0 -7
  177. package/dist/src/__tests__/webcomponent.test.d.ts +0 -1
  178. package/dist/src/__tests__/webcomponent.test.js +0 -15
  179. package/dist/src/constants/function-literal-prefix.d.ts +0 -1
  180. package/dist/src/constants/function-literal-prefix.js +0 -4
  181. package/dist/src/generators/react.d.ts +0 -14
  182. package/dist/src/generators/solid.d.ts +0 -5
  183. package/dist/src/helpers/babel-transform.test.d.ts +0 -1
  184. package/dist/src/helpers/babel-transform.test.js +0 -7
  185. package/dist/src/helpers/generic-format.test.d.ts +0 -1
  186. package/dist/src/helpers/generic-format.test.js +0 -8
  187. package/dist/src/helpers/remove-surrounding-block.test.d.ts +0 -1
  188. package/dist/src/helpers/remove-surrounding-block.test.js +0 -9
  189. package/dist/src/helpers/render-imports.test.d.ts +0 -1
  190. package/dist/src/helpers/render-imports.test.js +0 -33
  191. package/dist/src/helpers/replace-idenifiers.d.ts +0 -1
  192. package/dist/src/helpers/styles/collect-css.test.d.ts +0 -1
  193. package/dist/src/helpers/styles/collect-css.test.js +0 -18
  194. package/dist/test/qwik/Accordion/high.jsx +0 -0
  195. package/dist/test/qwik/Accordion/low.jsx +0 -240
  196. package/dist/test/qwik/Accordion/med.jsx +0 -4
  197. package/dist/test/qwik/For/high.jsx +0 -0
  198. package/dist/test/qwik/For/low.jsx +0 -52
  199. package/dist/test/qwik/For/med.jsx +0 -4
  200. package/dist/test/qwik/Image/high.js +0 -9
  201. package/dist/test/qwik/Image/low.js +0 -0
  202. package/dist/test/qwik/Image/med.js +0 -155
  203. package/dist/test/qwik/Image.slow/high.js +0 -9
  204. package/dist/test/qwik/Image.slow/low.js +0 -0
  205. package/dist/test/qwik/Image.slow/med.js +0 -155
  206. package/dist/test/qwik/bindings/high.cjs +0 -0
  207. package/dist/test/qwik/bindings/low.cjs +0 -45
  208. package/dist/test/qwik/bindings/med.cjs +0 -3
  209. package/dist/test/qwik/button/high.js +0 -3
  210. package/dist/test/qwik/button/low.js +0 -25
  211. package/dist/test/qwik/button/med.js +0 -31
  212. package/dist/test/qwik/component/bindings/high.jsx +0 -0
  213. package/dist/test/qwik/component/bindings/low.jsx +0 -104
  214. package/dist/test/qwik/component/bindings/med.jsx +0 -7
  215. package/dist/test/qwik/component/component/inputs/high.cjsx +0 -9
  216. package/dist/test/qwik/component/component/inputs/low.cjsx +0 -0
  217. package/dist/test/qwik/component/component/inputs/med.cjsx +0 -68
  218. package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
  219. package/dist/test/qwik/for-loop.bindings/low.cjs +0 -56
  220. package/dist/test/qwik/for-loop.bindings/med.cjs +0 -5
  221. package/dist/test/qwik/hello_world/stylesheet/high.jsx +0 -0
  222. package/dist/test/qwik/hello_world/stylesheet/low.jsx +0 -26
  223. package/dist/test/qwik/hello_world/stylesheet/med.jsx +0 -4
  224. package/dist/test/qwik/mount/high.cjs +0 -0
  225. package/dist/test/qwik/mount/low.cjs +0 -47
  226. package/dist/test/qwik/mount/med.cjs +0 -3
  227. package/dist/test/qwik/page-with-symbol/high.js +0 -0
  228. package/dist/test/qwik/page-with-symbol/low.js +0 -33
  229. package/dist/test/qwik/page-with-symbol/med.js +0 -4
  230. package/dist/test/qwik/show-hide/high.jsx +0 -9
  231. package/dist/test/qwik/show-hide/low.jsx +0 -0
  232. package/dist/test/qwik/show-hide/med.jsx +0 -181
  233. package/dist/test/qwik/svg/high.js +0 -0
  234. package/dist/test/qwik/svg/low.js +0 -30
  235. package/dist/test/qwik/svg/med.js +0 -4
  236. package/dist/test/qwik/todo/Todo.cjs/high.cjs +0 -19
  237. package/dist/test/qwik/todo/Todo.cjs/low.cjs +0 -0
  238. package/dist/test/qwik/todo/Todo.cjs/med.cjs +0 -51
  239. package/dist/test/qwik/todo/Todo.js/high.js +0 -19
  240. package/dist/test/qwik/todo/Todo.js/low.js +0 -0
  241. package/dist/test/qwik/todo/Todo.js/med.js +0 -47
  242. package/dist/test/qwik/todo/Todo.tsx/high.tsx +0 -19
  243. package/dist/test/qwik/todo/Todo.tsx/low.tsx +0 -0
  244. package/dist/test/qwik/todo/Todo.tsx/med.tsx +0 -43
  245. package/dist/test/qwik/todos/Todo.tsx/high.tsx +0 -7
  246. package/dist/test/qwik/todos/Todo.tsx/low.tsx +0 -32
  247. package/dist/test/qwik/todos/Todo.tsx/med.tsx +0 -4
  248. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -33,15 +33,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
33
  __setModuleDefault(result, mod);
34
34
  return result;
35
35
  };
36
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
37
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
38
- if (ar || !(i in from)) {
39
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
40
- ar[i] = from[i];
41
- }
42
- }
43
- return to.concat(ar || Array.prototype.slice.call(from));
44
- };
45
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
46
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
47
38
  };
@@ -49,14 +40,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
49
40
  exports.parseJsx = void 0;
50
41
  var babel = __importStar(require("@babel/core"));
51
42
  var generator_1 = __importDefault(require("@babel/generator"));
52
- var trace_reference_to_module_path_1 = require("../../helpers/trace-reference-to-module-path");
53
- var function_literal_prefix_1 = require("../../constants/function-literal-prefix");
54
43
  var create_mitosis_component_1 = require("../../helpers/create-mitosis-component");
55
- var create_mitosis_node_1 = require("../../helpers/create-mitosis-node");
56
- var get_bindings_1 = require("../../helpers/get-bindings");
57
44
  var replace_new_lines_in_strings_1 = require("../../helpers/replace-new-lines-in-strings");
58
45
  var json_1 = require("../../helpers/json");
59
- var hooks_1 = require("../../constants/hooks");
60
46
  var ast_1 = require("./ast");
61
47
  var state_1 = require("./state");
62
48
  var metadata_1 = require("./metadata");
@@ -64,408 +50,14 @@ var context_1 = require("./context");
64
50
  var helpers_1 = require("./helpers");
65
51
  var component_types_1 = require("./component-types");
66
52
  var props_1 = require("./props");
53
+ var exports_1 = require("./exports");
54
+ var function_1 = require("fp-ts/lib/function");
55
+ var imports_1 = require("./imports");
56
+ var element_parser_1 = require("./element-parser");
57
+ var function_parser_1 = require("./function-parser");
67
58
  var jsxPlugin = require('@babel/plugin-syntax-jsx');
68
59
  var tsPreset = require('@babel/preset-typescript');
69
60
  var types = babel.types;
70
- var componentFunctionToJson = function (node, context) {
71
- var _a;
72
- var hooks = {};
73
- var state = {};
74
- var accessedContext = {};
75
- var setContext = {};
76
- var refs = {};
77
- for (var _i = 0, _b = node.body.body; _i < _b.length; _i++) {
78
- var item = _b[_i];
79
- if (types.isExpressionStatement(item)) {
80
- var expression = item.expression;
81
- if (types.isCallExpression(expression)) {
82
- if (types.isIdentifier(expression.callee)) {
83
- if (expression.callee.name === 'setContext' ||
84
- expression.callee.name === 'provideContext') {
85
- var keyNode = expression.arguments[0];
86
- if (types.isIdentifier(keyNode)) {
87
- var key = keyNode.name;
88
- var keyPath = (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, key);
89
- var valueNode = expression.arguments[1];
90
- if (valueNode) {
91
- if (types.isObjectExpression(valueNode)) {
92
- var value = (0, state_1.parseStateObject)(valueNode);
93
- setContext[keyPath] = {
94
- name: keyNode.name,
95
- value: value,
96
- };
97
- }
98
- else {
99
- var ref = (0, generator_1.default)(valueNode).code;
100
- setContext[keyPath] = {
101
- name: keyNode.name,
102
- ref: ref,
103
- };
104
- }
105
- }
106
- }
107
- }
108
- else if (expression.callee.name === 'onMount' ||
109
- expression.callee.name === 'useEffect') {
110
- var firstArg = expression.arguments[0];
111
- if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
112
- var code = (0, generator_1.default)(firstArg.body)
113
- .code.trim()
114
- // Remove arbitrary block wrapping if any
115
- // AKA
116
- // { console.log('hi') } -> console.log('hi')
117
- .replace(/^{/, '')
118
- .replace(/}$/, '');
119
- // TODO: add arguments
120
- hooks.onMount = { code: code };
121
- }
122
- }
123
- else if (expression.callee.name === 'onUpdate') {
124
- var firstArg = expression.arguments[0];
125
- var secondArg = expression.arguments[1];
126
- if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
127
- var code = (0, generator_1.default)(firstArg.body)
128
- .code.trim()
129
- // Remove arbitrary block wrapping if any
130
- // AKA
131
- // { console.log('hi') } -> console.log('hi')
132
- .replace(/^{/, '')
133
- .replace(/}$/, '');
134
- if (!secondArg ||
135
- (types.isArrayExpression(secondArg) && secondArg.elements.length > 0)) {
136
- var depsCode = secondArg ? (0, generator_1.default)(secondArg).code : '';
137
- hooks.onUpdate = __spreadArray(__spreadArray([], (hooks.onUpdate || []), true), [
138
- {
139
- code: code,
140
- deps: depsCode,
141
- },
142
- ], false);
143
- }
144
- }
145
- }
146
- else if (expression.callee.name === 'onUnMount') {
147
- var firstArg = expression.arguments[0];
148
- if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
149
- var code = (0, generator_1.default)(firstArg.body)
150
- .code.trim()
151
- // Remove arbitrary block wrapping if any
152
- // AKA
153
- // { console.log('hi') } -> console.log('hi')
154
- .replace(/^{/, '')
155
- .replace(/}$/, '');
156
- hooks.onUnMount = { code: code };
157
- }
158
- }
159
- else if (expression.callee.name === 'onInit') {
160
- var firstArg = expression.arguments[0];
161
- if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
162
- var code = (0, generator_1.default)(firstArg.body)
163
- .code.trim()
164
- // Remove arbitrary block wrapping if any
165
- // AKA
166
- // { console.log('hi') } -> console.log('hi')
167
- .replace(/^{/, '')
168
- .replace(/}$/, '');
169
- hooks.onInit = { code: code };
170
- }
171
- }
172
- }
173
- }
174
- }
175
- if (types.isFunctionDeclaration(item)) {
176
- if (types.isIdentifier(item.id)) {
177
- state[item.id.name] = {
178
- code: "".concat(function_literal_prefix_1.functionLiteralPrefix).concat((0, generator_1.default)(item).code),
179
- type: 'function',
180
- };
181
- }
182
- }
183
- if (types.isVariableDeclaration(item)) {
184
- var declaration = item.declarations[0];
185
- var init = declaration.init;
186
- if (types.isCallExpression(init)) {
187
- // React format, like:
188
- // const [foo, setFoo] = useState(...)
189
- if (types.isArrayPattern(declaration.id)) {
190
- var varName = types.isIdentifier(declaration.id.elements[0]) && declaration.id.elements[0].name;
191
- if (varName) {
192
- var value = init.arguments[0];
193
- // Function as init, like:
194
- // useState(() => true)
195
- if (types.isArrowFunctionExpression(value)) {
196
- state[varName] = {
197
- code: (0, helpers_1.parseCodeJson)(value.body),
198
- type: 'function',
199
- };
200
- }
201
- else {
202
- // Value as init, like:
203
- // useState(true)
204
- state[varName] = {
205
- code: (0, helpers_1.parseCodeJson)(value),
206
- type: 'property',
207
- };
208
- }
209
- }
210
- }
211
- // Legacy format, like:
212
- // const state = useStore({...})
213
- else if (types.isIdentifier(init.callee)) {
214
- if (init.callee.name === hooks_1.HOOKS.STATE || init.callee.name === hooks_1.HOOKS.STORE) {
215
- var firstArg = init.arguments[0];
216
- if (types.isObjectExpression(firstArg)) {
217
- var useStoreState = (0, state_1.parseStateObjectToMitosisState)(firstArg);
218
- Object.assign(state, useStoreState);
219
- }
220
- }
221
- else if (init.callee.name === hooks_1.HOOKS.CONTEXT) {
222
- var firstArg = init.arguments[0];
223
- if (types.isVariableDeclarator(declaration) && types.isIdentifier(declaration.id)) {
224
- if (types.isIdentifier(firstArg)) {
225
- var varName = declaration.id.name;
226
- var name_1 = firstArg.name;
227
- accessedContext[varName] = {
228
- name: name_1,
229
- path: (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, name_1),
230
- };
231
- }
232
- else {
233
- var varName = declaration.id.name;
234
- var name_2 = (0, generator_1.default)(firstArg).code;
235
- accessedContext[varName] = {
236
- name: name_2,
237
- path: '',
238
- };
239
- }
240
- }
241
- }
242
- else if (init.callee.name === hooks_1.HOOKS.REF) {
243
- if (types.isIdentifier(declaration.id)) {
244
- var firstArg = init.arguments[0];
245
- var varName = declaration.id.name;
246
- refs[varName] = {
247
- argument: (0, generator_1.default)(firstArg).code,
248
- };
249
- // Typescript Parameter
250
- if (types.isTSTypeParameterInstantiation(init.typeParameters)) {
251
- refs[varName].typeParameter = (0, generator_1.default)(init.typeParameters.params[0]).code;
252
- }
253
- }
254
- }
255
- }
256
- }
257
- }
258
- }
259
- var theReturn = node.body.body.find(function (item) { return types.isReturnStatement(item); });
260
- var children = [];
261
- if (theReturn) {
262
- var value = theReturn.argument;
263
- if (types.isJSXElement(value) || types.isJSXFragment(value)) {
264
- children.push(jsxElementToJson(value));
265
- }
266
- }
267
- var localExports = context.builder.component.exports;
268
- if (localExports) {
269
- var bindingsCode_1 = (0, get_bindings_1.getBindingsCode)(children);
270
- Object.keys(localExports).forEach(function (name) {
271
- var found = bindingsCode_1.find(function (code) { return code.match(new RegExp("\\b".concat(name, "\\b"))); });
272
- localExports[name].usedInLocal = Boolean(found);
273
- });
274
- context.builder.component.exports = localExports;
275
- }
276
- var propsTypeRef = (0, component_types_1.getPropsTypeRef)(node, context);
277
- 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: {
278
- get: accessedContext,
279
- set: setContext,
280
- }, propsTypeRef: propsTypeRef }));
281
- };
282
- var jsxElementToJson = function (node) {
283
- if (types.isJSXText(node)) {
284
- return (0, create_mitosis_node_1.createMitosisNode)({
285
- properties: {
286
- _text: node.value,
287
- },
288
- });
289
- }
290
- if (types.isJSXExpressionContainer(node)) {
291
- if (types.isJSXEmptyExpression(node.expression)) {
292
- return null;
293
- }
294
- // foo.map -> <For each={foo}>...</For>
295
- if (types.isCallExpression(node.expression) ||
296
- types.isOptionalCallExpression(node.expression)) {
297
- var callback = node.expression.arguments[0];
298
- if (types.isArrowFunctionExpression(callback)) {
299
- if (types.isIdentifier(callback.params[0])) {
300
- var forArguments = callback.params
301
- .map(function (param) { return param === null || param === void 0 ? void 0 : param.name; })
302
- .filter(Boolean);
303
- return (0, create_mitosis_node_1.createMitosisNode)({
304
- name: 'For',
305
- bindings: {
306
- each: {
307
- code: (0, generator_1.default)(node.expression.callee)
308
- .code // Remove .map or potentially ?.map
309
- .replace(/\??\.map$/, ''),
310
- },
311
- },
312
- scope: {
313
- For: forArguments,
314
- },
315
- properties: {
316
- _forName: forArguments[0],
317
- _indexName: forArguments[1],
318
- _collectionName: forArguments[2],
319
- },
320
- children: [jsxElementToJson(callback.body)],
321
- });
322
- }
323
- }
324
- }
325
- // {foo && <div />} -> <Show when={foo}>...</Show>
326
- if (types.isLogicalExpression(node.expression)) {
327
- if (node.expression.operator === '&&') {
328
- return (0, create_mitosis_node_1.createMitosisNode)({
329
- name: 'Show',
330
- bindings: {
331
- when: { code: (0, generator_1.default)(node.expression.left).code },
332
- },
333
- children: [jsxElementToJson(node.expression.right)],
334
- });
335
- }
336
- else {
337
- // TODO: good warning system for unsupported operators
338
- }
339
- }
340
- // {foo ? <div /> : <span />} -> <Show when={foo} else={<span />}>...</Show>
341
- if (types.isConditionalExpression(node.expression)) {
342
- return (0, create_mitosis_node_1.createMitosisNode)({
343
- name: 'Show',
344
- meta: {
345
- else: jsxElementToJson(node.expression.alternate),
346
- },
347
- bindings: {
348
- when: { code: (0, generator_1.default)(node.expression.test).code },
349
- },
350
- children: [jsxElementToJson(node.expression.consequent)],
351
- });
352
- }
353
- // TODO: support {foo ? bar : baz}
354
- return (0, create_mitosis_node_1.createMitosisNode)({
355
- bindings: {
356
- _text: { code: (0, generator_1.default)(node.expression).code },
357
- },
358
- });
359
- }
360
- if (types.isJSXFragment(node)) {
361
- return (0, create_mitosis_node_1.createMitosisNode)({
362
- name: 'Fragment',
363
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
364
- });
365
- }
366
- var nodeName = (0, generator_1.default)(node.openingElement.name).code;
367
- if (nodeName === 'Show') {
368
- var whenAttr = node.openingElement.attributes.find(function (item) { return types.isJSXAttribute(item) && item.name.name === 'when'; });
369
- var elseAttr = node.openingElement.attributes.find(function (item) { return types.isJSXAttribute(item) && item.name.name === 'else'; });
370
- var whenValue = whenAttr && types.isJSXExpressionContainer(whenAttr.value)
371
- ? (0, generator_1.default)(whenAttr.value.expression).code
372
- : undefined;
373
- var elseValue = elseAttr &&
374
- types.isJSXExpressionContainer(elseAttr.value) &&
375
- jsxElementToJson(elseAttr.value.expression);
376
- return (0, create_mitosis_node_1.createMitosisNode)({
377
- name: 'Show',
378
- meta: {
379
- else: elseValue || undefined,
380
- },
381
- bindings: __assign({}, (whenValue ? { when: { code: whenValue } } : {})),
382
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
383
- });
384
- }
385
- // <For ...> control flow component
386
- if (nodeName === 'For') {
387
- var child = node.children.find(function (item) { return types.isJSXExpressionContainer(item); });
388
- if (types.isJSXExpressionContainer(child)) {
389
- var childExpression = child.expression;
390
- if (types.isArrowFunctionExpression(childExpression)) {
391
- var forArguments = childExpression === null || childExpression === void 0 ? void 0 : childExpression.params.map(function (param) { return param === null || param === void 0 ? void 0 : param.name; }).filter(Boolean);
392
- return (0, create_mitosis_node_1.createMitosisNode)({
393
- name: 'For',
394
- bindings: {
395
- each: {
396
- code: (0, generator_1.default)(node.openingElement.attributes[0]
397
- .value.expression).code,
398
- },
399
- },
400
- scope: {
401
- For: forArguments,
402
- },
403
- properties: {
404
- _forName: forArguments[0],
405
- _indexName: forArguments[1],
406
- _collectionName: forArguments[2],
407
- },
408
- children: [jsxElementToJson(childExpression.body)],
409
- });
410
- }
411
- }
412
- }
413
- return (0, create_mitosis_node_1.createMitosisNode)({
414
- name: nodeName,
415
- properties: node.openingElement.attributes.reduce(function (memo, item) {
416
- if (types.isJSXAttribute(item)) {
417
- var key = item.name.name;
418
- var value = item.value;
419
- if (types.isStringLiteral(value)) {
420
- memo[key] = value;
421
- return memo;
422
- }
423
- if (types.isJSXExpressionContainer(value) && types.isStringLiteral(value.expression)) {
424
- memo[key] = value.expression.value;
425
- return memo;
426
- }
427
- }
428
- return memo;
429
- }, {}),
430
- bindings: node.openingElement.attributes.reduce(function (memo, item) {
431
- if (types.isJSXAttribute(item)) {
432
- var key = item.name.name;
433
- var value = item.value;
434
- if (types.isJSXExpressionContainer(value) && !types.isStringLiteral(value.expression)) {
435
- var expression = value.expression;
436
- if (types.isArrowFunctionExpression(expression)) {
437
- if (key.startsWith('on')) {
438
- memo[key] = {
439
- code: (0, generator_1.default)(expression.body).code,
440
- arguments: expression.params.map(function (node) { return node === null || node === void 0 ? void 0 : node.name; }),
441
- };
442
- }
443
- else {
444
- memo[key] = { code: (0, generator_1.default)(expression.body).code };
445
- }
446
- }
447
- else {
448
- memo[key] = { code: (0, generator_1.default)(expression).code };
449
- }
450
- return memo;
451
- }
452
- }
453
- else if (types.isJSXSpreadAttribute(item)) {
454
- // TODO: potentially like Vue store bindings and properties as array of key value pairs
455
- // too so can do this accurately when order matters. Also tempting to not support spread,
456
- // as some frameworks do not support it (e.g. Angular) tho Angular may be the only one
457
- memo._spread = {
458
- code: types.stringLiteral((0, generator_1.default)(item.argument).code),
459
- };
460
- }
461
- return memo;
462
- }, {}),
463
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
464
- });
465
- };
466
- var isImportOrDefaultExport = function (node) {
467
- return types.isExportDefaultDeclaration(node) || types.isImportDeclaration(node);
468
- };
469
61
  var beforeParse = function (path) {
470
62
  path.traverse({
471
63
  FunctionDeclaration: function (path) {
@@ -488,7 +80,19 @@ function parseJsx(jsx, options) {
488
80
  configFile: false,
489
81
  babelrc: false,
490
82
  comments: false,
491
- presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
83
+ presets: [
84
+ [
85
+ tsPreset,
86
+ {
87
+ isTSX: true,
88
+ allExtensions: true,
89
+ // If left to its default `false`, then this will strip away:
90
+ // - unused JS imports
91
+ // - types imports within regular JS import syntax
92
+ onlyRemoveTypeImports: true,
93
+ },
94
+ ],
95
+ ],
492
96
  plugins: [
493
97
  jsxPlugin,
494
98
  function () { return ({
@@ -506,113 +110,37 @@ function parseJsx(jsx, options) {
506
110
  context.builder = {
507
111
  component: (0, create_mitosis_component_1.createMitosisComponent)(),
508
112
  };
509
- var keepStatements = path.node.body.filter(function (statement) { return isImportOrDefaultExport(statement) || (0, component_types_1.isTypeOrInterface)(statement); });
510
- for (var _i = 0, _a = path.node.body; _i < _a.length; _i++) {
511
- var statement = _a[_i];
512
- if ((0, component_types_1.isTypeImport)(statement)) {
513
- var importDeclaration = statement;
514
- // Remove .lite from path if exists, as that will be stripped
515
- if (importDeclaration.source.value.endsWith('.lite')) {
516
- importDeclaration.source.value = importDeclaration.source.value.replace(/\.lite$/, '');
517
- }
518
- (0, component_types_1.collectTypes)(statement, context);
519
- }
520
- }
521
- var exportsOrLocalVariables = path.node.body.filter(function (statement) {
522
- return !isImportOrDefaultExport(statement) &&
523
- !(0, component_types_1.isTypeOrInterface)(statement) &&
524
- !types.isExpressionStatement(statement);
525
- });
526
- context.builder.component.exports = exportsOrLocalVariables.reduce(function (pre, node) {
527
- var _a, _b;
528
- var name, isFunction;
529
- if (babel.types.isExportNamedDeclaration(node)) {
530
- if (babel.types.isVariableDeclaration(node.declaration) &&
531
- babel.types.isIdentifier(node.declaration.declarations[0].id)) {
532
- name = node.declaration.declarations[0].id.name;
533
- isFunction = babel.types.isFunction(node.declaration.declarations[0].init);
534
- }
535
- if (babel.types.isFunctionDeclaration(node.declaration)) {
536
- name = (_a = node.declaration.id) === null || _a === void 0 ? void 0 : _a.name;
537
- isFunction = true;
538
- }
539
- }
540
- else {
541
- if (babel.types.isVariableDeclaration(node) &&
542
- babel.types.isIdentifier(node.declarations[0].id)) {
543
- name = node.declarations[0].id.name;
544
- isFunction = babel.types.isFunction(node.declarations[0].init);
545
- }
546
- if (babel.types.isFunctionDeclaration(node)) {
547
- name = (_b = node.id) === null || _b === void 0 ? void 0 : _b.name;
548
- isFunction = true;
549
- }
550
- }
551
- if (name) {
552
- pre[name] = {
553
- code: (0, generator_1.default)(node).code,
554
- isFunction: isFunction,
555
- };
556
- }
557
- else {
558
- console.warn('Could not parse export or variable: ignoring node', node);
559
- }
560
- return pre;
561
- }, {});
562
- var cutStatements = path.node.body.filter(function (statement) { return !isImportOrDefaultExport(statement); });
113
+ var keepStatements = path.node.body.filter(function (statement) { return (0, helpers_1.isImportOrDefaultExport)(statement) || (0, component_types_1.isTypeOrInterface)(statement); });
114
+ (0, component_types_1.handleTypeImports)(path, context);
115
+ context.builder.component.exports = (0, exports_1.generateExports)(path);
563
116
  subComponentFunctions = path.node.body
564
117
  .filter(function (node) {
565
118
  return !types.isExportDefaultDeclaration(node) && types.isFunctionDeclaration(node);
566
119
  })
567
120
  .map(function (node) { return "export default ".concat((0, generator_1.default)(node).code); });
568
- cutStatements = (0, metadata_1.collectMetadata)(cutStatements, context.builder.component, useOptions);
121
+ var preComponentCode = (0, function_1.pipe)(path.node.body.filter(function (statement) { return !(0, helpers_1.isImportOrDefaultExport)(statement); }), function (statements) { return (0, metadata_1.collectMetadata)(statements, context.builder.component, useOptions); }, types.program, generator_1.default, function (generatorResult) { return generatorResult.code; });
569
122
  // TODO: support multiple? e.g. for others to add imports?
570
- context.builder.component.hooks.preComponent = {
571
- code: (0, generator_1.default)(types.program(cutStatements)).code,
572
- };
123
+ context.builder.component.hooks.preComponent = { code: preComponentCode };
573
124
  path.replaceWith(types.program(keepStatements));
574
125
  },
575
126
  FunctionDeclaration: function (path, context) {
576
127
  var node = path.node;
577
128
  if (types.isIdentifier(node.id)) {
578
- var name_3 = node.id.name;
579
- if (name_3[0].toUpperCase() === name_3[0]) {
580
- path.replaceWith((0, ast_1.jsonToAst)(componentFunctionToJson(node, context)));
129
+ var name_1 = node.id.name;
130
+ if (name_1[0].toUpperCase() === name_1[0]) {
131
+ path.replaceWith((0, ast_1.jsonToAst)((0, function_parser_1.componentFunctionToJson)(node, context)));
581
132
  }
582
133
  }
583
134
  },
584
135
  ImportDeclaration: function (path, context) {
585
- // @builder.io/mitosis or React imports compile away
586
- var customPackages = (options === null || options === void 0 ? void 0 : options.compileAwayPackages) || [];
587
- if (__spreadArray(['react', '@builder.io/mitosis', '@emotion/react'], customPackages, true).includes(path.node.source.value)) {
588
- path.remove();
589
- return;
590
- }
591
- var importObject = {
592
- imports: {},
593
- path: path.node.source.value,
594
- };
595
- for (var _i = 0, _a = path.node.specifiers; _i < _a.length; _i++) {
596
- var specifier = _a[_i];
597
- if (types.isImportSpecifier(specifier)) {
598
- importObject.imports[specifier.local.name] = specifier.imported.name;
599
- }
600
- else if (types.isImportDefaultSpecifier(specifier)) {
601
- importObject.imports[specifier.local.name] = 'default';
602
- }
603
- else if (types.isImportNamespaceSpecifier(specifier)) {
604
- importObject.imports[specifier.local.name] = '*';
605
- }
606
- }
607
- context.builder.component.imports.push(importObject);
608
- path.remove();
136
+ (0, imports_1.handleImportDeclaration)({ options: options, path: path, context: context });
609
137
  },
610
138
  ExportDefaultDeclaration: function (path) {
611
139
  path.replaceWith(path.node.declaration);
612
140
  },
613
141
  JSXElement: function (path) {
614
142
  var node = path.node;
615
- path.replaceWith((0, ast_1.jsonToAst)(jsxElementToJson(node)));
143
+ path.replaceWith((0, ast_1.jsonToAst)((0, element_parser_1.jsxElementToJson)(node)));
616
144
  },
617
145
  ExportNamedDeclaration: function (path, context) {
618
146
  var node = path.node;
@@ -641,7 +169,7 @@ function parseJsx(jsx, options) {
641
169
  .replace(/^\({/, '{')
642
170
  .replace(/}\);$/, '}'));
643
171
  var parsed = (0, json_1.tryParseJson)(toParse);
644
- (0, state_1.mapReactIdentifiers)(parsed);
172
+ (0, state_1.mapStateIdentifiers)(parsed);
645
173
  (0, context_1.extractContextComponents)(parsed);
646
174
  parsed.subComponents = subComponentFunctions.map(function (item) { return parseJsx(item, useOptions); });
647
175
  return parsed;
@@ -7,7 +7,6 @@ import { JSONObject } from '../../types/json';
7
7
  * text -> state.text
8
8
  * setText(...) -> state.text = ...
9
9
  */
10
- export declare function mapReactIdentifiers(json: MitosisComponent): void;
11
- export declare const createFunctionStringLiteralObjectProperty: (key: babel.types.PrivateName | babel.types.Expression, node: babel.types.Node) => babel.types.ObjectProperty;
10
+ export declare function mapStateIdentifiers(json: MitosisComponent): void;
12
11
  export declare const parseStateObject: (object: babel.types.ObjectExpression) => JSONObject;
13
- export declare const parseStateObjectToMitosisState: (object: babel.types.ObjectExpression) => import("../../helpers/typescript").Dictionary<import("../../types/mitosis-component").StateValue | undefined>;
12
+ export declare const parseStateObjectToMitosisState: (object: babel.types.ObjectExpression) => import("../../types/mitosis-component").MitosisState;