@builder.io/mitosis 0.0.50-6 → 0.0.50

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 (138) hide show
  1. package/dist/src/__tests__/angular.test.js +6 -0
  2. package/dist/src/__tests__/builder.test.js +5 -1
  3. package/dist/src/__tests__/data/blocks/multiple-onUpdate.raw.d.ts +1 -0
  4. package/dist/src/__tests__/data/blocks/multiple-onUpdate.raw.jsx +13 -0
  5. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.d.ts +1 -0
  6. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.jsx +19 -0
  7. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +6 -3
  8. package/dist/src/__tests__/data/blocks/self-referencing-component-with-children.raw.d.ts +1 -0
  9. package/dist/src/__tests__/data/blocks/self-referencing-component-with-children.raw.jsx +15 -0
  10. package/dist/src/__tests__/data/blocks/self-referencing-component.raw.d.ts +1 -0
  11. package/dist/src/__tests__/data/blocks/self-referencing-component.raw.jsx +12 -0
  12. package/dist/src/__tests__/data/blocks/shadow-dom.raw.d.ts +6 -0
  13. package/dist/src/__tests__/data/blocks/shadow-dom.raw.jsx +54 -0
  14. package/dist/src/__tests__/data/blocks/slot.raw.d.ts +5 -0
  15. package/dist/src/__tests__/data/blocks/slot.raw.jsx +6 -0
  16. package/dist/src/__tests__/data/blocks/stamped-io.raw.jsx +8 -0
  17. package/dist/src/__tests__/data/blocks/styles.raw.d.ts +1 -0
  18. package/dist/src/__tests__/data/blocks/styles.raw.jsx +10 -0
  19. package/dist/src/__tests__/data/context/simple.context.lite.d.ts +8 -1
  20. package/dist/src/__tests__/html.test.js +6 -0
  21. package/dist/src/__tests__/qwik.directive.test.d.ts +1 -0
  22. package/dist/src/__tests__/qwik.directive.test.js +107 -0
  23. package/dist/src/__tests__/qwik.test.js +256 -128
  24. package/dist/src/__tests__/react-native.test.js +12 -0
  25. package/dist/src/__tests__/react.test.js +12 -0
  26. package/dist/src/__tests__/svelte.test.js +24 -0
  27. package/dist/src/__tests__/vue.test.js +12 -0
  28. package/dist/src/__tests__/webcomponent.test.d.ts +1 -0
  29. package/dist/src/__tests__/webcomponent.test.js +12 -0
  30. package/dist/src/constants/html_tags.d.ts +1 -0
  31. package/dist/src/constants/html_tags.js +119 -0
  32. package/dist/src/generators/angular.js +7 -4
  33. package/dist/src/generators/context/react copy.d.ts +8 -0
  34. package/dist/src/generators/context/react copy.js +28 -0
  35. package/dist/src/generators/context/solid.d.ts +8 -0
  36. package/dist/src/generators/context/solid.js +28 -0
  37. package/dist/src/generators/context/svelte.d.ts +8 -0
  38. package/dist/src/generators/context/svelte.js +28 -0
  39. package/dist/src/generators/helpers/context.d.ts +2 -0
  40. package/dist/src/generators/helpers/context.js +8 -0
  41. package/dist/src/generators/html.js +20 -14
  42. package/dist/src/generators/mitosis.js +4 -3
  43. package/dist/src/generators/qwik/component.js +26 -5
  44. package/dist/src/generators/qwik/directives.d.ts +14 -5
  45. package/dist/src/generators/qwik/directives.js +32 -25
  46. package/dist/src/generators/qwik/handlers.js +3 -4
  47. package/dist/src/generators/qwik/jsx.js +17 -5
  48. package/dist/src/generators/qwik/src-generator.d.ts +0 -9
  49. package/dist/src/generators/qwik/src-generator.js +93 -101
  50. package/dist/src/generators/qwik/styles.js +8 -11
  51. package/dist/src/generators/react.js +9 -8
  52. package/dist/src/generators/solid.js +82 -8
  53. package/dist/src/generators/stencil/generate.js +5 -3
  54. package/dist/src/generators/stencil/index.js +5 -1
  55. package/dist/src/generators/svelte.d.ts +9 -1
  56. package/dist/src/generators/svelte.js +175 -76
  57. package/dist/src/generators/vue.d.ts +1 -1
  58. package/dist/src/generators/vue.js +86 -10
  59. package/dist/src/helpers/babel-transform copy.d.ts +8 -0
  60. package/dist/src/helpers/babel-transform copy.js +138 -0
  61. package/dist/src/helpers/babel-transform.d.ts +4 -7
  62. package/dist/src/helpers/babel-transform.js +18 -2
  63. package/dist/src/helpers/babel-transform.test.d.ts +1 -0
  64. package/dist/src/helpers/babel-transform.test.js +7 -0
  65. package/dist/src/helpers/create-mitosis-component.js +1 -1
  66. package/dist/src/helpers/get-state-object-string.js +2 -1
  67. package/dist/src/helpers/map-refs.js +22 -9
  68. package/dist/src/helpers/parsers.d.ts +8 -0
  69. package/dist/src/helpers/parsers.js +66 -0
  70. package/dist/src/helpers/render-imports.d.ts +2 -4
  71. package/dist/src/helpers/render-imports.js +32 -14
  72. package/dist/src/index.d.ts +10 -5
  73. package/dist/src/index.js +11 -5
  74. package/dist/src/parsers/builder.d.ts +16 -50
  75. package/dist/src/parsers/builder.js +22 -40
  76. package/dist/src/parsers/context.js +5 -1
  77. package/dist/src/parsers/jsx.d.ts +7 -0
  78. package/dist/src/parsers/jsx.js +27 -5
  79. package/dist/src/parsers/liquid.js +5 -1
  80. package/dist/src/plugins/compile-away-builder-components.js +5 -1
  81. package/dist/src/symbols/symbol-processor.js +3 -3
  82. package/dist/src/targets.d.ts +1 -1
  83. package/dist/src/types/mitosis-component.d.ts +8 -3
  84. package/dist/test/qwik/Accordion/high.jsx +0 -1
  85. package/dist/test/qwik/Accordion/low.jsx +171 -65
  86. package/dist/test/qwik/Accordion/med.jsx +9 -10
  87. package/dist/test/qwik/For/high.jsx +0 -1
  88. package/dist/test/qwik/For/low.jsx +25 -58
  89. package/dist/test/qwik/For/med.jsx +9 -10
  90. package/dist/test/qwik/Image/high.js +9 -1
  91. package/dist/test/qwik/Image/low.js +0 -42
  92. package/dist/test/qwik/Image/med.js +149 -12
  93. package/dist/test/qwik/Image.slow/high.js +9 -1
  94. package/dist/test/qwik/Image.slow/low.js +0 -42
  95. package/dist/test/qwik/Image.slow/med.js +149 -12
  96. package/dist/{src/types/generators.d.ts → test/qwik/bindings/high.cjs} +0 -0
  97. package/dist/test/qwik/bindings/low.cjs +33 -0
  98. package/dist/test/qwik/bindings/med.cjs +12 -0
  99. package/dist/test/qwik/button/high.js +1 -13
  100. package/dist/test/qwik/button/low.js +8 -40
  101. package/dist/test/qwik/button/med.js +36 -11
  102. package/dist/test/qwik/component/bindings/high.jsx +0 -1
  103. package/dist/test/qwik/component/bindings/low.jsx +26 -71
  104. package/dist/test/qwik/component/bindings/med.jsx +48 -39
  105. package/dist/test/qwik/component/component/inputs/high.cjsx +9 -0
  106. package/dist/test/qwik/component/component/inputs/low.cjsx +0 -0
  107. package/dist/test/qwik/component/component/inputs/med.cjsx +65 -0
  108. package/dist/test/qwik/hello_world/stylesheet/high.jsx +0 -1
  109. package/dist/test/qwik/hello_world/stylesheet/low.jsx +6 -27
  110. package/dist/test/qwik/hello_world/stylesheet/med.jsx +9 -10
  111. package/dist/test/qwik/page-with-symbol/high.js +0 -1
  112. package/dist/test/qwik/page-with-symbol/low.js +15 -52
  113. package/dist/test/qwik/page-with-symbol/med.js +9 -10
  114. package/dist/test/qwik/show-hide/high.jsx +9 -0
  115. package/dist/test/qwik/show-hide/low.jsx +0 -0
  116. package/dist/test/qwik/show-hide/med.jsx +174 -0
  117. package/dist/test/qwik/svg/high.js +0 -1
  118. package/dist/test/qwik/svg/low.js +9 -35
  119. package/dist/test/qwik/svg/med.js +9 -10
  120. package/dist/test/qwik/todo/Todo.cjs/high.cjs +4 -39
  121. package/dist/test/qwik/todo/Todo.cjs/low.cjs +0 -1
  122. package/dist/test/qwik/todo/Todo.cjs/med.cjs +38 -61
  123. package/dist/test/qwik/todo/Todo.js/high.js +22 -5
  124. package/dist/test/qwik/todo/Todo.js/med.js +45 -1
  125. package/dist/test/qwik/todo/Todo.tsx/high.tsx +4 -39
  126. package/dist/test/qwik/todo/Todo.tsx/low.tsx +0 -1
  127. package/dist/test/qwik/todo/Todo.tsx/med.tsx +31 -34
  128. package/dist/test/qwik/todos/Todo.tsx/high.tsx +0 -12
  129. package/dist/test/qwik/todos/Todo.tsx/low.tsx +18 -25
  130. package/dist/test/qwik/todos/Todo.tsx/med.tsx +8 -10
  131. package/dist/tsconfig.build.tsbuildinfo +1 -0
  132. package/dist/tsconfig.tsbuildinfo +1 -1
  133. package/package.json +22 -22
  134. package/dist/src/__tests__/data/blocks/onMount-onUnMount.d.ts +0 -1
  135. package/dist/src/__tests__/data/blocks/onMount-onUnMount.jsx +0 -13
  136. package/dist/src/__tests__/data/blocks/onMount.d.ts +0 -1
  137. package/dist/src/__tests__/data/blocks/onMount.jsx +0 -13
  138. package/dist/src/types/generators.js +0 -1
