@builder.io/mitosis 0.0.105 → 0.0.107-0

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 (84) hide show
  1. package/dist/src/constants/hooks.d.ts +7 -0
  2. package/dist/src/constants/hooks.js +7 -0
  3. package/dist/src/constants/html_tags.d.ts +1 -0
  4. package/dist/src/constants/html_tags.js +17 -1
  5. package/dist/src/generators/alpine/generate.js +6 -4
  6. package/dist/src/generators/angular.js +7 -7
  7. package/dist/src/generators/context/svelte.d.ts +6 -2
  8. package/dist/src/generators/context/svelte.js +31 -2
  9. package/dist/src/generators/helpers/context.d.ts +5 -1
  10. package/dist/src/generators/helpers/context.js +8 -1
  11. package/dist/src/generators/html.js +59 -58
  12. package/dist/src/generators/liquid.js +2 -2
  13. package/dist/src/generators/lit/generate.js +6 -4
  14. package/dist/src/generators/marko/generate.js +4 -3
  15. package/dist/src/generators/mitosis.js +4 -3
  16. package/dist/src/generators/qwik/component-generator.js +3 -1
  17. package/dist/src/generators/qwik/src-generator.js +2 -2
  18. package/dist/src/generators/react/blocks.js +2 -2
  19. package/dist/src/generators/react/generator.js +10 -1
  20. package/dist/src/generators/react/types.d.ts +1 -0
  21. package/dist/src/generators/rsc.js +1 -0
  22. package/dist/src/generators/solid/blocks.js +2 -2
  23. package/dist/src/generators/solid/index.js +2 -1
  24. package/dist/src/generators/stencil/generate.js +6 -4
  25. package/dist/src/generators/svelte/blocks.js +3 -3
  26. package/dist/src/generators/svelte/helpers.d.ts +3 -0
  27. package/dist/src/generators/svelte/helpers.js +30 -1
  28. package/dist/src/generators/svelte/svelte.js +40 -9
  29. package/dist/src/generators/template.js +2 -2
  30. package/dist/src/generators/vue/blocks.js +3 -3
  31. package/dist/src/generators/vue/vue.js +3 -1
  32. package/dist/src/helpers/get-state-object-string.d.ts +2 -1
  33. package/dist/src/helpers/get-state-object-string.js +1 -1
  34. package/dist/src/helpers/handle-missing-state.js +1 -1
  35. package/dist/src/helpers/merge-options.d.ts +8 -2
  36. package/dist/src/helpers/merge-options.js +14 -2
  37. package/dist/src/helpers/plugins/process-code/index.d.ts +8 -0
  38. package/dist/src/helpers/plugins/process-code/index.js +79 -0
  39. package/dist/src/helpers/plugins/process-code/types.d.ts +5 -0
  40. package/dist/src/helpers/plugins/process-code/types.js +2 -0
  41. package/dist/src/helpers/plugins/process-signals.d.ts +42 -0
  42. package/dist/src/helpers/plugins/process-signals.js +93 -0
  43. package/dist/src/helpers/plugins/process-target-blocks.d.ts +6 -0
  44. package/dist/src/helpers/plugins/process-target-blocks.js +47 -0
  45. package/dist/src/helpers/process-http-requests.js +1 -1
  46. package/dist/src/helpers/replace-identifiers.d.ts +17 -1
  47. package/dist/src/helpers/replace-identifiers.js +52 -7
  48. package/dist/src/index.d.ts +34 -23
  49. package/dist/src/index.js +0 -52
  50. package/dist/src/parsers/builder/helpers.js +1 -1
  51. package/dist/src/parsers/context.js +14 -1
  52. package/dist/src/parsers/jsx/element-parser.js +1 -3
  53. package/dist/src/parsers/jsx/function-parser.d.ts +0 -3
  54. package/dist/src/parsers/jsx/function-parser.js +41 -43
  55. package/dist/src/parsers/jsx/helpers.d.ts +0 -1
  56. package/dist/src/parsers/jsx/helpers.js +1 -17
  57. package/dist/src/parsers/jsx/hooks/helpers.d.ts +5 -0
  58. package/dist/src/parsers/jsx/hooks/helpers.js +56 -0
  59. package/dist/src/parsers/jsx/hooks/index.d.ts +15 -0
  60. package/dist/src/parsers/jsx/{hooks.js → hooks/index.js} +26 -28
  61. package/dist/src/parsers/jsx/hooks/use-target.d.ts +13 -0
  62. package/dist/src/parsers/jsx/hooks/use-target.js +92 -0
  63. package/dist/src/parsers/jsx/imports.d.ts +2 -0
  64. package/dist/src/parsers/jsx/imports.js +18 -13
  65. package/dist/src/parsers/jsx/index.d.ts +1 -2
  66. package/dist/src/parsers/jsx/index.js +4 -5
  67. package/dist/src/parsers/jsx/jsx.js +64 -13
  68. package/dist/src/parsers/jsx/state.js +33 -20
  69. package/dist/src/parsers/jsx/types-identification.d.ts +41 -0
  70. package/dist/src/parsers/jsx/types-identification.js +236 -0
  71. package/dist/src/parsers/jsx/types.d.ts +10 -0
  72. package/dist/src/parsers/svelte/helpers/post-process.d.ts +2 -1
  73. package/dist/src/parsers/svelte/html/actions.js +1 -0
  74. package/dist/src/targets.d.ts +1 -0
  75. package/dist/src/types/config.d.ts +8 -1
  76. package/dist/src/types/metadata.d.ts +3 -0
  77. package/dist/src/types/metadata.js +2 -0
  78. package/dist/src/types/mitosis-component.d.ts +26 -4
  79. package/dist/src/types/mitosis-context.d.ts +2 -2
  80. package/dist/tsconfig.build.tsbuildinfo +1 -1
  81. package/package.json +5 -2
  82. package/dist/src/helpers/plugins/process-code.d.ts +0 -10
  83. package/dist/src/helpers/plugins/process-code.js +0 -71
  84. package/dist/src/parsers/jsx/hooks.d.ts +0 -14
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.componentToLit = void 0;
8
8
  var lodash_1 = require("lodash");
