@builder.io/mitosis 0.4.0 → 0.4.2

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 (196) hide show
  1. package/dist/src/constants/media-sizes.js +4 -5
  2. package/dist/src/generators/alpine/generate.js +114 -132
  3. package/dist/src/generators/alpine/render-mount-hook.js +8 -5
  4. package/dist/src/generators/alpine/render-update-hooks.js +13 -13
  5. package/dist/src/generators/angular/helpers.js +19 -9
  6. package/dist/src/generators/angular/index.js +599 -584
  7. package/dist/src/generators/builder.js +200 -165
  8. package/dist/src/generators/context/angular.js +32 -26
  9. package/dist/src/generators/context/helpers/context-with-symbol-key.js +25 -21
  10. package/dist/src/generators/context/qwik.js +21 -21
  11. package/dist/src/generators/context/react.js +22 -22
  12. package/dist/src/generators/context/rsc.js +20 -22
  13. package/dist/src/generators/context/solid.js +22 -22
  14. package/dist/src/generators/context/svelte.js +33 -28
  15. package/dist/src/generators/context/vue.js +1 -1
  16. package/dist/src/generators/helpers/context.js +6 -13
  17. package/dist/src/generators/helpers/functions.js +8 -8
  18. package/dist/src/generators/helpers/on-mount.js +9 -5
  19. package/dist/src/generators/helpers/rsc.js +7 -9
  20. package/dist/src/generators/html.js +995 -534
  21. package/dist/src/generators/liquid.js +81 -79
  22. package/dist/src/generators/lit/collect-class-string.js +10 -12
  23. package/dist/src/generators/lit/generate.js +204 -159
  24. package/dist/src/generators/marko/generate.js +193 -183
  25. package/dist/src/generators/minify.js +5 -9
  26. package/dist/src/generators/mitosis.js +135 -134
  27. package/dist/src/generators/qwik/component-generator.js +159 -154
  28. package/dist/src/generators/qwik/component.js +51 -81
  29. package/dist/src/generators/qwik/directives.js +68 -84
  30. package/dist/src/generators/qwik/helpers/add-prevent-default.js +6 -7
  31. package/dist/src/generators/qwik/helpers/convert-method-to-function.js +38 -38
  32. package/dist/src/generators/qwik/helpers/handlers.js +16 -25
  33. package/dist/src/generators/qwik/helpers/stable-inject.js +7 -8
  34. package/dist/src/generators/qwik/helpers/stable-serialize.js +7 -8
  35. package/dist/src/generators/qwik/helpers/state.js +36 -43
  36. package/dist/src/generators/qwik/helpers/styles.js +19 -40
  37. package/dist/src/generators/qwik/jsx.js +63 -75
  38. package/dist/src/generators/qwik/src-generator.js +134 -167
  39. package/dist/src/generators/react/blocks.js +122 -127
  40. package/dist/src/generators/react/generator.js +314 -259
  41. package/dist/src/generators/react/helpers.js +23 -28
  42. package/dist/src/generators/react/state.js +34 -51
  43. package/dist/src/generators/react-native/index.js +72 -84
  44. package/dist/src/generators/react-native/sanitize-react-native-block-styles.js +14 -26
  45. package/dist/src/generators/rsc.js +30 -36
  46. package/dist/src/generators/solid/blocks.js +46 -43
  47. package/dist/src/generators/solid/helpers/styles.js +11 -11
  48. package/dist/src/generators/solid/index.js +199 -190
  49. package/dist/src/generators/solid/state/helpers.js +76 -90
  50. package/dist/src/generators/solid/state/signals.js +30 -37
  51. package/dist/src/generators/solid/state/state.js +35 -48
  52. package/dist/src/generators/solid/state/store.js +40 -46
  53. package/dist/src/generators/stencil/collect-class-string.js +10 -12
  54. package/dist/src/generators/stencil/generate.js +158 -145
  55. package/dist/src/generators/svelte/blocks.js +146 -144
  56. package/dist/src/generators/svelte/helpers.js +10 -17
  57. package/dist/src/generators/svelte/svelte.js +321 -287
  58. package/dist/src/generators/swift-ui.js +162 -101
  59. package/dist/src/generators/taro.js +32 -36
  60. package/dist/src/generators/template.js +71 -74
  61. package/dist/src/generators/vue/blocks.js +116 -107
  62. package/dist/src/generators/vue/compositionApi.js +67 -50
  63. package/dist/src/generators/vue/helpers.js +71 -96
  64. package/dist/src/generators/vue/optionsApi.js +134 -105
  65. package/dist/src/generators/vue/vue.js +210 -207
  66. package/dist/src/helpers/babel-transform.js +40 -63
  67. package/dist/src/helpers/bindings.js +4 -12
  68. package/dist/src/helpers/camel-case.js +4 -5
  69. package/dist/src/helpers/capitalize.js +1 -1
  70. package/dist/src/helpers/component-file-extensions.js +23 -35
  71. package/dist/src/helpers/create-mitosis-component.js +22 -26
  72. package/dist/src/helpers/create-mitosis-context.js +5 -12
  73. package/dist/src/helpers/create-mitosis-node.js +10 -12
  74. package/dist/src/helpers/dash-case.js +2 -2
  75. package/dist/src/helpers/dedent.js +18 -22
  76. package/dist/src/helpers/event-handlers.js +1 -1
  77. package/dist/src/helpers/fast-clone.js +1 -1
  78. package/dist/src/helpers/filter-empty-text-nodes.js +2 -2
  79. package/dist/src/helpers/generic-format.js +7 -8
  80. package/dist/src/helpers/get-bindings.js +4 -4
  81. package/dist/src/helpers/get-components-used.js +3 -3
  82. package/dist/src/helpers/get-components.js +4 -4
  83. package/dist/src/helpers/get-custom-imports.js +10 -12
  84. package/dist/src/helpers/get-prop-functions.js +7 -8
  85. package/dist/src/helpers/get-props-ref.js +8 -8
  86. package/dist/src/helpers/get-props.js +12 -13
  87. package/dist/src/helpers/get-refs.js +4 -4
  88. package/dist/src/helpers/get-state-object-string.js +42 -61
  89. package/dist/src/helpers/get-state-used.js +7 -8
  90. package/dist/src/helpers/get-styles.js +6 -6
  91. package/dist/src/helpers/getters-to-functions.js +8 -12
  92. package/dist/src/helpers/handle-missing-state.js +3 -3
  93. package/dist/src/helpers/has-bindings-text.js +6 -6
  94. package/dist/src/helpers/has-component.js +4 -4
  95. package/dist/src/helpers/has-props.js +3 -3
  96. package/dist/src/helpers/has-stateful-dom.js +4 -4
  97. package/dist/src/helpers/has.js +3 -3
  98. package/dist/src/helpers/indent.js +2 -3
  99. package/dist/src/helpers/is-children.js +4 -5
  100. package/dist/src/helpers/is-component.js +1 -1
  101. package/dist/src/helpers/is-html-attribute.js +2 -11
  102. package/dist/src/helpers/is-mitosis-node.js +1 -1
  103. package/dist/src/helpers/is-root-text-node.js +1 -1
  104. package/dist/src/helpers/is-upper-case.js +1 -1
  105. package/dist/src/helpers/is-valid-attribute-name.js +1 -1
  106. package/dist/src/helpers/json.js +2 -2
  107. package/dist/src/helpers/map-refs.js +29 -40
  108. package/dist/src/helpers/merge-options.js +20 -31
  109. package/dist/src/helpers/mitosis-imports.js +5 -6
  110. package/dist/src/helpers/nodes/for.js +2 -3
  111. package/dist/src/helpers/nullable.js +1 -3
  112. package/dist/src/helpers/on-event.js +32 -36
  113. package/dist/src/helpers/output.js +4 -5
  114. package/dist/src/helpers/parse-node.js +13 -5
  115. package/dist/src/helpers/parsers.js +10 -14
  116. package/dist/src/helpers/patterns.js +6 -8
  117. package/dist/src/helpers/plugins/process-code/index.js +114 -120
  118. package/dist/src/helpers/plugins/process-signals.js +114 -125
  119. package/dist/src/helpers/plugins/process-target-blocks.js +18 -20
  120. package/dist/src/helpers/process-http-requests.js +8 -4
  121. package/dist/src/helpers/remove-surrounding-block.js +2 -2
  122. package/dist/src/helpers/render-imports.js +99 -111
  123. package/dist/src/helpers/replace-identifiers.js +40 -49
  124. package/dist/src/helpers/replace-new-lines-in-strings.js +3 -3
  125. package/dist/src/helpers/signals/signals.js +27 -35
  126. package/dist/src/helpers/slots.js +11 -20
  127. package/dist/src/helpers/state.js +1 -3
  128. package/dist/src/helpers/strip-meta-properties.js +6 -6
  129. package/dist/src/helpers/strip-state-and-props-refs.js +21 -32
  130. package/dist/src/helpers/styles/collect-css.js +39 -44
  131. package/dist/src/helpers/styles/collect-styled-components.js +30 -28
  132. package/dist/src/helpers/styles/helpers.js +23 -29
  133. package/dist/src/helpers/trace-reference-to-module-path.js +3 -4
  134. package/dist/src/helpers/transform-state-setters.js +16 -19
  135. package/dist/src/helpers/traverse-nodes.js +2 -2
  136. package/dist/src/helpers/try-prettier-format.js +3 -3
  137. package/dist/src/helpers/typescript-project.js +25 -25
  138. package/dist/src/helpers/typescript.js +1 -3
  139. package/dist/src/modules/plugins.js +20 -28
  140. package/dist/src/parsers/angular.js +49 -57
  141. package/dist/src/parsers/builder/builder.js +448 -343
  142. package/dist/src/parsers/builder/helpers.js +10 -10
  143. package/dist/src/parsers/context.js +15 -17
  144. package/dist/src/parsers/jsx/ast.js +11 -11
  145. package/dist/src/parsers/jsx/component-types.js +22 -32
  146. package/dist/src/parsers/jsx/context.js +12 -12
  147. package/dist/src/parsers/jsx/element-parser.js +43 -54
  148. package/dist/src/parsers/jsx/exports.js +12 -14
  149. package/dist/src/parsers/jsx/function-parser.js +108 -119
  150. package/dist/src/parsers/jsx/helpers.js +11 -13
  151. package/dist/src/parsers/jsx/hooks/helpers.js +14 -16
  152. package/dist/src/parsers/jsx/hooks/index.js +34 -44
  153. package/dist/src/parsers/jsx/hooks/use-target.js +27 -27
  154. package/dist/src/parsers/jsx/imports.js +7 -17
  155. package/dist/src/parsers/jsx/jsx.js +92 -91
  156. package/dist/src/parsers/jsx/props-types.js +8 -10
  157. package/dist/src/parsers/jsx/props.js +15 -23
  158. package/dist/src/parsers/jsx/signals.js +28 -29
  159. package/dist/src/parsers/jsx/state.d.ts +2 -4
  160. package/dist/src/parsers/jsx/state.js +59 -93
  161. package/dist/src/parsers/svelte/css/index.js +1 -1
  162. package/dist/src/parsers/svelte/helpers/bindings.js +18 -19
  163. package/dist/src/parsers/svelte/helpers/children.js +5 -6
  164. package/dist/src/parsers/svelte/helpers/expressions.js +7 -9
  165. package/dist/src/parsers/svelte/helpers/hooks.js +2 -2
  166. package/dist/src/parsers/svelte/helpers/post-process.js +49 -70
  167. package/dist/src/parsers/svelte/helpers/string.js +5 -5
  168. package/dist/src/parsers/svelte/html/actions.js +17 -10
  169. package/dist/src/parsers/svelte/html/each.js +11 -16
  170. package/dist/src/parsers/svelte/html/element.js +68 -78
  171. package/dist/src/parsers/svelte/html/fragment.js +3 -3
  172. package/dist/src/parsers/svelte/html/if-else.js +11 -18
  173. package/dist/src/parsers/svelte/html/index.js +14 -14
  174. package/dist/src/parsers/svelte/html/mustache-tag.js +5 -5
  175. package/dist/src/parsers/svelte/html/slot.js +5 -5
  176. package/dist/src/parsers/svelte/html/text.js +7 -14
  177. package/dist/src/parsers/svelte/index.js +23 -72
  178. package/dist/src/parsers/svelte/instance/context.js +17 -17
  179. package/dist/src/parsers/svelte/instance/expressions.js +2 -2
  180. package/dist/src/parsers/svelte/instance/functions.js +35 -30
  181. package/dist/src/parsers/svelte/instance/hooks.js +4 -5
  182. package/dist/src/parsers/svelte/instance/imports.js +11 -21
  183. package/dist/src/parsers/svelte/instance/index.js +22 -22
  184. package/dist/src/parsers/svelte/instance/properties.js +11 -23
  185. package/dist/src/parsers/svelte/instance/reactive.js +11 -11
  186. package/dist/src/parsers/svelte/instance/references.js +13 -13
  187. package/dist/src/parsers/svelte/instance/statements.js +3 -3
  188. package/dist/src/parsers/svelte/module/index.js +14 -26
  189. package/dist/src/parsers/svelte/typescript/index.js +27 -36
  190. package/dist/src/plugins/compile-away-builder-components.js +223 -156
  191. package/dist/src/plugins/compile-away-components.js +13 -21
  192. package/dist/src/plugins/map-styles.js +7 -7
  193. package/dist/src/symbols/symbol-processor.js +44 -62
  194. package/dist/src/targets.js +19 -19
  195. package/dist/src/types/mitosis-node.js +1 -1
  196. package/package.json +1 -1
