@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
@@ -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,423 +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, _b;
72
- var hooks = {};
73
- var state = {};
74
- var accessedContext = {};
75
- var setContext = {};
76
- var refs = {};
77
- for (var _i = 0, _c = node.body.body; _i < _c.length; _i++) {
78
- var item = _c[_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
- else if (expression.callee.name === hooks_1.HOOKS.DEFAULT_PROPS) {
173
- var firstArg = expression.arguments[0];
174
- if (types.isObjectExpression(firstArg)) {
175
- var objectProperties = (_a = firstArg.properties) === null || _a === void 0 ? void 0 : _a.filter(function (i) {
176
- return types.isObjectProperty(i);
177
- });
178
- objectProperties === null || objectProperties === void 0 ? void 0 : objectProperties.forEach(function (i) {
179
- var _a;
180
- var _b, _c, _d;
181
- if ((_b = i.key) === null || _b === void 0 ? void 0 : _b.name) {
182
- context.builder.component.defaultProps = __assign(__assign({}, ((_c = context.builder.component.defaultProps) !== null && _c !== void 0 ? _c : {})), (_a = {}, _a[(_d = i.key) === null || _d === void 0 ? void 0 : _d.name] = i.value.value, _a));
183
- }
184
- });
185
- }
186
- }
187
- }
188
- }
189
- }
190
- if (types.isFunctionDeclaration(item)) {
191
- if (types.isIdentifier(item.id)) {
192
- state[item.id.name] = {
193
- code: "".concat(function_literal_prefix_1.functionLiteralPrefix).concat((0, generator_1.default)(item).code),
194
- type: 'function',
195
- };
196
- }
197
- }
198
- if (types.isVariableDeclaration(item)) {
199
- var declaration = item.declarations[0];
200
- var init = declaration.init;
201
- if (types.isCallExpression(init)) {
202
- // React format, like:
203
- // const [foo, setFoo] = useState(...)
204
- if (types.isArrayPattern(declaration.id)) {
205
- var varName = types.isIdentifier(declaration.id.elements[0]) && declaration.id.elements[0].name;
206
- if (varName) {
207
- var value = init.arguments[0];
208
- // Function as init, like:
209
- // useState(() => true)
210
- if (types.isArrowFunctionExpression(value)) {
211
- state[varName] = {
212
- code: (0, helpers_1.parseCodeJson)(value.body),
213
- type: 'function',
214
- };
215
- }
216
- else {
217
- // Value as init, like:
218
- // useState(true)
219
- state[varName] = {
220
- code: (0, helpers_1.parseCodeJson)(value),
221
- type: 'property',
222
- };
223
- }
224
- }
225
- }
226
- // Legacy format, like:
227
- // const state = useStore({...})
228
- else if (types.isIdentifier(init.callee)) {
229
- if (init.callee.name === hooks_1.HOOKS.STATE || init.callee.name === hooks_1.HOOKS.STORE) {
230
- var firstArg = init.arguments[0];
231
- if (types.isObjectExpression(firstArg)) {
232
- var useStoreState = (0, state_1.parseStateObjectToMitosisState)(firstArg);
233
- Object.assign(state, useStoreState);
234
- }
235
- }
236
- else if (init.callee.name === hooks_1.HOOKS.CONTEXT) {
237
- var firstArg = init.arguments[0];
238
- if (types.isVariableDeclarator(declaration) && types.isIdentifier(declaration.id)) {
239
- if (types.isIdentifier(firstArg)) {
240
- var varName = declaration.id.name;
241
- var name_1 = firstArg.name;
242
- accessedContext[varName] = {
243
- name: name_1,
244
- path: (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, name_1),
245
- };
246
- }
247
- else {
248
- var varName = declaration.id.name;
249
- var name_2 = (0, generator_1.default)(firstArg).code;
250
- accessedContext[varName] = {
251
- name: name_2,
252
- path: '',
253
- };
254
- }
255
- }
256
- }
257
- else if (init.callee.name === hooks_1.HOOKS.REF) {
258
- if (types.isIdentifier(declaration.id)) {
259
- var firstArg = init.arguments[0];
260
- var varName = declaration.id.name;
261
- refs[varName] = {
262
- argument: (0, generator_1.default)(firstArg).code,
263
- };
264
- // Typescript Parameter
265
- if (types.isTSTypeParameterInstantiation(init.typeParameters)) {
266
- refs[varName].typeParameter = (0, generator_1.default)(init.typeParameters.params[0]).code;
267
- }
268
- }
269
- }
270
- }
271
- }
272
- }
273
- }
274
- var theReturn = node.body.body.find(function (item) { return types.isReturnStatement(item); });
275
- var children = [];
276
- if (theReturn) {
277
- var value = theReturn.argument;
278
- if (types.isJSXElement(value) || types.isJSXFragment(value)) {
279
- children.push(jsxElementToJson(value));
280
- }
281
- }
282
- var localExports = context.builder.component.exports;
283
- if (localExports) {
284
- var bindingsCode_1 = (0, get_bindings_1.getBindingsCode)(children);
285
- Object.keys(localExports).forEach(function (name) {
286
- var found = bindingsCode_1.find(function (code) { return code.match(new RegExp("\\b".concat(name, "\\b"))); });
287
- localExports[name].usedInLocal = Boolean(found);
288
- });
289
- context.builder.component.exports = localExports;
290
- }
291
- var propsTypeRef = (0, component_types_1.getPropsTypeRef)(node, context);
292
- return (0, create_mitosis_component_1.createMitosisComponent)(__assign(__assign({}, context.builder.component), { name: (_b = node.id) === null || _b === void 0 ? void 0 : _b.name, state: state, children: children, refs: refs, hooks: hooks, context: {
293
- get: accessedContext,
294
- set: setContext,
295
- }, propsTypeRef: propsTypeRef }));
296
- };
297
- var jsxElementToJson = function (node) {
298
- if (types.isJSXText(node)) {
299
- return (0, create_mitosis_node_1.createMitosisNode)({
300
- properties: {
301
- _text: node.value,
302
- },
303
- });
304
- }
305
- if (types.isJSXExpressionContainer(node)) {
306
- if (types.isJSXEmptyExpression(node.expression)) {
307
- return null;
308
- }
309
- // foo.map -> <For each={foo}>...</For>
310
- if (types.isCallExpression(node.expression) ||
311
- types.isOptionalCallExpression(node.expression)) {
312
- var callback = node.expression.arguments[0];
313
- if (types.isArrowFunctionExpression(callback)) {
314
- if (types.isIdentifier(callback.params[0])) {
315
- var forArguments = callback.params
316
- .map(function (param) { return param === null || param === void 0 ? void 0 : param.name; })
317
- .filter(Boolean);
318
- return (0, create_mitosis_node_1.createMitosisNode)({
319
- name: 'For',
320
- bindings: {
321
- each: {
322
- code: (0, generator_1.default)(node.expression.callee)
323
- .code // Remove .map or potentially ?.map
324
- .replace(/\??\.map$/, ''),
325
- },
326
- },
327
- scope: {
328
- For: forArguments,
329
- },
330
- properties: {
331
- _forName: forArguments[0],
332
- _indexName: forArguments[1],
333
- _collectionName: forArguments[2],
334
- },
335
- children: [jsxElementToJson(callback.body)],
336
- });
337
- }
338
- }
339
- }
340
- // {foo && <div />} -> <Show when={foo}>...</Show>
341
- if (types.isLogicalExpression(node.expression)) {
342
- if (node.expression.operator === '&&') {
343
- return (0, create_mitosis_node_1.createMitosisNode)({
344
- name: 'Show',
345
- bindings: {
346
- when: { code: (0, generator_1.default)(node.expression.left).code },
347
- },
348
- children: [jsxElementToJson(node.expression.right)],
349
- });
350
- }
351
- else {
352
- // TODO: good warning system for unsupported operators
353
- }
354
- }
355
- // {foo ? <div /> : <span />} -> <Show when={foo} else={<span />}>...</Show>
356
- if (types.isConditionalExpression(node.expression)) {
357
- return (0, create_mitosis_node_1.createMitosisNode)({
358
- name: 'Show',
359
- meta: {
360
- else: jsxElementToJson(node.expression.alternate),
361
- },
362
- bindings: {
363
- when: { code: (0, generator_1.default)(node.expression.test).code },
364
- },
365
- children: [jsxElementToJson(node.expression.consequent)],
366
- });
367
- }
368
- // TODO: support {foo ? bar : baz}
369
- return (0, create_mitosis_node_1.createMitosisNode)({
370
- bindings: {
371
- _text: { code: (0, generator_1.default)(node.expression).code },
372
- },
373
- });
374
- }
375
- if (types.isJSXFragment(node)) {
376
- return (0, create_mitosis_node_1.createMitosisNode)({
377
- name: 'Fragment',
378
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
379
- });
380
- }
381
- var nodeName = (0, generator_1.default)(node.openingElement.name).code;
382
- if (nodeName === 'Show') {
383
- var whenAttr = node.openingElement.attributes.find(function (item) { return types.isJSXAttribute(item) && item.name.name === 'when'; });
384
- var elseAttr = node.openingElement.attributes.find(function (item) { return types.isJSXAttribute(item) && item.name.name === 'else'; });
385
- var whenValue = whenAttr && types.isJSXExpressionContainer(whenAttr.value)
386
- ? (0, generator_1.default)(whenAttr.value.expression).code
387
- : undefined;
388
- var elseValue = elseAttr &&
389
- types.isJSXExpressionContainer(elseAttr.value) &&
390
- jsxElementToJson(elseAttr.value.expression);
391
- return (0, create_mitosis_node_1.createMitosisNode)({
392
- name: 'Show',
393
- meta: {
394
- else: elseValue || undefined,
395
- },
396
- bindings: __assign({}, (whenValue ? { when: { code: whenValue } } : {})),
397
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
398
- });
399
- }
400
- // <For ...> control flow component
401
- if (nodeName === 'For') {
402
- var child = node.children.find(function (item) { return types.isJSXExpressionContainer(item); });
403
- if (types.isJSXExpressionContainer(child)) {
404
- var childExpression = child.expression;
405
- if (types.isArrowFunctionExpression(childExpression)) {
406
- 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);
407
- return (0, create_mitosis_node_1.createMitosisNode)({
408
- name: 'For',
409
- bindings: {
410
- each: {
411
- code: (0, generator_1.default)(node.openingElement.attributes[0]
412
- .value.expression).code,
413
- },
414
- },
415
- scope: {
416
- For: forArguments,
417
- },
418
- properties: {
419
- _forName: forArguments[0],
420
- _indexName: forArguments[1],
421
- _collectionName: forArguments[2],
422
- },
423
- children: [jsxElementToJson(childExpression.body)],
424
- });
425
- }
426
- }
427
- }
428
- return (0, create_mitosis_node_1.createMitosisNode)({
429
- name: nodeName,
430
- properties: 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.isStringLiteral(value)) {
435
- memo[key] = value;
436
- return memo;
437
- }
438
- if (types.isJSXExpressionContainer(value) && types.isStringLiteral(value.expression)) {
439
- memo[key] = value.expression.value;
440
- return memo;
441
- }
442
- }
443
- return memo;
444
- }, {}),
445
- bindings: node.openingElement.attributes.reduce(function (memo, item) {
446
- if (types.isJSXAttribute(item)) {
447
- var key = item.name.name;
448
- var value = item.value;
449
- if (types.isJSXExpressionContainer(value) && !types.isStringLiteral(value.expression)) {
450
- var expression = value.expression;
451
- if (types.isArrowFunctionExpression(expression)) {
452
- if (key.startsWith('on')) {
453
- memo[key] = {
454
- code: (0, generator_1.default)(expression.body).code,
455
- arguments: expression.params.map(function (node) { return node === null || node === void 0 ? void 0 : node.name; }),
456
- };
457
- }
458
- else {
459
- memo[key] = { code: (0, generator_1.default)(expression.body).code };
460
- }
461
- }
462
- else {
463
- memo[key] = { code: (0, generator_1.default)(expression).code };
464
- }
465
- return memo;
466
- }
467
- }
468
- else if (types.isJSXSpreadAttribute(item)) {
469
- // TODO: potentially like Vue store bindings and properties as array of key value pairs
470
- // too so can do this accurately when order matters. Also tempting to not support spread,
471
- // as some frameworks do not support it (e.g. Angular) tho Angular may be the only one
472
- memo._spread = {
473
- code: types.stringLiteral((0, generator_1.default)(item.argument).code),
474
- };
475
- }
476
- return memo;
477
- }, {}),
478
- children: node.children.map(function (item) { return jsxElementToJson(item); }).filter(Boolean),
479
- });
480
- };
481
- var isImportOrDefaultExport = function (node) {
482
- return types.isExportDefaultDeclaration(node) || types.isImportDeclaration(node);
483
- };
484
61
  var beforeParse = function (path) {
485
62
  path.traverse({
486
63
  FunctionDeclaration: function (path) {
@@ -503,7 +80,19 @@ function parseJsx(jsx, options) {
503
80
  configFile: false,
504
81
  babelrc: false,
505
82
  comments: false,
506
- 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
+ ],
507
96
  plugins: [
508
97
  jsxPlugin,
509
98
  function () { return ({
@@ -521,113 +110,37 @@ function parseJsx(jsx, options) {
521
110
  context.builder = {
522
111
  component: (0, create_mitosis_component_1.createMitosisComponent)(),
523
112
  };
524
- var keepStatements = path.node.body.filter(function (statement) { return isImportOrDefaultExport(statement) || (0, component_types_1.isTypeOrInterface)(statement); });
525
- for (var _i = 0, _a = path.node.body; _i < _a.length; _i++) {
526
- var statement = _a[_i];
527
- if ((0, component_types_1.isTypeImport)(statement)) {
528
- var importDeclaration = statement;
529
- // Remove .lite from path if exists, as that will be stripped
530
- if (importDeclaration.source.value.endsWith('.lite')) {
531
- importDeclaration.source.value = importDeclaration.source.value.replace(/\.lite$/, '');
532
- }
533
- (0, component_types_1.collectTypes)(statement, context);
534
- }
535
- }
536
- var exportsOrLocalVariables = path.node.body.filter(function (statement) {
537
- return !isImportOrDefaultExport(statement) &&
538
- !(0, component_types_1.isTypeOrInterface)(statement) &&
539
- !types.isExpressionStatement(statement);
540
- });
541
- context.builder.component.exports = exportsOrLocalVariables.reduce(function (pre, node) {
542
- var _a, _b;
543
- var name, isFunction;
544
- if (babel.types.isExportNamedDeclaration(node)) {
545
- if (babel.types.isVariableDeclaration(node.declaration) &&
546
- babel.types.isIdentifier(node.declaration.declarations[0].id)) {
547
- name = node.declaration.declarations[0].id.name;
548
- isFunction = babel.types.isFunction(node.declaration.declarations[0].init);
549
- }
550
- if (babel.types.isFunctionDeclaration(node.declaration)) {
551
- name = (_a = node.declaration.id) === null || _a === void 0 ? void 0 : _a.name;
552
- isFunction = true;
553
- }
554
- }
555
- else {
556
- if (babel.types.isVariableDeclaration(node) &&
557
- babel.types.isIdentifier(node.declarations[0].id)) {
558
- name = node.declarations[0].id.name;
559
- isFunction = babel.types.isFunction(node.declarations[0].init);
560
- }
561
- if (babel.types.isFunctionDeclaration(node)) {
562
- name = (_b = node.id) === null || _b === void 0 ? void 0 : _b.name;
563
- isFunction = true;
564
- }
565
- }
566
- if (name) {
567
- pre[name] = {
568
- code: (0, generator_1.default)(node).code,
569
- isFunction: isFunction,
570
- };
571
- }
572
- else {
573
- console.warn('Could not parse export or variable: ignoring node', node);
574
- }
575
- return pre;
576
- }, {});
577
- 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);
578
116
  subComponentFunctions = path.node.body
579
117
  .filter(function (node) {
580
118
  return !types.isExportDefaultDeclaration(node) && types.isFunctionDeclaration(node);
581
119
  })
582
120
  .map(function (node) { return "export default ".concat((0, generator_1.default)(node).code); });
583
- 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; });
584
122
  // TODO: support multiple? e.g. for others to add imports?
585
- context.builder.component.hooks.preComponent = {
586
- code: (0, generator_1.default)(types.program(cutStatements)).code,
587
- };
123
+ context.builder.component.hooks.preComponent = { code: preComponentCode };
588
124
  path.replaceWith(types.program(keepStatements));
589
125
  },
590
126
  FunctionDeclaration: function (path, context) {
591
127
  var node = path.node;
592
128
  if (types.isIdentifier(node.id)) {
593
- var name_3 = node.id.name;
594
- if (name_3[0].toUpperCase() === name_3[0]) {
595
- 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)));
596
132
  }
597
133
  }
598
134
  },
599
135
  ImportDeclaration: function (path, context) {
600
- // @builder.io/mitosis or React imports compile away
601
- var customPackages = (options === null || options === void 0 ? void 0 : options.compileAwayPackages) || [];
602
- if (__spreadArray(['react', '@builder.io/mitosis', '@emotion/react'], customPackages, true).includes(path.node.source.value)) {
603
- path.remove();
604
- return;
605
- }
606
- var importObject = {
607
- imports: {},
608
- path: path.node.source.value,
609
- };
610
- for (var _i = 0, _a = path.node.specifiers; _i < _a.length; _i++) {
611
- var specifier = _a[_i];
612
- if (types.isImportSpecifier(specifier)) {
613
- importObject.imports[specifier.local.name] = specifier.imported.name;
614
- }
615
- else if (types.isImportDefaultSpecifier(specifier)) {
616
- importObject.imports[specifier.local.name] = 'default';
617
- }
618
- else if (types.isImportNamespaceSpecifier(specifier)) {
619
- importObject.imports[specifier.local.name] = '*';
620
- }
621
- }
622
- context.builder.component.imports.push(importObject);
623
- path.remove();
136
+ (0, imports_1.handleImportDeclaration)({ options: options, path: path, context: context });
624
137
  },
625
138
  ExportDefaultDeclaration: function (path) {
626
139
  path.replaceWith(path.node.declaration);
627
140
  },
628
141
  JSXElement: function (path) {
629
142
  var node = path.node;
630
- path.replaceWith((0, ast_1.jsonToAst)(jsxElementToJson(node)));
143
+ path.replaceWith((0, ast_1.jsonToAst)((0, element_parser_1.jsxElementToJson)(node)));
631
144
  },
632
145
  ExportNamedDeclaration: function (path, context) {
633
146
  var node = path.node;
@@ -656,7 +169,7 @@ function parseJsx(jsx, options) {
656
169
  .replace(/^\({/, '{')
657
170
  .replace(/}\);$/, '}'));
658
171
  var parsed = (0, json_1.tryParseJson)(toParse);
659
- (0, state_1.mapReactIdentifiers)(parsed);
172
+ (0, state_1.mapStateIdentifiers)(parsed);
660
173
  (0, context_1.extractContextComponents)(parsed);
661
174
  parsed.subComponents = subComponentFunctions.map(function (item) { return parseJsx(item, useOptions); });
662
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.Expression | babel.types.PrivateName, 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;