@builder.io/mitosis 0.0.93 → 0.0.95
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/generators/builder.js +0 -1
- package/dist/src/generators/context/qwik.js +1 -1
- package/dist/src/generators/mitosis.js +2 -1
- package/dist/src/generators/qwik/component-generator.js +80 -163
- package/dist/src/generators/qwik/component.js +3 -3
- package/dist/src/generators/qwik/{add-prevent-default.d.ts → helpers/add-prevent-default.d.ts} +1 -1
- package/dist/src/generators/qwik/{add-prevent-default.js → helpers/add-prevent-default.js} +1 -1
- package/dist/src/generators/qwik/helpers/convert-method-to-function.d.ts +2 -0
- package/dist/src/generators/qwik/{convert-method-to-function.js → helpers/convert-method-to-function.js} +0 -1
- package/dist/src/generators/qwik/helpers/handlers.d.ts +3 -0
- package/dist/src/generators/qwik/{handlers.js → helpers/handlers.js} +3 -4
- package/dist/src/generators/qwik/helpers/state.d.ts +27 -0
- package/dist/src/generators/qwik/helpers/state.js +116 -0
- package/dist/src/generators/qwik/{styles.d.ts → helpers/styles.d.ts} +2 -2
- package/dist/src/generators/qwik/{styles.js → helpers/styles.js} +1 -1
- package/dist/src/generators/qwik/jsx.d.ts +1 -1
- package/dist/src/generators/qwik/jsx.js +3 -1
- package/dist/src/generators/qwik/src-generator.d.ts +0 -4
- package/dist/src/generators/qwik/src-generator.js +8 -13
- package/dist/src/generators/react/generator.js +2 -1
- package/dist/src/generators/{react-native.d.ts → react-native/index.d.ts} +3 -3
- package/dist/src/generators/{react-native.js → react-native/index.js} +46 -35
- package/dist/src/generators/react-native/sanitize-react-native-block-styles.d.ts +3 -0
- package/dist/src/generators/react-native/sanitize-react-native-block-styles.js +63 -0
- package/dist/src/generators/solid/index.js +4 -1
- package/dist/src/generators/svelte/svelte.js +13 -1
- package/dist/src/generators/vue/helpers.js +1 -1
- package/dist/src/helpers/babel-transform.d.ts +3 -3
- package/dist/src/helpers/babel-transform.js +42 -26
- package/dist/src/helpers/is-root-text-node.d.ts +4 -0
- package/dist/src/helpers/is-root-text-node.js +12 -0
- package/dist/src/helpers/map-refs.js +2 -26
- package/dist/src/helpers/parsers.js +11 -5
- package/dist/src/helpers/patterns.d.ts +1 -0
- package/dist/src/helpers/patterns.js +3 -1
- package/dist/src/helpers/plugins/process-code.d.ts +1 -1
- package/dist/src/helpers/plugins/process-code.js +9 -9
- package/dist/src/helpers/render-imports.js +1 -0
- package/dist/src/parsers/jsx/component-types.d.ts +2 -2
- package/dist/src/parsers/jsx/component-types.js +7 -16
- package/dist/src/parsers/jsx/index.d.ts +1 -1
- package/dist/src/parsers/jsx/index.js +3 -16
- package/dist/src/parsers/jsx/jsx.js +17 -22
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/generators/qwik/convert-method-to-function.d.ts +0 -1
- package/dist/src/generators/qwik/handlers.d.ts +0 -4
- /package/dist/src/generators/qwik/{stable-inject.d.ts → helpers/stable-inject.d.ts} +0 -0
- /package/dist/src/generators/qwik/{stable-inject.js → helpers/stable-inject.js} +0 -0
- /package/dist/src/generators/qwik/{stable-serialize.d.ts → helpers/stable-serialize.d.ts} +0 -0
- /package/dist/src/generators/qwik/{stable-serialize.js → helpers/stable-serialize.js} +0 -0
|
@@ -64,10 +64,6 @@ export declare class Imports {
|
|
|
64
64
|
get(moduleName: string, symbolName: string, as?: string): Symbol;
|
|
65
65
|
hasImport(localName: string): boolean;
|
|
66
66
|
}
|
|
67
|
-
export declare class Block {
|
|
68
|
-
imports: Imports;
|
|
69
|
-
constructor(imports: Imports);
|
|
70
|
-
}
|
|
71
67
|
export declare function quote(text: string): string;
|
|
72
68
|
export declare function invoke(symbol: Symbol | string, args: any[], typeParameters?: string[]): (this: SrcBuilder) => void;
|
|
73
69
|
export declare function arrowFnBlock(args: string[], statements: any[], argTypes?: string[]): (this: SrcBuilder) => void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.iteratorProperty = exports.lastProperty = exports.isStatement = exports.iif = exports.arrowFnValue = exports.arrowFnBlock = exports.invoke = exports.quote = exports.
|
|
3
|
+
exports.iteratorProperty = exports.lastProperty = exports.isStatement = exports.iif = exports.arrowFnValue = exports.arrowFnBlock = exports.invoke = exports.quote = exports.Imports = exports.Symbol = exports.SrcBuilder = exports.File = void 0;
|
|
4
4
|
var standalone_1 = require("prettier/standalone");
|
|
5
5
|
var jsx_1 = require("../../parsers/jsx");
|
|
6
6
|
var builder_1 = require("../../parsers/builder");
|
|
7
|
-
var stable_serialize_1 = require("./stable-serialize");
|
|
7
|
+
var stable_serialize_1 = require("./helpers/stable-serialize");
|
|
8
8
|
var File = /** @class */ (function () {
|
|
9
9
|
function File(filename, options, qwikModule, qrlPrefix) {
|
|
10
10
|
this.imports = new Imports();
|
|
@@ -111,7 +111,6 @@ function removeExt(filename) {
|
|
|
111
111
|
var indx = filename.lastIndexOf('.');
|
|
112
112
|
return indx == -1 ? filename : filename.substr(0, indx);
|
|
113
113
|
}
|
|
114
|
-
var spaces = [''];
|
|
115
114
|
var SrcBuilder = /** @class */ (function () {
|
|
116
115
|
function SrcBuilder(file, options) {
|
|
117
116
|
this.buf = [];
|
|
@@ -373,8 +372,6 @@ var SrcBuilder = /** @class */ (function () {
|
|
|
373
372
|
if (value) {
|
|
374
373
|
if (key === 'innerHTML')
|
|
375
374
|
key = 'dangerouslySetInnerHTML';
|
|
376
|
-
if (key === 'for')
|
|
377
|
-
key = 'htmlFor';
|
|
378
375
|
if (key === 'dataSet')
|
|
379
376
|
return; // ignore
|
|
380
377
|
if (self.isJSX) {
|
|
@@ -494,13 +491,6 @@ function ignoreKey(key) {
|
|
|
494
491
|
key == '' ||
|
|
495
492
|
key.indexOf('.') !== -1);
|
|
496
493
|
}
|
|
497
|
-
var Block = /** @class */ (function () {
|
|
498
|
-
function Block(imports) {
|
|
499
|
-
this.imports = imports;
|
|
500
|
-
}
|
|
501
|
-
return Block;
|
|
502
|
-
}());
|
|
503
|
-
exports.Block = Block;
|
|
504
494
|
function possiblyQuotePropertyName(key) {
|
|
505
495
|
return /^\w[\w\d]*$/.test(key) ? key : quote(key);
|
|
506
496
|
}
|
|
@@ -580,10 +570,15 @@ function literalTagName(symbol) {
|
|
|
580
570
|
* it is not 100% but a good enough approximation
|
|
581
571
|
*/
|
|
582
572
|
function isStatement(code) {
|
|
573
|
+
// remove trailing `!` as it is used to mark a non-null assertion in TS
|
|
574
|
+
// it messes up the logic afterwards
|
|
575
|
+
if (code.endsWith('!')) {
|
|
576
|
+
code = code.substr(0, code.length - 1);
|
|
577
|
+
}
|
|
583
578
|
code = code.trim();
|
|
584
579
|
if ((code.startsWith('(') && code.endsWith(')')) ||
|
|
585
580
|
(code.startsWith('{') && code.endsWith('}'))) {
|
|
586
|
-
// Code starting with `(` is most likely
|
|
581
|
+
// Code starting with `(` is most likely an IFF and hence is an expression.
|
|
587
582
|
return false;
|
|
588
583
|
}
|
|
589
584
|
var codeNoStrings = code.replace(STRING_LITERAL, 'STRING_LITERAL');
|
|
@@ -48,11 +48,11 @@ var bindings_1 = require("../../helpers/bindings");
|
|
|
48
48
|
var blocks_1 = require("./blocks");
|
|
49
49
|
var merge_options_1 = require("../../helpers/merge-options");
|
|
50
50
|
var replace_new_lines_in_strings_1 = require("../../helpers/replace-new-lines-in-strings");
|
|
51
|
+
var is_root_text_node_1 = require("../../helpers/is-root-text-node");
|
|
51
52
|
exports.contextPropDrillingKey = '_context';
|
|
52
53
|
/**
|
|
53
54
|
* If the root Mitosis component only has 1 child, and it is a `Show`/`For` node, then we need to wrap it in a fragment.
|
|
54
55
|
* Otherwise, we end up with invalid React render code.
|
|
55
|
-
*
|
|
56
56
|
*/
|
|
57
57
|
var isRootSpecialNode = function (json) {
|
|
58
58
|
return json.children.length === 1 && ['Show', 'For'].includes(json.children[0].name);
|
|
@@ -278,6 +278,7 @@ var _componentToReact = function (json, options, isSubComponent) {
|
|
|
278
278
|
reactLibImports.add('useEffect');
|
|
279
279
|
}
|
|
280
280
|
var wrap = (0, helpers_2.wrapInFragment)(json) ||
|
|
281
|
+
(0, is_root_text_node_1.isRootTextNode)(json) ||
|
|
281
282
|
(componentHasStyles &&
|
|
282
283
|
(options.stylesType === 'styled-jsx' || options.stylesType === 'style-tag')) ||
|
|
283
284
|
isRootSpecialNode(json);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ClassStyleMap } from '
|
|
2
|
-
import { MitosisComponent } from '
|
|
3
|
-
import { BaseTranspilerOptions, TranspilerGenerator } from '
|
|
1
|
+
import { ClassStyleMap } from '../../helpers/styles/helpers';
|
|
2
|
+
import { MitosisComponent } from '../../types/mitosis-component';
|
|
3
|
+
import { BaseTranspilerOptions, TranspilerGenerator } from '../../types/transpiler';
|
|
4
4
|
export interface ToReactNativeOptions extends BaseTranspilerOptions {
|
|
5
5
|
stylesType: 'emotion' | 'react-native';
|
|
6
6
|
stateType: 'useState' | 'mobx' | 'valtio' | 'solid' | 'builder';
|
|
@@ -17,57 +17,68 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.componentToReactNative = exports.collectReactNativeStyles = void 0;
|
|
18
18
|
var json5_1 = __importDefault(require("json5"));
|
|
19
19
|
var lodash_1 = require("lodash");
|
|
20
|
-
var fast_clone_1 = require("
|
|
20
|
+
var fast_clone_1 = require("../../helpers/fast-clone");
|
|
21
21
|
var traverse_1 = __importDefault(require("traverse"));
|
|
22
|
-
var is_mitosis_node_1 = require("
|
|
23
|
-
var react_1 = require("
|
|
24
|
-
var bindings_1 = require("
|
|
25
|
-
var merge_options_1 = require("
|
|
26
|
-
var is_children_1 = __importDefault(require("
|
|
22
|
+
var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
|
|
23
|
+
var react_1 = require("../react");
|
|
24
|
+
var bindings_1 = require("../../helpers/bindings");
|
|
25
|
+
var merge_options_1 = require("../../helpers/merge-options");
|
|
26
|
+
var is_children_1 = __importDefault(require("../../helpers/is-children"));
|
|
27
|
+
var sanitize_react_native_block_styles_1 = require("./sanitize-react-native-block-styles");
|
|
27
28
|
var stylePropertiesThatMustBeNumber = new Set(['lineHeight']);
|
|
28
29
|
var MEDIA_QUERY_KEY_REGEX = /^@media.*/;
|
|
30
|
+
var sanitizeStyle = function (obj) { return function (key, value) {
|
|
31
|
+
var propertyValue = obj[key];
|
|
32
|
+
if (key.match(MEDIA_QUERY_KEY_REGEX)) {
|
|
33
|
+
console.warn('Unsupported: skipping media queries for react-native: ', key, propertyValue);
|
|
34
|
+
delete obj[key];
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
}; };
|
|
29
38
|
var collectReactNativeStyles = function (json) {
|
|
30
39
|
var styleMap = {};
|
|
31
40
|
var componentIndexes = {};
|
|
41
|
+
var getStyleSheetName = function (item) {
|
|
42
|
+
var componentName = (0, lodash_1.camelCase)(item.name || 'view');
|
|
43
|
+
// If we have already seen this component name, we will increment the index. Otherwise, we will set the index to 1.
|
|
44
|
+
var index = (componentIndexes[componentName] = (componentIndexes[componentName] || 0) + 1);
|
|
45
|
+
return "".concat(componentName).concat(index);
|
|
46
|
+
};
|
|
32
47
|
(0, traverse_1.default)(json).forEach(function (item) {
|
|
33
|
-
var _a, _b;
|
|
34
|
-
if (!(0, is_mitosis_node_1.isMitosisNode)(item)
|
|
48
|
+
var _a, _b, _c;
|
|
49
|
+
if (!(0, is_mitosis_node_1.isMitosisNode)(item)) {
|
|
35
50
|
return;
|
|
36
51
|
}
|
|
37
|
-
var
|
|
52
|
+
var cssValue = json5_1.default.parse(((_a = item.bindings.css) === null || _a === void 0 ? void 0 : _a.code) || '{}');
|
|
38
53
|
delete item.bindings.css;
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
var propertyValue = value[key];
|
|
45
|
-
if (key.match(MEDIA_QUERY_KEY_REGEX)) {
|
|
46
|
-
console.warn('Unsupported: skipping media queries for react-native: ', key, propertyValue);
|
|
47
|
-
delete value[key];
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
if (stylePropertiesThatMustBeNumber.has(key) && typeof propertyValue !== 'number') {
|
|
51
|
-
console.warn("Style key ".concat(key, " must be a number, but had value `").concat(propertyValue, "`"));
|
|
52
|
-
delete value[key];
|
|
53
|
-
continue;
|
|
54
|
+
if ((0, lodash_1.size)(cssValue)) {
|
|
55
|
+
// Style properties like `"20px"` need to be numbers like `20` for react native
|
|
56
|
+
for (var key in cssValue) {
|
|
57
|
+
sanitizeStyle(cssValue)(key, cssValue[key]);
|
|
58
|
+
cssValue = (0, sanitize_react_native_block_styles_1.sanitizeReactNativeBlockStyles)(cssValue);
|
|
54
59
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
var styleValue = json5_1.default.parse(((_b = item.bindings.style) === null || _b === void 0 ? void 0 : _b.code) || '{}');
|
|
63
|
+
if ((0, lodash_1.size)(styleValue)) {
|
|
64
|
+
// Style properties like `"20px"` need to be numbers like `20` for react native
|
|
65
|
+
for (var key in styleValue) {
|
|
66
|
+
sanitizeStyle(styleValue)(key, styleValue[key]);
|
|
67
|
+
styleValue = (0, sanitize_react_native_block_styles_1.sanitizeReactNativeBlockStyles)(styleValue);
|
|
60
68
|
}
|
|
69
|
+
item.bindings.style.code = json5_1.default.stringify(styleValue);
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
catch (e) { }
|
|
73
|
+
if (!(0, lodash_1.size)(cssValue)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
var styleSheetName = getStyleSheetName(item);
|
|
77
|
+
var styleSheetAccess = "styles.".concat(styleSheetName);
|
|
67
78
|
item.bindings.style = (0, bindings_1.createSingleBinding)({
|
|
68
|
-
code: ((
|
|
79
|
+
code: ((_c = item.bindings.style) === null || _c === void 0 ? void 0 : _c.code.replace(/}$/, ", ...".concat(styleSheetAccess, " }"))) || styleSheetAccess,
|
|
69
80
|
});
|
|
70
|
-
styleMap[
|
|
81
|
+
styleMap[styleSheetName] = cssValue;
|
|
71
82
|
});
|
|
72
83
|
return styleMap;
|
|
73
84
|
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.sanitizeReactNativeBlockStyles = void 0;
|
|
15
|
+
var propertiesThatMustBeNumber = new Set(['lineHeight']);
|
|
16
|
+
var displayValues = new Set(['flex', 'none']);
|
|
17
|
+
var normalizeNumber = function (value) {
|
|
18
|
+
if (Number.isNaN(value)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
else if (value < 0) {
|
|
22
|
+
// TODO: why are negative values not allowed?
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var sanitizeReactNativeBlockStyles = function (styles) {
|
|
30
|
+
return Object.keys(styles).reduce(function (acc, key) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
var propertyValue = styles[key];
|
|
33
|
+
if (key === 'display' && !displayValues.has(propertyValue)) {
|
|
34
|
+
console.warn("Style value for key \"display\" must be \"flex\" or \"none\" but had ".concat(propertyValue));
|
|
35
|
+
return acc;
|
|
36
|
+
}
|
|
37
|
+
if (propertiesThatMustBeNumber.has(key) && typeof propertyValue !== 'number') {
|
|
38
|
+
console.warn("Style key ".concat(key, " must be a number, but had value `").concat(styles[key], "`"));
|
|
39
|
+
return acc;
|
|
40
|
+
}
|
|
41
|
+
if (typeof propertyValue === 'string') {
|
|
42
|
+
// `px` units need to be stripped and replaced with numbers
|
|
43
|
+
// https://regexr.com/6ualn
|
|
44
|
+
var isPixelUnit = propertyValue.match(/^-?(\d*)(\.?)(\d*)*px$/);
|
|
45
|
+
if (isPixelUnit) {
|
|
46
|
+
var newValue = parseFloat(propertyValue);
|
|
47
|
+
var normalizedValue = normalizeNumber(newValue);
|
|
48
|
+
if (normalizedValue) {
|
|
49
|
+
return __assign(__assign({}, acc), (_a = {}, _a[key] = normalizedValue, _a));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return acc;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (propertyValue === '0') {
|
|
56
|
+
// 0 edge case needs to be handled
|
|
57
|
+
return __assign(__assign({}, acc), (_b = {}, _b[key] = 0, _b));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return __assign(__assign({}, acc), (_c = {}, _c[key] = propertyValue, _c));
|
|
61
|
+
}, {});
|
|
62
|
+
};
|
|
63
|
+
exports.sanitizeReactNativeBlockStyles = sanitizeReactNativeBlockStyles;
|
|
@@ -77,6 +77,7 @@ var process_code_1 = require("../../helpers/plugins/process-code");
|
|
|
77
77
|
var context_1 = require("../helpers/context");
|
|
78
78
|
var blocks_1 = require("./blocks");
|
|
79
79
|
var bindings_1 = require("../../helpers/bindings");
|
|
80
|
+
var is_root_text_node_1 = require("../../helpers/is-root-text-node");
|
|
80
81
|
// Transform <foo.bar key={value} /> to <Dynamic compnent={foo.bar} key={value} />
|
|
81
82
|
function processDynamicComponents(json, options) {
|
|
82
83
|
var found = false;
|
|
@@ -152,7 +153,9 @@ var componentToSolid = function (passedOptions) {
|
|
|
152
153
|
}
|
|
153
154
|
addProviderComponents(json, options);
|
|
154
155
|
var componentHasStyles = (0, helpers_1.hasCss)(json);
|
|
155
|
-
var addWrapper = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes).length !== 1 ||
|
|
156
|
+
var addWrapper = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes).length !== 1 ||
|
|
157
|
+
options.stylesType === 'style-tag' ||
|
|
158
|
+
(0, is_root_text_node_1.isRootTextNode)(json);
|
|
156
159
|
// we need to run this before we run the code processor plugin, so the dynamic component variables are transformed
|
|
157
160
|
var foundDynamicComponents = processDynamicComponents(json, options);
|
|
158
161
|
if (options.plugins) {
|
|
@@ -109,6 +109,18 @@ var componentToSvelte = function (userProvidedOptions) {
|
|
|
109
109
|
var component = _a.component;
|
|
110
110
|
var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, userProvidedOptions);
|
|
111
111
|
options.plugins = __spreadArray(__spreadArray([], (options.plugins || []), true), [
|
|
112
|
+
// Strip types from any JS code that ends up in the template, because Svelte does not support TS code in templates.
|
|
113
|
+
(0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
|
|
114
|
+
switch (codeType) {
|
|
115
|
+
case 'bindings':
|
|
116
|
+
case 'properties':
|
|
117
|
+
return babel_transform_1.convertTypeScriptToJS;
|
|
118
|
+
case 'hooks':
|
|
119
|
+
case 'hooks-deps':
|
|
120
|
+
case 'state':
|
|
121
|
+
return function (x) { return x; };
|
|
122
|
+
}
|
|
123
|
+
}),
|
|
112
124
|
(0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
|
|
113
125
|
switch (codeType) {
|
|
114
126
|
case 'hooks':
|
|
@@ -251,7 +263,7 @@ var componentToSvelte = function (userProvidedOptions) {
|
|
|
251
263
|
}
|
|
252
264
|
catch (err) {
|
|
253
265
|
console.warn('Could not prettify');
|
|
254
|
-
console.warn(
|
|
266
|
+
console.warn(str, err);
|
|
255
267
|
}
|
|
256
268
|
}
|
|
257
269
|
str = str.replace(/<script>\n<\/script>/g, '').trim();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as babel from '@babel/core';
|
|
2
2
|
import type { Visitor } from '@babel/traverse';
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor?: babel.Visitor<VisitorContextType> | undefined) => string;
|
|
3
|
+
export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor?: babel.Visitor<VisitorContextType> | undefined, stripTypes?: boolean) => string;
|
|
5
4
|
declare type ExpressionType = 'expression' | 'unknown' | 'block' | 'functionBody';
|
|
6
|
-
export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: babel.Visitor<VisitorContextType>, initialType?: ExpressionType) => string;
|
|
5
|
+
export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: babel.Visitor<VisitorContextType>, initialType?: ExpressionType, stripTypes?: boolean) => string;
|
|
6
|
+
export declare const convertTypeScriptToJS: (code: string) => string;
|
|
7
7
|
export {};
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
14
|
if (k2 === undefined) k2 = k;
|
|
4
15
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -31,16 +42,19 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
31
42
|
}
|
|
32
43
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
33
44
|
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
34
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.
|
|
49
|
+
exports.convertTypeScriptToJS = exports.babelTransformExpression = exports.babelTransformCode = void 0;
|
|
50
|
+
var preset_typescript_1 = __importDefault(require("@babel/preset-typescript"));
|
|
36
51
|
var babel = __importStar(require("@babel/core"));
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var decorators = require('@babel/plugin-syntax-decorators');
|
|
52
|
+
var plugin_syntax_typescript_1 = __importDefault(require("@babel/plugin-syntax-typescript"));
|
|
53
|
+
var plugin_syntax_decorators_1 = __importDefault(require("@babel/plugin-syntax-decorators"));
|
|
40
54
|
var function_1 = require("fp-ts/lib/function");
|
|
41
55
|
var patterns_1 = require("./patterns");
|
|
42
56
|
var handleErrorOrExpression = function (_a) {
|
|
43
|
-
var code = _a.code, useCode = _a.useCode, result = _a.result, visitor = _a.visitor;
|
|
57
|
+
var code = _a.code, useCode = _a.useCode, result = _a.result, visitor = _a.visitor, stripTypes = _a.stripTypes;
|
|
44
58
|
try {
|
|
45
59
|
// If it can't, e.g. this is an expression or code fragment, modify the code below and try again
|
|
46
60
|
// Detect method fragments. These get passed sometimes and otherwise
|
|
@@ -55,7 +69,7 @@ var handleErrorOrExpression = function (_a) {
|
|
|
55
69
|
// Parse the code as an expression (instead of the default, a block) by giving it a fake variable assignment
|
|
56
70
|
// e.g. if the code parsed is { ... } babel will treat that as a block by deafult, unless processed as an expression
|
|
57
71
|
// that is an object
|
|
58
|
-
"let _ = ".concat(useCode), function (code) { return (0, exports.babelTransformCode)(code, visitor); }, trimSemicolons,
|
|
72
|
+
"let _ = ".concat(useCode), function (code) { return (0, exports.babelTransformCode)(code, visitor, stripTypes); }, trimSemicolons,
|
|
59
73
|
// Remove our fake variable assignment
|
|
60
74
|
function (str) { return str.replace(/let _ =\s/, ''); });
|
|
61
75
|
if (isMethodOrGetter) {
|
|
@@ -68,18 +82,18 @@ var handleErrorOrExpression = function (_a) {
|
|
|
68
82
|
throw err;
|
|
69
83
|
}
|
|
70
84
|
};
|
|
71
|
-
var babelTransform = function (
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
var babelTransform = function (_a) {
|
|
86
|
+
var code = _a.code, visitor = _a.visitor, stripTypes = _a.stripTypes;
|
|
87
|
+
return babel.transform(code, __assign(__assign({ sourceFileName: 'file.tsx', configFile: false, babelrc: false, parserOpts: { allowReturnOutsideFunction: true } }, (stripTypes ? { presets: [[preset_typescript_1.default, { isTSX: true, allExtensions: true }]] } : {})), { plugins: __spreadArray([
|
|
88
|
+
[plugin_syntax_typescript_1.default, { isTSX: true }],
|
|
89
|
+
[plugin_syntax_decorators_1.default, { legacy: true }]
|
|
90
|
+
], (visitor ? [function () { return ({ visitor: visitor }); }] : []), true) }));
|
|
91
|
+
};
|
|
92
|
+
var babelTransformCode = function (code, visitor, stripTypes) {
|
|
93
|
+
var _a;
|
|
94
|
+
if (stripTypes === void 0) { stripTypes = false; }
|
|
95
|
+
return ((_a = babelTransform({ code: code, visitor: visitor, stripTypes: stripTypes })) === null || _a === void 0 ? void 0 : _a.code) || '';
|
|
80
96
|
};
|
|
81
|
-
exports.babelTransform = babelTransform;
|
|
82
|
-
var babelTransformCode = function (code, visitor) { var _a; return ((_a = (0, exports.babelTransform)(code, visitor)) === null || _a === void 0 ? void 0 : _a.code) || ''; };
|
|
83
97
|
exports.babelTransformCode = babelTransformCode;
|
|
84
98
|
// Babel adds trailing semicolons, but for expressions we need those gone
|
|
85
99
|
// TODO: maybe detect if the original code ended with one, and keep it if so, for the case
|
|
@@ -106,14 +120,14 @@ var getType = function (code, initialType) {
|
|
|
106
120
|
}
|
|
107
121
|
return initialType;
|
|
108
122
|
};
|
|
109
|
-
var babelTransformExpression = function (code, visitor, initialType) {
|
|
123
|
+
var babelTransformExpression = function (code, visitor, initialType, stripTypes) {
|
|
110
124
|
if (initialType === void 0) { initialType = 'unknown'; }
|
|
125
|
+
if (stripTypes === void 0) { stripTypes = false; }
|
|
111
126
|
if (!code) {
|
|
112
127
|
return '';
|
|
113
128
|
}
|
|
114
129
|
var isGetter = code.trim().startsWith('get ');
|
|
115
|
-
return (0, function_1.pipe)(code, function (code) {
|
|
116
|
-
code = isGetter ? code.replace('get', 'function ') : code;
|
|
130
|
+
return (0, function_1.pipe)(code, isGetter ? patterns_1.replaceGetterWithFunction : function_1.identity, function (code) {
|
|
117
131
|
var type = getType(code, initialType);
|
|
118
132
|
var useCode = type === 'functionBody' ? "function(){".concat(code, "}") : code;
|
|
119
133
|
return { type: type, useCode: useCode };
|
|
@@ -121,17 +135,19 @@ var babelTransformExpression = function (code, visitor, initialType) {
|
|
|
121
135
|
var type = _a.type, useCode = _a.useCode;
|
|
122
136
|
if (type !== 'expression') {
|
|
123
137
|
try {
|
|
124
|
-
return (0, function_1.pipe)((0, exports.babelTransformCode)(useCode, visitor), trimExpression(type));
|
|
138
|
+
return (0, function_1.pipe)((0, exports.babelTransformCode)(useCode, visitor, stripTypes), trimExpression(type));
|
|
125
139
|
}
|
|
126
140
|
catch (error) {
|
|
127
|
-
return handleErrorOrExpression({ code: code, useCode: useCode, result: null, visitor: visitor });
|
|
141
|
+
return handleErrorOrExpression({ code: code, useCode: useCode, result: null, visitor: visitor, stripTypes: stripTypes });
|
|
128
142
|
}
|
|
129
143
|
}
|
|
130
144
|
else {
|
|
131
|
-
return handleErrorOrExpression({ code: code, useCode: useCode, result: null, visitor: visitor });
|
|
145
|
+
return handleErrorOrExpression({ code: code, useCode: useCode, result: null, visitor: visitor, stripTypes: stripTypes });
|
|
132
146
|
}
|
|
133
|
-
},
|
|
134
|
-
return isGetter ? transformed.replace('function ', 'get ') : transformed;
|
|
135
|
-
});
|
|
147
|
+
}, isGetter ? patterns_1.replaceFunctionWithGetter : function_1.identity);
|
|
136
148
|
};
|
|
137
149
|
exports.babelTransformExpression = babelTransformExpression;
|
|
150
|
+
var convertTypeScriptToJS = function (code) {
|
|
151
|
+
return (0, exports.babelTransformExpression)(code, {}, 'unknown', true);
|
|
152
|
+
};
|
|
153
|
+
exports.convertTypeScriptToJS = convertTypeScriptToJS;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTextNode = exports.isRootTextNode = void 0;
|
|
4
|
+
function isRootTextNode(json) {
|
|
5
|
+
var firstChild = json.children[0];
|
|
6
|
+
return Boolean(firstChild && isTextNode(firstChild));
|
|
7
|
+
}
|
|
8
|
+
exports.isRootTextNode = isRootTextNode;
|
|
9
|
+
function isTextNode(node) {
|
|
10
|
+
return Boolean(node.properties._text || node.bindings._text);
|
|
11
|
+
}
|
|
12
|
+
exports.isTextNode = isTextNode;
|
|
@@ -10,48 +10,24 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
-
}
|
|
19
|
-
Object.defineProperty(o, k2, desc);
|
|
20
|
-
}) : (function(o, m, k, k2) {
|
|
21
|
-
if (k2 === undefined) k2 = k;
|
|
22
|
-
o[k2] = m[k];
|
|
23
|
-
}));
|
|
24
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
-
}) : function(o, v) {
|
|
27
|
-
o["default"] = v;
|
|
28
|
-
});
|
|
29
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
-
if (mod && mod.__esModule) return mod;
|
|
31
|
-
var result = {};
|
|
32
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
-
__setModuleDefault(result, mod);
|
|
34
|
-
return result;
|
|
35
|
-
};
|
|
36
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
15
|
};
|
|
39
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
17
|
exports.mapRefs = void 0;
|
|
41
18
|
var traverse_1 = __importDefault(require("traverse"));
|
|
42
|
-
var
|
|
19
|
+
var core_1 = require("@babel/core");
|
|
43
20
|
var get_refs_1 = require("./get-refs");
|
|
44
21
|
var is_mitosis_node_1 = require("./is-mitosis-node");
|
|
45
22
|
var babel_transform_1 = require("./babel-transform");
|
|
46
23
|
var patterns_1 = require("./patterns");
|
|
47
|
-
var tsPreset = require('@babel/preset-typescript');
|
|
48
24
|
var replaceRefsInString = function (code, refs, mapper) {
|
|
49
25
|
return (0, babel_transform_1.babelTransformExpression)(code, {
|
|
50
26
|
Identifier: function (path) {
|
|
51
27
|
var name = path.node.name;
|
|
52
28
|
var isRef = refs.includes(name);
|
|
53
29
|
if (isRef) {
|
|
54
|
-
path.replaceWith(
|
|
30
|
+
path.replaceWith(core_1.types.identifier(mapper(name)));
|
|
55
31
|
}
|
|
56
32
|
},
|
|
57
33
|
});
|
|
@@ -22,16 +22,22 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.isCodeBodyIdentifier = exports.isExpression = exports.isCodeBodyExpression = exports.parseCode = void 0;
|
|
27
30
|
var babel = __importStar(require("@babel/core"));
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
+
var plugin_syntax_typescript_1 = __importDefault(require("@babel/plugin-syntax-typescript"));
|
|
32
|
+
var preset_typescript_1 = __importDefault(require("@babel/preset-typescript"));
|
|
33
|
+
var plugin_syntax_decorators_1 = __importDefault(require("@babel/plugin-syntax-decorators"));
|
|
31
34
|
function parseCode(code) {
|
|
32
35
|
var ast = babel.parse(code, {
|
|
33
|
-
presets: [[
|
|
34
|
-
plugins: [
|
|
36
|
+
presets: [[preset_typescript_1.default, { isTSX: true, allExtensions: true }]],
|
|
37
|
+
plugins: [
|
|
38
|
+
[plugin_syntax_typescript_1.default, { isTSX: true }],
|
|
39
|
+
[plugin_syntax_decorators_1.default, { legacy: true }],
|
|
40
|
+
],
|
|
35
41
|
});
|
|
36
42
|
var body = babel.types.isFile(ast)
|
|
37
43
|
? ast.program.body
|
|
@@ -3,4 +3,5 @@ export declare const SETTER: RegExp;
|
|
|
3
3
|
export declare const checkIsGetter: (code: string) => RegExpMatchArray | null;
|
|
4
4
|
export declare const stripGetter: (str: string) => string;
|
|
5
5
|
export declare const replaceGetterWithFunction: (str: string) => string;
|
|
6
|
+
export declare const replaceFunctionWithGetter: (str: string) => string;
|
|
6
7
|
export declare const prefixWithFunction: (str: string) => string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prefixWithFunction = exports.replaceGetterWithFunction = exports.stripGetter = exports.checkIsGetter = exports.SETTER = exports.GETTER = void 0;
|
|
3
|
+
exports.prefixWithFunction = exports.replaceFunctionWithGetter = exports.replaceGetterWithFunction = exports.stripGetter = exports.checkIsGetter = exports.SETTER = exports.GETTER = void 0;
|
|
4
4
|
exports.GETTER = /^\s*get /;
|
|
5
5
|
exports.SETTER = /^\s*set /;
|
|
6
6
|
var checkIsGetter = function (code) { return code.match(exports.GETTER); };
|
|
@@ -9,5 +9,7 @@ var stripGetter = function (str) { return str.replace(exports.GETTER, ''); };
|
|
|
9
9
|
exports.stripGetter = stripGetter;
|
|
10
10
|
var replaceGetterWithFunction = function (str) { return str.replace(/^(get )?/, 'function '); };
|
|
11
11
|
exports.replaceGetterWithFunction = replaceGetterWithFunction;
|
|
12
|
+
var replaceFunctionWithGetter = function (str) { return str.replace(/^(function )?/, 'get '); };
|
|
13
|
+
exports.replaceFunctionWithGetter = replaceFunctionWithGetter;
|
|
12
14
|
var prefixWithFunction = function (str) { return "function ".concat(str); };
|
|
13
15
|
exports.prefixWithFunction = prefixWithFunction;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Plugin } from '../../types/plugins';
|
|
2
2
|
import { MitosisComponent } from '../../types/mitosis-component';
|
|
3
3
|
declare type CodeType = 'hooks' | 'hooks-deps' | 'bindings' | 'properties' | 'state';
|
|
4
|
-
declare function codeProcessor(codeType: CodeType): (code: string, hookType
|
|
4
|
+
declare function codeProcessor(codeType: CodeType, json: MitosisComponent): (code: string, hookType: string) => string;
|
|
5
5
|
declare type CodeProcessor = typeof codeProcessor;
|
|
6
6
|
/**
|
|
7
7
|
* Given a `codeProcessor` function, processes all code expressions within a Mitosis component.
|