@@ -1,27 +1,22 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
7
3
  exports.componentToTemplate = void 0;
8
- var standalone_1 = require("prettier/standalone");
9
- var html_tags_1 = require("../constants/html_tags");
10
- var dedent_1 = require("../helpers/dedent");
11
- var fast_clone_1 = require("../helpers/fast-clone");
12
- var get_state_object_string_1 = require("../helpers/get-state-object-string");
13
- var collect_css_1 = require("../helpers/styles/collect-css");
14
- var plugins_1 = require("../modules/plugins");
15
- var mitosis_node_1 = require("../types/mitosis-node");
16
- var mappers = {
17
- Fragment: function (json, options) {
18
- return "<div>".concat(json.children.map(function (item) { return blockToTemplate(item, options); }).join('\n'), "</div>");
4
+ const standalone_1 = require("prettier/standalone");
5
+ const html_tags_1 = require("../constants/html_tags");
6
+ const dedent_1 = require("../helpers/dedent");
7
+ const fast_clone_1 = require("../helpers/fast-clone");
8
+ const get_state_object_string_1 = require("../helpers/get-state-object-string");
9
+ const collect_css_1 = require("../helpers/styles/collect-css");
10
+ const plugins_1 = require("../modules/plugins");
11
+ const mitosis_node_1 = require("../types/mitosis-node");
12
+ const mappers = {
13
+ Fragment: (json, options) => {
14
+ return `<div>${json.children.map((item) => blockToTemplate(item, options)).join('\n')}</div>`;
19
15
  },
20
16
  };
21
17
  // TODO: spread support
22
- var blockToTemplate = function (json, options) {
18
+ const blockToTemplate = (json, options = {}) => {
23
19
  var _a, _b, _c, _d, _e;
24
- if (options === void 0) { options = {}; }
25
20
  if (mappers[json.name]) {
26
21
  return mappers[json.name](json, options);
27
22
  }
@@ -29,25 +24,25 @@ var blockToTemplate = function (json, options) {
29
24
  return json.properties._text;
30
25
  }
31
26
  if (json.bindings._text) {
32
- return "${".concat((_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code, "}");
27
+ return `\${${(_a = json.bindings._text) === null || _a === void 0 ? void 0 : _a.code}}`;
33
28
  }
34
- var str = '';
29
+ let str = '';
35
30
  if ((0, mitosis_node_1.checkIsForNode)(json)) {
36
- str += "${".concat((_b = json.bindings.each) === null || _b === void 0 ? void 0 : _b.code, "?.map(").concat(json.scope.forName, " => `");
31
+ str += `\${${(_b = json.bindings.each) === null || _b === void 0 ? void 0 : _b.code}?.map(${json.scope.forName} => \``;
37
32
  if (json.children) {
38
- str += json.children.map(function (item) { return blockToTemplate(item, options); }).join('\n');
33
+ str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
39
34
  }
40
35
  str += '`).join("")}';
41
36
  }
42
37
  else if (json.name === 'Show') {
43
- str += "${!(".concat((_c = json.bindings.when) === null || _c === void 0 ? void 0 : _c.code, ") ? '' : `");
38
+ str += `\${!(${(_c = json.bindings.when) === null || _c === void 0 ? void 0 : _c.code}) ? '' : \``;
44
39
  if (json.children) {
45
- str += json.children.map(function (item) { return blockToTemplate(item, options); }).join('\n');
40
+ str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
46
41
  }
47
42
  str += '`}';
48
43
  }
49
44
  else {
50
- str += "<".concat(json.name, " ");
45
+ str += `<${json.name} `;
51
46
  // TODO: JS iteration or with helper
52
47
  // if (json.bindings._spread === '_spread') {
53
48
  // str += `
@@ -56,22 +51,22 @@ var blockToTemplate = function (json, options) {
56
51
  // {% endfor %}
57
52
  // `;
58
53
  // }
59
- for (var key in json.properties) {
60
- var value = json.properties[key];
61
- str += " ".concat(key, "=\"").concat(value, "\" ");
54
+ for (const key in json.properties) {
55
+ const value = json.properties[key];
56
+ str += ` ${key}="${value}" `;
62
57
  }
63
- for (var key in json.bindings) {
58
+ for (const key in json.bindings) {
64
59
  if (((_d = json.bindings[key]) === null || _d === void 0 ? void 0 : _d.type) === 'spread' || key === 'ref' || key === 'css') {
65
60
  continue;
66
61
  }
67
- var value = (_e = json.bindings[key]) === null || _e === void 0 ? void 0 : _e.code;
62
+ const value = (_e = json.bindings[key]) === null || _e === void 0 ? void 0 : _e.code;
68
63
  // TODO: proper babel transform to replace. Util for this
69
- var useValue = value;
64
+ const useValue = value;
70
65
  if (key.startsWith('on')) {
71
66
  // Do nothing
72
67
  }
73
68
  else {
74
- str += " ".concat(key, "=\"${").concat(useValue, "}\" ");
69
+ str += ` ${key}="\${${useValue}}" `;
75
70
  }
76
71
  }
77
72
  if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
@@ -79,55 +74,57 @@ var blockToTemplate = function (json, options) {
79
74
  }
80
75
  str += '>';
81
76
  if (json.children) {
82
- str += json.children.map(function (item) { return blockToTemplate(item, options); }).join('\n');
77
+ str += json.children.map((item) => blockToTemplate(item, options)).join('\n');
83
78
  }
84
- str += "</".concat(json.name, ">");
79
+ str += `</${json.name}>`;
85
80
  }
86
81
  return str;
87
82
  };
88
83
  // TODO: add JS support similar to componentToHtml()
89
- var componentToTemplate = function (options) {
90
- if (options === void 0) { options = {}; }
91
- return function (_a) {
92
- var component = _a.component;
93
- var json = (0, fast_clone_1.fastClone)(component);
94
- if (options.plugins) {
95
- json = (0, plugins_1.runPreJsonPlugins)({ json: json, plugins: options.plugins });
96
- }
97
- var css = (0, collect_css_1.collectCss)(json);
98
- if (options.plugins) {
99
- json = (0, plugins_1.runPostJsonPlugins)({ json: json, plugins: options.plugins });
100
- }
101
- var str = json.children.map(function (item) { return blockToTemplate(item); }).join('\n');
102
- if (css.trim().length) {
103
- str += "<style>".concat(css, "</style>");
104
- }
105
- str = (0, dedent_1.dedent)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n export default function template(props) {\n let state = ", "\n\n return `", "`\n }\n \n "], ["\n export default function template(props) {\n let state = ", "\n\n return \\`", "\\`\n }\n \n "])), (0, get_state_object_string_1.getStateObjectStringFromComponent)(json), str.replace(/\s+/g, ' '));
106
- if (options.plugins) {
107
- str = (0, plugins_1.runPreCodePlugins)({ json: json, code: str, plugins: options.plugins });
108
- }
109
- if (options.prettier !== false) {
110
- try {
111
- str = (0, standalone_1.format)(str, {
112
- parser: 'typescript',
113
- htmlWhitespaceSensitivity: 'ignore',
114
- plugins: [
115
- // To support running in browsers
116
- require('prettier/parser-typescript'),
117
- require('prettier/parser-postcss'),
118
- require('prettier/parser-babel'),
119
- ],
120
- });
121
- }
122
- catch (err) {
123
- console.warn('Could not prettify', { string: str }, err);
124
- }
84
+ const componentToTemplate = (options = {}) => ({ component }) => {
85
+ let json = (0, fast_clone_1.fastClone)(component);
86
+ if (options.plugins) {
87
+ json = (0, plugins_1.runPreJsonPlugins)({ json, plugins: options.plugins });
88
+ }
89
+ const css = (0, collect_css_1.collectCss)(json);
90
+ if (options.plugins) {
91
+ json = (0, plugins_1.runPostJsonPlugins)({ json, plugins: options.plugins });
92
+ }
93
+ let str = json.children.map((item) => blockToTemplate(item)).join('\n');
94
+ if (css.trim().length) {
95
+ str += `<style>${css}</style>`;
96
+ }
97
+ str = (0, dedent_1.dedent) `
98
+ export default function template(props) {
99
+ let state = ${(0, get_state_object_string_1.getStateObjectStringFromComponent)(json)}
100
+
101
+ return \`${str.replace(/\s+/g, ' ')}\`
102
+ }
103
+
104
+ `;
105
+ if (options.plugins) {
106
+ str = (0, plugins_1.runPreCodePlugins)({ json, code: str, plugins: options.plugins });
107
+ }
108
+ if (options.prettier !== false) {
109
+ try {
110
+ str = (0, standalone_1.format)(str, {
111
+ parser: 'typescript',
112
+ htmlWhitespaceSensitivity: 'ignore',
113
+ plugins: [
114
+ // To support running in browsers
115
+ require('prettier/parser-typescript'),
116
+ require('prettier/parser-postcss'),
117
+ require('prettier/parser-babel'),
118
+ ],
119
+ });
125
120
  }
126
- if (options.plugins) {
127
- str = (0, plugins_1.runPostCodePlugins)({ json: json, code: str, plugins: options.plugins });
121
+ catch (err) {
122
+ console.warn('Could not prettify', { string: str }, err);
128
123
  }
129
- return str;
130
- };
124
+ }
125
+ if (options.plugins) {
126
+ str = (0, plugins_1.runPostCodePlugins)({ json, code: str, plugins: options.plugins });
127
+ }
128
+ return str;
131
129
  };
132
130
  exports.componentToTemplate = componentToTemplate;
133
- var templateObject_1;
@@ -4,17 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.blockToVue = void 0;
7
- var filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
8
- var is_children_1 = __importDefault(require("../../helpers/is-children"));
9
- var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
10
- var nullable_1 = require("../../helpers/nullable");
11
- var remove_surrounding_block_1 = require("../../helpers/remove-surrounding-block");
12
- var replace_identifiers_1 = require("../../helpers/replace-identifiers");
13
- var slots_1 = require("../../helpers/slots");
14
- var function_1 = require("fp-ts/lib/function");
15
- var html_tags_1 = require("../../constants/html_tags");
16
- var helpers_1 = require("./helpers");
17
- var SPECIAL_PROPERTIES = {
7
+ const filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
8
+ const is_children_1 = __importDefault(require("../../helpers/is-children"));
9
+ const is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
10
+ const nullable_1 = require("../../helpers/nullable");
11
+ const remove_surrounding_block_1 = require("../../helpers/remove-surrounding-block");
12
+ const replace_identifiers_1 = require("../../helpers/replace-identifiers");
13
+ const slots_1 = require("../../helpers/slots");
14
+ const function_1 = require("fp-ts/lib/function");
15
+ const html_tags_1 = require("../../constants/html_tags");
16
+ const helpers_1 = require("./helpers");
17
+ const SPECIAL_PROPERTIES = {
18
18
  V_IF: 'v-if',
19
19
  V_FOR: 'v-for',
20
20
  V_ELSE: 'v-else',
@@ -28,173 +28,182 @@ var SPECIAL_PROPERTIES = {
28
28
  * when processBinding is executed,
29
29
  * SLOT_PREFIX from `slot` change to `$slots.`
30
30
  */
31
- var SLOT_PREFIX = '$slots.';
31
+ const SLOT_PREFIX = '$slots.';
32
32
  // TODO: Maybe in the future allow defining `string | function` as values
33
- var BINDING_MAPPERS = {
33
+ const BINDING_MAPPERS = {
34
34
  innerHTML: 'v-html',
35
35
  };
36
- var NODE_MAPPERS = {
37
- Fragment: function (json, options, scope) {
38
- var children = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes);
39
- var childrenStr = children.map(function (item) { return (0, exports.blockToVue)(item, options); }).join('\n');
36
+ const NODE_MAPPERS = {
37
+ Fragment(json, options, scope) {
38
+ const children = json.children.filter(filter_empty_text_nodes_1.filterEmptyTextNodes);
39
+ const childrenStr = children.map((item) => (0, exports.blockToVue)(item, options)).join('\n');
40
40
  return childrenStr;
41
41
  },
42
- For: function (_json, options) {
42
+ For(_json, options) {
43
43
  var _a;
44
- var json = _json;
45
- var keyValue = json.bindings.key || { code: 'index', type: 'single' };
46
- var forValue = "(".concat(json.scope.forName, ", index) in ").concat((_a = json.bindings.each) === null || _a === void 0 ? void 0 : _a.code);
44
+ const json = _json;
45
+ const keyValue = json.bindings.key || { code: 'index', type: 'single' };
46
+ const forValue = `(${json.scope.forName}, index) in ${(_a = json.bindings.each) === null || _a === void 0 ? void 0 : _a.code}`;
47
47
  // TODO: tmk key goes on different element (parent vs child) based on Vue 2 vs Vue 3
48
- return "<template :key=\"".concat((0, helpers_1.encodeQuotes)((keyValue === null || keyValue === void 0 ? void 0 : keyValue.code) || 'index'), "\" v-for=\"").concat((0, helpers_1.encodeQuotes)(forValue), "\">\n ").concat(json.children.map(function (item) { return (0, exports.blockToVue)(item, options); }).join('\n'), "\n </template>");
48
+ return `<template :key="${(0, helpers_1.encodeQuotes)((keyValue === null || keyValue === void 0 ? void 0 : keyValue.code) || 'index')}" v-for="${(0, helpers_1.encodeQuotes)(forValue)}">
49
+ ${json.children.map((item) => (0, exports.blockToVue)(item, options)).join('\n')}
50
+ </template>`;
49
51
  },
50
- Show: function (json, options, scope) {
52
+ Show(json, options, scope) {
51
53
  var _a;
52
- var ifValue = ((_a = json.bindings.when) === null || _a === void 0 ? void 0 : _a.code) || '';
53
- var defaultShowTemplate = "\n <template ".concat(SPECIAL_PROPERTIES.V_IF, "=\"").concat((0, helpers_1.encodeQuotes)(ifValue), "\">\n ").concat(json.children.map(function (item) { return (0, exports.blockToVue)(item, options); }).join('\n'), "\n </template>\n ").concat((0, is_mitosis_node_1.isMitosisNode)(json.meta.else)
54
- ? "\n <template ".concat(SPECIAL_PROPERTIES.V_ELSE, ">\n ").concat((0, exports.blockToVue)(json.meta.else, options), "\n </template>")
55
- : '', "\n ");
54
+ const ifValue = ((_a = json.bindings.when) === null || _a === void 0 ? void 0 : _a.code) || '';
55
+ const defaultShowTemplate = `
56
+ <template ${SPECIAL_PROPERTIES.V_IF}="${(0, helpers_1.encodeQuotes)(ifValue)}">
57
+ ${json.children.map((item) => (0, exports.blockToVue)(item, options)).join('\n')}
58
+ </template>
59
+ ${(0, is_mitosis_node_1.isMitosisNode)(json.meta.else)
60
+ ? `
61
+ <template ${SPECIAL_PROPERTIES.V_ELSE}>
62
+ ${(0, exports.blockToVue)(json.meta.else, options)}
63
+ </template>`
64
+ : ''}
65
+ `;
56
66
  return defaultShowTemplate;
57
67
  },
58
- Slot: function (json, options) {
68
+ Slot(json, options) {
59
69
  var _a, _b, _c;
60
- var slotName = ((_a = json.bindings.name) === null || _a === void 0 ? void 0 : _a.code) || json.properties.name;
61
- var renderChildren = function () { var _a; return (_a = json.children) === null || _a === void 0 ? void 0 : _a.map(function (item) { return (0, exports.blockToVue)(item, options); }).join('\n'); };
70
+ const slotName = ((_a = json.bindings.name) === null || _a === void 0 ? void 0 : _a.code) || json.properties.name;
71
+ const renderChildren = () => { var _a; return (_a = json.children) === null || _a === void 0 ? void 0 : _a.map((item) => (0, exports.blockToVue)(item, options)).join('\n'); };
62
72
  if (!slotName) {
63
- var key = Object.keys(json.bindings).find(Boolean);
73
+ const key = Object.keys(json.bindings).find(Boolean);
64
74
  if (!key) {
65
75
  if (!((_b = json.children) === null || _b === void 0 ? void 0 : _b.length)) {
66
76
  return '<slot/>';
67
77
  }
68
- return "<slot>".concat(renderChildren(), "</slot>");
78
+ return `<slot>${renderChildren()}</slot>`;
69
79
  }
70
- return "\n <template #".concat(key, ">\n ").concat((_c = json.bindings[key]) === null || _c === void 0 ? void 0 : _c.code, "\n </template>\n ");
80
+ return `
81
+ <template #${key}>
82
+ ${(_c = json.bindings[key]) === null || _c === void 0 ? void 0 : _c.code}
83
+ </template>
84
+ `;
71
85
  }
72
86
  if (slotName === 'default') {
73
- return "<slot>".concat(renderChildren(), "</slot>");
87
+ return `<slot>${renderChildren()}</slot>`;
74
88
  }
75
- return "<slot name=\"".concat((0, slots_1.toKebabSlot)(slotName, SLOT_PREFIX), "\">").concat(renderChildren(), "</slot>");
89
+ return `<slot name="${(0, slots_1.toKebabSlot)(slotName, SLOT_PREFIX)}">${renderChildren()}</slot>`;
76
90
  },
77
91
  };
78
- var SPECIAL_HTML_TAGS = ['style', 'script'];
79
- var stringifyBinding = function (node, options) {
80
- return function (_a) {
81
- var key = _a[0], value = _a[1];
82
- var isValidHtmlTag = html_tags_1.VALID_HTML_TAGS.includes(node.name);
83
- if (value.type === 'spread') {
84
- return ''; // we handle this after
92
+ const SPECIAL_HTML_TAGS = ['style', 'script'];
93
+ const stringifyBinding = (node, options) => ([key, value]) => {
94
+ const isValidHtmlTag = html_tags_1.VALID_HTML_TAGS.includes(node.name);
95
+ if (value.type === 'spread') {
96
+ return ''; // we handle this after
97
+ }
98
+ else if (key === 'class' && options.convertClassStringToObject) {
99
+ return `:class="_classStringToObject(${value === null || value === void 0 ? void 0 : value.code})"`;
100
+ // TODO: support dynamic classes as objects somehow like Vue requires
101
+ // https://vuejs.org/v2/guide/class-and-style.html
102
+ }
103
+ else {
104
+ // TODO: proper babel transform to replace. Util for this
105
+ const useValue = (value === null || value === void 0 ? void 0 : value.code) || '';
106
+ if (key.startsWith('on') && isValidHtmlTag) {
107
+ // handle html native on[event] props
108
+ const { arguments: cusArgs = ['event'] } = value;
109
+ let event = key.replace('on', '').toLowerCase();
110
+ const isAssignmentExpression = useValue.includes('=');
111
+ const eventHandlerValue = (0, function_1.pipe)((0, replace_identifiers_1.replaceIdentifiers)({
112
+ code: useValue,
113
+ from: cusArgs[0],
114
+ to: '$event',
115
+ }), isAssignmentExpression ? function_1.identity : remove_surrounding_block_1.removeSurroundingBlock, remove_surrounding_block_1.removeSurroundingBlock, helpers_1.encodeQuotes);
116
+ const eventHandlerKey = `${SPECIAL_PROPERTIES.V_ON_AT}${event}`;
117
+ return `${eventHandlerKey}="${eventHandlerValue}"`;
118
+ }
119
+ else if (key.startsWith('on')) {
120
+ // handle on[custom event] props
121
+ const { arguments: cusArgs = ['event'] } = node.bindings[key];
122
+ return `:${key}="(${cusArgs.join(',')}) => ${(0, helpers_1.encodeQuotes)(useValue)}"`;
85
123
  }
86
- else if (key === 'class' && options.convertClassStringToObject) {
87
- return ":class=\"_classStringToObject(".concat(value === null || value === void 0 ? void 0 : value.code, ")\"");
88
- // TODO: support dynamic classes as objects somehow like Vue requires
89
- // https://vuejs.org/v2/guide/class-and-style.html
124
+ else if (key === 'ref') {
125
+ return `ref="${(0, helpers_1.encodeQuotes)(useValue)}"`;
126
+ }
127
+ else if (BINDING_MAPPERS[key]) {
128
+ return `${BINDING_MAPPERS[key]}="${(0, helpers_1.encodeQuotes)(useValue.replace(/"/g, "\\'"))}"`;
90
129
  }
91
130
  else {
92
- // TODO: proper babel transform to replace. Util for this
93
- var useValue = (value === null || value === void 0 ? void 0 : value.code) || '';
94
- if (key.startsWith('on') && isValidHtmlTag) {
95
- // handle html native on[event] props
96
- var _b = value.arguments, cusArgs = _b === void 0 ? ['event'] : _b;
97
- var event_1 = key.replace('on', '').toLowerCase();
98
- var isAssignmentExpression = useValue.includes('=');
99
- var eventHandlerValue = (0, function_1.pipe)((0, replace_identifiers_1.replaceIdentifiers)({
100
- code: useValue,
101
- from: cusArgs[0],
102
- to: '$event',
103
- }), isAssignmentExpression ? function_1.identity : remove_surrounding_block_1.removeSurroundingBlock, remove_surrounding_block_1.removeSurroundingBlock, helpers_1.encodeQuotes);
104
- var eventHandlerKey = "".concat(SPECIAL_PROPERTIES.V_ON_AT).concat(event_1);
105
- return "".concat(eventHandlerKey, "=\"").concat(eventHandlerValue, "\"");
106
- }
107
- else if (key.startsWith('on')) {
108
- // handle on[custom event] props
109
- var _c = node.bindings[key].arguments, cusArgs = _c === void 0 ? ['event'] : _c;
110
- return ":".concat(key, "=\"(").concat(cusArgs.join(','), ") => ").concat((0, helpers_1.encodeQuotes)(useValue), "\"");
111
- }
112
- else if (key === 'ref') {
113
- return "ref=\"".concat((0, helpers_1.encodeQuotes)(useValue), "\"");
114
- }
115
- else if (BINDING_MAPPERS[key]) {
116
- return "".concat(BINDING_MAPPERS[key], "=\"").concat((0, helpers_1.encodeQuotes)(useValue.replace(/"/g, "\\'")), "\"");
117
- }
118
- else {
119
- return ":".concat(key, "=\"").concat((0, helpers_1.encodeQuotes)(useValue), "\"");
120
- }
131
+ return `:${key}="${(0, helpers_1.encodeQuotes)(useValue)}"`;
121
132
  }
122
- };
133
+ }
123
134
  };
124
- var stringifySpreads = function (_a) {
125
- var node = _a.node, spreadType = _a.spreadType;
126
- var spreads = Object.values(node.bindings)
135
+ const stringifySpreads = ({ node, spreadType }) => {
136
+ const spreads = Object.values(node.bindings)
127
137
  .filter(nullable_1.checkIsDefined)
128
- .filter(function (binding) { return binding.type === 'spread' && binding.spreadType === spreadType; })
129
- .map(function (value) { return (value.code === 'props' ? '$props' : value.code); });
138
+ .filter((binding) => binding.type === 'spread' && binding.spreadType === spreadType)
139
+ .map((value) => (value.code === 'props' ? '$props' : value.code));
130
140
  if (spreads.length === 0) {
131
141
  return '';
132
142
  }
133
- var stringifiedValue = spreads.length > 1 ? "{".concat(spreads.map(function (spread) { return "...".concat(spread); }).join(', '), "}") : spreads[0];
134
- var key = spreadType === 'normal' ? SPECIAL_PROPERTIES.V_BIND : SPECIAL_PROPERTIES.V_ON;
135
- return " ".concat(key, "=\"").concat((0, helpers_1.encodeQuotes)(stringifiedValue), "\" ");
143
+ const stringifiedValue = spreads.length > 1 ? `{${spreads.map((spread) => `...${spread}`).join(', ')}}` : spreads[0];
144
+ const key = spreadType === 'normal' ? SPECIAL_PROPERTIES.V_BIND : SPECIAL_PROPERTIES.V_ON;
145
+ return ` ${key}="${(0, helpers_1.encodeQuotes)(stringifiedValue)}" `;
136
146
  };
137
- var getBlockBindings = function (node, options) {
138
- var stringifiedProperties = Object.entries(node.properties)
139
- .map(function (_a) {
140
- var key = _a[0], value = _a[1];
147
+ const getBlockBindings = (node, options) => {
148
+ const stringifiedProperties = Object.entries(node.properties)
149
+ .map(([key, value]) => {
141
150
  if (key === 'className') {
142
151
  return '';
143
152
  }
144
153
  else if (key === SPECIAL_PROPERTIES.V_ELSE) {
145
- return "".concat(key);
154
+ return `${key}`;
146
155
  }
147
156
  else if (typeof value === 'string') {
148
- return "".concat(key, "=\"").concat((0, helpers_1.encodeQuotes)(value), "\"");
157
+ return `${key}="${(0, helpers_1.encodeQuotes)(value)}"`;
149
158
  }
150
159
  })
151
160
  .join(' ');
152
- var stringifiedBindings = Object.entries(node.bindings)
161
+ const stringifiedBindings = Object.entries(node.bindings)
153
162
  .map(stringifyBinding(node, options))
154
163
  .join(' ');
155
164
  return [
156
165
  stringifiedProperties,
157
166
  stringifiedBindings,
158
- stringifySpreads({ node: node, spreadType: 'normal' }),
159
- stringifySpreads({ node: node, spreadType: 'event-handlers' }),
167
+ stringifySpreads({ node, spreadType: 'normal' }),
168
+ stringifySpreads({ node, spreadType: 'event-handlers' }),
160
169
  ].join(' ');
161
170
  };
162
- var blockToVue = function (node, options, scope) {
171
+ const blockToVue = (node, options, scope) => {
163
172
  var _a;
164
- var nodeMapper = NODE_MAPPERS[node.name];
173
+ const nodeMapper = NODE_MAPPERS[node.name];
165
174
  if (nodeMapper) {
166
175
  return nodeMapper(node, options, scope);
167
176
  }
168
- if ((0, is_children_1.default)({ node: node })) {
169
- return "<slot/>";
177
+ if ((0, is_children_1.default)({ node })) {
178
+ return `<slot/>`;
170
179
  }
171
180
  if (SPECIAL_HTML_TAGS.includes(node.name)) {
172
181
  // Vue doesn't allow style/script tags in templates, but does support them through dynamic components.
173
- node.bindings.is = { code: "'".concat(node.name, "'"), type: 'single' };
182
+ node.bindings.is = { code: `'${node.name}'`, type: 'single' };
174
183
  node.name = 'component';
175
184
  }
176
185
  if (node.properties._text) {
177
- return "".concat(node.properties._text);
186
+ return `${node.properties._text}`;
178
187
  }
179
- var textCode = (_a = node.bindings._text) === null || _a === void 0 ? void 0 : _a.code;
188
+ const textCode = (_a = node.bindings._text) === null || _a === void 0 ? void 0 : _a.code;
180
189
  if (textCode) {
181
190
  if ((0, slots_1.isSlotProperty)(textCode, SLOT_PREFIX)) {
182
- var slotName = (0, slots_1.stripSlotPrefix)(textCode, SLOT_PREFIX).toLowerCase();
191
+ const slotName = (0, slots_1.stripSlotPrefix)(textCode, SLOT_PREFIX).toLowerCase();
183
192
  if (slotName === 'default')
184
- return "<slot/>";
185
- return "<slot name=\"".concat(slotName, "\"/>");
193
+ return `<slot/>`;
194
+ return `<slot name="${slotName}"/>`;
186
195
  }
187
- return "{{".concat(textCode, "}}");
196
+ return `{{${textCode}}}`;
188
197
  }
189
- var str = "<".concat(node.name, " ");
198
+ let str = `<${node.name} `;
190
199
  str += getBlockBindings(node, options);
191
200
  if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(node.name)) {
192
201
  return str + ' />';
193
202
  }
194
203
  str += '>';
195
204
  if (node.children) {
196
- str += node.children.map(function (item) { return (0, exports.blockToVue)(item, options); }).join('');
205
+ str += node.children.map((item) => (0, exports.blockToVue)(item, options)).join('');
197
206
  }
198
- return str + "</".concat(node.name, ">");
207
+ return str + `</${node.name}>`;
199
208
  };
200
209
  exports.blockToVue = blockToVue;