9
9
  var standalone_1 = require("prettier/standalone");
10
+ var html_tags_1 = require("../../constants/html_tags");
10
11
  var dash_case_1 = require("../../helpers/dash-case");
11
12
  var dedent_1 = require("../../helpers/dedent");
12
13
  var fast_clone_1 = require("../../helpers/fast-clone");
@@ -18,12 +19,12 @@ var has_1 = require("../../helpers/has");
18
19
  var indent_1 = require("../../helpers/indent");
19
20
  var is_upper_case_1 = require("../../helpers/is-upper-case");
20
21
  var map_refs_1 = require("../../helpers/map-refs");
22
+ var merge_options_1 = require("../../helpers/merge-options");
21
23
  var render_imports_1 = require("../../helpers/render-imports");
22
24
  var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
23
25
  var strip_state_and_props_refs_1 = require("../../helpers/strip-state-and-props-refs");
24
26
  var collect_css_1 = require("../../helpers/styles/collect-css");
25
27
  var plugins_1 = require("../../modules/plugins");
26
- var jsx_1 = require("../../parsers/jsx");
27
28
  var mitosis_node_1 = require("../../types/mitosis-node");
28
29
  var collect_class_string_1 = require("./collect-class-string");
29
30
  var getCustomTagName = function (name, options) {
@@ -97,7 +98,7 @@ var blockToLit = function (json, options) {
97
98
  }
98
99
  }
99
100
  }
100
- if (jsx_1.selfClosingTags.has(json.name)) {
101
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
101
102
  return str + ' />';
102
103
  }
103
104
  str += '>';
