@builder.io/mitosis 0.0.46 → 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 (156) hide show
  1. package/dist/src/__tests__/angular.test.d.ts +1 -0
  2. package/dist/src/__tests__/angular.test.js +12 -0
  3. package/dist/src/__tests__/data/blocks/columns.raw.jsx +6 -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 +68 -9
  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 +93 -13
  30. package/dist/src/generators/qwik/jsx.d.ts +1 -1
  31. package/dist/src/generators/qwik/jsx.js +30 -7
  32. package/dist/src/generators/qwik/src-generator.d.ts +15 -2
  33. package/dist/src/generators/qwik/src-generator.js +82 -16
  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-native.js +34 -27
  37. package/dist/src/generators/react.js +36 -14
  38. package/dist/src/generators/solid.js +5 -2
  39. package/dist/src/generators/svelte.js +10 -5
  40. package/dist/src/generators/vue.js +9 -6
  41. package/dist/src/helpers/create-jsx-lite-component.d.ts +2 -0
  42. package/dist/src/helpers/create-jsx-lite-component.js +16 -0
  43. package/dist/src/helpers/create-jsx-lite-context.d.ts +4 -0
  44. package/dist/src/helpers/create-jsx-lite-context.js +18 -0
  45. package/dist/src/helpers/create-jsx-lite-node.d.ts +2 -0
  46. package/dist/src/helpers/create-jsx-lite-node.js +16 -0
  47. package/dist/src/helpers/get-state-object-string.js +51 -38
  48. package/dist/src/helpers/is-jsx-lite-node.d.ts +2 -0
  49. package/dist/src/helpers/is-jsx-lite-node.js +7 -0
  50. package/dist/src/helpers/map-refs.js +10 -8
  51. package/dist/src/helpers/patterns.d.ts +2 -0
  52. package/dist/src/helpers/patterns.js +5 -0
  53. package/dist/src/helpers/process-http-requests.js +3 -3
  54. package/dist/src/helpers/process-tag-references.js +4 -3
  55. package/dist/src/index.d.ts +2 -1
  56. package/dist/src/index.js +4 -3
  57. package/dist/src/jsx-types.d.ts +1 -1
  58. package/dist/src/parsers/builder.d.ts +50 -10
  59. package/dist/src/parsers/builder.js +37 -7
  60. package/dist/src/parsers/jsx.js +43 -3
  61. package/dist/src/parsers/liquid.js +4 -4
  62. package/dist/src/plugins/compile-away-builder-components.js +40 -20
  63. package/dist/src/symbols/symbol-processor.d.ts +18 -0
  64. package/dist/src/symbols/symbol-processor.js +177 -0
  65. package/dist/src/types/jsx-lite-component.d.ts +63 -0
  66. package/dist/src/types/jsx-lite-component.js +2 -0
  67. package/dist/src/types/jsx-lite-context.d.ts +6 -0
  68. package/dist/src/types/jsx-lite-context.js +2 -0
  69. package/dist/src/types/jsx-lite-node.d.ts +13 -0
  70. package/dist/src/types/jsx-lite-node.js +2 -0
  71. package/dist/src/types/jsx-lite-styles.d.ts +1 -0
  72. package/dist/src/types/jsx-lite-styles.js +2 -0
  73. package/dist/src/types/mitosis-component.d.ts +10 -5
  74. package/dist/test/qoot/Todo/bundle.js +88 -0
  75. package/dist/test/qoot/Todo/component.ts +17 -0
  76. package/dist/test/qoot/Todo/onButtonClick.ts +13 -0
  77. package/dist/test/qoot/Todo/onInput2Blur.ts +11 -0
  78. package/dist/test/qoot/Todo/onInput2KeyUp.ts +10 -0
  79. package/dist/test/qoot/Todo/onInputClick.ts +10 -0
  80. package/dist/test/qoot/Todo/onLabelDblClick.ts +11 -0
  81. package/dist/test/qoot/Todo/public.ts +4 -0
  82. package/dist/test/qoot/Todo/template.tsx +46 -0
  83. package/dist/test/qoot/Todos/component.ts +9 -0
  84. package/dist/test/qoot/Todos/onInputClick.ts +14 -0
  85. package/dist/test/qoot/Todos/public.ts +3 -0
  86. package/dist/test/qoot/Todos/template.tsx +30 -0
  87. package/dist/test/qwik/{todo → Todo}/Todo.cjs/high.cjs +0 -0
  88. package/dist/test/qwik/{todo → Todo}/Todo.cjs/low.cjs +0 -0
  89. package/dist/test/qwik/{todo → Todo}/Todo.cjs/med.cjs +0 -0
  90. package/dist/test/qwik/{todo → Todo}/Todo.js/high.js +0 -0
  91. package/dist/test/qwik/{todo → Todo}/Todo.js/low.js +0 -0
  92. package/dist/test/qwik/{todo → Todo}/Todo.js/med.js +0 -0
  93. package/dist/test/qwik/{todo → Todo}/Todo.tsx/high.tsx +0 -0
  94. package/dist/test/qwik/{todo → Todo}/Todo.tsx/low.tsx +0 -0
  95. package/dist/test/qwik/{todo → Todo}/Todo.tsx/med.tsx +0 -0
  96. package/dist/test/qwik/Todo/bundle.js +46 -0
  97. package/dist/test/qwik/Todo/component.ts +17 -0
  98. package/dist/test/qwik/Todo/onButtonClick.ts +10 -0
  99. package/dist/test/qwik/Todo/onInput2Blur.ts +14 -0
  100. package/dist/test/qwik/Todo/onInput2KeyUp.ts +10 -0
  101. package/dist/test/qwik/Todo/onInputClick.ts +13 -0
  102. package/dist/test/qwik/Todo/onLabelDblClick.ts +11 -0
  103. package/dist/test/qwik/Todo/public.ts +3 -0
  104. package/dist/test/qwik/Todo/template.tsx +46 -0
  105. package/dist/test/qwik/Todo.ts +4 -0
  106. package/dist/test/qwik/Todo_component.ts +17 -0
  107. package/dist/test/qwik/Todo_onButtonClick.ts +13 -0
  108. package/dist/test/qwik/Todo_onInput2Blur.ts +14 -0
  109. package/dist/test/qwik/Todo_onInput2KeyUp.ts +10 -0
  110. package/dist/test/qwik/Todo_onInputClick.ts +13 -0
  111. package/dist/test/qwik/Todo_onLabelDblClick.ts +14 -0
  112. package/dist/test/qwik/Todo_template.tsx +46 -0
  113. package/dist/test/qwik/{todos → Todos}/Todo.tsx/high.tsx +0 -0
  114. package/dist/test/qwik/{todos → Todos}/Todo.tsx/low.tsx +0 -0
  115. package/dist/test/qwik/{todos → Todos}/Todo.tsx/med.tsx +0 -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/public.ts +3 -0
  119. package/dist/test/qwik/Todos/template.tsx +30 -0
  120. package/dist/test/qwik/Todos.ts +3 -0
  121. package/dist/test/qwik/Todos_component.ts +9 -0
  122. package/dist/test/qwik/Todos_onInputClick.ts +14 -0
  123. package/dist/test/qwik/Todos_template.tsx +30 -0
  124. package/dist/test/qwik/qwik/Image/high.js +1 -0
  125. package/dist/test/qwik/qwik/Image/low.js +75 -0
  126. package/dist/test/qwik/qwik/Image/med.js +9 -0
  127. package/dist/test/qwik/qwik/Image.slow/high.js +1 -0
  128. package/dist/test/qwik/qwik/Image.slow/low.js +75 -0
  129. package/dist/test/qwik/qwik/Image.slow/med.js +9 -0
  130. package/dist/test/qwik/qwik/button/high.js +8 -0
  131. package/dist/test/qwik/qwik/button/low.js +34 -0
  132. package/dist/test/qwik/qwik/button/med.js +9 -0
  133. package/dist/test/qwik/qwik/hello_world/stylesheet/high.jsx +1 -0
  134. package/dist/test/qwik/qwik/hello_world/stylesheet/low.jsx +24 -0
  135. package/dist/test/qwik/qwik/hello_world/stylesheet/med.jsx +9 -0
  136. package/dist/test/qwik/qwik/page-with-symbol/high.js +1 -0
  137. package/dist/test/qwik/qwik/page-with-symbol/low.js +49 -0
  138. package/dist/test/qwik/qwik/page-with-symbol/med.js +9 -0
  139. package/dist/test/qwik/qwik/svg/high.js +1 -0
  140. package/dist/test/qwik/qwik/svg/low.js +30 -0
  141. package/dist/test/qwik/qwik/svg/med.js +9 -0
  142. package/dist/test/qwik/qwik/todo/Todo.cjs/high.cjs +31 -0
  143. package/dist/test/qwik/qwik/todo/Todo.cjs/low.cjs +1 -0
  144. package/dist/test/qwik/qwik/todo/Todo.cjs/med.cjs +59 -0
  145. package/dist/test/qwik/qwik/todo/Todo.js/high.js +5 -0
  146. package/dist/{src/types/generators.d.ts → test/qwik/qwik/todo/Todo.js/low.js} +0 -0
  147. package/dist/test/qwik/qwik/todo/Todo.js/med.js +1 -0
  148. package/dist/test/qwik/qwik/todo/Todo.tsx/high.tsx +30 -0
  149. package/dist/test/qwik/qwik/todo/Todo.tsx/low.tsx +1 -0
  150. package/dist/test/qwik/qwik/todo/Todo.tsx/med.tsx +34 -0
  151. package/dist/test/qwik/qwik/todos/Todo.tsx/high.tsx +12 -0
  152. package/dist/test/qwik/qwik/todos/Todo.tsx/low.tsx +24 -0
  153. package/dist/test/qwik/qwik/todos/Todo.tsx/med.tsx +8 -0
  154. package/dist/tsconfig.tsbuildinfo +1 -1
  155. package/package.json +1 -1
  156. package/dist/src/types/generators.js +0 -1