@@ -3,6 +3,37 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
3
3
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
4
  return cooked;
5
5
  };
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
17
+ var __rest = (this && this.__rest) || function (s, e) {
18
+ var t = {};
19
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
20
+ t[p] = s[p];
21
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
22
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
23
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
24
+ t[p[i]] = s[p[i]];
25
+ }
26
+ return t;
27
+ };
28
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
+ if (ar || !(i in from)) {
31
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
+ ar[i] = from[i];
33
+ }
34
+ }
35
+ return to.concat(ar || Array.prototype.slice.call(from));
36
+ };
6
37
  var __importDefault = (this && this.__importDefault) || function (mod) {
7
38
  return (mod && mod.__esModule) ? mod : { "default": mod };
8
39
  };
@@ -31,9 +62,12 @@ var filter_empty_text_nodes_1 = require("../helpers/filter-empty-text-nodes");
31
62
  var json5_1 = __importDefault(require("json5"));
32
63
  var process_http_requests_1 = require("../helpers/process-http-requests");
33
64
  var patterns_1 = require("../helpers/patterns");
65
+ var method_literal_prefix_1 = require("../constants/method-literal-prefix");
34
66
  function getContextNames(json) {
35
67
  return Object.keys(json.context.get);
36
68
  }
69
+ var ON_UPDATE_HOOK_NAME = 'onUpdateHook';
70
+ var getOnUpdateHookName = function (index) { return ON_UPDATE_HOOK_NAME + "".concat(index); };
37
71
  // TODO: migrate all stripStateAndPropsRefs to use this here
38
72
  // to properly replace context refs
39
73
  function processBinding(code, _options, json) {
@@ -218,13 +252,45 @@ function getContextProvideString(component, options) {
218
252
  str += '}';
219
253
  return str;
220
254
  }
221
- var componentToVue = function (options) {
222
- if (options === void 0) { options = {}; }
255
+ /**
256
+ * This plugin handle `onUpdate` code that watches depdendencies.
257
+ * We need to apply this workaround to be able to watch specific dependencies in Vue 2: https://stackoverflow.com/a/45853349
258
+ *
259
+ * We add a `computed` property for the dependencies, and a matching `watch` function for the `onUpdate` code
260
+ */
261
+ var onUpdatePlugin = function (options) { return ({
262
+ json: {
263
+ post: function (component) {
264
+ if (component.hooks.onUpdate) {
265
+ component.hooks.onUpdate
266
+ .filter(function (hook) { var _a; return (_a = hook.deps) === null || _a === void 0 ? void 0 : _a.length; })
267
+ .forEach(function (hook, index) {
268
+ var _a;
269
+ component.state[getOnUpdateHookName(index)] = "".concat(method_literal_prefix_1.methodLiteralPrefix, "get ").concat(getOnUpdateHookName(index), " () {\n return {\n ").concat((_a = hook.deps) === null || _a === void 0 ? void 0 : _a.slice(1, -1).split(',').map(function (dep, k) {
270
+ var val = dep.trim();
271
+ return "".concat(k, ": ").concat(val);
272
+ }).join(','), "\n }\n }");
273
+ });
274
+ }
275
+ },
276
+ },
277
+ }); };
278
+ var BASE_OPTIONS = {
279
+ plugins: [onUpdatePlugin],
280
+ };
281
+ var mergeOptions = function (_a, _b) {
282
+ var _c = _a.plugins, pluginsA = _c === void 0 ? [] : _c, a = __rest(_a, ["plugins"]);
283
+ var _d = _b.plugins, pluginsB = _d === void 0 ? [] : _d, b = __rest(_b, ["plugins"]);
284
+ return (__assign(__assign(__assign({}, a), b), { plugins: __spreadArray(__spreadArray([], pluginsA, true), pluginsB, true) }));
285
+ };
286
+ var componentToVue = function (userOptions) {
287
+ if (userOptions === void 0) { userOptions = {}; }
223
288
  // hack while we migrate all other transpilers to receive/handle path
224
289
  // TO-DO: use `Transpiler` once possible
225
290
  return function (_a) {
226
- var _b, _c, _d, _e, _f, _g;
291
+ var _b, _c, _d, _e, _f, _g, _h, _j;
227
292
  var component = _a.component, path = _a.path;
293
+ var options = mergeOptions(BASE_OPTIONS, userOptions);
228
294
  // Make a copy we can safely mutate, similar to babel's toolchain can be used
229
295
  component = (0, fast_clone_1.fastClone)(component);
230
296
  (0, process_http_requests_1.processHttpRequests)(component);
@@ -287,12 +353,14 @@ var componentToVue = function (options) {
287
353
  functionsString = functionsString.replace(/}\s*$/, "_classStringToObject(str) {\n const obj = {};\n if (typeof str !== 'string') { return obj }\n const classNames = str.trim().split(/\\s+/); \n for (const name of classNames) {\n obj[name] = true;\n } \n return obj;\n } }");
288
354
  }
289
355
  var builderRegister = Boolean(options.builderRegister && component.meta.registerComponent);
290
- var str = (0, dedent_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n <template>\n ", "\n </template>\n <script>\n ", "\n ", "\n\n export default ", "{\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n\n ", "\n ", "\n ", "\n\n ", "\n ", "\n }", "\n </script>\n ", "\n "], ["\n <template>\n ", "\n </template>\n <script>\n ", "\n ", "\n\n export default ", "{\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n\n ", "\n ", "\n ", "\n\n ", "\n ", "\n }", "\n </script>\n ", "\n "])), template, (0, render_imports_1.renderPreComponent)(component), component.meta.registerComponent
291
- ? (_d = options.registerComponentPrepend) !== null && _d !== void 0 ? _d : ''
356
+ var onUpdateWithDeps = ((_d = component.hooks.onUpdate) === null || _d === void 0 ? void 0 : _d.filter(function (hook) { var _a; return (_a = hook.deps) === null || _a === void 0 ? void 0 : _a.length; })) || [];
357
+ var onUpdateWithoutDeps = ((_e = component.hooks.onUpdate) === null || _e === void 0 ? void 0 : _e.filter(function (hook) { var _a; return !((_a = hook.deps) === null || _a === void 0 ? void 0 : _a.length); })) || [];
358
+ var str = (0, dedent_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n <template>\n ", "\n </template>\n <script>\n ", "\n ", "\n\n export default ", "{\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n }", "\n </script>\n ", "\n "], ["\n <template>\n ", "\n </template>\n <script>\n ", "\n ", "\n\n export default ", "{\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n }", "\n </script>\n ", "\n "])), template, (0, render_imports_1.renderPreComponent)(component), component.meta.registerComponent
359
+ ? (_f = options.registerComponentPrepend) !== null && _f !== void 0 ? _f : ''
292
360
  : '', !builderRegister ? '' : 'registerComponent(', !component.name
293
361
  ? ''
294
- : "name: '".concat(((_e = options.namePrefix) === null || _e === void 0 ? void 0 : _e.call(options, path))
295
- ? ((_f = options.namePrefix) === null || _f === void 0 ? void 0 : _f.call(options, path)) + '-'
362
+ : "name: '".concat(((_g = options.namePrefix) === null || _g === void 0 ? void 0 : _g.call(options, path))
363
+ ? ((_h = options.namePrefix) === null || _h === void 0 ? void 0 : _h.call(options, path)) + '-'
296
364
  : '').concat((0, lodash_1.kebabCase)(component.name), "',"), !componentsUsed.length
297
365
  ? ''
298
366
  : "components: { ".concat(componentsUsed
@@ -307,10 +375,18 @@ var componentToVue = function (options) {
307
375
  ? "provide() {\n const _this = this;\n return ".concat(getContextProvideString(component, options), "\n },")
308
376
  : '', (0, lodash_1.size)(component.context.get)
309
377
  ? "inject: ".concat(getContextInjectString(component, options), ",")
310
- : '', ((_g = component.hooks.onMount) === null || _g === void 0 ? void 0 : _g.code)
378
+ : '', ((_j = component.hooks.onMount) === null || _j === void 0 ? void 0 : _j.code)
311
379
  ? "mounted() {\n ".concat(processBinding(component.hooks.onMount.code, options, component), "\n },")
312
- : '', component.hooks.onUpdate
313
- ? "updated() {\n ".concat(processBinding(component.hooks.onUpdate.code, options, component), "\n },")
380
+ : '', onUpdateWithoutDeps.length
381
+ ? "updated() {\n ".concat(onUpdateWithoutDeps
382
+ .map(function (hook) { return processBinding(hook.code, options, component); })
383
+ .join('\n'), "\n },")
384
+ : '', onUpdateWithDeps.length
385
+ ? "watch: {\n ".concat(onUpdateWithDeps
386
+ .map(function (hook, index) {
387
+ return "".concat(getOnUpdateHookName(index), "() {\n ").concat(processBinding(hook.code, options, component), "\n }\n ");
388
+ })
389
+ .join(','), "\n },")
314
390
  : '', component.hooks.onUnMount
315
391
  ? "unmounted() {\n ".concat(processBinding(component.hooks.onUnMount.code, options, component), "\n },")
316
392
  : '', getterString.length < 4
@@ -0,0 +1,8 @@
1
+ import * as babel from '@babel/core';
2
+ declare type Visitor<ContextType = any> = {
3
+ [key: string]: (path: any, context: ContextType) => void;
4
+ };
5
+ export declare const babelTransform: <VisitorContextType = any>(code: string, visitor?: Visitor<VisitorContextType> | undefined) => babel.BabelFileResult | null;
6
+ export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor?: Visitor<VisitorContextType> | undefined) => string;
7
+ export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: Visitor<VisitorContextType>, type?: 'expression' | 'unknown' | 'block' | 'functionBody') => string;
8
+ export {};
@@ -0,0 +1,138 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
27
+ if (ar || !(i in from)) {
28
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
29
+ ar[i] = from[i];
30
+ }
31
+ }
32
+ return to.concat(ar || Array.prototype.slice.call(from));
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.babelTransformExpression = exports.babelTransformCode = exports.babelTransform = void 0;
36
+ var babel = __importStar(require("@babel/core"));
37
+ var lodash_1 = require("lodash");
38
+ var jsxPlugin = require('@babel/plugin-syntax-jsx');
39
+ var tsPreset = require('@babel/preset-typescript');
40
+ var decorators = require('@babel/plugin-syntax-decorators');
41
+ var babelTransform = function (code, visitor) {
42
+ return babel.transform(code, {
43
+ sourceFileName: 'file.tsx',
44
+ configFile: false,
45
+ babelrc: false,
46
+ presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
47
+ plugins: __spreadArray([
48
+ [decorators, { legacy: true }],
49
+ jsxPlugin
50
+ ], (visitor ? [function () { return ({ visitor: visitor }); }] : []), true),
51
+ });
52
+ };
53
+ exports.babelTransform = babelTransform;
54
+ var babelTransformCode = function (code, visitor) {
55
+ var _a;
56
+ return ((_a = (0, exports.babelTransform)(code, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '';
57
+ };
58
+ exports.babelTransformCode = babelTransformCode;
59
+ var babelTransformExpression = function (code, visitor, type) {
60
+ var _a;
61
+ if (type === void 0) { type = 'unknown'; }
62
+ if (!code) {
63
+ return '';
64
+ }
65
+ // match for object literal like { foo: ... }
66
+ if (type === 'unknown' && code.trim().match(/^\s*{\s*[a-z0-9]+:/i)) {
67
+ type = 'expression';
68
+ }
69
+ // For Builder content
70
+ if (type === 'unknown' &&
71
+ (code.includes('return _virtual_index') ||
72
+ code.trim().startsWith('return ')) &&
73
+ !code.trim().startsWith('function')) {
74
+ type = 'functionBody';
75
+ }
76
+ var useCode = code;
77
+ if (type === 'functionBody') {
78
+ useCode = "function(){".concat(useCode, "}");
79
+ }
80
+ var result = type === 'expression'
81
+ ? null
82
+ : (0, lodash_1.attempt)(function () {
83
+ var _a;
84
+ var result = ((_a = (0, exports.babelTransform)(useCode, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '';
85
+ if (type === 'functionBody') {
86
+ return result.replace(/^function\(\)\{/, '').replace(/\};$/, '');
87
+ }
88
+ else {
89
+ // Babel addes trailing semicolons, but for expressions we need those gone
90
+ // TODO: maybe detect if the original code ended with one, and keep it if so, for the case
91
+ // of appending several fragements
92
+ return result.replace(/;$/, '');
93
+ }
94
+ });
95
+ if ((0, lodash_1.isError)(result) || type === 'expression') {
96
+ try {
97
+ // If it can't, e.g. this is an expression or code fragment, modify the code below and try again
98
+ // Detect method fragments. These get passed sometimes and otherwise
99
+ // generate compile errors. They are of the form `foo() { ... }`
100
+ var isMethod = Boolean(!code.startsWith('function') &&
101
+ code.match(/^[a-z0-9]+\s*\([^\)]*\)\s*[\{:]/i));
102
+ if (isMethod) {
103
+ useCode = "function ".concat(useCode);
104
+ }
105
+ // Parse the code as an expression (instead of the default, a block) by giving it a fake variable assignment
106
+ // e.g. if the code parsed is { ... } babel will treat that as a block by deafult, unless processed as an expression
107
+ // that is an object
108
+ useCode = "let _ = ".concat(useCode);
109
+ result = (((_a = (0, exports.babelTransform)(useCode, visitor)) === null || _a === void 0 ? void 0 : _a.code) || '')
110
+ // Babel addes trailing semicolons, but for expressions we need those gone
111
+ .replace(/;$/, '')
112
+ // Remove our fake variable assignment
113
+ .replace(/let _ =\s/, '');
114
+ if (isMethod) {
115
+ result = result.replace('function', '');
116
+ }
117
+ }
118
+ catch (err) {
119
+ console.error('Error parsing code:\n', code, '\n', result);
120
+ try {
121
+ return (0, exports.babelTransformExpression)(code, visitor, 'functionBody');
122
+ }
123
+ catch (err) {
124
+ throw err;
125
+ }
126
+ }
127
+ }
128
+ if (type === 'functionBody') {
129
+ return result.replace(/^function\s*\(\)\s*\{/, '').replace(/\};?$/, '');
130
+ }
131
+ else {
132
+ // Babel addes trailing semicolons, but for expressions we need those gone
133
+ // TODO: maybe detect if the original code ended with one, and keep it if so, for the case
134
+ // of appending several fragements
135
+ return result.replace(/;$/, '');
136
+ }
137
+ };
138
+ exports.babelTransformExpression = babelTransformExpression;
@@ -1,8 +1,5 @@
1
1
  import * as babel from '@babel/core';
2
- declare type Visitor<ContextType = any> = {
3
- [key: string]: (path: any, context: ContextType) => void;
4
- };
5
- export declare const babelTransform: <VisitorContextType = any>(code: string, visitor: Visitor<VisitorContextType>) => babel.BabelFileResult | null;
6
- export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor: Visitor<VisitorContextType>) => string;
7
- export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: Visitor<VisitorContextType>, type?: 'expression' | 'unknown' | 'block' | 'functionBody') => string;
8
- export {};
2
+ import type { Visitor } from '@babel/traverse';
3
+ export declare const babelTransform: <VisitorContextType = any>(code: string, visitor?: babel.Visitor<VisitorContextType> | undefined) => babel.BabelFileResult | null;
4
+ export declare const babelTransformCode: <VisitorContextType = any>(code: string, visitor?: babel.Visitor<VisitorContextType> | undefined) => string;
5
+ export declare const babelTransformExpression: <VisitorContextType = any>(code: string, visitor: babel.Visitor<VisitorContextType>, type?: 'expression' | 'unknown' | 'block' | 'functionBody') => string;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -18,6 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
22
  __setModuleDefault(result, mod);
19
23
  return result;
20
24
  };
25
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
27
+ if (ar || !(i in from)) {
28
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
29
+ ar[i] = from[i];
30
+ }
31
+ }
32
+ return to.concat(ar || Array.prototype.slice.call(from));
33
+ };
21
34
  Object.defineProperty(exports, "__esModule", { value: true });
22
35
  exports.babelTransformExpression = exports.babelTransformCode = exports.babelTransform = void 0;
23
36
  var babel = __importStar(require("@babel/core"));
@@ -31,7 +44,10 @@ var babelTransform = function (code, visitor) {
31
44
  configFile: false,
32
45
  babelrc: false,
33
46
  presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
34
- plugins: [[decorators, { legacy: true }], jsxPlugin, function () { return ({ visitor: visitor }); }],
47
+ plugins: __spreadArray([
48
+ [decorators, { legacy: true }],
49
+ jsxPlugin
50
+ ], (visitor ? [function () { return ({ visitor: visitor }); }] : []), true),
35
51
  });
36
52
  };
37
53
  exports.babelTransform = babelTransform;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var babel_transform_1 = require("./babel-transform");
4
+ test('babelTransform', function () {
5
+ var code = "\nconst symbol = symbol;\n\nif (symbol) {\n getContent({\n apiKey: builderContext.apiKey!,\n }).then(response => {\n content = response;\n });\n}\n";
6
+ expect((0, babel_transform_1.babelTransformCode)(code)).toMatchSnapshot();
7
+ });
@@ -12,5 +12,5 @@ var __assign = (this && this.__assign) || function () {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.createMitosisComponent = void 0;
15
- var createMitosisComponent = function (options) { return (__assign({ '@type': '@builder.io/mitosis/component', imports: [], meta: {}, state: {}, children: [], hooks: {}, context: { get: {}, set: {} }, name: (options === null || options === void 0 ? void 0 : options.name) || 'MyComponent', subComponents: [] }, options)); };
15
+ var createMitosisComponent = function (options) { return (__assign({ '@type': '@builder.io/mitosis/component', imports: [], inputs: [], meta: {}, state: {}, children: [], hooks: {}, context: { get: {}, set: {} }, name: (options === null || options === void 0 ? void 0 : options.name) || 'MyComponent', subComponents: [] }, options)); };
16
16
  exports.createMitosisComponent = createMitosisComponent;
@@ -71,6 +71,7 @@ var getMemberObjectString = function (object, options) {
71
71
  exports.getMemberObjectString = getMemberObjectString;
72
72
  var getStateObjectStringFromComponent = function (component, options) {
73
73
  if (options === void 0) { options = {}; }
74
- return (0, exports.getMemberObjectString)(component.state, options);
74
+ var stateObjectStr = (0, exports.getMemberObjectString)(component.state, options);
75
+ return stateObjectStr;
75
76
  };
76
77
  exports.getStateObjectStringFromComponent = getStateObjectStringFromComponent;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -44,10 +48,9 @@ var replaceRefsInString = function (code, refs, mapper) {
44
48
  });
45
49
  };
46
50
  var mapRefs = function (component, mapper) {
47
- var _a;
48
51
  var refs = Array.from((0, get_refs_1.getRefs)(component));
49
- for (var _i = 0, _b = Object.keys(component.state); _i < _b.length; _i++) {
50
- var key = _b[_i];
52
+ for (var _i = 0, _a = Object.keys(component.state); _i < _a.length; _i++) {
53
+ var key = _a[_i];
51
54
  var value = component.state[key];
52
55
  if (typeof value === 'string') {
53
56
  if (value.startsWith(method_literal_prefix_1.methodLiteralPrefix)) {
@@ -76,11 +79,21 @@ var mapRefs = function (component, mapper) {
76
79
  }
77
80
  }
78
81
  });
79
- for (var _c = 0, _d = Object.keys(component.hooks); _c < _d.length; _c++) {
80
- var key = _d[_c];
81
- var hookCode = (_a = component.hooks[key]) === null || _a === void 0 ? void 0 : _a.code;
82
- if (hookCode) {
83
- component.hooks[key].code = replaceRefsInString(hookCode, refs, mapper);
82
+ for (var _b = 0, _c = Object.keys(component.hooks); _b < _c.length; _b++) {
83
+ var key = _c[_b];
84
+ var hooks = component.hooks[key];
85
+ if (Array.isArray(hooks)) {
86
+ hooks.forEach(function (hook) {
87
+ if (hook.code) {
88
+ hook.code = replaceRefsInString(hook.code, refs, mapper);
89
+ }
90
+ });
91
+ }
92
+ else {
93
+ var hookCode = hooks === null || hooks === void 0 ? void 0 : hooks.code;
94
+ if (hookCode) {
95
+ hooks.code = replaceRefsInString(hookCode, refs, mapper);
96
+ }
84
97
  }
85
98
  }
86
99
  };
@@ -0,0 +1,8 @@
1
+ import * as babel from '@babel/core';
2
+ export declare function parseCode(code: string): babel.types.Statement[];
3
+ export declare const isCodeBodyExpression: (body: babel.types.Statement[]) => boolean;
4
+ /**
5
+ * Returns `true` if the `code` is a valid expression. (vs a statement)
6
+ */
7
+ export declare function isExpression(code: string): boolean;
8
+ export declare const isCodeBodyIdentifier: (body: babel.types.Statement[]) => boolean;
@@ -0,0 +1,66 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.isCodeBodyIdentifier = exports.isExpression = exports.isCodeBodyExpression = exports.parseCode = void 0;
27
+ var babel = __importStar(require("@babel/core"));
28
+ var jsxPlugin = require('@babel/plugin-syntax-jsx');
29
+ var tsPreset = require('@babel/preset-typescript');
30
+ var decorators = require('@babel/plugin-syntax-decorators');
31
+ function parseCode(code) {
32
+ var ast = babel.parse(code, {
33
+ presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
34
+ plugins: [[decorators, { legacy: true }], jsxPlugin],
35
+ });
36
+ var body = babel.types.isFile(ast)
37
+ ? ast.program.body
38
+ : babel.types.isProgram(ast)
39
+ ? ast.body
40
+ : [];
41
+ return body;
42
+ }
43
+ exports.parseCode = parseCode;
44
+ var isCodeBodyExpression = function (body) {
45
+ return body.length == 1 &&
46
+ (babel.types.isExpression(body[0]) ||
47
+ babel.types.isExpressionStatement(body[0]));
48
+ };
49
+ exports.isCodeBodyExpression = isCodeBodyExpression;
50
+ /**
51
+ * Returns `true` if the `code` is a valid expression. (vs a statement)
52
+ */
53
+ function isExpression(code) {
54
+ try {
55
+ var body = parseCode(code);
56
+ return (0, exports.isCodeBodyExpression)(body);
57
+ }
58
+ catch (e) {
59
+ return false;
60
+ }
61
+ }
62
+ exports.isExpression = isExpression;
63
+ var isCodeBodyIdentifier = function (body) {
64
+ return body.length == 1 && babel.types.isIdentifier(body[0]);
65
+ };
66
+ exports.isCodeBodyIdentifier = isCodeBodyIdentifier;
@@ -1,4 +1,2 @@
1
- import { MitosisComponent, MitosisImport } from '../types/mitosis-component';
2
- export declare const renderImport: (theImport: MitosisImport) => string;
3
- export declare const renderImports: (imports: MitosisImport[]) => string;
4
- export declare const renderPreComponent: (component: MitosisComponent) => string;
1
+ import { MitosisComponent } from '../types/mitosis-component';
2
+ export declare const renderPreComponent: (component: MitosisComponent, target?: "angular" | "builder" | "customElement" | "html" | "mitosis" | "liquid" | "react" | "reactNative" | "solid" | "svelte" | "swift" | "template" | "webcomponent" | "vue" | undefined) => string;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderPreComponent = exports.renderImports = exports.renderImport = void 0;
4
- var getStarImport = function (theImport) {
3
+ exports.renderPreComponent = void 0;
4
+ var getStarImport = function (_a) {
5
+ var theImport = _a.theImport;
5
6
  for (var key in theImport.imports) {
6
7
  var value = theImport.imports[key];
7
8
  if (value === '*') {
@@ -10,7 +11,8 @@ var getStarImport = function (theImport) {
10
11
  }
11
12
  return null;
12
13
  };
13
- var getDefaultImport = function (theImport) {
14
+ var getDefaultImport = function (_a) {
15
+ var theImport = _a.theImport;
14
16
  for (var key in theImport.imports) {
15
17
  var value = theImport.imports[key];
16
18
  if (value === 'default') {
@@ -19,14 +21,32 @@ var getDefaultImport = function (theImport) {
19
21
  }
20
22
  return null;
21
23
  };
22
- var renderImport = function (theImport) {
24
+ var transformImportPath = function (theImport, target) {
25
+ // We need to drop the `.lite` from context files, because the context generator does so as well.
26
+ if (theImport.path.endsWith('.context.lite')) {
27
+ return theImport.path.replace('.lite', '');
28
+ }
29
+ switch (target) {
30
+ case 'svelte':
31
+ if (theImport.path.endsWith('.lite'))
32
+ // all svelte components have `.svelte` extension
33
+ return theImport.path.replace('.lite', '.svelte');
34
+ else {
35
+ return theImport.path;
36
+ }
37
+ default:
38
+ return theImport.path;
39
+ }
40
+ };
41
+ var renderImport = function (_a) {
42
+ var theImport = _a.theImport, target = _a.target;
23
43
  var importString = 'import ';
24
- var starImport = getStarImport(theImport);
44
+ var starImport = getStarImport({ theImport: theImport });
25
45
  if (starImport) {
26
46
  importString += " * as ".concat(starImport, " ");
27
47
  }
28
48
  else {
29
- var defaultImport = getDefaultImport(theImport);
49
+ var defaultImport = getDefaultImport({ theImport: theImport });
30
50
  if (defaultImport) {
31
51
  importString += " ".concat(defaultImport, ", ");
32
52
  }
@@ -50,11 +70,12 @@ var renderImport = function (theImport) {
50
70
  }
51
71
  importString += ' } ';
52
72
  }
53
- importString += " from '".concat(theImport.path, "';");
73
+ var path = transformImportPath(theImport, target);
74
+ importString += " from '".concat(path, "';");
54
75
  return importString;
55
76
  };
56
- exports.renderImport = renderImport;
57
- var renderImports = function (imports) {
77
+ var renderImports = function (_a) {
78
+ var imports = _a.imports, target = _a.target;
58
79
  var importString = '';
59
80
  for (var _i = 0, imports_1 = imports; _i < imports_1.length; _i++) {
60
81
  var theImport = imports_1[_i];
@@ -66,12 +87,9 @@ var renderImports = function (imports) {
66
87
  if (theImport.path.startsWith('@builder.io/mitosis')) {
67
88
  continue;
68
89
  }
69
- importString += (0, exports.renderImport)(theImport) + '\n';
90
+ importString += renderImport({ theImport: theImport, target: target }) + '\n';
70
91
  }
71
92
  return importString;
72
93
  };
73
- exports.renderImports = renderImports;
74
- var renderPreComponent = function (component) {
75
- return "\n ".concat((0, exports.renderImports)(component.imports), "\n ").concat(component.hooks.preComponent || '', "\n ");
76
- };
94
+ var renderPreComponent = function (component, target) { return "\n ".concat(renderImports({ imports: component.imports, target: target }), "\n ").concat(component.hooks.preComponent || '', "\n "); };
77
95
  exports.renderPreComponent = renderPreComponent;
@@ -1,13 +1,16 @@
1
1
  export * from './flow';
2
+ export declare type Context<T> = {};
2
3
  export declare const useState: <T>(obj: T) => T;
3
4
  export declare const useRef: () => any;
4
- export declare const useContext: (key: any) => any;
5
- export declare const createContext: (value: {
5
+ export declare const useContext: <T = {
6
6
  [key: string]: any;
7
- }) => any;
8
- export declare const setContext: (key: any, value: {
7
+ }>(key: Context<T>) => T;
8
+ export declare const createContext: <T = {
9
9
  [key: string]: any;
10
- }) => any;
10
+ }>(value: T) => Context<T>;
11
+ export declare const setContext: <T = {
12
+ [key: string]: any;
13
+ }>(key: Context<T>, value: Partial<T>) => void;
11
14
  export declare const onMount: (fn: () => any) => any;
12
15
  export declare const onUpdate: (fn: () => any, deps?: any[] | undefined) => any;
13
16
  export declare const onCreate: (fn: () => any) => any;
@@ -24,7 +27,9 @@ export * from './parsers/context';
24
27
  export * from './generators/vue';
25
28
  export * from './generators/angular';
26
29
  export * from './generators/context/react';
30
+ export * from './generators/context/solid';
27
31
  export * from './generators/context/vue';
32
+ export * from './generators/context/svelte';
28
33
  export * from './generators/react';
29
34
  export * from './generators/solid';
30
35
  export * from './generators/liquid';