@builder.io/mitosis 0.0.48 → 0.0.49

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 (152) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/src/__tests__/angular.test.d.ts +1 -0
  3. package/dist/src/__tests__/angular.test.js +12 -0
  4. package/dist/src/__tests__/data/blocks/onUpdate.raw.d.ts +1 -0
  5. package/dist/src/__tests__/data/blocks/onUpdate.raw.jsx +10 -0
  6. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.d.ts +1 -0
  7. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +11 -0
  8. package/dist/src/__tests__/data/blocks/tabs.raw.d.ts +11 -0
  9. package/dist/src/__tests__/data/blocks/tabs.raw.jsx +24 -0
  10. package/dist/src/__tests__/qoot.test.d.ts +1 -0
  11. package/dist/src/__tests__/qoot.test.js +115 -0
  12. package/dist/src/__tests__/qwik.test.js +38 -10
  13. package/dist/src/__tests__/react.test.js +12 -0
  14. package/dist/src/__tests__/svelte.test.d.ts +1 -0
  15. package/dist/src/__tests__/svelte.test.js +12 -0
  16. package/dist/src/__tests__/vue.test.js +6 -0
  17. package/dist/src/generators/angular.js +7 -3
  18. package/dist/src/generators/builder.js +7 -7
  19. package/dist/src/generators/html.js +16 -7
  20. package/dist/src/generators/jsx-lite.d.ts +10 -0
  21. package/dist/src/generators/jsx-lite.js +176 -0
  22. package/dist/src/generators/minify.d.ts +1 -0
  23. package/dist/src/generators/minify.js +24 -0
  24. package/dist/src/generators/mitosis.js +5 -2
  25. package/dist/src/generators/qoot.d.ts +21 -0
  26. package/dist/src/generators/qoot.js +442 -0
  27. package/dist/src/generators/qwik/component.js +48 -6
  28. package/dist/src/generators/qwik/directives.d.ts +21 -1
  29. package/dist/src/generators/qwik/directives.js +80 -3
  30. package/dist/src/generators/qwik/jsx.d.ts +1 -1
  31. package/dist/src/generators/qwik/jsx.js +28 -5
  32. package/dist/src/generators/qwik/src-generator.d.ts +3 -1
  33. package/dist/src/generators/qwik/src-generator.js +34 -10
  34. package/dist/src/generators/qwik.d.ts +21 -0
  35. package/dist/src/generators/qwik.js +458 -0
  36. package/dist/src/generators/react.js +13 -7
  37. package/dist/src/generators/solid.js +5 -2
  38. package/dist/src/generators/svelte.js +10 -5
  39. package/dist/src/generators/vue.js +7 -5
  40. package/dist/src/helpers/create-jsx-lite-component.d.ts +2 -0
  41. package/dist/src/helpers/create-jsx-lite-component.js +16 -0
  42. package/dist/src/helpers/create-jsx-lite-context.d.ts +4 -0
  43. package/dist/src/helpers/create-jsx-lite-context.js +18 -0
  44. package/dist/src/helpers/create-jsx-lite-node.d.ts +2 -0
  45. package/dist/src/helpers/create-jsx-lite-node.js +16 -0
  46. package/dist/src/helpers/is-jsx-lite-node.d.ts +2 -0
  47. package/dist/src/helpers/is-jsx-lite-node.js +7 -0
  48. package/dist/src/helpers/map-refs.js +7 -6
  49. package/dist/src/helpers/process-http-requests.js +3 -3
  50. package/dist/src/helpers/process-tag-references.js +4 -3
  51. package/dist/src/index.d.ts +2 -1
  52. package/dist/src/index.js +4 -3
  53. package/dist/src/parsers/builder.d.ts +50 -10
  54. package/dist/src/parsers/builder.js +37 -7
  55. package/dist/src/parsers/jsx.js +43 -3
  56. package/dist/src/parsers/liquid.js +4 -4
  57. package/dist/src/plugins/compile-away-builder-components.js +40 -20
  58. package/dist/src/symbols/symbol-processor.d.ts +18 -0
  59. package/dist/src/symbols/symbol-processor.js +177 -0
  60. package/dist/src/types/jsx-lite-component.d.ts +63 -0
  61. package/dist/src/types/jsx-lite-component.js +2 -0
  62. package/dist/src/types/jsx-lite-context.d.ts +6 -0
  63. package/dist/src/types/jsx-lite-context.js +2 -0
  64. package/dist/src/types/jsx-lite-node.d.ts +13 -0
  65. package/dist/src/types/jsx-lite-node.js +2 -0
  66. package/dist/src/types/jsx-lite-styles.d.ts +1 -0
  67. package/dist/src/types/jsx-lite-styles.js +2 -0
  68. package/dist/src/types/mitosis-component.d.ts +10 -5
  69. package/dist/test/qoot/Todo/bundle.js +88 -0
  70. package/dist/test/qoot/Todo/component.ts +17 -0
  71. package/dist/test/qoot/Todo/onButtonClick.ts +13 -0
  72. package/dist/test/qoot/Todo/onInput2Blur.ts +11 -0
  73. package/dist/test/qoot/Todo/onInput2KeyUp.ts +10 -0
  74. package/dist/test/qoot/Todo/onInputClick.ts +10 -0
  75. package/dist/test/qoot/Todo/onLabelDblClick.ts +11 -0
  76. package/dist/test/qoot/Todo/public.ts +4 -0
  77. package/dist/test/qoot/Todo/template.tsx +46 -0
  78. package/dist/test/qoot/Todos/component.ts +9 -0
  79. package/dist/test/qoot/Todos/onInputClick.ts +14 -0
  80. package/dist/test/qoot/Todos/public.ts +3 -0
  81. package/dist/test/qoot/Todos/template.tsx +30 -0
  82. package/dist/test/qwik/{todo → Todo}/Todo.cjs/high.cjs +0 -0
  83. package/dist/test/qwik/{todo → Todo}/Todo.cjs/low.cjs +0 -0
  84. package/dist/test/qwik/{todo → Todo}/Todo.cjs/med.cjs +0 -0
  85. package/dist/test/qwik/{todo → Todo}/Todo.js/high.js +0 -0
  86. package/dist/test/qwik/{todo → Todo}/Todo.js/low.js +0 -0
  87. package/dist/test/qwik/{todo → Todo}/Todo.js/med.js +0 -0
  88. package/dist/test/qwik/{todo → Todo}/Todo.tsx/high.tsx +0 -0
  89. package/dist/test/qwik/{todo → Todo}/Todo.tsx/low.tsx +0 -0
  90. package/dist/test/qwik/{todo → Todo}/Todo.tsx/med.tsx +0 -0
  91. package/dist/test/qwik/Todo/bundle.js +46 -0
  92. package/dist/test/qwik/Todo/component.ts +17 -0
  93. package/dist/test/qwik/Todo/onButtonClick.ts +10 -0
  94. package/dist/test/qwik/Todo/onInput2Blur.ts +14 -0
  95. package/dist/test/qwik/Todo/onInput2KeyUp.ts +10 -0
  96. package/dist/test/qwik/Todo/onInputClick.ts +13 -0
  97. package/dist/test/qwik/Todo/onLabelDblClick.ts +11 -0
  98. package/dist/test/qwik/Todo/public.ts +3 -0
  99. package/dist/test/qwik/Todo/template.tsx +46 -0
  100. package/dist/test/qwik/Todo.ts +4 -0
  101. package/dist/test/qwik/Todo_component.ts +17 -0
  102. package/dist/test/qwik/Todo_onButtonClick.ts +13 -0
  103. package/dist/test/qwik/Todo_onInput2Blur.ts +14 -0
  104. package/dist/test/qwik/Todo_onInput2KeyUp.ts +10 -0
  105. package/dist/test/qwik/Todo_onInputClick.ts +13 -0
  106. package/dist/test/qwik/Todo_onLabelDblClick.ts +14 -0
  107. package/dist/test/qwik/Todo_template.tsx +46 -0
  108. package/dist/test/qwik/{todos → Todos}/Todo.tsx/high.tsx +0 -0
  109. package/dist/test/qwik/{todos → Todos}/Todo.tsx/low.tsx +3 -4
  110. package/dist/test/qwik/{todos → Todos}/Todo.tsx/med.tsx +0 -0
  111. package/dist/test/qwik/Todos/component.ts +9 -0
  112. package/dist/test/qwik/Todos/onInputClick.ts +14 -0
  113. package/dist/test/qwik/Todos/public.ts +3 -0
  114. package/dist/test/qwik/Todos/template.tsx +30 -0
  115. package/dist/test/qwik/Todos.ts +3 -0
  116. package/dist/test/qwik/Todos_component.ts +9 -0
  117. package/dist/test/qwik/Todos_onInputClick.ts +14 -0
  118. package/dist/test/qwik/Todos_template.tsx +30 -0
  119. package/dist/test/qwik/qwik/Image/high.js +1 -0
  120. package/dist/test/qwik/qwik/Image/low.js +75 -0
  121. package/dist/test/qwik/qwik/Image/med.js +9 -0
  122. package/dist/test/qwik/{For/high.jsx → qwik/Image.slow/high.js} +0 -0
  123. package/dist/test/qwik/qwik/Image.slow/low.js +75 -0
  124. package/dist/test/qwik/{For/med.jsx → qwik/Image.slow/med.js} +0 -0
  125. package/dist/test/qwik/qwik/button/high.js +8 -0
  126. package/dist/test/qwik/qwik/button/low.js +34 -0
  127. package/dist/test/qwik/qwik/button/med.js +9 -0
  128. package/dist/test/qwik/qwik/hello_world/stylesheet/high.jsx +1 -0
  129. package/dist/test/qwik/qwik/hello_world/stylesheet/low.jsx +24 -0
  130. package/dist/test/qwik/qwik/hello_world/stylesheet/med.jsx +9 -0
  131. package/dist/test/qwik/qwik/page-with-symbol/high.js +1 -0
  132. package/dist/test/qwik/qwik/page-with-symbol/low.js +49 -0
  133. package/dist/test/qwik/qwik/page-with-symbol/med.js +9 -0
  134. package/dist/test/qwik/qwik/svg/high.js +1 -0
  135. package/dist/test/qwik/qwik/svg/low.js +30 -0
  136. package/dist/test/qwik/qwik/svg/med.js +9 -0
  137. package/dist/test/qwik/qwik/todo/Todo.cjs/high.cjs +31 -0
  138. package/dist/test/qwik/qwik/todo/Todo.cjs/low.cjs +1 -0
  139. package/dist/test/qwik/qwik/todo/Todo.cjs/med.cjs +59 -0
  140. package/dist/test/qwik/qwik/todo/Todo.js/high.js +5 -0
  141. package/dist/{src/types/generators.d.ts → test/qwik/qwik/todo/Todo.js/low.js} +0 -0
  142. package/dist/test/qwik/qwik/todo/Todo.js/med.js +1 -0
  143. package/dist/test/qwik/qwik/todo/Todo.tsx/high.tsx +30 -0
  144. package/dist/test/qwik/qwik/todo/Todo.tsx/low.tsx +1 -0
  145. package/dist/test/qwik/qwik/todo/Todo.tsx/med.tsx +34 -0
  146. package/dist/test/qwik/qwik/todos/Todo.tsx/high.tsx +12 -0
  147. package/dist/test/qwik/qwik/todos/Todo.tsx/low.tsx +24 -0
  148. package/dist/test/qwik/qwik/todos/Todo.tsx/med.tsx +8 -0
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +1 -1
  151. package/dist/src/types/generators.js +0 -1
  152. package/dist/test/qwik/For/low.jsx +0 -55