@@ -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;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
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
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.getJsxSymbolComponentName = exports.convertBuilderElementToMitosisComponent = exports.convertBuilderContentToSymbolHierarchy = exports.ensureAllSymbolsHaveIds = void 0;
19
+ var traverse_1 = require("traverse");
20
+ var builder_1 = require("../parsers/builder");
21
+ var minify_1 = require("../generators/minify");
22
+ /**
23
+ * Ensure every symbol in a BuilderContent tree has a unique ID.
24
+ * Mutates the data tree directly.
25
+ */
26
+ function ensureAllSymbolsHaveIds(content) {
27
+ var ids = new Set();
28
+ (0, traverse_1.forEach)(content, function (el) {
29
+ var _a, _b, _c;
30
+ if (this.key === 'jsCode' &&
31
+ isString(el) &&
32
+ el.endsWith('return _virtual_index')) {
33
+ // Sometimes rollup adds a final `return _virtual_index` but that causes VM evaluation to fail.
34
+ // Instead of a return on the last line, it needs a plain expression on the last line. Luckily
35
+ // because the rollup compile behavior is consistent this works pretty reliably
36
+ el = el.replace(/return _virtual_index$/, '_virtual_index');
37
+ this.parent && (this.parent.node.jsCode = el);
38
+ }
39
+ if ((0, builder_1.isBuilderElement)(el)) {
40
+ if (((_a = el === null || el === void 0 ? void 0 : el.component) === null || _a === void 0 ? void 0 : _a.name) === 'Symbol') {
41
+ var id = getIdFromSymbol(el);
42
+ if (id) {
43
+ if (ids.has(id)) {
44
+ if ((_c = (_b = el.component) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.symbol) {
45
+ var id_1 = generateId();
46
+ el.component.options.symbol.entry = id_1;
47
+ if (el.component.options.symbol.content) {
48
+ el.component.options.symbol.content.id = id_1;
49
+ }
50
+ ids.add(id_1);
51
+ }
52
+ }
53
+ else {
54
+ ids.add(id);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ });
60
+ }
61
+ exports.ensureAllSymbolsHaveIds = ensureAllSymbolsHaveIds;
62
+ //TODO(misko): needs test
63
+ function convertBuilderContentToSymbolHierarchy(content, _a) {
64
+ var _b;
65
+ var _c = _a === void 0 ? {} : _a, collectComponentStyles = _c.collectComponentStyles, collectComponentState = _c.collectComponentState;
66
+ var path = [-1, content.id];
67
+ var hierarchy = (_b = {
68
+ depthFirstSymbols: []
69
+ },
70
+ _b[content.id] = [],
71
+ _b);
72
+ (0, traverse_1.forEach)(content, function (el) {
73
+ var _a, _b, _c;
74
+ var cssCode = el === null || el === void 0 ? void 0 : el.cssCode;
75
+ if (cssCode) {
76
+ collectComponentStyles && collectComponentStyles.push((0, minify_1.minify)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["", ""], ["", ""])), cssCode));
77
+ }
78
+ while (path[0 /* DEPTH */] >= this.path.length) {
79
+ path.shift();
80
+ path.shift();
81
+ }
82
+ if ((0, builder_1.isBuilderElement)(el)) {
83
+ if (((_a = el === null || el === void 0 ? void 0 : el.component) === null || _a === void 0 ? void 0 : _a.name) === 'Symbol') {
84
+ if (collectComponentState) {
85
+ var symbol = el.component.options.symbol;
86
+ var props = symbol.data;
87
+ var state = (_c = (_b = symbol.content) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state;
88
+ if (state) {
89
+ var id = toHash(state);
90
+ props['serverStateId'] = id;
91
+ collectComponentState[id] = state;
92
+ }
93
+ }
94
+ if (path[0 /* DEPTH */] < this.path.length) {
95
+ var id = getIdFromSymbol(el);
96
+ hierarchy[id] = [];
97
+ addIfMissing(hierarchy[path[1 /* ID */]], id);
98
+ path.unshift(this.path.length, id);
99
+ }
100
+ // TODO(misko): This should be `el.content` not `el`
101
+ // Because we don't wante to take the `<Symbol>` with us.
102
+ // TODO(misko): Do we really want to add ALL symbols? Even duplicates?
103
+ hierarchy.depthFirstSymbols.unshift(el);
104
+ }
105
+ }
106
+ });
107
+ return hierarchy;
108
+ }
109
+ exports.convertBuilderContentToSymbolHierarchy = convertBuilderContentToSymbolHierarchy;
110
+ function convertBuilderElementToMitosisComponent(element) {
111
+ var _a, _b;
112
+ var symbolValue = (_b = (_a = element.component) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.symbol;
113
+ var elContent = symbolValue === null || symbolValue === void 0 ? void 0 : symbolValue.content;
114
+ if (!elContent) {
115
+ console.warn('Symbol missing content', element.id);
116
+ delete element.component; // TODO(misko): Should this be assign `undefined` for perf?
117
+ element.children = [];
118
+ return null;
119
+ }
120
+ var id = getIdFromSymbol(element);
121
+ var componentName = getJsxSymbolComponentName(id);
122
+ delete element.component; // TODO(misko): Should this be assign `undefined` for perf?
123
+ element.children = [
124
+ (0, builder_1.createBuilderElement)({
125
+ component: {
126
+ name: componentName,
127
+ options: symbolValue.data,
128
+ },
129
+ }),
130
+ ];
131
+ var mitosisComponent = __assign(__assign({}, (0, builder_1.builderContentToMitosisComponent)(elContent, {
132
+ includeBuilderExtras: true,
133
+ preserveTextBlocks: true,
134
+ })), { name: componentName });
135
+ mitosisComponent.meta.builderElId = element.id;
136
+ return mitosisComponent;
137
+ }
138
+ exports.convertBuilderElementToMitosisComponent = convertBuilderElementToMitosisComponent;
139
+ function getJsxSymbolComponentName(id) {
140
+ return 'Component' + id.toUpperCase().replace(/-/g, '');
141
+ }
142
+ exports.getJsxSymbolComponentName = getJsxSymbolComponentName;
143
+ function getIdFromSymbol(el) {
144
+ var _a, _b, _c;
145
+ // TODO(misko): Don't use entry us el.id???
146
+ return (_c = (_b = (_a = el.component) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.symbol) === null || _c === void 0 ? void 0 : _c.entry;
147
+ }
148
+ function addIfMissing(array, value) {
149
+ if (array.indexOf(value) == -1) {
150
+ array.push(value);
151
+ }
152
+ }
153
+ function isString(value) {
154
+ return typeof value == 'string';
155
+ }
156
+ function generateId() {
157
+ return (
158
+ // TODO(misko): For now I have removed the data as I think it is overkill
159
+ // and makes the output unnecessarily big.
160
+ // new Date().getTime().toString(36) +
161
+ Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36));
162
+ }
163
+ function toHash(obj) {
164
+ return hashCode(JSON.stringify(obj));
165
+ }
166
+ function hashCode(text) {
167
+ var hash = 0, i, chr;
168
+ if (text.length === 0)
169
+ return String(hash);
170
+ for (i = 0; i < text.length; i++) {
171
+ chr = text.charCodeAt(i);
172
+ hash = (hash << 5) - hash + chr;
173
+ hash |= 0; // Convert to 32bit integer
174
+ }
175
+ return Number(Math.abs(hash)).toString(36);
176
+ }
177
+ var templateObject_1;
@@ -0,0 +1,63 @@
1
+ import { JSONObject } from './json';
2
+ import { JSXLiteNode } from './jsx-lite-node';
3
+ /**
4
+ * @example
5
+ * // import core, { useState, someThing as someAlias } from '@jsx-lite/core'
6
+ * {
7
+ * path: '@jsx-lite/core',
8
+ * imports: {
9
+ * useState: 'useState',
10
+ * someAlias: 'someThing',
11
+ * core: 'default',
12
+ * }
13
+ * }
14
+ *
15
+ * @example
16
+ * // import * as core from '@jsx-lite/core'
17
+ * {
18
+ * path: '@jsx-lite/core',
19
+ * imports: {
20
+ * core: '*',
21
+ * }
22
+ * }
23
+ */
24
+ export interface JSXLiteImport {
25
+ path: string;
26
+ imports: {
27
+ [key: string]: string | undefined;
28
+ };
29
+ }
30
+ declare type ContextInfo = {
31
+ name: string;
32
+ path: string;
33
+ };
34
+ export declare type JSXLiteComponent = {
35
+ '@type': '@jsx-lite/component';
36
+ name: string;
37
+ imports: JSXLiteImport[];
38
+ meta: JSONObject & {
39
+ metadataHook?: JSONObject;
40
+ };
41
+ state: JSONObject;
42
+ context: {
43
+ get: {
44
+ [key: string]: ContextInfo;
45
+ };
46
+ set: {
47
+ [key: string]: {
48
+ name: string;
49
+ value?: JSONObject;
50
+ };
51
+ };
52
+ };
53
+ hooks: {
54
+ init?: string;
55
+ onMount?: string;
56
+ onUnMount?: string;
57
+ preComponent?: string;
58
+ postComponent?: string;
59
+ };
60
+ children: JSXLiteNode[];
61
+ subComponents: JSXLiteComponent[];
62
+ };
63
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { JSONObject } from '../types/json';
2
+ export declare type JSXLiteContext = {
3
+ '@type': '@jsx-lite/context';
4
+ name: string;
5
+ value: JSONObject;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { JSONObject } from './json';
2
+ export declare type JSXLiteNode = {
3
+ '@type': '@jsx-lite/node';
4
+ name: string;
5
+ meta: JSONObject;
6
+ properties: {
7
+ [key: string]: string | undefined;
8
+ };
9
+ bindings: {
10
+ [key: string]: string | undefined;
11
+ };
12
+ children: JSXLiteNode[];
13
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare type JSXLiteStyles = Omit<Partial<CSSStyleDeclaration>, 'length' | 'getPropertyPriority' | 'getPropertyValue' | 'item' | 'removeProperty' | 'setProperty'>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });