@builder.io/mitosis 0.0.92 → 0.0.94

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 (59) hide show
  1. package/dist/src/generators/context/qwik.js +1 -1
  2. package/dist/src/generators/mitosis.js +2 -1
  3. package/dist/src/generators/qwik/component-generator.js +93 -150
  4. package/dist/src/generators/qwik/component.js +9 -3
  5. package/dist/src/generators/qwik/{add-prevent-default.d.ts → helpers/add-prevent-default.d.ts} +1 -1
  6. package/dist/src/generators/qwik/{add-prevent-default.js → helpers/add-prevent-default.js} +1 -1
  7. package/dist/src/generators/qwik/helpers/convert-method-to-function.d.ts +2 -0
  8. package/dist/src/generators/qwik/helpers/handlers.d.ts +3 -0
  9. package/dist/src/generators/qwik/{handlers.js → helpers/handlers.js} +3 -4
  10. package/dist/src/generators/qwik/helpers/state.d.ts +27 -0
  11. package/dist/src/generators/qwik/helpers/state.js +118 -0
  12. package/dist/src/generators/qwik/{styles.d.ts → helpers/styles.d.ts} +2 -2
  13. package/dist/src/generators/qwik/{styles.js → helpers/styles.js} +1 -1
  14. package/dist/src/generators/qwik/helpers/transform-code.d.ts +1 -0
  15. package/dist/src/generators/qwik/helpers/transform-code.js +8 -0
  16. package/dist/src/generators/qwik/jsx.d.ts +1 -1
  17. package/dist/src/generators/qwik/jsx.js +3 -1
  18. package/dist/src/generators/qwik/src-generator.d.ts +1 -4
  19. package/dist/src/generators/qwik/src-generator.js +34 -16
  20. package/dist/src/generators/react/generator.js +4 -3
  21. package/dist/src/generators/{react-native.d.ts → react-native/index.d.ts} +3 -3
  22. package/dist/src/generators/{react-native.js → react-native/index.js} +48 -34
  23. package/dist/src/generators/react-native/sanitize-react-native-block-styles.d.ts +3 -0
  24. package/dist/src/generators/react-native/sanitize-react-native-block-styles.js +63 -0
  25. package/dist/src/generators/solid/index.js +4 -1
  26. package/dist/src/generators/svelte/blocks.js +9 -3
  27. package/dist/src/generators/svelte/helpers.js +8 -1
  28. package/dist/src/generators/vue/blocks.js +10 -4
  29. package/dist/src/generators/vue/helpers.d.ts +2 -1
  30. package/dist/src/generators/vue/helpers.js +51 -12
  31. package/dist/src/generators/vue/vue.js +6 -3
  32. package/dist/src/helpers/babel-transform.js +13 -10
  33. package/dist/src/helpers/is-root-text-node.d.ts +4 -0
  34. package/dist/src/helpers/is-root-text-node.js +12 -0
  35. package/dist/src/helpers/map-refs.js +2 -26
  36. package/dist/src/helpers/parsers.js +11 -5
  37. package/dist/src/helpers/patterns.d.ts +1 -0
  38. package/dist/src/helpers/patterns.js +3 -1
  39. package/dist/src/helpers/plugins/process-code.d.ts +1 -1
  40. package/dist/src/helpers/plugins/process-code.js +9 -9
  41. package/dist/src/helpers/render-imports.js +1 -0
  42. package/dist/src/helpers/replace-identifiers.js +2 -2
  43. package/dist/src/helpers/slots.d.ts +2 -2
  44. package/dist/src/helpers/slots.js +7 -3
  45. package/dist/src/parsers/jsx/component-types.d.ts +2 -2
  46. package/dist/src/parsers/jsx/component-types.js +7 -16
  47. package/dist/src/parsers/jsx/index.d.ts +1 -1
  48. package/dist/src/parsers/jsx/index.js +3 -16
  49. package/dist/src/parsers/jsx/jsx.js +17 -22
  50. package/dist/src/plugins/compile-away-builder-components.js +22 -4
  51. package/dist/tsconfig.build.tsbuildinfo +1 -1
  52. package/package.json +6 -3
  53. package/dist/src/generators/qwik/convert-method-to-function.d.ts +0 -1
  54. package/dist/src/generators/qwik/handlers.d.ts +0 -4
  55. /package/dist/src/generators/qwik/{convert-method-to-function.js → helpers/convert-method-to-function.js} +0 -0
  56. /package/dist/src/generators/qwik/{stable-inject.d.ts → helpers/stable-inject.d.ts} +0 -0
  57. /package/dist/src/generators/qwik/{stable-inject.js → helpers/stable-inject.js} +0 -0
  58. /package/dist/src/generators/qwik/{stable-serialize.d.ts → helpers/stable-serialize.d.ts} +0 -0
  59. /package/dist/src/generators/qwik/{stable-serialize.js → helpers/stable-serialize.js} +0 -0
