@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.
- package/dist/src/parsers/builder/builder.d.ts +34 -0
- package/dist/src/parsers/{builder.js → builder/builder.js} +16 -12
- package/dist/src/parsers/{helpers/state.d.ts → builder/helpers.d.ts} +2 -2
- package/dist/src/parsers/builder/helpers.js +26 -0
- package/dist/src/parsers/builder/index.d.ts +1 -0
- package/dist/src/parsers/builder/index.js +17 -0
- package/dist/src/parsers/jsx/function-parser.js +54 -73
- package/dist/src/parsers/jsx/helpers.d.ts +1 -0
- package/dist/src/parsers/jsx/helpers.js +10 -2
- package/dist/src/parsers/jsx/{metadata.d.ts → hooks.d.ts} +1 -1
- package/dist/src/parsers/jsx/{metadata.js → hooks.js} +3 -3
- package/dist/src/parsers/jsx/index.d.ts +1 -2
- package/dist/src/parsers/jsx/index.js +3 -5
- package/dist/src/parsers/jsx/jsx.js +4 -2
- package/dist/src/parsers/jsx/state.d.ts +2 -4
- package/dist/src/parsers/jsx/state.js +50 -27
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/high.jsx +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/low.jsx +240 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mAccordion/med.jsx +4 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/high.jsx +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/low.jsx +54 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mFor/med.jsx +4 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/high.js +9 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/low.js +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage/med.js +151 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/high.js +9 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/low.js +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mImage.slow/med.js +151 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/high.cjs +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/low.cjs +45 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbindings/med.cjs +3 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/high.js +3 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/low.js +25 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mbutton/med.js +31 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/high.jsx +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/low.jsx +108 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mcomponent/033[2m/>//033[22mbindings/med.jsx +7 -0
- 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
- 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
- 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
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/high.cjs +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/low.cjs +58 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mfor-loop.bindings/med.cjs +5 -0
- 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
- 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
- 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
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/high.cjs +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/low.cjs +47 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mmount/med.cjs +3 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/high.js +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/low.js +33 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mpage-with-symbol/med.js +4 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/high.jsx +9 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/low.jsx +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22mshow-hide/med.jsx +170 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/high.js +0 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/low.js +30 -0
- package/dist/test/src/__tests__/qwik.test.ts/033[2m/>//033[22mqwik/033[2m/>//033[22msvg/med.js +4 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -3
- package/dist/src/parsers/builder.d.ts +0 -104
- package/dist/src/parsers/constants/outdated-prefixes.d.ts +0 -10
- package/dist/src/parsers/constants/outdated-prefixes.js +0 -13
- 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("
|
|
45
|
+
var fast_clone_1 = require("../../helpers/fast-clone");
|
|
46
46
|
var traverse_1 = __importDefault(require("traverse"));
|
|
47
|
-
var media_sizes_1 = require("
|
|
48
|
-
var capitalize_1 = require("
|
|
49
|
-
var create_mitosis_component_1 = require("
|
|
50
|
-
var create_mitosis_node_1 = require("
|
|
51
|
-
var jsx_1 = require("
|
|
52
|
-
var parsers_1 = require("
|
|
53
|
-
var __1 = require("
|
|
54
|
-
var
|
|
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,
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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
|
|
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 = (
|
|
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 = (
|
|
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 = (
|
|
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 = (
|
|
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 ===
|
|
201
|
-
context.builder.component.meta[
|
|
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
|
-
//
|
|
229
|
+
// Solid store format, like:
|
|
247
230
|
// const state = useStore({...})
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
-
|
|
282
|
-
|
|
251
|
+
var name_2 = (0, generator_1.default)(firstArg).code;
|
|
252
|
+
accessedContext[varName] = {
|
|
253
|
+
name: name_2,
|
|
254
|
+
path: '',
|
|
283
255
|
};
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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,
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
97
|
+
exports.collectModuleScopeHooks = collectModuleScopeHooks;
|
|
@@ -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.
|
|
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
|
|
22
|
-
Object.defineProperty(exports, "METADATA_HOOK_NAME", { enumerable: true, get: function () { return
|
|
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
|
|
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) {
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
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
|
|
159
|
-
|
|
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.
|
|
162
|
-
exports.parseStateObjectToMitosisState = (0, function_1.flow)(exports.parseStateObject, state_1.mapJsonObjectToStateValue);
|
|
185
|
+
exports.parseStateObjectToMitosisState = parseStateObjectToMitosisState;
|
|
File without changes
|