@@ -110,11 +111,12 @@ var blockToLit = function (json, options) {
110
111
  function processBinding(code) {
111
112
  return (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(code, { replaceWith: 'this.' });
112
113
  }
113
- var componentToLit = function (options) {
114
- if (options === void 0) { options = {}; }
114
+ var componentToLit = function (_options) {
115
+ if (_options === void 0) { _options = {}; }
115
116
  return function (_a) {
116
117
  var _b, _c, _d, _e;
117
118
  var component = _a.component;
119
+ var options = (0, merge_options_1.initializeOptions)('lit', _options);
118
120
  var json = (0, fast_clone_1.fastClone)(component);
119
121
  if (options.plugins) {
120
122
  json = (0, plugins_1.runPreJsonPlugins)(json, options.plugins);
@@ -22,6 +22,7 @@ exports.markoFormatHtml = exports.postprocessHtml = exports.preprocessHtml = exp
22
22
  var hash_sum_1 = __importDefault(require("hash-sum"));
23
23
  var lodash_1 = require("lodash");
24
24
  var standalone_1 = require("prettier/standalone");
25
+ var html_tags_1 = require("../../constants/html_tags");
25
26
  var dash_case_1 = require("../../helpers/dash-case");
26
27
  var dedent_1 = require("../../helpers/dedent");
27
28
  var fast_clone_1 = require("../../helpers/fast-clone");
@@ -31,13 +32,13 @@ var get_state_object_string_1 = require("../../helpers/get-state-object-string")
31
32
  var has_props_1 = require("../../helpers/has-props");
32
33
  var indent_1 = require("../../helpers/indent");
33
34
  var map_refs_1 = require("../../helpers/map-refs");
35
+ var merge_options_1 = require("../../helpers/merge-options");
34
36
  var for_1 = require("../../helpers/nodes/for");
35
37
  var render_imports_1 = require("../../helpers/render-imports");
36
38
  var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
37
39
  var strip_state_and_props_refs_1 = require("../../helpers/strip-state-and-props-refs");
38
40
  var collect_css_1 = require("../../helpers/styles/collect-css");
39
41
  var plugins_1 = require("../../modules/plugins");
40
- var jsx_1 = require("../../parsers/jsx");
41
42
  var mitosis_node_1 = require("../../types/mitosis-node");
42
43
  // Having issues with this, so off for now
43
44
  var USE_MARKO_PRETTIER = false;
@@ -93,7 +94,7 @@ var blockToMarko = function (json, options) {
93
94
  str += " ".concat(key, "=(").concat(processBinding(options.component, code), ") ");
94
95
  }
95
96
  }
96
- if (jsx_1.selfClosingTags.has(json.name)) {
97
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
97
98
  return str + ' />';
98
99
  }
99
100
  str += '>';
@@ -136,7 +137,7 @@ var componentToMarko = function (userOptions) {
136
137
  var _b, _c, _d;
137
138
  var component = _a.component;
138
139
  var json = (0, fast_clone_1.fastClone)(component);
139
- var options = __assign(__assign({}, userOptions), { component: json });
140
+ var options = (0, merge_options_1.initializeOptions)('marko', __assign(__assign({}, userOptions), { component: json }));
140
141
  if (options.plugins) {
141
142
  json = (0, plugins_1.runPreJsonPlugins)(json, options.plugins);
142
143
  }
@@ -30,6 +30,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.componentToMitosis = exports.blockToMitosis = exports.DEFAULT_FORMAT = void 0;
31
31
  var json5_1 = __importDefault(require("json5"));
32
32
  var standalone_1 = require("prettier/standalone");
33
+ var hooks_1 = require("../constants/hooks");
34
+ var html_tags_1 = require("../constants/html_tags");
33
35
  var dedent_1 = require("../helpers/dedent");
34
36
  var fast_clone_1 = require("../helpers/fast-clone");
35
37
  var get_components_1 = require("../helpers/get-components");
@@ -39,7 +41,6 @@ var is_root_text_node_1 = require("../helpers/is-root-text-node");
39
41
  var map_refs_1 = require("../helpers/map-refs");
40
42
  var render_imports_1 = require("../helpers/render-imports");
41
43
  var state_1 = require("../helpers/state");
42
- var jsx_1 = require("../parsers/jsx");
43
44
  var mitosis_node_1 = require("../types/mitosis-node");
44
45
  var react_1 = require("./react");
45
46
  exports.DEFAULT_FORMAT = 'legacy';
@@ -98,7 +99,7 @@ var blockToMitosis = function (json, toMitosisOptions, component) {
98
99
  }
99
100
  }
100
101
  }
101
- if (jsx_1.selfClosingTags.has(json.name)) {
102
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
102
103
  return str + ' />';
103
104
  }
104
105
  // Self close by default if no children
@@ -160,7 +161,7 @@ var componentToMitosis = function (toMitosisOptions) {
160
161
  var str = (0, dedent_1.dedent)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n ", "\n ", "\n\n ", "\n\n ", "\n\n export default function ", "(props) {\n ", "\n ", "\n\n ", "\n\n ", "\n\n return (", "\n ", "\n ", ")\n }\n\n "], ["\n ", "\n ", "\n ", "\n\n ", "\n\n ", "\n\n export default function ", "(props) {\n ", "\n ", "\n\n ", "\n\n ", "\n\n return (", "\n ", "\n ", ")\n }\n\n "])), !needsMitosisCoreImport
161
162
  ? ''
162
163
  : "import { ".concat(!hasState ? '' : 'useStore, ', " ").concat(!refs.length ? '' : 'useRef, ', " ").concat(mitosisComponents.join(', '), " } from '@builder.io/mitosis';"), !otherComponents.length ? '' : "import { ".concat(otherComponents.join(','), " } from '@components';"), json.types ? json.types.join('\n') : '', (0, render_imports_1.renderPreComponent)({ component: json, target: 'mitosis' }), stringifiedUseMetadata && stringifiedUseMetadata !== '{}'
163
- ? "".concat(jsx_1.METADATA_HOOK_NAME, "(").concat(stringifiedUseMetadata, ")")
164
+ ? "".concat(hooks_1.HOOKS.METADATA, "(").concat(stringifiedUseMetadata, ")")
164
165
  : '', component.name, !hasState ? '' : "const state = useStore(".concat((0, get_state_object_string_1.getStateObjectStringFromComponent)(json), ");"), getRefsString(json, refs), !((_b = json.hooks.onMount) === null || _b === void 0 ? void 0 : _b.code) ? '' : "onMount(() => { ".concat(json.hooks.onMount.code, " })"), !((_c = json.hooks.onUnMount) === null || _c === void 0 ? void 0 : _c.code) ? '' : "onUnMount(() => { ".concat(json.hooks.onUnMount.code, " })"), addWrapper ? '<>' : '', json.children.map(function (item) { return (0, exports.blockToMitosis)(item, options, component); }).join('\n'), addWrapper ? '</>' : '');
165
166
  if (options.prettier !== false) {
166
167
  try {
@@ -28,6 +28,8 @@ var PLUGINS = [
28
28
  }); },
29
29
  (0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType, json) {
30
30
  switch (codeType) {
31
+ case 'types':
32
+ return function (c) { return c; };
31
33
  case 'bindings':
32
34
  case 'state':
33
35
  case 'hooks':
@@ -74,7 +76,7 @@ var componentToQwik = function (userOptions) {
74
76
  var _component = _a.component, path = _a.path;
75
77
  // Make a copy we can safely mutate, similar to babel's toolchain
76
78
  var component = (0, fast_clone_1.fastClone)(_component);
77
- var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, userOptions);
79
+ var options = (0, merge_options_1.initializeOptions)('qwik', DEFAULT_OPTIONS, userOptions);
78
80
  component = (0, plugins_1.runPreJsonPlugins)(component, options.plugins);
79
81
  component = (0, plugins_1.runPostJsonPlugins)(component, options.plugins);
80
82
  var isTypeScript = !!options.typescript;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.iteratorProperty = exports.lastProperty = exports.isStatement = exports.iif = exports.arrowFnValue = exports.arrowFnBlock = exports.invoke = exports.quote = exports.Imports = exports.Symbol = exports.SrcBuilder = exports.File = void 0;
4
4
  var standalone_1 = require("prettier/standalone");
5
+ var html_tags_1 = require("../../constants/html_tags");
5
6
  var builder_1 = require("../../parsers/builder");
6
- var jsx_1 = require("../../parsers/jsx");
7
7
  var stable_serialize_1 = require("./helpers/stable-serialize");
8
8
  var File = /** @class */ (function () {
9
9
  function File(filename, options, qwikModule, qrlPrefix) {
@@ -390,7 +390,7 @@ var SrcBuilder = /** @class */ (function () {
390
390
  }
391
391
  };
392
392
  SrcBuilder.prototype.isSelfClosingTag = function (symbol) {
393
- return jsx_1.selfClosingTags.has(String(symbol));
393
+ return html_tags_1.SELF_CLOSING_HTML_TAGS.has(String(symbol));
394
394
  };
395
395
  SrcBuilder.prototype.jsxEnd = function (symbol) {
396
396
  if (this.isJSX) {
@@ -16,13 +16,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.blockToReact = void 0;
18
18
  var lodash_1 = require("lodash");
19
+ var html_tags_1 = require("../../constants/html_tags");
19
20
  var filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
20
21
  var is_children_1 = __importDefault(require("../../helpers/is-children"));
21
22
  var is_root_text_node_1 = require("../../helpers/is-root-text-node");
22
23
  var is_valid_attribute_name_1 = require("../../helpers/is-valid-attribute-name");
23
24
  var for_1 = require("../../helpers/nodes/for");
24
25
  var slots_1 = require("../../helpers/slots");
25
- var jsx_1 = require("../../parsers/jsx");
26
26
  var mitosis_node_1 = require("../../types/mitosis-node");
27
27
  var helpers_1 = require("./helpers");
28
28
  var state_1 = require("./state");
@@ -207,7 +207,7 @@ var blockToReact = function (json, options, component, parentSlots) {
207
207
  }
208
208
  }
209
209
  }
210
- if (jsx_1.selfClosingTags.has(json.name)) {
210
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
211
211
  return str + ' />';
212
212
  }
213
213
  // Self close by default if no children
@@ -139,7 +139,16 @@ var componentToReact = function (reactOptions) {
139
139
  return function (_a) {
140
140
  var component = _a.component, path = _a.path;
141
141
  var json = (0, fast_clone_1.fastClone)(component);
142
- var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, reactOptions);
142
+ var target = reactOptions.preact
143
+ ? 'preact'
144
+ : reactOptions.type === 'native'
145
+ ? 'reactNative'
146
+ : reactOptions.type === 'taro'
147
+ ? 'taro'
148
+ : reactOptions.rsc
149
+ ? 'rsc'
150
+ : 'react';
151
+ var options = (0, merge_options_1.initializeOptions)(target, DEFAULT_OPTIONS, reactOptions);
143
152
  if (options.plugins) {
144
153
  json = (0, plugins_1.runPreJsonPlugins)(json, options.plugins);
145
154
  }
@@ -5,6 +5,7 @@ export interface ToReactOptions extends BaseTranspilerOptions {
5
5
  format?: 'lite' | 'safe';
6
6
  type: 'dom' | 'native' | 'taro';
7
7
  preact?: boolean;
8
+ rsc?: boolean;
8
9
  forwardRef?: string;
9
10
  experimental?: any;
10
11
  /**
@@ -69,6 +69,7 @@ var componentToRsc = function (_options) {
69
69
  stylesType: 'style-tag',
70
70
  stateType: 'variables',
71
71
  contextType: 'prop-drill',
72
+ rsc: true,
72
73
  });
73
74
  return (0, react_1.componentToReact)(options)({ component: json, path: path });
74
75
  };
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.blockToSolid = void 0;
4
4
  var core_1 = require("@babel/core");
5
5
  var lodash_1 = require("lodash");
6
+ var html_tags_1 = require("../../constants/html_tags");
6
7
  var babel_transform_1 = require("../../helpers/babel-transform");
7
8
  var filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
8
9
  var typescript_1 = require("../../helpers/typescript");
9
- var jsx_1 = require("../../parsers/jsx");
10
10
  var mitosis_node_1 = require("../../types/mitosis-node");
11
11
  var styles_1 = require("./helpers/styles");
12
12
  var ATTTRIBUTE_MAPPERS = {
@@ -96,7 +96,7 @@ var blockToSolid = function (_a) {
96
96
  str += " ".concat(newKey, "={").concat(useValue, "} ");
97
97
  }
98
98
  }
99
- if (jsx_1.selfClosingTags.has(json.name)) {
99
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
100
100
  return str + ' />';
101
101
  }
102
102
  str += '>';
@@ -130,12 +130,13 @@ var componentToSolid = function (passedOptions) {
130
130
  var _b, _c, _d, _e, _f, _g, _h;
131
131
  var component = _a.component;
132
132
  var json = (0, fast_clone_1.fastClone)(component);
133
- var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, passedOptions);
133
+ var options = (0, merge_options_1.initializeOptions)('solid', DEFAULT_OPTIONS, passedOptions);
134
134
  options.plugins = __spreadArray(__spreadArray([], (options.plugins || []), true), [
135
135
  (0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
136
136
  switch (codeType) {
137
137
  case 'state':
138
138
  case 'dynamic-jsx-elements':
139
+ case 'types':
139
140
  return function (c) { return c; };
140
141
  case 'bindings':
141
142
  case 'hooks':
@@ -6,6 +6,7 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.componentToStencil = void 0;
8
8
  var standalone_1 = require("prettier/standalone");
9
+ var html_tags_1 = require("../../constants/html_tags");
9
10
  var dash_case_1 = require("../../helpers/dash-case");
10
11
  var dedent_1 = require("../../helpers/dedent");
11
12
  var fast_clone_1 = require("../../helpers/fast-clone");
@@ -14,13 +15,13 @@ var get_props_1 = require("../../helpers/get-props");
14
15
  var get_state_object_string_1 = require("../../helpers/get-state-object-string");
15
16
  var indent_1 = require("../../helpers/indent");
16
17
  var map_refs_1 = require("../../helpers/map-refs");
18
+ var merge_options_1 = require("../../helpers/merge-options");
17
19
  var for_1 = require("../../helpers/nodes/for");
18
20
  var render_imports_1 = require("../../helpers/render-imports");
19
21
  var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
20
22
  var strip_state_and_props_refs_1 = require("../../helpers/strip-state-and-props-refs");
21
23
  var collect_css_1 = require("../../helpers/styles/collect-css");
22
24
  var plugins_1 = require("../../modules/plugins");
23
- var jsx_1 = require("../../parsers/jsx");
24
25
  var mitosis_node_1 = require("../../types/mitosis-node");
25
26
  var collect_class_string_1 = require("./collect-class-string");
26
27
  var blockToStencil = function (json, options) {
@@ -73,7 +74,7 @@ var blockToStencil = function (json, options) {
73
74
  str += " ".concat(key, "={").concat(processBinding(code), "} ");
74
75
  }
75
76
  }
76
- if (jsx_1.selfClosingTags.has(json.name)) {
77
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
77
78
  return str + ' />';
78
79
  }
79
80
  str += '>';
@@ -86,11 +87,12 @@ var blockToStencil = function (json, options) {
86
87
  function processBinding(code) {
87
88
  return (0, strip_state_and_props_refs_1.stripStateAndPropsRefs)(code, { replaceWith: 'this.' });
88
89
  }
89
- var componentToStencil = function (options) {
90
- if (options === void 0) { options = {}; }
90
+ var componentToStencil = function (_options) {
91
+ if (_options === void 0) { _options = {}; }
91
92
  return function (_a) {
92
93
  var _b, _c, _d, _e;
93
94
  var component = _a.component;
95
+ var options = (0, merge_options_1.initializeOptions)('stencil', _options);
94
96
  var json = (0, fast_clone_1.fastClone)(component);
95
97
  if (options.plugins) {
96
98
  json = (0, plugins_1.runPreJsonPlugins)(json, options.plugins);
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.blockToSvelte = void 0;
7
- var jsx_1 = require("../../parsers/jsx");
8
7
  var html_tags_1 = require("../../constants/html_tags");
8
+ var html_tags_2 = require("../../constants/html_tags");
9
9
  var bindings_1 = require("../../helpers/bindings");
10
10
  var is_children_1 = __importDefault(require("../../helpers/is-children"));
11
11
  var is_upper_case_1 = require("../../helpers/is-upper-case");
@@ -107,7 +107,7 @@ var getTagName = function (_a) {
107
107
  });
108
108
  return SVELTE_SPECIAL_TAGS.ELEMENT;
109
109
  }
110
- var isValidHtmlTag = html_tags_1.VALID_HTML_TAGS.includes(json.name);
110
+ var isValidHtmlTag = html_tags_2.VALID_HTML_TAGS.includes(json.name);
111
111
  var isSpecialSvelteTag = json.name.startsWith('svelte:');
112
112
  // Check if any import matches `json.name`
113
113
  var hasMatchingImport = parentComponent.imports.some(function (_a) {
@@ -202,7 +202,7 @@ var blockToSvelte = function (_a) {
202
202
  str += "</".concat(tagName, ">");
203
203
  return str;
204
204
  }
205
- if (jsx_1.selfClosingTags.has(tagName)) {
205
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(tagName)) {
206
206
  return str + ' />';
207
207
  }
208
208
  str += '>';
@@ -1,5 +1,8 @@
1
1
  import { MitosisComponent } from '../../types/mitosis-component';
2
2
  import { ToSvelteOptions } from './types';
3
+ export declare const transformReactiveValues: ({ json }: {
4
+ json: MitosisComponent;
5
+ }) => (code: string) => string;
3
6
  export declare const stripStateAndProps: ({ options, json }: {
4
7
  options: ToSvelteOptions;
5
8
  json: MitosisComponent;
@@ -1,8 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stripStateAndProps = void 0;
3
+ exports.stripStateAndProps = exports.transformReactiveValues = void 0;
4
+ var core_1 = require("@babel/core");
5
+ var process_signals_1 = require("../../helpers/plugins/process-signals");
4
6
  var slots_1 = require("../../helpers/slots");
5
7
  var strip_state_and_props_refs_1 = require("../../helpers/strip-state-and-props-refs");
8
+ var transformReactiveValues = function (_a) {
9
+ var json = _a.json;
10
+ return (0, process_signals_1.processSignalsForCode)({
11
+ json: json,
12
+ processors: {
13
+ props: function (name) {
14
+ return {
15
+ from: core_1.types.memberExpression(core_1.types.identifier(name), core_1.types.identifier('value')),
16
+ to: core_1.types.identifier('$' + name),
17
+ };
18
+ },
19
+ context: function (name) {
20
+ return {
21
+ from: core_1.types.memberExpression(core_1.types.identifier(name), core_1.types.identifier('value')),
22
+ to: core_1.types.identifier('$' + name),
23
+ };
24
+ },
25
+ state: function (name) {
26
+ return {
27
+ from: core_1.types.memberExpression(core_1.types.identifier(name), core_1.types.identifier('value')),
28
+ to: core_1.types.identifier('$' + name),
29
+ };
30
+ },
31
+ },
32
+ });
33
+ };
34
+ exports.transformReactiveValues = transformReactiveValues;
6
35
  var stripStateAndProps = function (_a) {
7
36
  var options = _a.options, json = _a.json;
8
37
  return function (code) {
@@ -31,6 +31,7 @@ var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
31
31
  var merge_options_1 = require("../../helpers/merge-options");
32
32
  var patterns_1 = require("../../helpers/patterns");
33
33
  var process_code_1 = require("../../helpers/plugins/process-code");
34
+ var process_signals_1 = require("../../helpers/plugins/process-signals");
34
35
  var render_imports_1 = require("../../helpers/render-imports");
35
36
  var slots_1 = require("../../helpers/slots");
36
37
  var strip_meta_properties_1 = require("../../helpers/strip-meta-properties");
@@ -47,7 +48,12 @@ var getContextCode = function (json) {
47
48
  .map(function (_a) {
48
49
  var key = _a[0], context = _a[1];
49
50
  var name = context.name;
50
- return "let ".concat(key, " = getContext(").concat(name, ".key);");
51
+ var contextType = (0, context_1.getContextType)({ component: json, context: context });
52
+ switch (contextType) {
53
+ case 'reactive':
54
+ case 'normal':
55
+ return "let ".concat(key, " = getContext(").concat(name, ".key);");
56
+ }
51
57
  })
52
58
  .join('\n');
53
59
  };
@@ -57,13 +63,22 @@ var setContextCode = function (_a) {
57
63
  return Object.values(json.context.set)
58
64
  .map(function (context) {
59
65
  var value = context.value, name = context.name, ref = context.ref;
60
- var key = value ? "".concat(name, ".key") : name;
66
+ var nameIsStringLiteral = (name.startsWith("'") && name.endsWith("'")) ||
67
+ (name.startsWith('"') && name.endsWith('"'));
68
+ var key = nameIsStringLiteral ? name : "".concat(name, ".key");
61
69
  var valueStr = value
62
70
  ? processCode((0, get_state_object_string_1.stringifyContextValue)(value))
63
71
  : ref
64
72
  ? processCode(ref)
65
73
  : 'undefined';
66
- return "setContext(".concat(key, ", ").concat(valueStr, ");");
74
+ var contextType = (0, context_1.getContextType)({ component: json, context: context });
75
+ switch (contextType) {
76
+ case 'normal':
77
+ return "setContext(".concat(key, ", ").concat(valueStr, ");");
78
+ case 'reactive':
79
+ var storeName = "".concat(name, "ContextStoreValue");
80
+ return "\n const ".concat(storeName, " = writable(").concat(valueStr, ");\n setContext(").concat(key, ", ").concat(storeName, ");\n ");
81
+ }
67
82
  })
68
83
  .join('\n');
69
84
  };
@@ -107,7 +122,7 @@ var componentToSvelte = function (userProvidedOptions) {
107
122
  return function (_a) {
108
123
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
109
124
  var component = _a.component;
110
- var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, userProvidedOptions);
125
+ var options = (0, merge_options_1.initializeOptions)('svelte', DEFAULT_OPTIONS, userProvidedOptions);
111
126
  options.plugins = __spreadArray(__spreadArray([], (options.plugins || []), true), [
112
127
  // Strip types from any JS code that ends up in the template, because Svelte does not support TS code in templates.
113
128
  (0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
@@ -119,23 +134,27 @@ var componentToSvelte = function (userProvidedOptions) {
119
134
  case 'hooks-deps':
120
135
  case 'state':
121
136
  case 'dynamic-jsx-elements':
137
+ case 'types':
122
138
  return function (x) { return x; };
123
139
  }
124
140
  }),
125
141
  (0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
126
142
  switch (codeType) {
127
143
  case 'hooks':
128
- return (0, function_1.flow)((0, helpers_2.stripStateAndProps)({ json: json, options: options }), babel_transform_1.babelTransformCode);
144
+ return (0, function_1.flow)((0, helpers_2.stripStateAndProps)({ json: json, options: options }), (0, helpers_2.transformReactiveValues)({ json: json }), babel_transform_1.babelTransformCode);
129
145
  case 'bindings':
130
146
  case 'hooks-deps':
131
147
  case 'state':
132
- return (0, function_1.flow)((0, helpers_2.stripStateAndProps)({ json: json, options: options }), patterns_1.stripGetter);
133
- case 'properties':
134
- return (0, helpers_2.stripStateAndProps)({ json: json, options: options });
148
+ return (0, function_1.flow)((0, helpers_2.stripStateAndProps)({ json: json, options: options }), (0, helpers_2.transformReactiveValues)({ json: json }), patterns_1.stripGetter);
149
+ case 'properties': {
150
+ return (0, function_1.flow)((0, helpers_2.stripStateAndProps)({ json: json, options: options }), (0, helpers_2.transformReactiveValues)({ json: json }));
151
+ }
135
152
  case 'dynamic-jsx-elements':
153
+ case 'types':
136
154
  return function (x) { return x; };
137
155
  }
138
156
  }),
157
+ (0, process_signals_1.getSignalTypePlugin)({ target: 'svelte' }),
139
158
  ], false);
140
159
  // Make a copy we can safely mutate, similar to babel's toolchain
141
160
  var json = (0, fast_clone_1.fastClone)(component);
@@ -149,12 +168,21 @@ var componentToSvelte = function (userProvidedOptions) {
149
168
  json = (0, plugins_1.runPostJsonPlugins)(json, options.plugins);
150
169
  var css = (0, collect_css_1.collectCss)(json);
151
170
  (0, strip_meta_properties_1.stripMetaProperties)(json);
171
+ var usesWritable = false;
152
172
  var dataString = (0, function_1.pipe)((0, get_state_object_string_1.getStateObjectStringFromComponent)(json, {
153
173
  data: true,
154
174
  functions: false,
155
175
  getters: false,
156
176
  format: options.stateType === 'proxies' ? 'object' : 'variables',
157
177
  keyPrefix: options.stateType === 'variables' ? 'let ' : '',
178
+ valueMapper: function (code, _t, _p, key) {
179
+ var _a;
180
+ if (((_a = json.state[key]) === null || _a === void 0 ? void 0 : _a.propertyType) === 'reactive') {
181
+ usesWritable = true;
182
+ return "writable(".concat(code, ")");
183
+ }
184
+ return code;
185
+ },
158
186
  }), babel_transform_1.babelTransformCode);
159
187
  var getterString = (0, function_1.pipe)((0, get_state_object_string_1.getStateObjectStringFromComponent)(json, {
160
188
  data: false,
@@ -199,6 +227,9 @@ var componentToSvelte = function (userProvidedOptions) {
199
227
  if ((0, context_1.hasSetContext)(component)) {
200
228
  svelteImports.push('setContext');
201
229
  }
230
+ if (usesWritable) {
231
+ svelteStoreImports.push('writable');
232
+ }
202
233
  str += (0, dedent_1.dedent)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n <script ", ">\n ", "\n ", "\n\n ", "\n\n ", "\n ", "\n ", "\n ", "\n\n ", "\n ", "\n\n ", "\n\n ", "\n ", "\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n </script>\n\n ", "\n\n ", "\n "], ["\n <script ", ">\n ", "\n ", "\n\n ", "\n\n ", "\n ", "\n "
203
234
  // https://svelte.dev/repl/bd9b56891f04414982517bbd10c52c82?version=3.31.0
204
235
  , "\n ", "\n\n ", "\n ", "\n\n ", "\n\n ", "\n ", "\n\n ", "\n\n ", "\n\n "
@@ -235,7 +266,7 @@ var componentToSvelte = function (userProvidedOptions) {
235
266
  return "afterUpdate(() => { ".concat(code, " });");
236
267
  }
237
268
  var fnName = "onUpdateFn_".concat(index);
238
- return "\n function ".concat(fnName, "() {\n ").concat(code, "\n }\n $: ").concat(fnName, "(...").concat(deps, ")\n ");
269
+ return "\n function ".concat(fnName, "(..._args").concat(options.typescript ? ': any[]' : '', ") {\n ").concat(code, "\n }\n $: ").concat(fnName, "(...").concat(deps, ")\n ");
239
270
  }).join(';')) || '',
240
271
  // make sure this is after all other state/code is initialized
241
272
  setContextCode({ json: json, options: options }), !((_o = json.hooks.onUnMount) === null || _o === void 0 ? void 0 : _o.code) ? '' : "onDestroy(() => { ".concat(json.hooks.onUnMount.code, " });"), json.children
@@ -6,12 +6,12 @@ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cook
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.componentToTemplate = void 0;
8
8
  var standalone_1 = require("prettier/standalone");
9
+ var html_tags_1 = require("../constants/html_tags");
9
10
  var dedent_1 = require("../helpers/dedent");
10
11
  var fast_clone_1 = require("../helpers/fast-clone");
11
12
  var get_state_object_string_1 = require("../helpers/get-state-object-string");
12
13
  var collect_css_1 = require("../helpers/styles/collect-css");
13
14
  var plugins_1 = require("../modules/plugins");
14
- var jsx_1 = require("../parsers/jsx");
15
15
  var mitosis_node_1 = require("../types/mitosis-node");
16
16
  var mappers = {
17
17
  Fragment: function (json, options) {
@@ -74,7 +74,7 @@ var blockToTemplate = function (json, options) {
74
74
  str += " ".concat(key, "=\"${").concat(useValue, "}\" ");
75
75
  }
76
76
  }
77
- if (jsx_1.selfClosingTags.has(json.name)) {
77
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(json.name)) {
78
78
  return str + ' />';
79
79
  }
80
80
  str += '>';
@@ -16,6 +16,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.blockToVue = void 0;
18
18
  var function_1 = require("fp-ts/lib/function");
19
+ var html_tags_1 = require("../../constants/html_tags");
19
20
  var filter_empty_text_nodes_1 = require("../../helpers/filter-empty-text-nodes");
20
21
  var is_children_1 = __importDefault(require("../../helpers/is-children"));
21
22
  var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
@@ -23,7 +24,6 @@ var nullable_1 = require("../../helpers/nullable");
23
24
  var remove_surrounding_block_1 = require("../../helpers/remove-surrounding-block");
24
25
  var replace_identifiers_1 = require("../../helpers/replace-identifiers");
25
26
  var slots_1 = require("../../helpers/slots");
26
- var jsx_1 = require("../../parsers/jsx");
27
27
  var helpers_1 = require("./helpers");
28
28
  var SPECIAL_PROPERTIES = {
29
29
  V_IF: 'v-if',
@@ -295,8 +295,8 @@ var blockToVue = function (node, options, scope) {
295
295
  }
296
296
  if (SPECIAL_HTML_TAGS.includes(node.name)) {
297
297
  // Vue doesn't allow style/script tags in templates, but does support them through dynamic components.
298
+ node.bindings.is = { code: "'".concat(node.name, "'"), type: 'single' };
298
299
  node.name = 'component';
299
- node.bindings.is = { code: "".concat(node.name), type: 'single' };
300
300
  }
301
301
  if (node.properties._text) {
302
302
  return "".concat(node.properties._text);
@@ -310,7 +310,7 @@ var blockToVue = function (node, options, scope) {
310
310
  }
311
311
  var str = "<".concat(node.name, " ");
312
312
  str += getBlockBindings(node);
313
- if (jsx_1.selfClosingTags.has(node.name)) {
313
+ if (html_tags_1.SELF_CLOSING_HTML_TAGS.has(node.name)) {
314
314
  return str + ' />';
315
315
  }
316
316
  str += '>';
@@ -105,7 +105,7 @@ var componentToVue = function (userOptions) {
105
105
  return function (_a) {
106
106
  var _b, _c, _d, _e, _f, _g, _h;
107
107
  var component = _a.component, path = _a.path;
108
- var options = (0, merge_options_1.mergeOptions)(BASE_OPTIONS, userOptions);
108
+ var options = (0, merge_options_1.initializeOptions)((userOptions === null || userOptions === void 0 ? void 0 : userOptions.vueVersion) === 2 ? 'vue2' : 'vue3', BASE_OPTIONS, userOptions);
109
109
  options.plugins.unshift((0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType) {
110
110
  if (options.api === 'composition') {
111
111
  switch (codeType) {
@@ -121,6 +121,7 @@ var componentToVue = function (userOptions) {
121
121
  return (0, replace_identifiers_1.replaceStateIdentifier)(null);
122
122
  case 'properties':
123
123
  case 'dynamic-jsx-elements':
124
+ case 'types':
124
125
  return function (c) { return c; };
125
126
  }
126
127
  }
@@ -135,6 +136,7 @@ var componentToVue = function (userOptions) {
135
136
  case 'properties':
136
137
  case 'dynamic-jsx-elements':
137
138
  case 'hooks-deps':
139
+ case 'types':
138
140
  return function (c) { return c; };
139
141
  case 'state':
140
142
  return function (c) { return (0, helpers_1.processBinding)({ code: c, options: options, json: component }); };
@@ -1,10 +1,11 @@
1
1
  import { MitosisComponent } from '../types/mitosis-component';
2
2
  import { MitosisContext } from '../types/mitosis-context';
3
+ declare type ValueMapper = (code: string, type: 'data' | 'function' | 'getter', typeParameter?: string, key?: string) => string;
3
4
  interface GetStateObjectStringOptions {
4
5
  data?: boolean;
5
6
  functions?: boolean;
6
7
  getters?: boolean;
7
- valueMapper?: (code: string, type: 'data' | 'function' | 'getter', typeParameter?: string) => string;
8
+ valueMapper?: ValueMapper;
8
9
  format?: 'object' | 'class' | 'variables';
9
10
  keyPrefix?: string;
10
11
  }
@@ -52,7 +52,7 @@ var convertStateMemberToString = function (_a) {
52
52
  if (data === false) {
53
53
  return undefined;
54
54
  }
55
- return "".concat(keyPrefix, " ").concat(key).concat(keyValueDelimiter, " ").concat(valueMapper(code, 'data', typeParameter));
55
+ return "".concat(keyPrefix, " ").concat(key).concat(keyValueDelimiter, " ").concat(valueMapper(code, 'data', typeParameter, key));
56
56
  }
57
57
  default:
58
58
  break;
@@ -6,7 +6,7 @@ function handleMissingState(json) {
6
6
  var stateUsed = (0, get_state_used_1.getStateUsed)(json);
7
7
  Array.from(stateUsed).forEach(function (property) {
8
8
  if (!(property in json.state)) {
9
- json.state[property] = { code: 'null', type: 'property' };
9
+ json.state[property] = { code: 'null', type: 'property', propertyType: 'normal' };
10
10
  }
11
11
  });
12
12
  }