@@ -6,7 +6,7 @@ var contextToQwik = function (options) {
6
6
  if (options === void 0) { options = {}; }
7
7
  return function (_a) {
8
8
  var context = _a.context;
9
- var str = "\n import { createContext } from '@builder.io/qwik';\n\n export default createContext<any>(\"".concat(context.name, "\")\n ");
9
+ var str = "\n import { createContextId } from '@builder.io/qwik';\n\n export default createContextId<any>(\"".concat(context.name, "\")\n ");
10
10
  if (options.format !== false) {
11
11
  try {
12
12
  str = (0, standalone_1.format)(str, {
@@ -41,6 +41,7 @@ var jsx_1 = require("../parsers/jsx");
41
41
  var mitosis_node_1 = require("../types/mitosis-node");
42
42
  var react_1 = require("./react");
43
43
  var state_1 = require("../helpers/state");
44
+ var is_root_text_node_1 = require("../helpers/is-root-text-node");
44
45
  exports.DEFAULT_FORMAT = 'legacy';
45
46
  // Special isValidAttributeName for Mitosis so we can allow for $ in names
46
47
  var isValidAttributeName = function (str) {
@@ -148,7 +149,7 @@ var componentToMitosis = function (toMitosisOptions) {
148
149
  (0, map_refs_1.mapRefs)(json, function (refName) {
149
150
  return "".concat(refName).concat(domRefs.has(refName) ? ".current" : '');
150
151
  });
151
- var addWrapper = json.children.length !== 1;
152
+ var addWrapper = json.children.length !== 1 || (0, is_root_text_node_1.isRootTextNode)(json);
152
153
  var components = Array.from((0, get_components_1.getComponents)(json));
153
154
  var mitosisComponents = components.filter(function (item) { return mitosisCoreComponents.includes(item); });
154
155
  var otherComponents = components.filter(function (item) { return !mitosisCoreComponents.includes(item); });
@@ -1,32 +1,60 @@
1
1
  "use strict";
2
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
- if (ar || !(i in from)) {
5
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
- ar[i] = from[i];
7
- }
8
- }
9
- return to.concat(ar || Array.prototype.slice.call(from));
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.componentToQwik = void 0;
16
- var babel_transform_1 = require("../../helpers/babel-transform");
4
+ var standalone_1 = require("prettier/standalone");
17
5
  var fast_clone_1 = require("../../helpers/fast-clone");
18
6
  var collect_css_1 = require("../../helpers/styles/collect-css");
19
7
  var state_1 = require("../../helpers/state");
20
- var add_prevent_default_1 = require("./add-prevent-default");
21
- var convert_method_to_function_1 = require("./convert-method-to-function");
8
+ var add_prevent_default_1 = require("./helpers/add-prevent-default");
9
+ var convert_method_to_function_1 = require("./helpers/convert-method-to-function");
22
10
  var jsx_1 = require("./jsx");
23
11
  var src_generator_1 = require("./src-generator");
24
12
  var plugins_1 = require("../../modules/plugins");
25
- var traverse_1 = __importDefault(require("traverse"));
26
- var stable_inject_1 = require("./stable-inject");
13
+ var stable_inject_1 = require("./helpers/stable-inject");
14
+ var merge_options_1 = require("../../helpers/merge-options");
15
+ var state_2 = require("./helpers/state");
16
+ var transform_code_1 = require("./helpers/transform-code");
17
+ var process_code_1 = require("../../helpers/plugins/process-code");
18
+ var replace_identifiers_1 = require("../../helpers/replace-identifiers");
27
19
  Error.stackTraceLimit = 9999;
28
- // TODO(misko): styles are not processed.
29
20
  var DEBUG = false;
21
+ var PLUGINS = [
22
+ function () { return ({
23
+ json: {
24
+ post: function (json) {
25
+ (0, add_prevent_default_1.addPreventDefault)(json);
26
+ return json;
27
+ },
28
+ },
29
+ }); },
30
+ (0, process_code_1.CODE_PROCESSOR_PLUGIN)(function (codeType, json) {
31
+ switch (codeType) {
32
+ case 'bindings':
33
+ case 'state':
34
+ case 'hooks':
35
+ case 'hooks-deps':
36
+ case 'properties':
37
+ // update signal getters to have `.value`
38
+ return function (code, k) {
39
+ // `ref` should not update the signal value access
40
+ if (k === 'ref') {
41
+ return code;
42
+ }
43
+ Object.keys(json.refs).forEach(function (ref) {
44
+ code = (0, replace_identifiers_1.replaceIdentifiers)({
45
+ code: code,
46
+ from: ref,
47
+ to: function (x) { return (x === ref ? "".concat(x, ".value") : "".concat(ref, ".value.").concat(x)); },
48
+ });
49
+ });
50
+ return code;
51
+ };
52
+ }
53
+ }),
54
+ ];
55
+ var DEFAULT_OPTIONS = {
56
+ plugins: PLUGINS,
57
+ };
30
58
  var componentToQwik = function (userOptions) {
31
59
  if (userOptions === void 0) { userOptions = {}; }
32
60
  return function (_a) {
@@ -34,14 +62,10 @@ var componentToQwik = function (userOptions) {
34
62
  var _component = _a.component, path = _a.path;
35
63
  // Make a copy we can safely mutate, similar to babel's toolchain
36
64
  var component = (0, fast_clone_1.fastClone)(_component);
37
- if (userOptions.plugins) {
38
- component = (0, plugins_1.runPreJsonPlugins)(component, userOptions.plugins);
39
- }
40
- (0, add_prevent_default_1.addPreventDefault)(component);
41
- if (userOptions.plugins) {
42
- component = (0, plugins_1.runPostJsonPlugins)(component, userOptions.plugins);
43
- }
44
- var isTypeScript = !!userOptions.typescript;
65
+ var options = (0, merge_options_1.mergeOptions)(DEFAULT_OPTIONS, userOptions);
66
+ component = (0, plugins_1.runPreJsonPlugins)(component, options.plugins);
67
+ component = (0, plugins_1.runPostJsonPlugins)(component, options.plugins);
68
+ var isTypeScript = !!options.typescript;
45
69
  var file = new src_generator_1.File(component.name + (isTypeScript ? '.ts' : '.js'), {
46
70
  isPretty: true,
47
71
  isJSX: true,
@@ -56,9 +80,9 @@ var componentToQwik = function (userOptions) {
56
80
  var metadata = component.meta.useMetadata || {};
57
81
  var isLightComponent = ((_c = (_b = metadata === null || metadata === void 0 ? void 0 : metadata.qwik) === null || _b === void 0 ? void 0 : _b.component) === null || _c === void 0 ? void 0 : _c.isLight) || false;
58
82
  var mutable_1 = ((_d = metadata === null || metadata === void 0 ? void 0 : metadata.qwik) === null || _d === void 0 ? void 0 : _d.mutable) || [];
59
- var imports_1 = (_e = metadata === null || metadata === void 0 ? void 0 : metadata.qwik) === null || _e === void 0 ? void 0 : _e.imports;
60
- imports_1 && Object.keys(imports_1).forEach(function (key) { return file.import(imports_1[key], key); });
61
- var state_2 = emitStateMethodsAndRewriteBindings(file, component, metadata);
83
+ var imports_1 = ((_e = metadata === null || metadata === void 0 ? void 0 : metadata.qwik) === null || _e === void 0 ? void 0 : _e.imports) || {};
84
+ Object.keys(imports_1).forEach(function (key) { return file.import(imports_1[key], key); });
85
+ var state_3 = (0, state_2.emitStateMethodsAndRewriteBindings)(file, component, metadata);
62
86
  var hasState_1 = (0, state_1.checkHasState)(component);
63
87
  var css_1 = null;
64
88
  var componentFn = (0, src_generator_1.arrowFnBlock)(['props'], [
@@ -67,12 +91,11 @@ var componentToQwik = function (userOptions) {
67
91
  css_1 = emitUseStyles(file, component);
68
92
  emitUseContext(file, component);
69
93
  emitUseRef(file, component);
70
- hasState_1 && emitUseStore(file, state_2);
94
+ hasState_1 && (0, state_2.emitUseStore)(file, state_3);
71
95
  emitUseContextProvider(file, component);
72
96
  emitUseClientEffect(file, component);
73
97
  emitUseMount(file, component);
74
98
  emitUseTask(file, component);
75
- emitUseCleanup(file, component);
76
99
  emitTagNameHack(file, component, (_a = component.meta.useMetadata) === null || _a === void 0 ? void 0 : _a.elementTag);
77
100
  emitTagNameHack(file, component, (_b = component.meta.useMetadata) === null || _b === void 0 ? void 0 : _b.componentElementTag);
78
101
  emitJSX(file, component, mutable_1);
@@ -84,11 +107,9 @@ var componentToQwik = function (userOptions) {
84
107
  file.exportDefault(component.name);
85
108
  emitStyles(file, css_1);
86
109
  DEBUG && file.exportConst('COMPONENT', JSON.stringify(component));
87
- var sourceFile = '// GENERATED BY MITOSIS\n\n' + file.toString();
88
- if (userOptions.plugins) {
89
- sourceFile = (0, plugins_1.runPreCodePlugins)(sourceFile, userOptions.plugins);
90
- sourceFile = (0, plugins_1.runPostCodePlugins)(sourceFile, userOptions.plugins);
91
- }
110
+ var sourceFile = file.toString();
111
+ sourceFile = (0, plugins_1.runPreCodePlugins)(sourceFile, options.plugins);
112
+ sourceFile = (0, plugins_1.runPostCodePlugins)(sourceFile, options.plugins);
92
113
  return sourceFile;
93
114
  }
94
115
  catch (e) {
@@ -99,15 +120,15 @@ var componentToQwik = function (userOptions) {
99
120
  };
100
121
  exports.componentToQwik = componentToQwik;
101
122
  function emitExports(file, component) {
102
- component.exports &&
103
- Object.keys(component.exports).forEach(function (key) {
104
- var exportObj = component.exports[key];
105
- file.src.emit(exportObj.code);
106
- });
123
+ Object.keys(component.exports || {}).forEach(function (key) {
124
+ var exportObj = component.exports[key];
125
+ var code = exportObj.code.startsWith('export ') ? exportObj.code : "export ".concat(exportObj.code);
126
+ file.src.emit(code);
127
+ });
107
128
  }
108
129
  function emitTagNameHack(file, component, metadataValue) {
109
130
  if (typeof metadataValue === 'string' && metadataValue) {
110
- file.src.emit(metadataValue, '=', (0, convert_method_to_function_1.convertMethodToFunction)(metadataValue, getStateMethodsAndGetters(component.state), getLexicalScopeVars(component)), ';');
131
+ file.src.emit(metadataValue, '=', (0, convert_method_to_function_1.convertMethodToFunction)(metadataValue, (0, state_2.getStateMethodsAndGetters)(component.state), (0, state_2.getLexicalScopeVars)(component)), ';');
111
132
  }
112
133
  }
113
134
  function emitUseClientEffect(file, component) {
@@ -115,13 +136,13 @@ function emitUseClientEffect(file, component) {
115
136
  // This is called useMount, but in practice it is used as
116
137
  // useClientEffect. Not sure if this is correct, but for now.
117
138
  var code = component.hooks.onMount.code;
118
- file.src.emit(file.import(file.qwikModule, 'useClientEffect$').localName, '(()=>{', code, '});');
139
+ file.src.emit(file.import(file.qwikModule, 'useVisibleTask$').localName, '(()=>{', code, '});');
119
140
  }
120
141
  }
121
142
  function emitUseMount(file, component) {
122
143
  if (component.hooks.onInit) {
123
144
  var code = component.hooks.onInit.code;
124
- file.src.emit(file.import(file.qwikModule, 'useMount$').localName, '(()=>{', code, '});');
145
+ file.src.emit(file.import(file.qwikModule, 'useTask$').localName, '(()=>{', code, '});');
125
146
  }
126
147
  }
127
148
  function emitUseTask(file, component) {
@@ -129,7 +150,7 @@ function emitUseTask(file, component) {
129
150
  component.hooks.onUpdate.forEach(function (onUpdate) {
130
151
  file.src.emit(file.import(file.qwikModule, 'useTask$').localName, '(({track})=>{');
131
152
  emitTrackExpressions(file.src, onUpdate.deps);
132
- file.src.emit(convertTypeScriptToJS(onUpdate.code));
153
+ file.src.emit((0, transform_code_1.convertTypeScriptToJS)(onUpdate.code));
133
154
  file.src.emit('});');
134
155
  });
135
156
  }
@@ -143,17 +164,14 @@ function emitTrackExpressions(src, deps) {
143
164
  src.emit("track(() => ".concat(dep, ");"));
144
165
  });
145
166
  }
146
- function emitUseCleanup(file, component) {
147
- if (component.hooks.onUnMount) {
148
- var code = component.hooks.onUnMount.code;
149
- file.src.emit(file.import(file.qwikModule, 'useCleanup$').localName, '(()=>{', code, '});');
150
- }
151
- }
152
167
  function emitJSX(file, component, mutable) {
153
168
  var directives = new Map();
154
169
  var handlers = new Map();
155
170
  var styles = new Map();
156
171
  var parentSymbolBindings = {};
172
+ if (file.options.isPretty) {
173
+ file.src.emit('\n\n');
174
+ }
157
175
  file.src.emit('return ', (0, jsx_1.renderJSXNodes)(file, directives, handlers, component.children, styles, parentSymbolBindings));
158
176
  }
159
177
  function emitUseContextProvider(file, component) {
@@ -187,41 +205,43 @@ function emitUseContext(file, component) {
187
205
  }
188
206
  function emitUseRef(file, component) {
189
207
  Object.keys(component.refs).forEach(function (refKey) {
190
- file.src.emit("const ", refKey, '=', file.import(file.qwikModule, 'useRef').localName, '();');
208
+ file.src.emit("const ", refKey, '=', file.import(file.qwikModule, 'useSignal').localName, "".concat(file.options.isTypeScript ? '<Element>' : '', "();"));
191
209
  });
192
210
  }
193
211
  function emitUseStyles(file, component) {
194
212
  var css = (0, collect_css_1.collectCss)(component, { prefix: component.name });
195
213
  if (css) {
196
214
  file.src.emit(file.import(file.qwikModule, 'useStylesScoped$').localName, '(STYLES);');
215
+ if (file.options.isPretty) {
216
+ file.src.emit('\n\n');
217
+ }
197
218
  }
198
219
  return css;
199
220
  }
200
221
  function emitStyles(file, css) {
201
- if (css) {
202
- file.exportConst('STYLES', '`\n' + css.replace(/`/g, '\\`') + '`\n');
222
+ if (!css) {
223
+ return;
203
224
  }
204
- }
205
- /**
206
- * @param file
207
- * @param stateInit
208
- */
209
- function emitUseStore(file, stateInit) {
210
- var state = stateInit[0];
211
- var hasState = state && Object.keys(state).length > 0;
212
- if (hasState) {
213
- file.src.emit('const state=', file.import(file.qwikModule, 'useStore').localName);
214
- if (file.options.isTypeScript) {
215
- file.src.emit('<any>');
225
+ if (file.options.isPretty) {
226
+ file.src.emit('\n\n');
227
+ try {
228
+ css = (0, standalone_1.format)(css, {
229
+ parser: 'css',
230
+ plugins: [
231
+ // To support running in browsers
232
+ require('prettier/parser-postcss'),
233
+ ],
234
+ });
235
+ }
236
+ catch (e) {
237
+ throw new Error(e +
238
+ '\n' +
239
+ '========================================================================\n' +
240
+ css +
241
+ '\n\n========================================================================');
216
242
  }
217
- file.src.emit('(');
218
- file.src.emit((0, stable_inject_1.stableInject)(state));
219
- file.src.emit(');');
220
- }
221
- else {
222
- // TODO hack for now so that `state` variable is defined, even though it is never read.
223
- file.src.emit('const state' + (file.options.isTypeScript ? ': any' : '') + ' = {};');
224
243
  }
244
+ file.exportConst('STYLES', '`\n' + css.replace(/`/g, '\\`') + '`\n');
225
245
  }
226
246
  function emitTypes(file, component) {
227
247
  var _a;
@@ -229,33 +249,6 @@ function emitTypes(file, component) {
229
249
  (_a = component.types) === null || _a === void 0 ? void 0 : _a.forEach(function (t) { return file.src.emit(t, '\n'); });
230
250
  }
231
251
  }
232
- function emitStateMethodsAndRewriteBindings(file, component, metadata) {
233
- var _a;
234
- var lexicalArgs = getLexicalScopeVars(component);
235
- var state = emitStateMethods(file, component.state, lexicalArgs);
236
- var methodMap = getStateMethodsAndGetters(component.state);
237
- rewriteCodeExpr(component, methodMap, lexicalArgs, (_a = metadata.qwik) === null || _a === void 0 ? void 0 : _a.replace);
238
- return state;
239
- }
240
- var checkIsObjectWithCodeBlock = function (obj) {
241
- return typeof obj == 'object' && (obj === null || obj === void 0 ? void 0 : obj.code) && typeof obj.code === 'string';
242
- };
243
- function rewriteCodeExpr(component, methodMap, lexicalArgs, replace) {
244
- if (replace === void 0) { replace = {}; }
245
- (0, traverse_1.default)(component).forEach(function (item) {
246
- if (!checkIsObjectWithCodeBlock(item)) {
247
- return;
248
- }
249
- var code = (0, convert_method_to_function_1.convertMethodToFunction)(item.code, methodMap, lexicalArgs);
250
- Object.keys(replace).forEach(function (key) {
251
- code = code.replace(key, replace[key]);
252
- });
253
- item.code = code;
254
- });
255
- }
256
- function getLexicalScopeVars(component) {
257
- return __spreadArray(__spreadArray(['props', 'state'], Object.keys(component.refs), true), Object.keys(component.context.get), true);
258
- }
259
252
  function emitImports(file, component) {
260
253
  var _a;
261
254
  // <SELF> is used for self-referencing within the file.
@@ -267,58 +260,8 @@ function emitImports(file, component) {
267
260
  });
268
261
  });
269
262
  }
270
- function emitStateMethods(file, componentState, lexicalArgs) {
271
- var stateValues = {};
272
- var stateInit = [stateValues];
273
- var methodMap = getStateMethodsAndGetters(componentState);
274
- for (var key in componentState) {
275
- var stateValue = componentState[key];
276
- switch (stateValue === null || stateValue === void 0 ? void 0 : stateValue.type) {
277
- case 'method':
278
- case 'getter':
279
- case 'function':
280
- var code = stateValue.code;
281
- var prefixIdx = 0;
282
- if (stateValue.type === 'getter') {
283
- prefixIdx += 'get '.length;
284
- }
285
- else if (stateValue.type === 'function') {
286
- prefixIdx += 'function '.length;
287
- }
288
- code = code.substring(prefixIdx);
289
- code = (0, convert_method_to_function_1.convertMethodToFunction)(code, methodMap, lexicalArgs).replace('(', "(".concat(lexicalArgs.join(','), ","));
290
- var functionName = code.split(/\(/)[0];
291
- if (stateValue.type === 'getter') {
292
- stateInit.push("state.".concat(key, "=").concat(functionName, "(").concat(lexicalArgs.join(','), ")"));
293
- }
294
- if (!file.options.isTypeScript) {
295
- // Erase type information
296
- code = convertTypeScriptToJS(code);
297
- }
298
- file.exportConst(functionName, 'function ' + code, true);
299
- continue;
300
- case 'property':
301
- stateValues[key] = stateValue.code;
302
- continue;
303
- }
304
- }
305
- return stateInit;
306
- }
307
- function convertTypeScriptToJS(code) {
308
- return (0, babel_transform_1.babelTransformExpression)(code, {});
309
- }
310
263
  function extractGetterBody(code) {
311
264
  var start = code.indexOf('{');
312
265
  var end = code.lastIndexOf('}');
313
266
  return code.substring(start + 1, end).trim();
314
267
  }
315
- function getStateMethodsAndGetters(state) {
316
- var methodMap = {};
317
- Object.keys(state).forEach(function (key) {
318
- var stateVal = state[key];
319
- if ((stateVal === null || stateVal === void 0 ? void 0 : stateVal.type) === 'getter' || (stateVal === null || stateVal === void 0 ? void 0 : stateVal.type) === 'method') {
320
- methodMap[key] = stateVal.type;
321
- }
322
- });
323
- return methodMap;
324
- }
@@ -22,11 +22,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
23
  exports.addCommonStyles = exports.renderUseLexicalScope = exports.addComponent = exports.createFileSet = void 0;
24
24
  var compile_away_builder_components_1 = require("../../plugins/compile-away-builder-components");
25
- var handlers_1 = require("./handlers");
25
+ var handlers_1 = require("./helpers/handlers");
26
26
  var jsx_1 = require("./jsx");
27
27
  var src_generator_1 = require("./src-generator");
28
- var stable_serialize_1 = require("./stable-serialize");
29
- var styles_1 = require("./styles");
28
+ var stable_serialize_1 = require("./helpers/stable-serialize");
29
+ var styles_1 = require("./helpers/styles");
30
30
  function createFileSet(options) {
31
31
  if (options === void 0) { options = {}; }
32
32
  var opts = __assign({ qwikLib: '@builder.io/qwik', qrlPrefix: './', output: 'ts', minify: false, jsx: true }, options);
@@ -109,9 +109,15 @@ function addComponent(fileSet, component, opts) {
109
109
  exports.addComponent = addComponent;
110
110
  function generateStyles(fromFile, dstFile, symbol, scoped) {
111
111
  return function () {
112
+ if (this.file.options.isPretty) {
113
+ this.emit('\n\n');
114
+ }
112
115
  this.emit((0, src_generator_1.invoke)(fromFile.import(fromFile.qwikModule, scoped ? 'useStylesScopedQrl' : 'useStylesQrl'), [
113
116
  generateQrl(fromFile, dstFile, symbol),
114
117
  ]), ';');
118
+ if (this.file.options.isPretty) {
119
+ this.emit('\n\n');
120
+ }
115
121
  };
116
122
  }
117
123
  function addBuilderBlockClass(children) {
@@ -1,4 +1,4 @@
1
- import { MitosisComponent } from '../../types/mitosis-component';
1
+ import { MitosisComponent } from '../../../types/mitosis-component';
2
2
  /**
3
3
  * Find event handlers that explicitly call .preventDefault() and
4
4
  * add preventdefault:event
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.addPreventDefault = void 0;
7
7
  var traverse_1 = __importDefault(require("traverse"));
8
- var is_mitosis_node_1 = require("../../helpers/is-mitosis-node");
8
+ var is_mitosis_node_1 = require("../../../helpers/is-mitosis-node");
9
9
  /**
10
10
  * Find event handlers that explicitly call .preventDefault() and
11
11
  * add preventdefault:event
@@ -0,0 +1,2 @@
1
+ import type { MethodMap } from './state';
2
+ export declare function convertMethodToFunction(code: string, properties: MethodMap, lexicalArgs: string[]): string;
@@ -0,0 +1,3 @@
1
+ import { MitosisNode } from '../../../types/mitosis-node';
2
+ import { File } from '../src-generator';
3
+ export declare function renderHandlers(file: File, componentName: string, children: MitosisNode[]): Map<string, string>;
@@ -9,9 +9,9 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
9
  return to.concat(ar || Array.prototype.slice.call(from));
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.renderHandlers = exports.extractJSBlock = void 0;
13
- var component_1 = require("./component");
14
- var src_generator_1 = require("./src-generator");
12
+ exports.renderHandlers = void 0;
13
+ var component_1 = require("../component");
14
+ var src_generator_1 = require("../src-generator");
15
15
  var IIF_START = '(() => {';
16
16
  var IIF_END = '})()';
17
17
  function extractJSBlock(binding) {
@@ -28,7 +28,6 @@ function extractJSBlock(binding) {
28
28
  }
29
29
  return null;
30
30
  }
31
- exports.extractJSBlock = extractJSBlock;
32
31
  function renderHandlers(file, componentName, children) {
33
32
  var id = 0;
34
33
  var map = new Map();
@@ -0,0 +1,27 @@
1
+ import { MitosisComponent } from '../../../types/mitosis-component';
2
+ import { File } from '../src-generator';
3
+ /**
4
+ * Stores getters and initialization map.
5
+ */
6
+ export declare type StateInit = [
7
+ StateValues,
8
+ /**
9
+ * Set of state initializers.
10
+ */
11
+ ...string[]
12
+ ];
13
+ export declare type PropertyName = string;
14
+ export declare type StateValue = string;
15
+ /**
16
+ * Map of getters that need to be rewritten to function invocations.
17
+ */
18
+ export declare type StateValues = Record<PropertyName, StateValue>;
19
+ /**
20
+ * @param file
21
+ * @param stateInit
22
+ */
23
+ export declare function emitUseStore(file: File, stateInit: StateInit): void;
24
+ export declare function emitStateMethodsAndRewriteBindings(file: File, component: MitosisComponent, metadata: Record<string, any>): StateInit;
25
+ export declare function getLexicalScopeVars(component: MitosisComponent): string[];
26
+ export declare type MethodMap = Record<string, 'method' | 'getter'>;
27
+ export declare function getStateMethodsAndGetters(state: MitosisComponent['state']): MethodMap;
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getStateMethodsAndGetters = exports.getLexicalScopeVars = exports.emitStateMethodsAndRewriteBindings = exports.emitUseStore = void 0;
16
+ var traverse_1 = __importDefault(require("traverse"));
17
+ var convert_method_to_function_1 = require("./convert-method-to-function");
18
+ var stable_inject_1 = require("./stable-inject");
19
+ var transform_code_1 = require("./transform-code");
20
+ /**
21
+ * @param file
22
+ * @param stateInit
23
+ */
24
+ function emitUseStore(file, stateInit) {
25
+ var state = stateInit[0];
26
+ var hasState = state && Object.keys(state).length > 0;
27
+ if (hasState) {
28
+ file.src.emit('const state=', file.import(file.qwikModule, 'useStore').localName);
29
+ if (file.options.isTypeScript) {
30
+ file.src.emit('<any>');
31
+ }
32
+ file.src.emit("(".concat((0, stable_inject_1.stableInject)(state), ");"));
33
+ }
34
+ else {
35
+ // TODO hack for now so that `state` variable is defined, even though it is never read.
36
+ file.src.emit("const state".concat(file.options.isTypeScript ? ': any' : '', " = {};"));
37
+ }
38
+ }
39
+ exports.emitUseStore = emitUseStore;
40
+ function emitStateMethods(file, componentState, lexicalArgs) {
41
+ var stateValues = {};
42
+ var stateInit = [stateValues];
43
+ var methodMap = getStateMethodsAndGetters(componentState);
44
+ for (var key in componentState) {
45
+ var stateValue = componentState[key];
46
+ console.log(componentState);
47
+ switch (stateValue === null || stateValue === void 0 ? void 0 : stateValue.type) {
48
+ case 'method':
49
+ case 'getter':
50
+ case 'function':
51
+ var code = stateValue.code;
52
+ var prefixIdx = 0;
53
+ if (stateValue.type === 'getter') {
54
+ prefixIdx += 'get '.length;
55
+ }
56
+ else if (stateValue.type === 'function') {
57
+ prefixIdx += 'function '.length;
58
+ }
59
+ code = code.substring(prefixIdx);
60
+ code = (0, convert_method_to_function_1.convertMethodToFunction)(code, methodMap, lexicalArgs).replace('(', "(".concat(lexicalArgs.join(','), ","));
61
+ var functionName = code.split(/\(/)[0];
62
+ if (stateValue.type === 'getter') {
63
+ stateInit.push("state.".concat(key, "=").concat(functionName, "(").concat(lexicalArgs.join(','), ")"));
64
+ }
65
+ if (!file.options.isTypeScript) {
66
+ // Erase type information
67
+ code = (0, transform_code_1.convertTypeScriptToJS)(code);
68
+ }
69
+ file.exportConst(functionName, 'function ' + code, true);
70
+ console.log(functionName, 'function ' + code);
71
+ continue;
72
+ case 'property':
73
+ stateValues[key] = stateValue.code;
74
+ continue;
75
+ }
76
+ }
77
+ return stateInit;
78
+ }
79
+ function emitStateMethodsAndRewriteBindings(file, component, metadata) {
80
+ var _a;
81
+ var lexicalArgs = getLexicalScopeVars(component);
82
+ var state = emitStateMethods(file, component.state, lexicalArgs);
83
+ var methodMap = getStateMethodsAndGetters(component.state);
84
+ rewriteCodeExpr(component, methodMap, lexicalArgs, (_a = metadata.qwik) === null || _a === void 0 ? void 0 : _a.replace);
85
+ return state;
86
+ }
87
+ exports.emitStateMethodsAndRewriteBindings = emitStateMethodsAndRewriteBindings;
88
+ var checkIsObjectWithCodeBlock = function (obj) {
89
+ return typeof obj == 'object' && (obj === null || obj === void 0 ? void 0 : obj.code) && typeof obj.code === 'string';
90
+ };
91
+ function getLexicalScopeVars(component) {
92
+ return __spreadArray(__spreadArray(['props', 'state'], Object.keys(component.refs), true), Object.keys(component.context.get), true);
93
+ }
94
+ exports.getLexicalScopeVars = getLexicalScopeVars;
95
+ function rewriteCodeExpr(component, methodMap, lexicalArgs, replace) {
96
+ if (replace === void 0) { replace = {}; }
97
+ (0, traverse_1.default)(component).forEach(function (item) {
98
+ if (!checkIsObjectWithCodeBlock(item)) {
99
+ return;
100
+ }
101
+ var code = (0, convert_method_to_function_1.convertMethodToFunction)(item.code, methodMap, lexicalArgs);
102
+ Object.keys(replace).forEach(function (key) {
103
+ code = code.replace(key, replace[key]);
104
+ });
105
+ item.code = code;
106
+ });
107
+ }
108
+ function getStateMethodsAndGetters(state) {
109
+ var methodMap = {};
110
+ Object.keys(state).forEach(function (key) {
111
+ var stateVal = state[key];
112
+ if ((stateVal === null || stateVal === void 0 ? void 0 : stateVal.type) === 'getter' || (stateVal === null || stateVal === void 0 ? void 0 : stateVal.type) === 'method') {
113
+ methodMap[key] = stateVal.type;
114
+ }
115
+ });
116
+ return methodMap;
117
+ }
118
+ exports.getStateMethodsAndGetters = getStateMethodsAndGetters;
@@ -1,5 +1,5 @@
1
- import { MitosisNode } from '../..';
2
- import { SrcBuilder } from './src-generator';
1
+ import { MitosisNode } from '../../..';
2
+ import { SrcBuilder } from '../src-generator';
3
3
  export declare type CssStyles = {
4
4
  CLASS_NAME: string;
5
5
  } & Record<string, string>;
@@ -25,7 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.renderStyles = exports.collectStyles = void 0;
27
27
  var json5_1 = __importDefault(require("json5"));
28
- var dash_case_1 = require("../../helpers/dash-case");
28
+ var dash_case_1 = require("../../../helpers/dash-case");
29
29
  function collectStyles(children, styleMap) {
30
30
  var _a;
31
31
  var nodes = __spreadArray([], children, true);
@@ -0,0 +1 @@
1
+ export declare function convertTypeScriptToJS(code: string): string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertTypeScriptToJS = void 0;
4
+ var babel_transform_1 = require("../../../helpers/babel-transform");
5
+ function convertTypeScriptToJS(code) {
6
+ return (0, babel_transform_1.babelTransformExpression)(code, {});
7
+ }
8
+ exports.convertTypeScriptToJS = convertTypeScriptToJS;