@builder.io/mitosis 0.0.56-13 → 0.0.56-16

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 (217) hide show
  1. package/dist/src/__tests__/angular.test.js +2 -104
  2. package/dist/src/__tests__/builder.test.js +3 -3
  3. package/dist/src/__tests__/data/basic-child-component.raw.jsx +1 -2
  4. package/dist/src/__tests__/data/basic-context.raw.d.ts +1 -0
  5. package/dist/src/__tests__/data/basic-context.raw.jsx +29 -0
  6. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.d.ts +1 -0
  7. package/dist/src/__tests__/data/basic-custom-mitosis-package.raw.jsx +10 -0
  8. package/dist/src/__tests__/data/basic-for-show.raw.jsx +2 -3
  9. package/dist/src/__tests__/data/basic-for.raw.jsx +2 -3
  10. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.d.ts +5 -0
  11. package/dist/src/__tests__/data/basic-forwardRef-metadata.raw.jsx +17 -0
  12. package/dist/src/__tests__/data/basic-forwardRef.raw.d.ts +5 -0
  13. package/dist/src/__tests__/data/basic-forwardRef.raw.jsx +14 -0
  14. package/dist/src/__tests__/data/basic-onChange.raw.d.ts +1 -0
  15. package/dist/src/__tests__/data/basic-onChange.raw.jsx +17 -0
  16. package/dist/src/__tests__/data/basic-onMount-update.raw.jsx +1 -1
  17. package/dist/src/__tests__/data/basic-onUpdate-return.raw.d.ts +1 -0
  18. package/dist/src/__tests__/data/basic-onUpdate-return.raw.jsx +24 -0
  19. package/dist/src/__tests__/data/basic-outputs-meta.raw.jsx +1 -1
  20. package/dist/src/__tests__/data/basic-outputs.raw.jsx +1 -1
  21. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.d.ts +6 -0
  22. package/dist/src/__tests__/data/basic-preserve-export-or-local-statement.raw.jsx +14 -0
  23. package/dist/src/__tests__/data/basic-props-destructure.raw.d.ts +6 -0
  24. package/dist/src/__tests__/data/basic-props-destructure.raw.jsx +14 -0
  25. package/dist/src/__tests__/data/basic-props.raw.d.ts +6 -0
  26. package/dist/src/__tests__/data/basic-props.raw.jsx +13 -0
  27. package/dist/src/__tests__/data/basic-ref-assignment.raw.d.ts +4 -0
  28. package/dist/src/__tests__/data/basic-ref-assignment.raw.jsx +15 -0
  29. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.d.ts +5 -0
  30. package/dist/src/__tests__/data/basic-ref-usePrevious.raw.jsx +35 -0
  31. package/dist/src/__tests__/data/basic-ref.raw.d.ts +4 -0
  32. package/dist/src/__tests__/data/basic-ref.raw.jsx +36 -0
  33. package/dist/src/__tests__/data/basic.raw.d.ts +6 -1
  34. package/dist/src/__tests__/data/basic.raw.jsx +10 -3
  35. package/dist/src/__tests__/data/blocks/classname-jsx.raw.jsx +1 -1
  36. package/dist/src/__tests__/data/blocks/columns.raw.jsx +1 -1
  37. package/dist/src/__tests__/data/blocks/custom-code.raw.jsx +3 -7
  38. package/dist/src/__tests__/data/blocks/embed.raw.jsx +3 -7
  39. package/dist/src/__tests__/data/blocks/form.raw.jsx +3 -3
  40. package/dist/src/__tests__/data/blocks/image.raw.jsx +8 -9
  41. package/dist/src/__tests__/data/blocks/img-state.raw.jsx +1 -1
  42. package/dist/src/__tests__/data/blocks/input.raw.jsx +1 -3
  43. package/dist/src/__tests__/data/blocks/multiple-onUpdateWithDeps.raw.jsx +7 -1
  44. package/dist/src/__tests__/data/blocks/onInit.raw.d.ts +8 -1
  45. package/dist/src/__tests__/data/blocks/onInit.raw.jsx +13 -3
  46. package/dist/src/__tests__/data/blocks/onUpdateWithDeps.raw.jsx +1 -1
  47. package/dist/src/__tests__/data/blocks/section-state.raw.jsx +1 -1
  48. package/dist/src/__tests__/data/blocks/select.raw.jsx +1 -3
  49. package/dist/src/__tests__/data/blocks/shadow-dom.raw.jsx +2 -4
  50. package/dist/src/__tests__/data/blocks/stamped-io.raw.jsx +2 -4
  51. package/dist/src/__tests__/data/blocks/text.raw.jsx +2 -5
  52. package/dist/src/__tests__/data/styles/class-and-className.raw.jsx +1 -3
  53. package/dist/src/__tests__/data/styles/className.raw.jsx +1 -3
  54. package/dist/src/__tests__/data/styles/classState.raw.d.ts +1 -0
  55. package/dist/src/__tests__/data/styles/classState.raw.jsx +12 -0
  56. package/dist/src/__tests__/data/types/component-props-interface.raw.d.ts +6 -0
  57. package/dist/src/__tests__/data/types/component-props-interface.raw.jsx +6 -0
  58. package/dist/src/__tests__/data/types/component-props-type.raw.d.ts +6 -0
  59. package/dist/src/__tests__/data/types/component-props-type.raw.jsx +6 -0
  60. package/dist/src/__tests__/data/types/preserve-typing.raw.d.ts +8 -0
  61. package/dist/src/__tests__/data/types/preserve-typing.raw.jsx +6 -0
  62. package/dist/src/__tests__/html.test.js +2 -145
  63. package/dist/src/__tests__/liquid.test.js +2 -109
  64. package/dist/src/__tests__/parse-jsx.test.js +22 -0
  65. package/dist/src/__tests__/qwik/convertMethodToFunction.test.d.ts +1 -0
  66. package/dist/src/__tests__/qwik/convertMethodToFunction.test.js +34 -0
  67. package/dist/src/__tests__/qwik/src-generator.test.d.ts +1 -0
  68. package/dist/src/__tests__/qwik/src-generator.test.js +65 -0
  69. package/dist/src/__tests__/qwik.test.js +44 -21
  70. package/dist/src/__tests__/react-native.test.js +2 -135
  71. package/dist/src/__tests__/react.test.js +5 -177
  72. package/dist/src/__tests__/shared.d.ts +3 -0
  73. package/dist/src/__tests__/shared.js +224 -0
  74. package/dist/src/__tests__/solid.test.js +2 -103
  75. package/dist/src/__tests__/stencil.test.js +3 -98
  76. package/dist/src/__tests__/styles.test.js +9 -1
  77. package/dist/src/__tests__/svelte.test.js +6 -0
  78. package/dist/src/__tests__/vue.test.js +2 -134
  79. package/dist/src/__tests__/webcomponent.test.js +6 -165
  80. package/dist/src/constants/hooks.d.ts +6 -0
  81. package/dist/src/constants/hooks.js +9 -0
  82. package/dist/src/generators/angular.d.ts +1 -1
  83. package/dist/src/generators/angular.js +66 -34
  84. package/dist/src/generators/builder.d.ts +1 -1
  85. package/dist/src/generators/builder.js +6 -12
  86. package/dist/src/generators/context/{react copy.d.ts → qwik.d.ts} +2 -2
  87. package/dist/src/generators/context/{react copy.js → qwik.js} +4 -5
  88. package/dist/src/generators/context/svelte.d.ts +1 -1
  89. package/dist/src/generators/helpers/context.js +1 -2
  90. package/dist/src/generators/html.d.ts +1 -1
  91. package/dist/src/generators/html.js +206 -120
  92. package/dist/src/generators/liquid.d.ts +1 -1
  93. package/dist/src/generators/liquid.js +6 -14
  94. package/dist/src/generators/mitosis.d.ts +1 -1
  95. package/dist/src/generators/mitosis.js +30 -29
  96. package/dist/src/generators/qwik/component-generator.d.ts +4 -0
  97. package/dist/src/generators/qwik/component-generator.js +271 -0
  98. package/dist/src/generators/qwik/component.js +4 -5
  99. package/dist/src/generators/qwik/convertMethodToFunction.d.ts +1 -0
  100. package/dist/src/generators/qwik/convertMethodToFunction.js +161 -0
  101. package/dist/src/generators/qwik/directives.js +20 -18
  102. package/dist/src/generators/qwik/index.d.ts +3 -1
  103. package/dist/src/generators/qwik/index.js +3 -1
  104. package/dist/src/generators/qwik/jsx.js +10 -6
  105. package/dist/src/generators/qwik/src-generator.d.ts +19 -7
  106. package/dist/src/generators/qwik/src-generator.js +149 -31
  107. package/dist/src/generators/qwik/styles.js +1 -2
  108. package/dist/src/generators/react-native.d.ts +2 -2
  109. package/dist/src/generators/react-native.js +3 -6
  110. package/dist/src/generators/react.d.ts +4 -2
  111. package/dist/src/generators/react.js +88 -68
  112. package/dist/src/generators/solid.d.ts +1 -1
  113. package/dist/src/generators/solid.js +9 -12
  114. package/dist/src/generators/stencil/generate.d.ts +1 -1
  115. package/dist/src/generators/stencil/generate.js +5 -11
  116. package/dist/src/generators/svelte.d.ts +1 -1
  117. package/dist/src/generators/svelte.js +19 -26
  118. package/dist/src/generators/swift-ui.d.ts +1 -1
  119. package/dist/src/generators/swift-ui.js +6 -12
  120. package/dist/src/generators/template.d.ts +1 -1
  121. package/dist/src/generators/template.js +6 -14
  122. package/dist/src/generators/vue.d.ts +12 -6
  123. package/dist/src/generators/vue.js +62 -31
  124. package/dist/src/helpers/babel-transform.js +3 -8
  125. package/dist/src/helpers/create-mitosis-component.d.ts +1 -1
  126. package/dist/src/helpers/create-mitosis-component.js +1 -1
  127. package/dist/src/helpers/fast-clone.js +1 -3
  128. package/dist/src/helpers/filter-empty-text-nodes.js +1 -2
  129. package/dist/src/helpers/get-bindings.d.ts +2 -0
  130. package/dist/src/helpers/get-bindings.js +18 -0
  131. package/dist/src/helpers/get-props-ref.d.ts +2 -0
  132. package/dist/src/helpers/get-props-ref.js +32 -0
  133. package/dist/src/helpers/getters-to-functions.d.ts +1 -1
  134. package/dist/src/helpers/getters-to-functions.js +1 -1
  135. package/dist/src/helpers/has-bindings-text.d.ts +2 -0
  136. package/dist/src/helpers/has-bindings-text.js +21 -0
  137. package/dist/src/helpers/has-stateful-dom.d.ts +2 -0
  138. package/dist/src/helpers/has-stateful-dom.js +21 -0
  139. package/dist/src/helpers/is-children.js +1 -2
  140. package/dist/src/helpers/is-component.js +1 -3
  141. package/dist/src/helpers/is-html-attribute.d.ts +1 -1
  142. package/dist/src/helpers/is-html-attribute.js +4 -19
  143. package/dist/src/helpers/map-refs.js +4 -1
  144. package/dist/src/helpers/parsers.js +1 -2
  145. package/dist/src/helpers/render-imports.d.ts +18 -2
  146. package/dist/src/helpers/render-imports.js +86 -45
  147. package/dist/src/helpers/render-imports.test.d.ts +1 -0
  148. package/dist/src/helpers/render-imports.test.js +19 -0
  149. package/dist/src/helpers/replace-idenifiers.js +2 -5
  150. package/dist/src/helpers/strip-state-and-props-refs.d.ts +2 -1
  151. package/dist/src/helpers/strip-state-and-props-refs.js +5 -8
  152. package/dist/src/helpers/styles/collect-css.d.ts +6 -0
  153. package/dist/src/helpers/styles/collect-css.js +87 -0
  154. package/dist/src/helpers/styles/collect-css.test.d.ts +1 -0
  155. package/dist/src/helpers/styles/collect-css.test.js +18 -0
  156. package/dist/src/helpers/styles/collect-styled-components.d.ts +2 -0
  157. package/dist/src/helpers/styles/collect-styled-components.js +61 -0
  158. package/dist/src/helpers/styles/helpers.d.ts +30 -0
  159. package/dist/src/helpers/styles/helpers.js +61 -0
  160. package/dist/src/helpers/typescript.d.ts +2 -0
  161. package/dist/src/helpers/typescript.js +2 -0
  162. package/dist/src/index.d.ts +7 -4
  163. package/dist/src/index.js +24 -8
  164. package/dist/src/jsx-types.d.ts +1 -0
  165. package/dist/src/modules/plugins.d.ts +1 -1
  166. package/dist/src/parsers/angular.js +10 -28
  167. package/dist/src/parsers/builder.d.ts +23 -23
  168. package/dist/src/parsers/builder.js +15 -33
  169. package/dist/src/parsers/jsx.d.ts +2 -1
  170. package/dist/src/parsers/jsx.js +214 -64
  171. package/dist/src/parsers/liquid.js +51 -149
  172. package/dist/src/plugins/compile-away-builder-components.js +4 -10
  173. package/dist/src/symbols/symbol-processor.js +4 -6
  174. package/dist/src/targets.d.ts +5 -3
  175. package/dist/src/targets.js +7 -1
  176. package/dist/src/types/config.d.ts +37 -17
  177. package/dist/src/types/mitosis-component.d.ts +30 -10
  178. package/dist/src/types/transpiler.d.ts +14 -0
  179. package/dist/src/types/transpiler.js +2 -0
  180. package/dist/test/qwik/Accordion/low.jsx +1 -0
  181. package/dist/test/qwik/For/low.jsx +1 -0
  182. package/dist/test/qwik/Image/med.js +2 -1
  183. package/dist/test/qwik/Image.slow/med.js +2 -1
  184. package/dist/test/qwik/bindings/low.cjs +3 -2
  185. package/dist/test/qwik/button/low.js +1 -0
  186. package/dist/test/qwik/component/bindings/low.jsx +2 -1
  187. package/dist/test/qwik/component/component/inputs/med.cjsx +2 -1
  188. package/dist/test/qwik/for-loop.bindings/high.cjs +0 -0
  189. package/dist/test/qwik/for-loop.bindings/low.cjs +47 -0
  190. package/dist/test/qwik/for-loop.bindings/med.cjs +5 -0
  191. package/dist/test/qwik/hello_world/stylesheet/low.jsx +1 -0
  192. package/dist/test/qwik/mount/high.cjs +0 -0
  193. package/dist/test/qwik/mount/low.cjs +44 -0
  194. package/dist/test/qwik/mount/med.cjs +3 -0
  195. package/dist/test/qwik/page-with-symbol/low.js +1 -0
  196. package/dist/test/qwik/show-hide/med.jsx +2 -1
  197. package/dist/test/qwik/svg/low.js +1 -0
  198. package/dist/test/qwik/todo/Todo.cjs/med.cjs +1 -0
  199. package/dist/test/qwik/todo/Todo.js/med.js +1 -0
  200. package/dist/test/qwik/todo/Todo.tsx/med.tsx +1 -0
  201. package/dist/test/qwik/todos/Todo.tsx/low.tsx +1 -0
  202. package/dist/tsconfig.build.tsbuildinfo +1 -1
  203. package/dist/tsconfig.tsbuildinfo +1 -1
  204. package/package.json +6 -3
  205. package/README.md +0 -239
  206. package/dist/src/__tests__/data/blocks/content-slot.raw.d.ts +0 -6
  207. package/dist/src/__tests__/data/blocks/content-slot.raw.jsx +0 -13
  208. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.d.ts +0 -1
  209. package/dist/src/__tests__/data/blocks/onUpdate.raw copy.jsx +0 -10
  210. package/dist/src/__tests__/data/blocks/slot.raw.d.ts +0 -5
  211. package/dist/src/__tests__/data/blocks/slot.raw.jsx +0 -6
  212. package/dist/src/__tests__/data/blocks/styles.raw.d.ts +0 -1
  213. package/dist/src/__tests__/data/blocks/styles.raw.jsx +0 -10
  214. package/dist/src/helpers/babel-transform copy.d.ts +0 -8
  215. package/dist/src/helpers/babel-transform copy.js +0 -138
  216. package/dist/src/helpers/collect-styles.d.ts +0 -29
  217. package/dist/src/helpers/collect-styles.js +0 -176
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderPreComponent = void 0;
3
+ exports.renderExportAndLocal = exports.renderPreComponent = exports.renderImports = exports.renderImport = void 0;
4
+ var DEFAULT_IMPORT = 'default';
5
+ var STAR_IMPORT = '*';
4
6
  var getStarImport = function (_a) {
5
7
  var theImport = _a.theImport;
6
8
  for (var key in theImport.imports) {
7
9
  var value = theImport.imports[key];
8
- if (value === '*') {
10
+ if (value === STAR_IMPORT) {
9
11
  return key;
10
12
  }
11
13
  }
@@ -15,7 +17,7 @@ var getDefaultImport = function (_a) {
15
17
  var theImport = _a.theImport;
16
18
  for (var key in theImport.imports) {
17
19
  var value = theImport.imports[key];
18
- if (value === 'default') {
20
+ if (value === DEFAULT_IMPORT) {
19
21
  return key;
20
22
  }
21
23
  }
@@ -27,74 +29,113 @@ var getFileExtensionForTarget = function (target) {
27
29
  return '.svelte';
28
30
  case 'solid':
29
31
  return '.jsx';
32
+ case 'vue':
33
+ case 'vue2':
34
+ case 'vue3':
35
+ return '.vue';
30
36
  // these `.lite` extensions are handled in the `transpile` step of the CLI.
31
37
  // TO-DO: consolidate file-extension renaming to one place.
32
38
  default:
33
39
  return '.lite';
34
40
  }
35
41
  };
42
+ var checkIsComponentImport = function (theImport) {
43
+ return theImport.path.endsWith('.lite') && !theImport.path.endsWith('.context.lite');
44
+ };
36
45
  var transformImportPath = function (theImport, target) {
37
46
  // We need to drop the `.lite` from context files, because the context generator does so as well.
38
47
  if (theImport.path.endsWith('.context.lite')) {
39
48
  return theImport.path.replace('.lite', '');
40
49
  }
41
- if (theImport.path.endsWith('.lite')) {
50
+ if (checkIsComponentImport(theImport)) {
42
51
  return theImport.path.replace('.lite', getFileExtensionForTarget(target));
43
52
  }
44
53
  return theImport.path;
45
54
  };
46
- var renderImport = function (_a) {
47
- var theImport = _a.theImport, target = _a.target;
48
- var importString = 'import ';
55
+ var getNamedImports = function (_a) {
56
+ var theImport = _a.theImport;
57
+ var namedImports = Object.entries(theImport.imports)
58
+ .filter(function (_a) {
59
+ var value = _a[1];
60
+ return ![DEFAULT_IMPORT, STAR_IMPORT].includes(value);
61
+ })
62
+ .map(function (_a) {
63
+ var key = _a[0], value = _a[1];
64
+ return key !== value ? "".concat(value, " as ").concat(key) : value;
65
+ });
66
+ if (namedImports.length > 0) {
67
+ return "{ ".concat(namedImports.join(', '), " }");
68
+ }
69
+ else {
70
+ return null;
71
+ }
72
+ };
73
+ var getImportedValues = function (_a) {
74
+ var theImport = _a.theImport;
49
75
  var starImport = getStarImport({ theImport: theImport });
76
+ var defaultImport = getDefaultImport({ theImport: theImport });
77
+ var namedImports = getNamedImports({ theImport: theImport });
78
+ return { starImport: starImport, defaultImport: defaultImport, namedImports: namedImports };
79
+ };
80
+ var getImportValue = function (_a) {
81
+ var defaultImport = _a.defaultImport, namedImports = _a.namedImports, starImport = _a.starImport;
50
82
  if (starImport) {
51
- importString += " * as ".concat(starImport, " ");
83
+ return " * as ".concat(starImport, " ");
52
84
  }
53
85
  else {
54
- var defaultImport = getDefaultImport({ theImport: theImport });
55
- if (defaultImport) {
56
- importString += " ".concat(defaultImport, ", ");
86
+ return [defaultImport, namedImports].filter(Boolean).join(', ');
87
+ }
88
+ };
89
+ var renderImport = function (_a) {
90
+ var theImport = _a.theImport, target = _a.target, asyncComponentImports = _a.asyncComponentImports;
91
+ var importedValues = getImportedValues({ theImport: theImport });
92
+ var path = transformImportPath(theImport, target);
93
+ var importValue = getImportValue(importedValues);
94
+ var isComponentImport = checkIsComponentImport(theImport);
95
+ var shouldBeAsyncImport = asyncComponentImports && isComponentImport;
96
+ if (shouldBeAsyncImport) {
97
+ var isVueImport = target === 'vue';
98
+ if (isVueImport && importedValues.namedImports) {
99
+ console.warn('Vue: Async Component imports cannot include named imports. Dropping async import. This might break your code.');
57
100
  }
58
- importString += ' { ';
59
- var firstAdded = false;
60
- for (var key in theImport.imports) {
61
- var value = theImport.imports[key];
62
- if (['default', '*'].includes(value)) {
63
- continue;
64
- }
65
- if (firstAdded) {
66
- importString += ' , ';
67
- }
68
- else {
69
- firstAdded = true;
70
- }
71
- importString += " ".concat(value, " ");
72
- if (key !== value) {
73
- importString += " as ".concat(key, " ");
74
- }
101
+ else {
102
+ return "const ".concat(importValue, " = () => import('").concat(path, "')");
75
103
  }
76
- importString += ' } ';
77
104
  }
78
- var path = transformImportPath(theImport, target);
79
- importString += " from '".concat(path, "';");
80
- return importString;
105
+ return "import ".concat(importValue, " from '").concat(path, "';");
81
106
  };
107
+ exports.renderImport = renderImport;
82
108
  var renderImports = function (_a) {
83
- var imports = _a.imports, target = _a.target;
84
- var importString = '';
85
- for (var _i = 0, imports_1 = imports; _i < imports_1.length; _i++) {
86
- var theImport = imports_1[_i];
109
+ var imports = _a.imports, target = _a.target, asyncComponentImports = _a.asyncComponentImports;
110
+ return imports
111
+ .filter(function (theImport) {
112
+ if (
87
113
  // Remove compile away components
88
- if (theImport.path === '@builder.io/components') {
89
- continue;
114
+ theImport.path === '@builder.io/components' ||
115
+ // TODO: Mitosis output needs this
116
+ theImport.path.startsWith('@builder.io/mitosis')) {
117
+ return false;
90
118
  }
91
- // TODO: Mitosis output needs this
92
- if (theImport.path.startsWith('@builder.io/mitosis')) {
93
- continue;
119
+ else {
120
+ return true;
94
121
  }
95
- importString += renderImport({ theImport: theImport, target: target }) + '\n';
96
- }
97
- return importString;
122
+ })
123
+ .map(function (theImport) { return (0, exports.renderImport)({ theImport: theImport, target: target, asyncComponentImports: asyncComponentImports }); })
124
+ .join('\n');
125
+ };
126
+ exports.renderImports = renderImports;
127
+ var renderPreComponent = function (_a) {
128
+ var component = _a.component, target = _a.target, _b = _a.asyncComponentImports, asyncComponentImports = _b === void 0 ? false : _b;
129
+ return "\n ".concat((0, exports.renderImports)({
130
+ imports: component.imports,
131
+ target: target,
132
+ asyncComponentImports: asyncComponentImports,
133
+ }), "\n ").concat((0, exports.renderExportAndLocal)(component), "\n ").concat(component.hooks.preComponent || '', "\n ");
98
134
  };
99
- var renderPreComponent = function (component, target) { return "\n ".concat(renderImports({ imports: component.imports, target: target }), "\n ").concat(component.hooks.preComponent || '', "\n "); };
100
135
  exports.renderPreComponent = renderPreComponent;
136
+ var renderExportAndLocal = function (component) {
137
+ return Object.keys(component.exports || {})
138
+ .map(function (key) { return component.exports[key].code; })
139
+ .join('\n');
140
+ };
141
+ exports.renderExportAndLocal = renderExportAndLocal;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var render_imports_1 = require("./render-imports");
4
+ describe('renderImport', function () {
5
+ test('Adds correct extension to component import', function () {
6
+ var data = [
7
+ {
8
+ imports: { RenderBlocks: 'default' },
9
+ path: '../render-blocks.lite',
10
+ },
11
+ ];
12
+ var output = (0, render_imports_1.renderImport)({
13
+ theImport: data[0],
14
+ target: 'vue',
15
+ asyncComponentImports: false,
16
+ });
17
+ expect(output).toMatchSnapshot();
18
+ });
19
+ });
@@ -12,11 +12,8 @@ var replaceIdentifiers = function (code, from, to) {
12
12
  core_1.types.isOptionalMemberExpression(path.parent)) &&
13
13
  path.parent.property === path.node) &&
14
14
  // This is no the function name - like `foo` in `function foo() {}`
15
- !(core_1.types.isFunctionDeclaration(path.parent) &&
16
- path.parent.id === path.node) &&
17
- (Array.isArray(from)
18
- ? from.includes(path.node.name)
19
- : path.node.name === from)) {
15
+ !(core_1.types.isFunctionDeclaration(path.parent) && path.parent.id === path.node) &&
16
+ (Array.isArray(from) ? from.includes(path.node.name) : path.node.name === from)) {
20
17
  path.replaceWith(core_1.types.identifier(typeof to === 'string' ? to : to(path.node.name)));
21
18
  }
22
19
  },
@@ -4,6 +4,7 @@ export declare type StripStateAndPropsRefsOptions = {
4
4
  includeState?: boolean;
5
5
  contextVars?: string[];
6
6
  outputVars?: string[];
7
+ context?: string;
7
8
  };
8
9
  /**
9
10
  * Remove state. and props. from expressions, e.g.
@@ -13,4 +14,4 @@ export declare type StripStateAndPropsRefsOptions = {
13
14
  *
14
15
  * @todo proper ref replacement with babel
15
16
  */
16
- export declare const stripStateAndPropsRefs: (code?: string | undefined, options?: StripStateAndPropsRefsOptions) => string;
17
+ export declare const stripStateAndPropsRefs: (code?: string, options?: StripStateAndPropsRefsOptions) => string;
@@ -15,18 +15,19 @@ var stripStateAndPropsRefs = function (code, options) {
15
15
  var replacer = options.replaceWith || '';
16
16
  var contextVars = (options === null || options === void 0 ? void 0 : options.contextVars) || [];
17
17
  var outputVars = (options === null || options === void 0 ? void 0 : options.outputVars) || [];
18
+ var context = (options === null || options === void 0 ? void 0 : options.context) || 'this.';
18
19
  if (contextVars.length) {
19
20
  contextVars.forEach(function (_var) {
20
21
  newCode = newCode.replace(
21
22
  // determine expression edge cases
22
- new RegExp('( |;|(\\())' + _var, 'g'), '$1this.' + _var);
23
+ new RegExp('(^|\\n|\\r| |;|\\(|\\[|!)' + _var + '(\\?\\.|\\.|\\(| |;|\\)|$)', 'g'), '$1' + context + _var + '$2');
23
24
  });
24
25
  }
25
26
  if (outputVars.length) {
26
27
  outputVars.forEach(function (_var) {
27
28
  // determine expression edge cases onMessage( to this.onMessage.emit(
28
29
  var regexp = '( |;|\\()(props\\.?)' + _var + '\\(';
29
- var replacer = '$1this.' + _var + '.emit(';
30
+ var replacer = '$1' + context + _var + '.emit(';
30
31
  newCode = newCode.replace(new RegExp(regexp, 'g'), replacer);
31
32
  });
32
33
  }
@@ -35,9 +36,7 @@ var stripStateAndPropsRefs = function (code, options) {
35
36
  newCode = newCode.replace(/props\./g, replacer);
36
37
  }
37
38
  else {
38
- newCode = newCode.replace(/props\.([\$a-z0-9_]+)/gi, function (memo, name) {
39
- return replacer(name);
40
- });
39
+ newCode = newCode.replace(/props\.([\$a-z0-9_]+)/gi, function (memo, name) { return replacer(name); });
41
40
  }
42
41
  // TODO: webcomponent edge-case
43
42
  if (/el\.this\.props/.test(newCode)) {
@@ -49,9 +48,7 @@ var stripStateAndPropsRefs = function (code, options) {
49
48
  newCode = newCode.replace(/state\./g, replacer);
50
49
  }
51
50
  else {
52
- newCode = newCode.replace(/state\.([\$a-z0-9_]+)/gi, function (memo, name) {
53
- return replacer(name);
54
- });
51
+ newCode = newCode.replace(/state\.([\$a-z0-9_]+)/gi, function (memo, name) { return replacer(name); });
55
52
  }
56
53
  }
57
54
  return newCode;
@@ -0,0 +1,6 @@
1
+ import { MitosisComponent } from '../../types/mitosis-component';
2
+ declare type CollectStyleOptions = {
3
+ prefix?: string;
4
+ };
5
+ export declare const collectCss: (json: MitosisComponent, options?: CollectStyleOptions) => string;
6
+ export {};
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.collectCss = void 0;
7
+ var traverse_1 = __importDefault(require("traverse"));
8
+ var dash_case_1 = require("../dash-case");
9
+ var is_mitosis_node_1 = require("../is-mitosis-node");
10
+ var object_hash_1 = __importDefault(require("object-hash"));
11
+ var helpers_1 = require("./helpers");
12
+ var trimClassStr = function (classStr) { return classStr.trim().replace(/\s{2,}/g, ' '); };
13
+ var updateClassForNode = function (item, className) {
14
+ if (item.bindings.class) {
15
+ // combine className with existing binding. We use single quotes because in Vue, bindings are wrapped in double quotes
16
+ // e.g. <div :class="_classStringToObject(this.className + 'div-21azgz5avex')" />
17
+ item.bindings.class.code = trimClassStr("".concat(item.bindings.class.code, " + '").concat(className, "'"));
18
+ }
19
+ else {
20
+ item.properties.class = trimClassStr("".concat(item.properties.class || '', " ").concat(className));
21
+ }
22
+ };
23
+ var collectStyles = function (json, options) {
24
+ if (options === void 0) { options = {}; }
25
+ var styleMap = {};
26
+ var componentIndexes = {};
27
+ var componentHashes = {};
28
+ (0, traverse_1.default)(json).forEach(function (item) {
29
+ var _a;
30
+ if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
31
+ if ((0, helpers_1.nodeHasStyles)(item)) {
32
+ var value = (0, helpers_1.parseCssObject)((_a = item.bindings.css) === null || _a === void 0 ? void 0 : _a.code);
33
+ delete item.bindings.css;
34
+ var componentName = item.properties.$name
35
+ ? (0, dash_case_1.dashCase)(item.properties.$name)
36
+ : /^h\d$/.test(item.name || '') // don't dashcase h1 into h-1
37
+ ? item.name
38
+ : (0, dash_case_1.dashCase)(item.name || 'div');
39
+ var classNameWPrefix = "".concat(componentName).concat(options.prefix ? "-".concat(options.prefix) : '');
40
+ var stylesHash = (0, object_hash_1.default)(value);
41
+ if (componentHashes[componentName] === stylesHash) {
42
+ var className_1 = classNameWPrefix;
43
+ updateClassForNode(item, className_1);
44
+ return;
45
+ }
46
+ if (!componentHashes[componentName]) {
47
+ componentHashes[componentName] = stylesHash;
48
+ }
49
+ var index = (componentIndexes[componentName] =
50
+ (componentIndexes[componentName] || 0) + 1);
51
+ var className = "".concat(classNameWPrefix).concat(index === 1 ? '' : "-".concat(index));
52
+ updateClassForNode(item, className);
53
+ styleMap[className] = value;
54
+ }
55
+ delete item.bindings.css;
56
+ }
57
+ });
58
+ return styleMap;
59
+ };
60
+ var collectCss = function (json, options) {
61
+ if (options === void 0) { options = {}; }
62
+ var styles = collectStyles(json, options);
63
+ // TODO create and use a root selector
64
+ return classStyleMapToCss(styles);
65
+ };
66
+ exports.collectCss = collectCss;
67
+ var classStyleMapToCss = function (map) {
68
+ var str = '';
69
+ for (var key in map) {
70
+ var styles = (0, helpers_1.getStylesOnly)(map[key]);
71
+ str += ".".concat(key, " { ").concat((0, helpers_1.styleMapToCss)(styles), " }");
72
+ var nestedSelectors = (0, helpers_1.getNestedSelectors)(map[key]);
73
+ for (var nestedSelector in nestedSelectors) {
74
+ var value = nestedSelectors[nestedSelector];
75
+ if (nestedSelector.startsWith('@')) {
76
+ str += "".concat(nestedSelector, " { .").concat(key, " { ").concat((0, helpers_1.styleMapToCss)(value), " } }");
77
+ }
78
+ else {
79
+ var useSelector = nestedSelector.includes('&')
80
+ ? nestedSelector.replace(/&/g, ".".concat(key))
81
+ : ".".concat(key, " ").concat(nestedSelector);
82
+ str += "".concat(useSelector, " { ").concat((0, helpers_1.styleMapToCss)(value), " }");
83
+ }
84
+ }
85
+ }
86
+ return str;
87
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var collect_css_1 = require("./collect-css");
4
+ var jsx_1 = require("../../parsers/jsx");
5
+ var classRaw = require('../../__tests__/data/styles/class.raw');
6
+ var classState = require('../../__tests__/data/styles/classState.raw');
7
+ describe('Styles', function () {
8
+ test('class property and CSS are merged', function () {
9
+ var component = (0, jsx_1.parseJsx)(classRaw);
10
+ var output = (0, collect_css_1.collectCss)(component);
11
+ expect({ component: component, output: output }).toMatchSnapshot();
12
+ });
13
+ test('class binding and CSS are merged', function () {
14
+ var component = (0, jsx_1.parseJsx)(classState);
15
+ var output = (0, collect_css_1.collectCss)(component);
16
+ expect({ component: component, output: output }).toMatchSnapshot();
17
+ });
18
+ });
@@ -0,0 +1,2 @@
1
+ import { MitosisComponent } from '../../types/mitosis-component';
2
+ export declare const collectStyledComponents: (json: MitosisComponent) => string;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.collectStyledComponents = void 0;
7
+ var lodash_1 = require("lodash");
8
+ var traverse_1 = __importDefault(require("traverse"));
9
+ var capitalize_1 = require("../capitalize");
10
+ var is_mitosis_node_1 = require("../is-mitosis-node");
11
+ var is_upper_case_1 = require("../is-upper-case");
12
+ var object_hash_1 = __importDefault(require("object-hash"));
13
+ var helpers_1 = require("./helpers");
14
+ var collectStyledComponents = function (json) {
15
+ var styledComponentsCode = '';
16
+ var componentIndexes = {};
17
+ var componentHashes = {};
18
+ (0, traverse_1.default)(json).forEach(function (item) {
19
+ var _a;
20
+ if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
21
+ if ((0, helpers_1.nodeHasStyles)(item)) {
22
+ var value = (0, helpers_1.parseCssObject)((_a = item.bindings.css) === null || _a === void 0 ? void 0 : _a.code);
23
+ delete item.bindings.css;
24
+ var normalizedNameProperty = item.properties.$name
25
+ ? (0, capitalize_1.capitalize)((0, lodash_1.camelCase)(item.properties.$name.replace(/[^a-z]/gi, '')))
26
+ : null;
27
+ var componentName = normalizedNameProperty
28
+ ? normalizedNameProperty
29
+ : /^h\d$/.test(item.name || '')
30
+ ? item.name
31
+ : (0, capitalize_1.capitalize)((0, lodash_1.camelCase)(item.name || 'div'));
32
+ var index = (componentIndexes[componentName] =
33
+ (componentIndexes[componentName] || 0) + 1);
34
+ var className = "".concat(componentName).concat(componentName !== item.name && index === 1 ? '' : index);
35
+ var str = '';
36
+ var styles = (0, helpers_1.getStylesOnly)(value);
37
+ var stylesHash = (0, object_hash_1.default)(styles);
38
+ if (stylesHash === componentHashes[componentName]) {
39
+ return;
40
+ }
41
+ if (!componentHashes[componentName]) {
42
+ componentHashes[componentName] = stylesHash;
43
+ }
44
+ str += "".concat((0, helpers_1.styleMapToCss)(styles), "\n");
45
+ var nestedSelectors = (0, helpers_1.getNestedSelectors)(value);
46
+ for (var nestedSelector in nestedSelectors) {
47
+ var value_1 = nestedSelectors[nestedSelector];
48
+ str += "".concat(nestedSelector, " { ").concat((0, helpers_1.styleMapToCss)(value_1), " }");
49
+ }
50
+ var prefix = (0, is_upper_case_1.isUpperCase)(item.name[0])
51
+ ? "styled(".concat(item.name, ")`")
52
+ : "styled.".concat(item.name, "`");
53
+ item.name = className;
54
+ styledComponentsCode += "\n const ".concat(className, " = ").concat(prefix).concat(str, "`\n ");
55
+ }
56
+ delete item.bindings.css;
57
+ }
58
+ });
59
+ return styledComponentsCode;
60
+ };
61
+ exports.collectStyledComponents = collectStyledComponents;
@@ -0,0 +1,30 @@
1
+ /// <reference types="lodash" />
2
+ import * as CSS from 'csstype';
3
+ import { MitosisNode } from '../../types/mitosis-node';
4
+ import { MitosisComponent } from '../../types/mitosis-component';
5
+ export declare const nodeHasStyles: (node: MitosisNode) => boolean;
6
+ export declare const hasStyles: (component: MitosisComponent) => boolean;
7
+ /**
8
+ * e.g.:
9
+ * {
10
+ * display: 'none',
11
+ * '@media (max-width: 500px)': {
12
+ * '& .sub-class': {
13
+ * display: 'block'
14
+ * }
15
+ * }
16
+ * }
17
+ */
18
+ export declare type StyleMap = {
19
+ [className: string]: CSS.Properties | StyleMap;
20
+ };
21
+ export declare const getNestedSelectors: (map: StyleMap) => import("lodash").Dictionary<CSS.Properties<0 | (string & {}), string & {}> | StyleMap>;
22
+ export declare const getStylesOnly: (map: StyleMap) => import("lodash").Dictionary<CSS.Properties<0 | (string & {}), string & {}> | StyleMap>;
23
+ /**
24
+ * { 'my-class': { display: 'block', '&.foo': { display: 'none' } }}
25
+ */
26
+ export declare type ClassStyleMap = {
27
+ [key: string]: StyleMap;
28
+ };
29
+ export declare const parseCssObject: (css: string) => any;
30
+ export declare const styleMapToCss: (map: StyleMap) => string;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.styleMapToCss = exports.parseCssObject = exports.getStylesOnly = exports.getNestedSelectors = exports.hasStyles = exports.nodeHasStyles = void 0;
7
+ var traverse_1 = __importDefault(require("traverse"));
8
+ var is_mitosis_node_1 = require("../is-mitosis-node");
9
+ var json5_1 = __importDefault(require("json5"));
10
+ var lodash_1 = require("lodash");
11
+ var dash_case_1 = require("../dash-case");
12
+ var nodeHasStyles = function (node) {
13
+ var _a;
14
+ return Boolean(typeof ((_a = node.bindings.css) === null || _a === void 0 ? void 0 : _a.code) === 'string' && node.bindings.css.code.trim().length > 6);
15
+ };
16
+ exports.nodeHasStyles = nodeHasStyles;
17
+ var hasStyles = function (component) {
18
+ var hasStyles = false;
19
+ (0, traverse_1.default)(component).forEach(function (item) {
20
+ if ((0, is_mitosis_node_1.isMitosisNode)(item)) {
21
+ if ((0, exports.nodeHasStyles)(item)) {
22
+ hasStyles = true;
23
+ this.stop();
24
+ }
25
+ }
26
+ });
27
+ return hasStyles;
28
+ };
29
+ exports.hasStyles = hasStyles;
30
+ var getNestedSelectors = function (map) {
31
+ return (0, lodash_1.pickBy)(map, function (value) { return typeof value === 'object'; });
32
+ };
33
+ exports.getNestedSelectors = getNestedSelectors;
34
+ var getStylesOnly = function (map) {
35
+ return (0, lodash_1.pickBy)(map, function (value) { return typeof value === 'string'; });
36
+ };
37
+ exports.getStylesOnly = getStylesOnly;
38
+ var parseCssObject = function (css) {
39
+ try {
40
+ return json5_1.default.parse(css);
41
+ }
42
+ catch (e) {
43
+ console.warn('Could not parse CSS object', css);
44
+ throw e;
45
+ }
46
+ };
47
+ exports.parseCssObject = parseCssObject;
48
+ var styleMapToCss = function (map) {
49
+ var str = '';
50
+ for (var key in map) {
51
+ var value = map[key];
52
+ if (typeof value === 'string') {
53
+ str += "\n".concat((0, dash_case_1.dashCase)(key), ": ").concat(value, ";");
54
+ }
55
+ else {
56
+ // TODO: do nothing
57
+ }
58
+ }
59
+ return str;
60
+ };
61
+ exports.styleMapToCss = styleMapToCss;
@@ -0,0 +1,2 @@
1
+ export declare type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U;
2
+ export declare type OmitObj<T, U> = U extends T ? Omit<T, keyof U> : never;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,8 @@
1
1
  export * from './flow';
2
2
  export declare type Context<T> = {};
3
- export declare const useState: <T>(obj: T) => T;
4
- export declare const useRef: () => any;
3
+ export declare const useStore: <T>(obj: T) => T;
4
+ export declare const useState: <T>(obj: T) => [T, (value: T) => void];
5
+ export declare const useRef: <T>(obj?: void | T | null | undefined) => T;
5
6
  export declare const useContext: <T = {
6
7
  [key: string]: any;
7
8
  }>(key: Context<T>) => T;
@@ -12,13 +13,13 @@ export declare const setContext: <T = {
12
13
  [key: string]: any;
13
14
  }>(key: Context<T>, value: Partial<T>) => void;
14
15
  export declare const onMount: (fn: () => any) => any;
15
- export declare const onUpdate: (fn: () => any, deps?: any[] | undefined) => any;
16
+ export declare const onUpdate: (fn: () => any, deps?: any[]) => any;
16
17
  export declare const onCreate: (fn: () => any) => any;
17
18
  export declare const onInit: (fn: () => any) => any;
18
19
  export declare const onUnMount: (fn: () => any) => any;
19
20
  export declare const useDynamicTag: (fn: () => any) => any;
20
21
  export declare const onError: (fn: () => any) => any;
21
- export declare const useMetadata: (obj: object) => null;
22
+ export declare const useMetadata: (obj: object) => any;
22
23
  export * from './parsers/jsx';
23
24
  export * from './parsers/builder';
24
25
  export * from './parsers/angular';
@@ -27,6 +28,7 @@ export * from './parsers/context';
27
28
  export * from './generators/vue';
28
29
  export * from './generators/angular';
29
30
  export * from './generators/context/react';
31
+ export * from './generators/context/qwik';
30
32
  export * from './generators/context/solid';
31
33
  export * from './generators/context/vue';
32
34
  export * from './generators/context/svelte';
@@ -48,6 +50,7 @@ export * from './helpers/is-mitosis-node';
48
50
  export * from './types/mitosis-node';
49
51
  export * from './types/mitosis-component';
50
52
  export * from './types/config';
53
+ export * from './types/transpiler';
51
54
  export * from './plugins/compile-away-builder-components';
52
55
  export * from './plugins/compile-away-components';
53
56
  export * from './plugins/map-styles';