@@ -0,0 +1,16 @@
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.createJSXLiteComponent = void 0;
15
+ var createJSXLiteComponent = function (options) { return (__assign({ '@type': '@jsx-lite/component', imports: [], meta: {}, state: {}, children: [], hooks: {}, context: { get: {}, set: {} }, name: (options === null || options === void 0 ? void 0 : options.name) || 'MyComponent', subComponents: [] }, options)); };
16
+ exports.createJSXLiteComponent = createJSXLiteComponent;
@@ -0,0 +1,4 @@
1
+ import { JSXLiteContext } from '../types/jsx-lite-context';
2
+ export declare function createJsxLiteContext(options: Partial<JSXLiteContext> & {
3
+ name: string;
4
+ }): JSXLiteContext;
@@ -0,0 +1,18 @@
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.createJsxLiteContext = void 0;
15
+ function createJsxLiteContext(options) {
16
+ return __assign({ '@type': '@jsx-lite/context', value: {} }, options);
17
+ }
18
+ exports.createJsxLiteContext = createJsxLiteContext;
@@ -0,0 +1,2 @@
1
+ import { JSXLiteNode } from '../types/jsx-lite-node';
2
+ export declare const createJSXLiteNode: (options: Partial<JSXLiteNode>) => JSXLiteNode;
@@ -0,0 +1,16 @@
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.createJSXLiteNode = void 0;
15
+ var createJSXLiteNode = function (options) { return (__assign({ '@type': '@jsx-lite/node', name: 'div', meta: {}, properties: {}, bindings: {}, children: [] }, options)); };
16
+ exports.createJSXLiteNode = createJSXLiteNode;
@@ -0,0 +1,2 @@
1
+ import { JSXLiteNode } from '../types/jsx-lite-node';
2
+ export declare const isJsxLiteNode: (thing: unknown) => thing is JSXLiteNode;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isJsxLiteNode = void 0;
4
+ var isJsxLiteNode = function (thing) {
5
+ return Boolean(thing && thing['@type'] === '@jsx-lite/node');
6
+ };
7
+ exports.isJsxLiteNode = isJsxLiteNode;
@@ -44,9 +44,10 @@ var replaceRefsInString = function (code, refs, mapper) {
44
44
  });
