@builder.io/mitosis 0.0.77-0 → 0.0.78

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 (76) hide show
  1. package/dist/src/parsers/builder/builder.d.ts +34 -0
  2. package/dist/src/parsers/{builder.js → builder/builder.js} +16 -12
  3. package/dist/src/parsers/{helpers/state.d.ts → builder/helpers.d.ts} +2 -2
  4. package/dist/src/parsers/builder/helpers.js +26 -0
  5. package/dist/src/parsers/builder/index.d.ts +1 -0
  6. package/dist/src/parsers/builder/index.js +17 -0
  7. package/dist/src/parsers/jsx/function-parser.js +54 -73
  8. package/dist/src/parsers/jsx/helpers.d.ts +1 -0
  9. package/dist/src/parsers/jsx/helpers.js +10 -2
  10. package/dist/src/parsers/jsx/{metadata.d.ts → hooks.d.ts} +1 -1
  11. package/dist/src/parsers/jsx/{metadata.js → hooks.js} +3 -3
  12. package/dist/src/parsers/jsx/index.d.ts +1 -2
  13. package/dist/src/parsers/jsx/index.js +3 -5
  14. package/dist/src/parsers/jsx/jsx.js +4 -2
  15. package/dist/src/parsers/jsx/state.d.ts +2 -4
  16. package/dist/src/parsers/jsx/state.js +50 -27
  17. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/high.jsx +0 -0
  18. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/low.jsx +240 -0
  19. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/med.jsx +4 -0
  20. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/high.jsx +0 -0
  21. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/low.jsx +54 -0
  22. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/med.jsx +4 -0
  23. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/high.js +9 -0
  24. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/low.js +0 -0
  25. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/med.js +151 -0
  26. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/high.js +9 -0
  27. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/low.js +0 -0
  28. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/med.js +151 -0
  29. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/high.cjs +0 -0
  30. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/low.cjs +45 -0
  31. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/med.cjs +3 -0
  32. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/high.js +3 -0
  33. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/low.js +25 -0
  34. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/med.js +31 -0
  35. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/high.jsx +0 -0
  36. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/low.jsx +108 -0
  37. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/med.jsx +7 -0
  38. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mcomponent/inputs/high.cjsx +9 -0
  39. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mcomponent/inputs/low.cjsx +0 -0
  40. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mcomponent/inputs/med.cjsx +68 -0
  41. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/high.cjs +0 -0
  42. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/low.cjs +58 -0
  43. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/med.cjs +5 -0
  44. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mhello_world/033[2m/>//033[22mstylesheet/high.jsx +0 -0
  45. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mhello_world/033[2m/>//033[22mstylesheet/low.jsx +26 -0
  46. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mhello_world/033[2m/>//033[22mstylesheet/med.jsx +4 -0
  47. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/high.cjs +0 -0
  48. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/low.cjs +47 -0
  49. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/med.cjs +3 -0
  50. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/high.js +0 -0
  51. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/low.js +33 -0
  52. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/med.js +4 -0
  53. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/high.jsx +9 -0
  54. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/low.jsx +0 -0
  55. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/med.jsx +170 -0
  56. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/high.js +0 -0
  57. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/low.js +30 -0
  58. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/med.js +4 -0
  59. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.cjs/high.cjs +19 -0
  60. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.cjs/low.cjs +0 -0
  61. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.cjs/med.cjs +51 -0
  62. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.js/high.js +19 -0
  63. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.js/low.js +0 -0
  64. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.js/med.js +47 -0
  65. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.tsx/high.tsx +19 -0
  66. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.tsx/low.tsx +0 -0
  67. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodo/033[2m/>//033[22mTodo.tsx/med.tsx +43 -0
  68. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodos/033[2m/>//033[22mTodo.tsx/high.tsx +7 -0
  69. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodos/033[2m/>//033[22mTodo.tsx/low.tsx +34 -0
  70. package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mtodos/033[2m/>//033[22mTodo.tsx/med.tsx +4 -0
  71. package/dist/tsconfig.build.tsbuildinfo +1 -1
  72. package/package.json +2 -3
  73. package/dist/src/parsers/builder.d.ts +0 -104
  74. package/dist/src/parsers/constants/outdated-prefixes.d.ts +0 -10
  75. package/dist/src/parsers/constants/outdated-prefixes.js +0 -13
  76. package/dist/src/parsers/helpers/state.js +0 -30
@@ -0,0 +1,34 @@
1
+ import { BuilderContent, BuilderElement } from '@builder.io/sdk';
2
+ import { MitosisNode } from '../../types/mitosis-node';
3
+ import { MitosisComponent, MitosisState } from '../..';
4
+ declare type InternalOptions = {
5
+ skipMapper?: boolean;
6
+ };
7
+ export declare const symbolBlocksAsChildren = false;
8
+ export declare type BuilderToMitosisOptions = {
9
+ context?: {
10
+ [key: string]: any;
11
+ };
12
+ includeBuilderExtras?: boolean;
13
+ preserveTextBlocks?: boolean;
14
+ };
15
+ export declare type InternalBuilderToMitosisOptions = BuilderToMitosisOptions & {
16
+ context: {
17
+ [key: string]: any;
18
+ };
19
+ };
20
+ export declare const builderElementToMitosisNode: (block: BuilderElement, options: BuilderToMitosisOptions, _internalOptions?: InternalOptions) => MitosisNode;
21
+ /**
22
+ * Take Builder custom jsCode and extract the contents of the useState hook
23
+ * and return it as a JS object along with the inputted code with the hook
24
+ * code extracted
25
+ */
26
+ export declare function extractStateHook(code: string): {
27
+ code: string;
28
+ state: MitosisState;
29
+ };
30
+ export declare function convertExportDefaultToReturn(code: string): string;
31
+ export declare const createBuilderElement: (options?: Partial<BuilderElement>) => BuilderElement;
32
+ export declare const isBuilderElement: (el: unknown) => el is BuilderElement;
33
+ export declare const builderContentToMitosisComponent: (builderContent: BuilderContent, options?: BuilderToMitosisOptions) => MitosisComponent;
34
+ export {};
@@ -42,16 +42,17 @@ var babel = __importStar(require("@babel/core"));
42
42
  var generator_1 = __importDefault(require("@babel/generator"));
43
43
  var json5_1 = __importDefault(require("json5"));
44
44
  var lodash_1 = require("lodash");
45
- var fast_clone_1 = require("../helpers/fast-clone");
45
+ var fast_clone_1 = require("../../helpers/fast-clone");
46
46
  var traverse_1 = __importDefault(require("traverse"));
47
- var media_sizes_1 = require("../constants/media-sizes");
48
- var capitalize_1 = require("../helpers/capitalize");
49
- var create_mitosis_component_1 = require("../helpers/create-mitosis-component");
50
- var create_mitosis_node_1 = require("../helpers/create-mitosis-node");
51
- var jsx_1 = require("./jsx");
52
- var parsers_1 = require("../helpers/parsers");
53
- var __1 = require("..");
54
- var state_1 = require("./helpers/state");
47
+ var media_sizes_1 = require("../../constants/media-sizes");
48
+ var capitalize_1 = require("../../helpers/capitalize");
49
+ var create_mitosis_component_1 = require("../../helpers/create-mitosis-component");
50
+ var create_mitosis_node_1 = require("../../helpers/create-mitosis-node");
51
+ var jsx_1 = require("../jsx");
52
+ var parsers_1 = require("../../helpers/parsers");
53
+ var __1 = require("../..");
54
+ var helpers_1 = require("./helpers");
55
+ var state_1 = require("../jsx/state");
55
56
  // Omit some superflous styles that can come from Builder's web importer
56
57
  var styleOmitList = [
57
58
  'backgroundRepeatX',
@@ -573,7 +574,7 @@ function extractStateHook(code) {
573
574
  if (types.isIdentifier(expression.callee) && expression.callee.name === 'useState') {
574
575
  var arg = expression.arguments[0];
575
576
  if (types.isObjectExpression(arg)) {
576
- state = (0, jsx_1.parseStateObject)(arg);
577
+ state = (0, state_1.parseStateObjectToMitosisState)(arg);
577
578
  newBody.splice(i, 1);
578
579
  }
579
580
  }
@@ -584,7 +585,7 @@ function extractStateHook(code) {
584
585
  expression.callee.property.name === 'assign') {
585
586
  var arg = expression.arguments[1];
586
587
  if (types.isObjectExpression(arg)) {
587
- state = (0, jsx_1.parseStateObject)(arg);
588
+ state = (0, state_1.parseStateObjectToMitosisState)(arg);
588
589
  newBody.splice(i, 1);
589
590
  }
590
591
  }
@@ -702,6 +703,7 @@ var builderContentPartToMitosisComponent = function (builderContent, options) {
702
703
  var _k = extractStateHook(((_a = builderContent === null || builderContent === void 0 ? void 0 : builderContent.data) === null || _a === void 0 ? void 0 : _a.tsCode) || ((_b = builderContent === null || builderContent === void 0 ? void 0 : builderContent.data) === null || _b === void 0 ? void 0 : _b.jsCode) || ''), state = _k.state, code = _k.code;
703
704
  var customCode = convertExportDefaultToReturn(code);
704
705
  var parsed = getHooks(builderContent);
706
+ var parsedState = (parsed === null || parsed === void 0 ? void 0 : parsed.state) || {};
705
707
  var componentJson = (0, create_mitosis_component_1.createMitosisComponent)({
706
708
  meta: __assign({ useMetadata: {
707
709
  httpRequests: (_c = builderContent.data) === null || _c === void 0 ? void 0 : _c.httpRequests,
@@ -710,7 +712,9 @@ var builderContentPartToMitosisComponent = function (builderContent, options) {
710
712
  name: input.name,
711
713
  defaultValue: input.defaultValue,
712
714
  }); }),
713
- state: (parsed === null || parsed === void 0 ? void 0 : parsed.state) || __assign(__assign({}, state), (0, state_1.mapJsonObjectToStateValue)((_g = builderContent.data) === null || _g === void 0 ? void 0 : _g.state)),
715
+ state: Object.keys(parsedState).length > 0
716
+ ? parsedState
717
+ : __assign(__assign({}, state), (0, helpers_1.mapBuilderContentStateToMitosisState)(((_g = builderContent.data) === null || _g === void 0 ? void 0 : _g.state) || {})),
714
718
  hooks: __assign({}, ((((_h = parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) === null || _h === void 0 ? void 0 : _h.code) || (customCode && { code: customCode })) && {
715
719
  onMount: (parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) || { code: customCode },
716
720
  })),
@@ -1,3 +1,3 @@
1
- import { JSONObject } from '../../types/json';
2
1
  import { MitosisComponent } from '../../types/mitosis-component';
3
- export declare const mapJsonObjectToStateValue: (value: JSONObject) => MitosisComponent['state'];
2
+ import { JSONObject } from '../../types/json';
3
+ export declare const mapBuilderContentStateToMitosisState: (value: JSONObject) => MitosisComponent['state'];
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapBuilderContentStateToMitosisState = void 0;
4
+ var patterns_1 = require("../../helpers/patterns");
5
+ var lodash_1 = require("lodash");
6
+ var __DO_NOT_USE_FUNCTION_LITERAL_PREFIX = "@builder.io/mitosis/function:";
7
+ var __DO_NOT_USE_METHOD_LITERAL_PREFIX = "@builder.io/mitosis/method:";
8
+ /**
9
+ * Maps the Builder State format to the Mitosis State format.
10
+ */
11
+ var mapJsonToStateValue = function (value) {
12
+ if (typeof value === 'string') {
13
+ if (value.startsWith(__DO_NOT_USE_FUNCTION_LITERAL_PREFIX)) {
14
+ return { type: 'function', code: value.replace(__DO_NOT_USE_FUNCTION_LITERAL_PREFIX, '') };
15
+ }
16
+ else if (value.startsWith(__DO_NOT_USE_METHOD_LITERAL_PREFIX)) {
17
+ var strippedValue = value.replace(__DO_NOT_USE_METHOD_LITERAL_PREFIX, '');
18
+ var isGet = Boolean(strippedValue.match(patterns_1.GETTER));
19
+ var type = isGet ? 'getter' : 'method';
20
+ return { type: type, code: strippedValue };
21
+ }
22
+ }
23
+ return { type: 'property', code: value };
24
+ };
25
+ var mapBuilderContentStateToMitosisState = function (value) { return (0, lodash_1.mapValues)(value, mapJsonToStateValue); };
26
+ exports.mapBuilderContentStateToMitosisState = mapBuilderContentStateToMitosisState;
@@ -0,0 +1 @@
1
+ export * from './builder';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./builder"), exports);
@@ -57,7 +57,7 @@ var state_1 = require("./state");
57
57
  var helpers_1 = require("./helpers");
58
58
  var component_types_1 = require("./component-types");
59
59
  var element_parser_1 = require("./element-parser");
60
- var metadata_1 = require("./metadata");
60
+ var hooks_2 = require("./hooks");
61
61
  var types = babel.types;
62
62
  function generateUseStyleCode(expression) {
63
63
  return (0, generator_1.default)(expression.arguments[0]).code.replace(/(^("|'|`)|("|'|`)$)/g, '');
@@ -78,6 +78,15 @@ function parseDefaultPropsHook(component, expression) {
78
78
  }
79
79
  }
80
80
  exports.parseDefaultPropsHook = parseDefaultPropsHook;
81
+ var processHookCode = function (firstArg) {
82
+ return (0, generator_1.default)(firstArg.body)
83
+ .code.trim()
84
+ // Remove arbitrary block wrapping if any
85
+ // AKA
86
+ // { console.log('hi') } -> console.log('hi')
87
+ .replace(/^{/, '')
88
+ .replace(/}$/, '');
89
+ };
81
90
  /**
82
91
  * Parses function declarations within the Mitosis copmonent's body to JSON
83
92
  */
@@ -127,18 +136,10 @@ var componentFunctionToJson = function (node, context) {
127
136
  }
128
137
  }
129
138
  }
130
- else if (expression.callee.name === 'onMount' ||
131
- expression.callee.name === 'useEffect') {
139
+ else if (expression.callee.name === 'onMount') {
132
140
  var firstArg = expression.arguments[0];
133
141
  if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
134
- var code = (0, generator_1.default)(firstArg.body)
135
- .code.trim()
136
- // Remove arbitrary block wrapping if any
137
- // AKA
138
- // { console.log('hi') } -> console.log('hi')
139
- .replace(/^{/, '')
140
- .replace(/}$/, '');
141
- // TODO: add arguments
142
+ var code = processHookCode(firstArg);
142
143
  hooks.onMount = { code: code };
143
144
  }
144
145
  }
@@ -146,13 +147,7 @@ var componentFunctionToJson = function (node, context) {
146
147
  var firstArg = expression.arguments[0];
147
148
  var secondArg = expression.arguments[1];
148
149
  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(/}$/, '');
150
+ var code = processHookCode(firstArg);
156
151
  if (!secondArg ||
157
152
  (types.isArrayExpression(secondArg) && secondArg.elements.length > 0)) {
158
153
  var depsCode = secondArg ? (0, generator_1.default)(secondArg).code : '';
@@ -168,26 +163,14 @@ var componentFunctionToJson = function (node, context) {
168
163
  else if (expression.callee.name === 'onUnMount') {
169
164
  var firstArg = expression.arguments[0];
170
165
  if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
171
- var code = (0, generator_1.default)(firstArg.body)
172
- .code.trim()
173
- // Remove arbitrary block wrapping if any
174
- // AKA
175
- // { console.log('hi') } -> console.log('hi')
176
- .replace(/^{/, '')
177
- .replace(/}$/, '');
166
+ var code = processHookCode(firstArg);
178
167
  hooks.onUnMount = { code: code };
179
168
  }
180
169
  }
181
170
  else if (expression.callee.name === 'onInit') {
182
171
  var firstArg = expression.arguments[0];
183
172
  if (types.isFunctionExpression(firstArg) || types.isArrowFunctionExpression(firstArg)) {
184
- var code = (0, generator_1.default)(firstArg.body)
185
- .code.trim()
186
- // Remove arbitrary block wrapping if any
187
- // AKA
188
- // { console.log('hi') } -> console.log('hi')
189
- .replace(/^{/, '')
190
- .replace(/}$/, '');
173
+ var code = processHookCode(firstArg);
191
174
  hooks.onInit = { code: code };
192
175
  }
193
176
  }
@@ -197,8 +180,8 @@ var componentFunctionToJson = function (node, context) {
197
180
  else if (expression.callee.name === hooks_1.HOOKS.STYLE) {
198
181
  context.builder.component.style = generateUseStyleCode(expression);
199
182
  }
200
- else if (expression.callee.name === metadata_1.METADATA_HOOK_NAME) {
201
- context.builder.component.meta[metadata_1.METADATA_HOOK_NAME] = __assign(__assign({}, context.builder.component.meta[metadata_1.METADATA_HOOK_NAME]), (0, helpers_1.parseCodeJson)(expression.arguments[0]));
183
+ else if (expression.callee.name === hooks_2.METADATA_HOOK_NAME) {
184
+ context.builder.component.meta[hooks_2.METADATA_HOOK_NAME] = __assign(__assign({}, context.builder.component.meta[hooks_2.METADATA_HOOK_NAME]), (0, helpers_1.parseCodeJson)(expression.arguments[0]));
202
185
  }
203
186
  }
204
187
  }
@@ -214,10 +197,10 @@ var componentFunctionToJson = function (node, context) {
214
197
  if (types.isVariableDeclaration(item)) {
215
198
  var declaration = item.declarations[0];
216
199
  var init = declaration.init;
217
- if (types.isCallExpression(init)) {
200
+ if (types.isCallExpression(init) && types.isIdentifier(init.callee)) {
218
201
  // React format, like:
219
202
  // const [foo, setFoo] = useState(...)
220
- if (types.isArrayPattern(declaration.id)) {
203
+ if (types.isArrayPattern(declaration.id) && init.callee.name === hooks_1.HOOKS.STATE) {
221
204
  var varName = types.isIdentifier(declaration.id.elements[0]) && declaration.id.elements[0].name;
222
205
  if (varName) {
223
206
  var value = init.arguments[0];
@@ -243,48 +226,46 @@ var componentFunctionToJson = function (node, context) {
243
226
  }
244
227
  }
245
228
  }
246
- // Legacy format, like:
229
+ // Solid store format, like:
247
230
  // const state = useStore({...})
248
- else if (types.isIdentifier(init.callee)) {
249
- if (init.callee.name === hooks_1.HOOKS.STATE || init.callee.name === hooks_1.HOOKS.STORE) {
250
- var firstArg = init.arguments[0];
251
- if (types.isObjectExpression(firstArg)) {
252
- var useStoreState = (0, state_1.parseStateObjectToMitosisState)(firstArg);
253
- Object.assign(state, useStoreState);
254
- }
231
+ if (init.callee.name === hooks_1.HOOKS.STORE) {
232
+ var firstArg = init.arguments[0];
233
+ if (types.isObjectExpression(firstArg)) {
234
+ var useStoreState = (0, state_1.parseStateObjectToMitosisState)(firstArg);
235
+ Object.assign(state, useStoreState);
255
236
  }
256
- else if (init.callee.name === hooks_1.HOOKS.CONTEXT) {
257
- var firstArg = init.arguments[0];
258
- if (types.isVariableDeclarator(declaration) && types.isIdentifier(declaration.id)) {
259
- if (types.isIdentifier(firstArg)) {
260
- var varName = declaration.id.name;
261
- var name_1 = firstArg.name;
262
- accessedContext[varName] = {
263
- name: name_1,
264
- path: (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, name_1),
265
- };
266
- }
267
- else {
268
- var varName = declaration.id.name;
269
- var name_2 = (0, generator_1.default)(firstArg).code;
270
- accessedContext[varName] = {
271
- name: name_2,
272
- path: '',
273
- };
274
- }
237
+ }
238
+ else if (init.callee.name === hooks_1.HOOKS.CONTEXT) {
239
+ var firstArg = init.arguments[0];
240
+ if (types.isVariableDeclarator(declaration) && types.isIdentifier(declaration.id)) {
241
+ if (types.isIdentifier(firstArg)) {
242
+ var varName = declaration.id.name;
243
+ var name_1 = firstArg.name;
244
+ accessedContext[varName] = {
245
+ name: name_1,
246
+ path: (0, trace_reference_to_module_path_1.traceReferenceToModulePath)(context.builder.component.imports, name_1),
247
+ };
275
248
  }
276
- }
277
- else if (init.callee.name === hooks_1.HOOKS.REF) {
278
- if (types.isIdentifier(declaration.id)) {
279
- var firstArg = init.arguments[0];
249
+ else {
280
250
  var varName = declaration.id.name;
281
- refs[varName] = {
282
- argument: (0, generator_1.default)(firstArg).code,
251
+ var name_2 = (0, generator_1.default)(firstArg).code;
252
+ accessedContext[varName] = {
253
+ name: name_2,
254
+ path: '',
283
255
  };
284
- // Typescript Parameter
285
- if (types.isTSTypeParameterInstantiation(init.typeParameters)) {
286
- refs[varName].typeParameter = (0, generator_1.default)(init.typeParameters.params[0]).code;
287
- }
256
+ }
257
+ }
258
+ }
259
+ else if (init.callee.name === hooks_1.HOOKS.REF) {
260
+ if (types.isIdentifier(declaration.id)) {
261
+ var firstArg = init.arguments[0];
262
+ var varName = declaration.id.name;
263
+ refs[varName] = {
264
+ argument: (0, generator_1.default)(firstArg).code,
265
+ };
266
+ // Typescript Parameter
267
+ if (types.isTSTypeParameterInstantiation(init.typeParameters)) {
268
+ refs[varName].typeParameter = (0, generator_1.default)(init.typeParameters.params[0]).code;
288
269
  }
289
270
  }
290
271
  }
@@ -2,6 +2,7 @@ import * as babel from '@babel/core';
2
2
  declare const types: typeof babel.types;
3
3
  export declare const selfClosingTags: Set<string>;
4
4
  export declare const uncapitalize: (str: string) => string;
5
+ export declare const parseCode: (node: babel.types.Node) => string;
5
6
  export declare const parseCodeJson: (node: babel.types.Node) => any;
6
7
  export declare const isImportOrDefaultExport: (node: babel.Node) => boolean;
7
8
  export {};
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.isImportOrDefaultExport = exports.parseCodeJson = exports.uncapitalize = exports.selfClosingTags = void 0;
29
+ exports.isImportOrDefaultExport = exports.parseCodeJson = exports.parseCode = exports.uncapitalize = exports.selfClosingTags = void 0;
30
30
  var babel = __importStar(require("@babel/core"));
31
31
  var generator_1 = __importDefault(require("@babel/generator"));
32
32
  var json_1 = require("../../helpers/json");
@@ -54,8 +54,16 @@ var uncapitalize = function (str) {
54
54
  return str[0].toLowerCase() + str.slice(1);
55
55
  };
56
56
  exports.uncapitalize = uncapitalize;
57
+ var parseCode = function (node) {
58
+ // if the node is a string literal, make sure to wrap the return value with quotes
59
+ // if (types.isStringLiteral(node)) {
60
+ // return `"${node.value}"`;
61
+ // }
62
+ return (0, generator_1.default)(node).code;
63
+ };
64
+ exports.parseCode = parseCode;
57
65
  var parseCodeJson = function (node) {
58
- var code = (0, generator_1.default)(node).code;
66
+ var code = (0, exports.parseCode)(node);
59
67
  return (0, json_1.tryParseJson)(code);
60
68
  };
61
69
  exports.parseCodeJson = parseCodeJson;
@@ -10,5 +10,5 @@ export declare const METADATA_HOOK_NAME = "useMetadata";
10
10
  * This function collects metadata and removes the statement from
11
11
  * the returned nodes array
12
12
  */
13
- export declare const collectMetadata: (nodes: babel.types.Statement[], component: MitosisComponent, options: ParseMitosisOptions) => babel.types.Statement[];
13
+ export declare const collectModuleScopeHooks: (nodes: babel.types.Statement[], component: MitosisComponent, options: ParseMitosisOptions) => babel.types.Statement[];
14
14
  export {};
@@ -34,7 +34,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
34
34
  return result;
35
35
  };
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.collectMetadata = exports.METADATA_HOOK_NAME = void 0;
37
+ exports.collectModuleScopeHooks = exports.METADATA_HOOK_NAME = void 0;
38
38
  var babel = __importStar(require("@babel/core"));
39
39
  var hooks_1 = require("../../constants/hooks");
40
40
  var function_parser_1 = require("./function-parser");
@@ -60,7 +60,7 @@ exports.METADATA_HOOK_NAME = 'useMetadata';
60
60
  * This function collects metadata and removes the statement from
61
61
  * the returned nodes array
62
62
  */
63
- var collectMetadata = function (nodes, component, options) {
63
+ var collectModuleScopeHooks = function (nodes, component, options) {
64
64
  var hookNames = new Set((options.jsonHookNames || []).concat(exports.METADATA_HOOK_NAME));
65
65
  return nodes.filter(function (node) {
66
66
  var hook = getHook(node);
@@ -94,4 +94,4 @@ var collectMetadata = function (nodes, component, options) {
94
94
  return true;
95
95
  });
96
96
  };
97
- exports.collectMetadata = collectMetadata;
97
+ exports.collectModuleScopeHooks = collectModuleScopeHooks;
@@ -1,4 +1,3 @@
1
1
  export * from './jsx';
2
2
  export { selfClosingTags } from './helpers';
3
- export { METADATA_HOOK_NAME } from './metadata';
4
- export { parseStateObject } from './state';
3
+ export { METADATA_HOOK_NAME } from './hooks';
@@ -14,11 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.parseStateObject = exports.METADATA_HOOK_NAME = exports.selfClosingTags = void 0;
17
+ exports.METADATA_HOOK_NAME = exports.selfClosingTags = void 0;
18
18
  __exportStar(require("./jsx"), exports);
19
19
  var helpers_1 = require("./helpers");
20
20
  Object.defineProperty(exports, "selfClosingTags", { enumerable: true, get: function () { return helpers_1.selfClosingTags; } });
21
- var metadata_1 = require("./metadata");
22
- Object.defineProperty(exports, "METADATA_HOOK_NAME", { enumerable: true, get: function () { return metadata_1.METADATA_HOOK_NAME; } });
23
- var state_1 = require("./state");
24
- Object.defineProperty(exports, "parseStateObject", { enumerable: true, get: function () { return state_1.parseStateObject; } });
21
+ var hooks_1 = require("./hooks");
22
+ Object.defineProperty(exports, "METADATA_HOOK_NAME", { enumerable: true, get: function () { return hooks_1.METADATA_HOOK_NAME; } });
@@ -45,7 +45,7 @@ var replace_new_lines_in_strings_1 = require("../../helpers/replace-new-lines-in
45
45
  var json_1 = require("../../helpers/json");
46
46
  var ast_1 = require("./ast");
47
47
  var state_1 = require("./state");
48
- var metadata_1 = require("./metadata");
48
+ var hooks_1 = require("./hooks");
49
49
  var context_1 = require("./context");
50
50
  var helpers_1 = require("./helpers");
51
51
  var component_types_1 = require("./component-types");
@@ -119,7 +119,9 @@ function parseJsx(jsx, _options) {
119
119
  return !types.isExportDefaultDeclaration(node) && types.isFunctionDeclaration(node);
120
120
  })
121
121
  .map(function (node) { return "export default ".concat((0, generator_1.default)(node).code); });
122
- 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, options); }, types.program, generator_1.default, function (generatorResult) { return generatorResult.code; });
122
+ var preComponentCode = (0, function_1.pipe)(path.node.body.filter(function (statement) { return !(0, helpers_1.isImportOrDefaultExport)(statement); }), function (statements) {
123
+ return (0, hooks_1.collectModuleScopeHooks)(statements, context.builder.component, options);
124
+ }, types.program, generator_1.default, function (generatorResult) { return generatorResult.code; });
123
125
  // TODO: support multiple? e.g. for others to add imports?
124
126
  context.builder.component.hooks.preComponent = { code: preComponentCode };
125
127
  path.replaceWith(types.program(keepStatements));
@@ -1,6 +1,5 @@
1
1
  import * as babel from '@babel/core';
2
- import { MitosisComponent } from '../../types/mitosis-component';
3
- import { JSONObject } from '../../types/json';
2
+ import { MitosisComponent, MitosisState } from '../../types/mitosis-component';
4
3
  declare const types: typeof babel.types;
5
4
  /**
6
5
  * Convert state identifiers from React hooks format to the state.* format Mitosis needs
@@ -9,6 +8,5 @@ declare const types: typeof babel.types;
9
8
  * setText(...) -> state.text = ...
10
9
  */
11
10
  export declare function mapStateIdentifiers(json: MitosisComponent): void;
12
- export declare const parseStateObject: (object: babel.types.ObjectExpression) => JSONObject;
13
- export declare const parseStateObjectToMitosisState: (object: babel.types.ObjectExpression) => import("../../types/mitosis-component").MitosisState;
11
+ export declare const parseStateObjectToMitosisState: (object: babel.types.ObjectExpression) => MitosisState;
14
12
  export {};
@@ -37,18 +37,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.parseStateObjectToMitosisState = exports.parseStateObject = exports.mapStateIdentifiers = void 0;
40
+ exports.parseStateObjectToMitosisState = exports.mapStateIdentifiers = void 0;
41
41
  var babel = __importStar(require("@babel/core"));
42
- var generator_1 = __importDefault(require("@babel/generator"));
43
- var outdated_prefixes_1 = require("../constants/outdated-prefixes");
44
42
  var traverse_1 = __importDefault(require("traverse"));
45
43
  var babel_transform_1 = require("../../helpers/babel-transform");
46
44
  var capitalize_1 = require("../../helpers/capitalize");
47
45
  var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
48
46
  var replace_identifiers_1 = require("../../helpers/replace-identifiers");
49
47
  var helpers_1 = require("./helpers");
50
- var function_1 = require("fp-ts/lib/function");
51
- var state_1 = require("../helpers/state");
52
48
  var types = babel.types;
53
49
  function mapStateIdentifiersInExpression(expression, stateProperties) {
54
50
  var setExpressions = stateProperties.map(function (propertyName) { return "set".concat((0, capitalize_1.capitalize)(propertyName)); });
@@ -127,36 +123,63 @@ function mapStateIdentifiers(json) {
127
123
  });
128
124
  }
129
125
  exports.mapStateIdentifiers = mapStateIdentifiers;
130
- var createFunctionStringLiteralObjectProperty = function (key, node) {
131
- return types.objectProperty(key, types.stringLiteral("".concat(outdated_prefixes_1.__DO_NOT_USE_FUNCTION_LITERAL_PREFIX).concat((0, generator_1.default)(node).code)));
132
- };
133
- var parseStateValue = function (item) {
126
+ var processStateObjectSlice = function (item) {
134
127
  if (types.isObjectProperty(item)) {
135
128
  if (types.isFunctionExpression(item.value)) {
136
- return createFunctionStringLiteralObjectProperty(item.key, item.value);
129
+ return {
130
+ code: (0, helpers_1.parseCode)(item.value),
131
+ type: 'function',
132
+ };
137
133
  }
138
134
  else if (types.isArrowFunctionExpression(item.value)) {
139
- // convert this to an object method instead
140
135
  var n = babel.types.objectMethod('method', item.key, item.value.params, item.value.body);
141
- return types.objectProperty(item.key, types.stringLiteral("".concat(outdated_prefixes_1.__DO_NOT_USE_METHOD_LITERAL_PREFIX).concat((0, generator_1.default)(n).code)));
136
+ var code = (0, helpers_1.parseCode)(n);
137
+ return {
138
+ code: code,
139
+ type: 'method',
140
+ };
141
+ }
142
+ else {
143
+ // Remove typescript types, e.g. from
144
+ // { foo: ('string' as SomeType) }
145
+ if (types.isTSAsExpression(item.value)) {
146
+ return {
147
+ code: (0, helpers_1.parseCodeJson)(item.value.expression),
148
+ type: 'property',
149
+ };
150
+ }
151
+ return {
152
+ code: (0, helpers_1.parseCodeJson)(item.value),
153
+ type: 'property',
154
+ };
142
155
  }
143
156
  }
144
- if (types.isObjectMethod(item)) {
145
- return types.objectProperty(item.key, types.stringLiteral("".concat(outdated_prefixes_1.__DO_NOT_USE_METHOD_LITERAL_PREFIX).concat((0, generator_1.default)(__assign(__assign({}, item), { returnType: null })).code)));
157
+ else if (types.isObjectMethod(item)) {
158
+ var n = (0, helpers_1.parseCode)(__assign(__assign({}, item), { returnType: null }));
159
+ var isGetter = item.kind === 'get';
160
+ return {
161
+ code: n,
162
+ type: isGetter ? 'getter' : 'method',
163
+ };
146
164
  }
147
- // Remove typescript types, e.g. from
148
- // { foo: ('string' as SomeType) }
149
- if (types.isObjectProperty(item)) {
150
- var value = item.value;
151
- if (types.isTSAsExpression(value)) {
152
- value = value.expression;
153
- }
154
- return types.objectProperty(item.key, value);
165
+ else {
166
+ throw new Error('Unexpected state value type', item);
155
167
  }
156
- return item;
157
168
  };
158
- var parseStateObject = function (object) {
159
- return (0, function_1.pipe)(object.properties, function (p) { return p.map(parseStateValue); }, types.objectExpression, helpers_1.parseCodeJson);
169
+ var parseStateObjectToMitosisState = function (object) {
170
+ var state = {};
171
+ object.properties.forEach(function (x) {
172
+ if (types.isSpreadElement(x)) {
173
+ throw new Error('Parse Error: Mitosis cannot consume spread element in state object: ' + x);
174
+ }
175
+ if (types.isPrivateName(x.key)) {
176
+ throw new Error('Parse Error: Mitosis cannot consume private name in state object: ' + x.key);
177
+ }
178
+ if (!types.isIdentifier(x.key)) {
179
+ throw new Error('Parse Error: Mitosis cannot consume non-identifier key in state object: ' + x.key);
180
+ }
181
+ state[x.key.name] = processStateObjectSlice(x);
182
+ });
183
+ return state;
160
184
  };
161
- exports.parseStateObject = parseStateObject;
162
- exports.parseStateObjectToMitosisState = (0, function_1.flow)(exports.parseStateObject, state_1.mapJsonObjectToStateValue);
185
+ exports.parseStateObjectToMitosisState = parseStateObjectToMitosisState;