45
45
  };
46
46
  var mapRefs = function (component, mapper) {
47
+ var _a;
47
48
  var refs = Array.from((0, get_refs_1.getRefs)(component));
48
- for (var _i = 0, _a = Object.keys(component.state); _i < _a.length; _i++) {
49
- var key = _a[_i];
49
+ for (var _i = 0, _b = Object.keys(component.state); _i < _b.length; _i++) {
50
+ var key = _b[_i];
50
51
  var value = component.state[key];
51
52
  if (typeof value === 'string') {
52
53
  if (value.startsWith(method_literal_prefix_1.methodLiteralPrefix)) {
@@ -75,11 +76,11 @@ var mapRefs = function (component, mapper) {
75
76
  }
76
77
  }
77
78
  });
78
- for (var _b = 0, _c = Object.keys(component.hooks); _b < _c.length; _b++) {
79
- var key = _c[_b];
80
- var hookCode = component.hooks[key];
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;
81
82
  if (hookCode) {
82
- component.hooks[key] = replaceRefsInString(hookCode, refs, mapper);
83
+ component.hooks[key].code = replaceRefsInString(hookCode, refs, mapper);
83
84
  }
84
85
  }
85
86
  };
@@ -2,10 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.processHttpRequests = void 0;
4
4
  function processHttpRequests(json) {
5
- var _a;
5
+ var _a, _b;
6
6
  var httpRequests = (_a = json.meta
7
7
  .useMetadata) === null || _a === void 0 ? void 0 : _a.httpRequests;
8
- var onMount = json.hooks.onMount || '';
8
+ var onMount = ((_b = json.hooks.onMount) === null || _b === void 0 ? void 0 : _b.code) ? json.hooks.onMount : { code: '' };
9
9
  if (httpRequests) {
10
10
  for (var key in httpRequests) {
11
11
  if (!json.state[key]) {
@@ -14,7 +14,7 @@ function processHttpRequests(json) {
14
14
  var value = httpRequests[key];
15
15
  // TODO: unravel our proxy. aka parse out methods, header, etc
16
16
  // and remove our proxy from being used anymore
17
- onMount += "\n fetch(\"".concat(value, "\").then(res => res.json()).then(result => {\n state.").concat(key, " = result;\n })\n ");
17
+ onMount.code += "\n fetch(\"".concat(value, "\").then(res => res.json()).then(result => {\n state.").concat(key, " = result;\n })\n ");
18
18
  }
19
19
  }
20
20
  json.hooks.onMount = onMount;
@@ -13,14 +13,15 @@ function getRefName(path) {
13
13
  function processTagReferences(json) {
14
14
  var namesFound = new Set();
15
15
  (0, traverse_1.default)(json).forEach(function (el) {
16
+ var _a;
16
17
  if ((0, is_mitosis_node_1.isMitosisNode)(el)) {
17
18
  if (el.name.includes('.')) {
18
19
  if (!namesFound.has(el.name)) {
19
20
  namesFound.add(el.name);
20
- if (typeof json.hooks.init !== 'string') {
21
- json.hooks.init = '';
21
+ if (typeof ((_a = json.hooks.init) === null || _a === void 0 ? void 0 : _a.code) !== 'string') {
22
+ json.hooks.init = { code: '' };
22
23
  }
23
- json.hooks.init += "\n const ".concat(getRefName(el.name), " = ").concat(el.name, ";\n ");
24
+ json.hooks.init.code += "\n const ".concat(getRefName(el.name), " = ").concat(el.name, ";\n ");
24
25
  }
25
26
  el.name = getRefName(el.name);
26
27
  }
@@ -9,10 +9,10 @@ export declare const setContext: (key: any, value: {
9
9
  [key: string]: any;
10
10
  }) => any;
11
11
  export declare const onMount: (fn: () => any) => any;
12
+ export declare const onUpdate: (fn: () => any, deps?: any[] | undefined) => any;
12
13
  export declare const onCreate: (fn: () => any) => any;
13
14
  export declare const onInit: (fn: () => any) => any;
14
15
  export declare const onUnMount: (fn: () => any) => any;
15
- export declare const afterUnmount: (fn: () => any) => any;
16
16
  export declare const useDynamicTag: (fn: () => any) => any;
17
17
  export declare const onError: (fn: () => any) => any;
18
18
  export declare const useMetadata: (obj: object) => null;
@@ -30,6 +30,7 @@ export * from './generators/solid';
30
30
  export * from './generators/liquid';
31
31
  export * from './generators/builder';
32
32
  export * from './generators/qwik/index';
33
+ export * from './symbols/symbol-processor';
33
34
  export * from './generators/html';
34
35
  export * from './generators/svelte';
35
36
  export * from './generators/mitosis';
package/dist/src/index.js CHANGED
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.useMetadata = exports.onError = exports.useDynamicTag = exports.afterUnmount = exports.onUnMount = exports.onInit = exports.onCreate = exports.onMount = exports.setContext = exports.createContext = exports.useContext = exports.useRef = exports.useState = void 0;
13
+ exports.useMetadata = exports.onError = exports.useDynamicTag = exports.onUnMount = exports.onInit = exports.onCreate = exports.onUpdate = exports.onMount = exports.setContext = exports.createContext = exports.useContext = exports.useRef = exports.useState = void 0;
14
14
  __exportStar(require("./flow"), exports);
15
15
  // These compile away
16
16
  var useState = function (obj) { return obj; };
@@ -27,14 +27,14 @@ var setContext = function (key, value) {
27
27
  exports.setContext = setContext;
28
28
  var onMount = function (fn) { return null; };
29
29
  exports.onMount = onMount;
30
+ var onUpdate = function (fn, deps) { return null; };
31
+ exports.onUpdate = onUpdate;
30
32
  var onCreate = function (fn) { return null; };
31
33
  exports.onCreate = onCreate;
32
34
  var onInit = function (fn) { return null; };
33
35
  exports.onInit = onInit;
34
36
  var onUnMount = function (fn) { return null; };
35
37
  exports.onUnMount = onUnMount;
36
- var afterUnmount = function (fn) { return null; };
37
- exports.afterUnmount = afterUnmount;
38
38
  var useDynamicTag = function (fn) { return null; };
39
39
  exports.useDynamicTag = useDynamicTag;
40
40
  var onError = function (fn) { return null; };
@@ -55,6 +55,7 @@ __exportStar(require("./generators/solid"), exports);
55
55
  __exportStar(require("./generators/liquid"), exports);
56
56
  __exportStar(require("./generators/builder"), exports);
57
57
  __exportStar(require("./generators/qwik/index"), exports);
58
+ __exportStar(require("./symbols/symbol-processor"), exports);
58
59
  __exportStar(require("./generators/html"), exports);
59
60
  __exportStar(require("./generators/svelte"), exports);
60
61
  __exportStar(require("./generators/mitosis"), exports);
@@ -26,6 +26,8 @@ export declare function extractStateHook(code: string): {
26
26
  code: string;
27
27
  state: any;
28
28
  };
29
+ export declare function convertExportDefaultToReturn(code: string): string;
30
+ export declare const createBuilderElement: (options?: Partial<BuilderElement> | undefined) => BuilderElement;
29
31
  export declare const isBuilderElement: (el: unknown) => el is BuilderElement;
30
32
  export declare const builderContentToMitosisComponent: (builderContent: BuilderContent, options?: BuilderToMitosisOptions) => {
31
33
  subComponents: {
@@ -51,11 +53,30 @@ export declare const builderContentToMitosisComponent: (builderContent: BuilderC
51
53
  };
52
54
  };
53
55
  hooks: {
54
- init?: string | undefined;
55
- onMount?: string | undefined;
56
- onUnMount?: string | undefined;
57
- preComponent?: string | undefined;
58
- postComponent?: string | undefined;
56
+ init?: {
57
+ code: string;
58
+ deps?: string | undefined;
59
+ } | undefined;
60
+ onMount?: {
61
+ code: string;
62
+ deps?: string | undefined;
63
+ } | undefined;
64
+ onUnMount?: {
65
+ code: string;
66
+ deps?: string | undefined;
67
+ } | undefined;
68
+ preComponent?: {
69
+ code: string;
70
+ deps?: string | undefined;
71
+ } | undefined;
72
+ postComponent?: {
73
+ code: string;
74
+ deps?: string | undefined;
75
+ } | undefined;
76
+ onUpdate?: {
77
+ code: string;
78
+ deps?: string | undefined;
79
+ } | undefined;
59
80
  };
60
81
  children: MitosisNode[];
61
82
  subComponents: import("..").MitosisComponent[];
@@ -82,11 +103,30 @@ export declare const builderContentToMitosisComponent: (builderContent: BuilderC
82
103
  };
83
104
  };
84
105
  hooks: {
85
- init?: string | undefined;
86
- onMount?: string | undefined;
87
- onUnMount?: string | undefined;
88
- preComponent?: string | undefined;
89
- postComponent?: string | undefined;
106
+ init?: {
107
+ code: string;
108
+ deps?: string | undefined;
109
+ } | undefined;
110
+ onMount?: {
111
+ code: string;
112
+ deps?: string | undefined;
113
+ } | undefined;
114
+ onUnMount?: {
115
+ code: string;
116
+ deps?: string | undefined;
117
+ } | undefined;
118
+ preComponent?: {
119
+ code: string;
120
+ deps?: string | undefined;
121
+ } | undefined;
122
+ postComponent?: {
123
+ code: string;
124
+ deps?: string | undefined;
125
+ } | undefined;
126
+ onUpdate?: {
127
+ code: string;
128
+ deps?: string | undefined;
129
+ } | undefined;
90
130
  };
91
131
  children: MitosisNode[];
92
132
  };
@@ -33,7 +33,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
34
  };
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.builderContentToMitosisComponent = exports.isBuilderElement = exports.extractStateHook = exports.builderElementToMitosisNode = exports.symbolBlocksAsChildren = void 0;
36
+ exports.builderContentToMitosisComponent = exports.isBuilderElement = exports.createBuilderElement = exports.convertExportDefaultToReturn = exports.extractStateHook = exports.builderElementToMitosisNode = exports.symbolBlocksAsChildren = void 0;
37
37
  var babel = __importStar(require("@babel/core"));
38
38
  var generator_1 = __importDefault(require("@babel/generator"));
39
39
  var json5_1 = __importDefault(require("json5"));
@@ -533,7 +533,7 @@ var builderElementToMitosisNode = function (block, options, _internalOptions) {
533
533
  exports.builderElementToMitosisNode = builderElementToMitosisNode;
534
534
  var getHooks = function (content) {
535
535
  var _a, _b;
536
- var code = ((_a = content.data) === null || _a === void 0 ? void 0 : _a.tsCode) || ((_b = content.data) === null || _b === void 0 ? void 0 : _b.jsCode) || '';
536
+ var code = convertExportDefaultToReturn(((_a = content.data) === null || _a === void 0 ? void 0 : _a.tsCode) || ((_b = content.data) === null || _b === void 0 ? void 0 : _b.jsCode) || '');
537
537
  try {
538
538
  return (0, jsx_1.parseJsx)("\n export default function TemporaryComponent() {\n ".concat(
539
539
  // Mitosis parser looks for useState to be a variable assignment,
@@ -598,6 +598,29 @@ function extractStateHook(code) {
598
598
  return { code: newCode, state: state };
599
599
  }
600
600
  exports.extractStateHook = extractStateHook;
601
+ function convertExportDefaultToReturn(code) {
602
+ var types = babel.types;
603
+ var ast = babel.parse(code, {
604
+ presets: [[tsPreset, { isTSX: true, allExtensions: true }]],
605
+ plugins: [[decorators, { legacy: true }], jsxPlugin],
606
+ });
607
+ var body = types.isFile(ast)
608
+ ? ast.program.body
609
+ : types.isProgram(ast)
610
+ ? ast.body
611
+ : [];
612
+ var newBody = body.slice();
613
+ for (var i = 0; i < body.length; i++) {
614
+ var statement = body[i];
615
+ if (types.isExportDefaultDeclaration(statement)) {
616
+ if (types.isCallExpression(statement.declaration)) {
617
+ newBody[i] = types.returnStatement(statement.declaration);
618
+ }
619
+ }
620
+ }
621
+ return (0, generator_1.default)(types.program(newBody)).code || '';
622
+ }
623
+ exports.convertExportDefaultToReturn = convertExportDefaultToReturn;
601
624
  // TODO: maybe this should be part of the builder -> Mitosis part
602
625
  function extractSymbols(json) {
603
626
  var _a, _b, _c, _d;
@@ -637,10 +660,15 @@ function extractSymbols(json) {
637
660
  subComponents: subComponents,
638
661
  };
639
662
  }
663
+ var createBuilderElement = function (options) { return (__assign({ '@type': '@builder.io/sdk:Element', id: 'builder-' +
664
+ Math.random()
665
+ .toString(36)
666
+ .split('.')[1] }, options)); };
667
+ exports.createBuilderElement = createBuilderElement;
640
668
  var isBuilderElement = function (el) { var _a; return ((_a = el) === null || _a === void 0 ? void 0 : _a['@type']) === '@builder.io/sdk:Element'; };
641
669
  exports.isBuilderElement = isBuilderElement;
642
670
  var builderContentPartToMitosisComponent = function (builderContent, options) {
643
- var _a, _b, _c, _d, _e;
671
+ var _a, _b, _c, _d, _e, _f;
644
672
  if (options === void 0) { options = {}; }
645
673
  builderContent = (0, fast_clone_1.fastClone)(builderContent);
646
674
  (0, traverse_1.default)(builderContent).forEach(function (elem) {
@@ -669,7 +697,8 @@ var builderContentPartToMitosisComponent = function (builderContent, options) {
669
697
  }
670
698
  }
671
699
  });
672
- var _f = 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 = _f.state, customCode = _f.code;
700
+ var _g = 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 = _g.state, code = _g.code;
701
+ var customCode = convertExportDefaultToReturn(code);
673
702
  var parsed = getHooks(builderContent);
674
703
  var componentJson = (0, create_mitosis_component_1.createMitosisComponent)({
675
704
  meta: {
@@ -678,10 +707,11 @@ var builderContentPartToMitosisComponent = function (builderContent, options) {
678
707
  },
679
708
  },
680
709
  state: (parsed === null || parsed === void 0 ? void 0 : parsed.state) || __assign(__assign({}, state), (_d = builderContent.data) === null || _d === void 0 ? void 0 : _d.state),
681
- hooks: __assign({}, (((parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) || customCode) && {
682
- onMount: (parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) || customCode,
710
+ hooks: __assign({}, ((((_e = parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) === null || _e === void 0 ? void 0 : _e.code) ||
711
+ (customCode && { code: customCode })) && {
712
+ onMount: (parsed === null || parsed === void 0 ? void 0 : parsed.hooks.onMount) || { code: customCode },
683
713
  })),
684
- children: (((_e = builderContent.data) === null || _e === void 0 ? void 0 : _e.blocks) || [])
714
+ children: (((_f = builderContent.data) === null || _f === void 0 ? void 0 : _f.blocks) || [])
685
715
  .filter(function (item) {
686
716
  var _a, _b;
687
717
  if ((_b = (_a = item.properties) === null || _a === void 0 ? void 0 : _a.src) === null || _b === void 0 ? void 0 : _b.includes('/api/v1/pixel')) {
@@ -191,13 +191,51 @@ var componentFunctionToJson = function (node, context) {
191
191
  var firstArg = expression.arguments[0];
192
192
  if (types.isFunctionExpression(firstArg) ||
193
193
  types.isArrowFunctionExpression(firstArg)) {
194
- hooks.onMount = (0, generator_1.default)(firstArg.body)
194
+ var code = (0, generator_1.default)(firstArg.body)
195
195
  .code.trim()
196
- // Remove abtrary block wrapping if any
196
+ // Remove arbitrary block wrapping if any
197
197
  // AKA
198
198
  // { console.log('hi') } -> console.log('hi')
199
199
  .replace(/^{/, '')
200
200
  .replace(/}$/, '');
201
+ hooks.onMount = { code: code };
202
+ }
203
+ }
204
+ else if (expression.callee.name === 'onUpdate') {
205
+ var firstArg = expression.arguments[0];
206
+ var secondArg = expression.arguments[1];
207
+ if (types.isFunctionExpression(firstArg) ||
208
+ types.isArrowFunctionExpression(firstArg)) {
209
+ var code = (0, generator_1.default)(firstArg.body)
210
+ .code.trim()
211
+ // Remove arbitrary block wrapping if any
212
+ // AKA
213
+ // { console.log('hi') } -> console.log('hi')
214
+ .replace(/^{/, '')
215
+ .replace(/}$/, '');
216
+ if (!secondArg ||
217
+ (types.isArrayExpression(secondArg) &&
218
+ secondArg.elements.length > 0)) {
219
+ var depsCode = secondArg ? (0, generator_1.default)(secondArg).code : '';
220
+ hooks.onUpdate = {
221
+ code: code,
222
+ };
223
+ hooks.onUpdate.deps = depsCode;
224
+ }
225
+ }
226
+ }
227
+ else if (expression.callee.name === 'onUnMount') {
228
+ var firstArg = expression.arguments[0];
229
+ if (types.isFunctionExpression(firstArg) ||
230
+ types.isArrowFunctionExpression(firstArg)) {
231
+ var code = (0, generator_1.default)(firstArg.body)
232
+ .code.trim()
233
+ // Remove arbitrary block wrapping if any
234
+ // AKA
235
+ // { console.log('hi') } -> console.log('hi')
236
+ .replace(/^{/, '')
237
+ .replace(/}$/, '');
238
+ hooks.onUnMount = { code: code };
201
239
  }
202
240
  }
203
241
  }
@@ -605,7 +643,9 @@ function parseJsx(jsx, options) {
605
643
  .map(function (node) { return "export default ".concat((0, generator_1.default)(node).code); });
606
644
  cutStatements = collectMetadata(cutStatements, context.builder.component, useOptions);
607
645
  // TODO: support multiple? e.g. for others to add imports?
608
- context.builder.component.hooks.preComponent = (0, generator_1.default)(types.program(cutStatements)).code;
646
+ context.builder.component.hooks.preComponent = {
647
+ code: (0, generator_1.default)(types.program(cutStatements)).code,
648
+ };
609
649
  path.replaceWith(types.program(keepStatements));
610
650
  },
611
651
  FunctionDeclaration: function (path, context) {
@@ -91,6 +91,7 @@ var fast_clone_1 = require("../helpers/fast-clone");
91
91
  var liquid_1 = require("../generators/liquid");
92
92
  var map_to_attributes_1 = require("../helpers/map-to-attributes");
93
93
  var map_to_css_1 = require("../helpers/map-to-css");
94
+ var __1 = require("..");
94
95
  var voidElements = new Set([
95
96
  'area',
96
97
  'base',
@@ -1250,10 +1251,9 @@ function processInnerTemplates(templates, options, priorConditions, overrideHash
1250
1251
  });
1251
1252
  });
1252
1253
  }
1253
- var el = function (options) { return (__assign({ '@type': '@builder.io/sdk:Element', id: 'builder-' +
1254
- Math.random()
1255
- .toString(36)
1256
- .split('.')[1], meta: __assign({ importedFrom: 'liquid' }, options === null || options === void 0 ? void 0 : options.meta) }, options)); };
1254
+ var el = function (options) {
1255
+ return (0, __1.createBuilderElement)(__assign({ meta: __assign({ importedFrom: 'liquid' }, options === null || options === void 0 ? void 0 : options.meta) }, options));
1256
+ };
1257
1257
  var tagRe = /\[([a-z]+)\](='([^']+)')?/;
1258
1258
  var tagReAll = /\[([^\]]+)\](='([^']+)')?/g;
1259
1259
  var parseTags = function (tag) {
@@ -56,15 +56,6 @@ function getComponentInputNames(componentName) {
56
56
  var componentInfo = react_1.Builder.components.find(function (item) { return item.name === componentName; });
57
57
  return ((_a = componentInfo === null || componentInfo === void 0 ? void 0 : componentInfo.inputs) === null || _a === void 0 ? void 0 : _a.map(function (item) { return item.name; })) || [];
58
58
  }
59
- function updateQueryParam(uri, key, value) {
60
- if (uri === void 0) { uri = ''; }
61
- var re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
62
- var separator = uri.indexOf('?') !== -1 ? '&' : '?';
63
- if (uri.match(re)) {
64
- return uri.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');
65
- }
66
- return uri + separator + key + '=' + encodeURIComponent(value);
67
- }
68
59
  var wrapOutput = function (node, child, components) {
69
60
  var inputNames = getComponentInputNames(node.name);
70
61
  (0, exports.compileAwayBuilderComponentsFromTree)(child, components);
@@ -257,22 +248,14 @@ exports.components = {
257
248
  Image: function (node, context, components) {
258
249
  var _a = node.properties, backgroundSize = _a.backgroundSize, backgroundPosition = _a.backgroundPosition;
259
250
  var srcset = node.properties.srcset;
260
- var widths = [100, 200, 400, 800, 1200, 1600, 2000];
261
251
  var aspectRatio = node.bindings.aspectRatio
262
252
  ? parseFloat(node.bindings.aspectRatio)
263
253
  : null;
264
254
  if (typeof aspectRatio === 'number' && isNaN(aspectRatio)) {
265
255
  aspectRatio = null;
266
256
  }
267
- var srcSet = srcset ||
268
- "".concat((node.properties.image || '').match(/builder\.io/)
269
- ? widths
270
- .map(function (size) {
271
- return "".concat(updateQueryParam(node.properties.image, 'width', String(size)), " ").concat(size, "w");
272
- })
273
- .concat([node.properties.image])
274
- .join(', ')
275
- : '');
257
+ var image = node.properties.image;
258
+ var srcSet = srcset || generateBuilderIoSrcSet(image);
276
259
  var source = node.bindings.noWebp !== 'true' &&
277
260
  (0, create_mitosis_node_1.createMitosisNode)({
278
261
  name: 'source',
@@ -349,7 +332,24 @@ exports.components = {
349
332
  var imageNodes = [picture];
350
333
  imgSizer && imageNodes.push(imgSizer);
351
334
  children && imageNodes.push(children);
352
- return wrapOutput(node, imageNodes, components);
335
+ var href = node.properties.href;
336
+ var hrefBinding = node.bindings.href;
337
+ if (href || hrefBinding) {
338
+ var aHref = (0, create_mitosis_node_1.createMitosisNode)({
339
+ name: 'a',
340
+ properties: {
341
+ href: href,
342
+ },
343
+ bindings: {
344
+ href: hrefBinding,
345
+ },
346
+ children: imageNodes,
347
+ });
348
+ return wrapOutput(node, aHref, components);
349
+ }
350
+ else {
351
+ return wrapOutput(node, imageNodes, components);
352
+ }
353
353
  },
354
354
  Video: function (node, context, components) {
355
355
  var aspectRatio = node.bindings.aspectRatio
@@ -481,6 +481,26 @@ var compileAwayBuilderComponents = function (pluginOptions) {
481
481
  }); };
482
482
  };
483
483
  exports.compileAwayBuilderComponents = compileAwayBuilderComponents;
484
+ function updateQueryParam(uri, key, value) {
485
+ if (uri === void 0) { uri = ''; }
486
+ var re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
487
+ var separator = uri.indexOf('?') !== -1 ? '&' : '?';
488
+ if (uri.match(re)) {
489
+ return uri.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');
490
+ }
491
+ return uri + separator + key + '=' + encodeURIComponent(value);
492
+ }
493
+ function generateBuilderIoSrcSet(image) {
494
+ var isBuilderIo = !!(image || '').match(/builder\.io/);
495
+ return isBuilderIo
496
+ ? [100, 200, 400, 800, 1200, 1600, 2000]
497
+ .map(function (size) {
498
+ return "".concat(updateQueryParam(image, 'width', String(size)), " ").concat(size, "w");
499
+ })
500
+ .concat([image])
501
+ .join(', ')
502
+ : '';
503
+ }
484
504
  function noUndefined(obj) {
485
505
  var cleanObj = {};
486
506
  for (var key in obj) {
@@ -0,0 +1,18 @@
1
+ import { BuilderContent, BuilderElement } from '@builder.io/sdk';
2
+ import { MitosisComponent } from '../types/mitosis-component';
3
+ export declare type SymbolHierarchy = {
4
+ depthFirstSymbols: BuilderElement[];
5
+ } & {
6
+ [id: string]: string[];
7
+ };
8
+ /**
9
+ * Ensure every symbol in a BuilderContent tree has a unique ID.
10
+ * Mutates the data tree directly.
11
+ */
12
+ export declare function ensureAllSymbolsHaveIds(content: BuilderContent): void;
13
+ export declare function convertBuilderContentToSymbolHierarchy(content: BuilderContent, { collectComponentStyles, collectComponentState, }?: {
14
+ collectComponentStyles?: string[];
15
+ collectComponentState?: Record<string, any>;
16
+ }): SymbolHierarchy;
17
+ export declare function convertBuilderElementToMitosisComponent(element: BuilderElement): MitosisComponent | null;
18
+ export declare function getJsxSymbolComponentName(id: string): string;