@tolgee/cli 2.0.3 → 2.1.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 (91) hide show
  1. package/dist/cli.js +15 -23
  2. package/dist/commands/extract/check.js +2 -6
  3. package/dist/commands/extract/print.js +2 -6
  4. package/dist/commands/pull.js +2 -4
  5. package/dist/commands/sync/compare.js +2 -6
  6. package/dist/commands/sync/sync.js +1 -5
  7. package/dist/commands/tag.js +1 -5
  8. package/dist/config/tolgeerc.js +4 -6
  9. package/dist/extractor/extractor.js +40 -66
  10. package/dist/extractor/parser/extractComment.js +78 -0
  11. package/dist/extractor/parser/generalMapper.js +82 -0
  12. package/dist/extractor/parser/generateReport.js +161 -0
  13. package/dist/extractor/parser/iterator.js +37 -0
  14. package/dist/extractor/parser/mergerMachine.js +66 -0
  15. package/dist/extractor/parser/nodeUtils.js +21 -0
  16. package/dist/extractor/parser/parser.js +129 -0
  17. package/dist/extractor/parser/rules/tComponentGeneral.js +45 -0
  18. package/dist/extractor/parser/rules/tFunctionGeneral.js +41 -0
  19. package/dist/extractor/parser/rules/tNsSourceGeneral.js +36 -0
  20. package/dist/extractor/parser/tokenMergers/closingTagMerger.js +27 -0
  21. package/dist/extractor/parser/tokenMergers/commentsMerger.js +36 -0
  22. package/dist/extractor/parser/tokenMergers/stringMerger.js +50 -0
  23. package/dist/extractor/parser/tokenMergers/templateStringMerger.js +55 -0
  24. package/dist/extractor/parser/tokenMergers/typesAsMergerer.js +40 -0
  25. package/dist/extractor/parser/tokenMergers/typesCastMerger.js +28 -0
  26. package/dist/extractor/parser/tree/getTranslateProps.js +54 -0
  27. package/dist/extractor/parser/tree/getValue.js +17 -0
  28. package/dist/extractor/parser/tree/parseGeneral.js +51 -0
  29. package/dist/extractor/parser/tree/parseList.js +33 -0
  30. package/dist/extractor/parser/tree/parseObject.js +130 -0
  31. package/dist/extractor/parser/tree/parseProps.js +56 -0
  32. package/dist/extractor/parser/tree/parseTag.js +26 -0
  33. package/dist/extractor/parser/types.js +1 -0
  34. package/dist/extractor/parserReact/ParserReact.js +30 -0
  35. package/dist/extractor/parserReact/jsxMapper.js +24 -0
  36. package/dist/extractor/parserReact/rules/createElement.js +62 -0
  37. package/dist/extractor/parserReact/rules/tComponent.js +9 -0
  38. package/dist/extractor/parserReact/rules/tFunction.js +7 -0
  39. package/dist/extractor/parserReact/rules/useTranslate.js +7 -0
  40. package/dist/extractor/parserReact/tokenMergers/createElementMerger.js +35 -0
  41. package/dist/extractor/parserReact/tokenMergers/tComponentMerger.js +20 -0
  42. package/dist/extractor/parserReact/tokenMergers/tFunctionMerger.js +23 -0
  43. package/dist/extractor/parserReact/tokenMergers/useTranslateMerger.js +20 -0
  44. package/dist/extractor/parserSvelte/ParserSvelte.js +32 -0
  45. package/dist/extractor/parserSvelte/contextConstants.js +1 -0
  46. package/dist/extractor/parserSvelte/rules/scriptTag.js +26 -0
  47. package/dist/extractor/parserSvelte/rules/tComponent.js +9 -0
  48. package/dist/extractor/parserSvelte/rules/tFunction.js +7 -0
  49. package/dist/extractor/parserSvelte/rules/useTranslate.js +7 -0
  50. package/dist/extractor/parserSvelte/svelteMapper.js +39 -0
  51. package/dist/extractor/parserSvelte/svelteTreeTransform.js +38 -0
  52. package/dist/extractor/parserSvelte/tokenMergers/getTranslateMerger.js +20 -0
  53. package/dist/extractor/parserSvelte/tokenMergers/scriptTagMerger.js +20 -0
  54. package/dist/extractor/parserSvelte/tokenMergers/tComponentMerger.js +20 -0
  55. package/dist/extractor/parserSvelte/tokenMergers/tFunctionMerger.js +29 -0
  56. package/dist/extractor/parserVue/ParserVue.js +45 -0
  57. package/dist/extractor/parserVue/contextConstants.js +3 -0
  58. package/dist/extractor/parserVue/rules/exportDefaultObject.js +14 -0
  59. package/dist/extractor/parserVue/rules/globalTFunction.js +7 -0
  60. package/dist/extractor/parserVue/rules/scriptTag.js +31 -0
  61. package/dist/extractor/parserVue/rules/tComponent.js +9 -0
  62. package/dist/extractor/parserVue/rules/tFunction.js +7 -0
  63. package/dist/extractor/parserVue/rules/useTranslate.js +7 -0
  64. package/dist/extractor/parserVue/tokenMergers/exportDefaultObjectMerger.js +25 -0
  65. package/dist/extractor/parserVue/tokenMergers/globalTFunctionMerger.js +36 -0
  66. package/dist/extractor/parserVue/tokenMergers/scriptTagMerger.js +20 -0
  67. package/dist/extractor/parserVue/tokenMergers/tComponentMerger.js +20 -0
  68. package/dist/extractor/parserVue/tokenMergers/tFunctionMerger.js +37 -0
  69. package/dist/extractor/parserVue/tokenMergers/useTranslateMerger.js +20 -0
  70. package/dist/extractor/parserVue/vueMapper.js +51 -0
  71. package/dist/extractor/parserVue/vueTreeTransform.js +109 -0
  72. package/dist/extractor/runner.js +52 -4
  73. package/dist/extractor/visualizers/printTokens.js +7 -0
  74. package/dist/extractor/visualizers/tokensToString.js +28 -0
  75. package/dist/extractor/visualizers/visualizeRules.js +40 -0
  76. package/dist/extractor/warnings.js +4 -0
  77. package/dist/extractor/worker.js +10 -7
  78. package/dist/options.js +5 -0
  79. package/extractor.d.ts +8 -1
  80. package/package.json +2 -4
  81. package/schema.json +18 -6
  82. package/dist/client/internal/requester.js +0 -130
  83. package/dist/extractor/machines/comments.js +0 -78
  84. package/dist/extractor/machines/react.js +0 -705
  85. package/dist/extractor/machines/shared/comments.js +0 -79
  86. package/dist/extractor/machines/shared/properties.js +0 -380
  87. package/dist/extractor/machines/shared/translateCall.js +0 -141
  88. package/dist/extractor/machines/svelte.js +0 -429
  89. package/dist/extractor/machines/vue/decoder.js +0 -194
  90. package/dist/extractor/machines/vue/extract.js +0 -491
  91. package/dist/extractor/processors/vueSfc.js +0 -55
@@ -1,491 +0,0 @@
1
- import { createMachine, assign, send, forwardTo } from 'xstate';
2
- import translateCallMachine from '../shared/translateCall.js';
3
- import propertiesMachine from '../shared/properties.js';
4
- import commentsService from '../shared/comments.js';
5
- const VOID_KEY = { keyName: '', line: -1 };
6
- export default createMachine({
7
- predictableActionArguments: true,
8
- id: 'vueExtractor',
9
- type: 'parallel',
10
- context: {
11
- line: 0,
12
- key: VOID_KEY,
13
- useTranslate: null,
14
- ignore: null,
15
- currentState: 0 /* State.EXTERNAL */,
16
- keys: [],
17
- warnings: [],
18
- },
19
- states: {
20
- comments: {
21
- invoke: {
22
- id: 'comments',
23
- src: () => commentsService,
24
- },
25
- on: {
26
- // Service messages
27
- MAGIC_COMMENT: [
28
- {
29
- actions: 'ignoreNextLine',
30
- cond: (_ctx, evt) => evt.kind === 'ignore',
31
- },
32
- {
33
- actions: 'pushImmediateKey',
34
- cond: (_ctx, evt) => evt.kind === 'key',
35
- },
36
- ],
37
- WARNING: {
38
- actions: 'pushWarning',
39
- },
40
- // Code messages
41
- 'comment.line.double-slash.ts': {
42
- actions: send((_ctx, evt) => ({
43
- type: 'COMMENT',
44
- data: evt.token,
45
- line: evt.line,
46
- }), { to: 'comments' }),
47
- },
48
- 'comment.block.ts': {
49
- actions: send((_ctx, evt) => ({
50
- type: 'COMMENT',
51
- data: evt.token,
52
- line: evt.line,
53
- }), { to: 'comments' }),
54
- },
55
- 'comment.block.html': {
56
- actions: send((_ctx, evt) => ({
57
- type: 'COMMENT',
58
- data: evt.token,
59
- line: evt.line,
60
- }), { to: 'comments' }),
61
- },
62
- newline: {
63
- actions: 'warnUnusedIgnore',
64
- cond: (ctx, evt) => ctx.ignore?.type === 'ignore' && ctx.ignore.line === evt.line,
65
- },
66
- },
67
- },
68
- useTranslate: {
69
- initial: 'idle',
70
- states: {
71
- idle: {
72
- on: {
73
- 'entity.name.function.ts': {
74
- target: 'func',
75
- actions: 'storeLine',
76
- cond: (ctx, evt) => (ctx.currentState === 1 /* State.SETUP */ ||
77
- ctx.currentState === 0 /* State.EXTERNAL */) &&
78
- evt.token === 'useTranslate',
79
- },
80
- },
81
- },
82
- func: {
83
- on: {
84
- '*': 'idle',
85
- newline: undefined,
86
- 'meta.block.ts': undefined,
87
- 'meta.var.expr.ts': undefined,
88
- 'meta.brace.round.ts': [
89
- {
90
- target: 'idle',
91
- actions: 'consumeIgnoredLine',
92
- cond: (ctx, evt) => ctx.ignore?.line === ctx.line &&
93
- ctx.ignore.type === 'ignore' &&
94
- evt.token === '(',
95
- },
96
- {
97
- target: 'call',
98
- cond: (_ctx, evt) => evt.token === '(',
99
- },
100
- ],
101
- },
102
- },
103
- call: {
104
- on: {
105
- 'punctuation.definition.string.begin.ts': 'namespace',
106
- 'punctuation.definition.string.template.begin.ts': 'namespace',
107
- 'variable.other.readwrite.ts': {
108
- target: 'idle',
109
- actions: ['storeUseTranslate', 'markUseTranslateAsDynamic'],
110
- },
111
- 'meta.brace.round.ts': {
112
- target: 'idle',
113
- cond: (_ctx, evt) => evt.token === ')',
114
- actions: 'storeUseTranslate',
115
- },
116
- },
117
- },
118
- namespace: {
119
- on: {
120
- '*': {
121
- target: 'namespace_end',
122
- actions: 'storeNamespacedUseTranslate',
123
- },
124
- },
125
- },
126
- namespace_end: {
127
- on: {
128
- 'punctuation.separator.comma.ts': 'idle',
129
- 'meta.brace.round.ts': 'idle',
130
- 'punctuation.definition.template-expression.begin.ts': {
131
- target: 'idle',
132
- actions: 'markUseTranslateAsDynamic',
133
- },
134
- 'keyword.operator.arithmetic.ts': {
135
- target: 'idle',
136
- actions: 'markUseTranslateAsDynamic',
137
- },
138
- },
139
- },
140
- done: { type: 'final' },
141
- },
142
- },
143
- t: {
144
- initial: 'idle',
145
- states: {
146
- idle: {
147
- on: {
148
- 'variable.other.object.ts': {
149
- target: 'tRef',
150
- actions: 'storeLine',
151
- cond: (ctx, evt) => ctx.currentState !== 2 /* State.SCRIPT */ &&
152
- ctx.currentState !== 3 /* State.TEMPLATE */ &&
153
- ctx.useTranslate !== null &&
154
- evt.token === 't',
155
- },
156
- 'entity.name.function.ts': [
157
- {
158
- target: 'func',
159
- actions: 'storeLine',
160
- cond: (ctx, evt) => ctx.currentState === 3 /* State.TEMPLATE */ &&
161
- ctx.useTranslate !== null &&
162
- evt.token === 't',
163
- },
164
- {
165
- target: 'func',
166
- actions: 'storeLine',
167
- cond: (ctx, evt) => ctx.currentState === 3 /* State.TEMPLATE */ && evt.token === '$t',
168
- },
169
- ],
170
- 'variable.language.this.ts': {
171
- cond: (ctx) => ctx.currentState !== 3 /* State.TEMPLATE */ &&
172
- ctx.currentState !== 0 /* State.EXTERNAL */,
173
- actions: 'storeLine',
174
- target: 'this',
175
- },
176
- },
177
- },
178
- this: {
179
- on: {
180
- 'meta.function-call.ts': undefined,
181
- 'punctuation.accessor.ts': 'thisDot',
182
- '*': 'idle',
183
- },
184
- },
185
- thisDot: {
186
- on: {
187
- 'meta.function-call.ts': undefined,
188
- 'entity.name.function.ts': {
189
- cond: (_, evt) => evt.token === '$t',
190
- target: 'func',
191
- },
192
- },
193
- },
194
- tRef: {
195
- on: {
196
- 'meta.function-call.ts': undefined,
197
- 'punctuation.accessor.ts': 'tRefDot',
198
- '*': 'idle',
199
- },
200
- },
201
- tRefDot: {
202
- on: {
203
- 'meta.function-call.ts': undefined,
204
- 'entity.name.function.ts': {
205
- cond: (_, evt) => evt.token === 'value',
206
- target: 'func',
207
- },
208
- },
209
- },
210
- func: {
211
- on: {
212
- '*': 'idle',
213
- newline: undefined,
214
- 'source.ts': undefined,
215
- 'source.ts.embedded.html.vue': undefined,
216
- 'meta.brace.round.ts': [
217
- {
218
- target: 'idle',
219
- actions: 'consumeIgnoredLine',
220
- cond: (ctx, evt) => ctx.ignore?.line === ctx.line && evt.token === '(',
221
- },
222
- {
223
- target: 'call',
224
- cond: (_ctx, evt) => evt.token === '(',
225
- },
226
- ],
227
- },
228
- },
229
- call: {
230
- invoke: {
231
- id: 'tCall',
232
- src: translateCallMachine,
233
- onDone: [
234
- {
235
- target: 'idle',
236
- actions: 'dynamicKeyName',
237
- cond: (_, evt) => evt.data.keyName === false,
238
- },
239
- {
240
- target: 'idle',
241
- actions: 'dynamicNamespace',
242
- cond: (_, evt) => evt.data.namespace === false,
243
- },
244
- {
245
- target: 'idle',
246
- actions: 'dynamicOptions',
247
- cond: (_, evt) => evt.data.dynamicOptions,
248
- },
249
- {
250
- target: 'idle',
251
- cond: (_, evt) => !evt.data.keyName,
252
- },
253
- {
254
- target: 'idle',
255
- actions: 'consumeTranslateCall',
256
- },
257
- ],
258
- },
259
- on: {
260
- '*': {
261
- actions: forwardTo('tCall'),
262
- },
263
- },
264
- },
265
- },
266
- },
267
- component: {
268
- initial: 'idle',
269
- states: {
270
- idle: {
271
- on: {
272
- 'punctuation.definition.tag.begin.html': {
273
- target: 'tag',
274
- actions: 'storeLine',
275
- },
276
- },
277
- },
278
- tag: {
279
- on: {
280
- '*': 'idle',
281
- newline: undefined,
282
- 'text.html.derivative': undefined,
283
- 'entity.name.tag.T.html.vue': [
284
- {
285
- target: 'idle',
286
- actions: 'consumeIgnoredLine',
287
- cond: (ctx) => ctx.ignore?.line === ctx.line,
288
- },
289
- {
290
- target: 'props',
291
- },
292
- ],
293
- },
294
- },
295
- props: {
296
- invoke: {
297
- id: 'propertiesMachine',
298
- src: propertiesMachine,
299
- onDone: [
300
- {
301
- target: 'idle',
302
- actions: 'emitWarningFromParameters',
303
- cond: 'isPropertiesDataDynamic',
304
- },
305
- {
306
- target: 'idle',
307
- actions: ['consumeParameters', 'pushKey'],
308
- cond: (ctx, evt) => evt.data.lastEvent.token !== '/>' &&
309
- ((!ctx.key.keyName && !evt.data.keyName) ||
310
- (!ctx.key.defaultValue && !evt.data.defaultValue)),
311
- },
312
- {
313
- target: 'idle',
314
- actions: ['consumeParameters', 'pushKey'],
315
- },
316
- ],
317
- },
318
- on: {
319
- '*': {
320
- actions: forwardTo('propertiesMachine'),
321
- },
322
- },
323
- },
324
- },
325
- },
326
- },
327
- on: {
328
- SETUP: { actions: 'markAsInSetup' },
329
- SCRIPT: { actions: 'markAsInScript' },
330
- TEMPLATE: { actions: 'markAsInTemplate' },
331
- },
332
- }, {
333
- guards: {
334
- isPropertiesDataDynamic: (_ctx, evt) => evt.data.keyName === false || evt.data.namespace === false,
335
- },
336
- actions: {
337
- storeLine: assign({
338
- line: (_ctx, evt) => evt.line,
339
- }),
340
- ignoreNextLine: assign({
341
- ignore: (_ctx, evt) => ({ type: 'ignore', line: evt.line + 1 }),
342
- }),
343
- consumeIgnoredLine: assign({
344
- ignore: (_ctx, _evt) => null,
345
- }),
346
- warnUnusedIgnore: assign({
347
- warnings: (ctx, evt) => [
348
- ...ctx.warnings,
349
- { warning: 'W_UNUSED_IGNORE', line: evt.line - 1 },
350
- ],
351
- }),
352
- storeUseTranslate: assign({
353
- useTranslate: (_ctx, _evt) => '',
354
- }),
355
- storeNamespacedUseTranslate: assign({
356
- useTranslate: (_ctx, evt) => evt.token,
357
- }),
358
- markUseTranslateAsDynamic: assign({
359
- useTranslate: (_ctx, _evt) => false,
360
- warnings: (ctx, _evt) => [
361
- ...ctx.warnings,
362
- { warning: 'W_DYNAMIC_NAMESPACE', line: ctx.line },
363
- ],
364
- }),
365
- consumeTranslateCall: assign({
366
- warnings: (ctx, evt) => {
367
- if (!evt.data.namespace && ctx.useTranslate === false) {
368
- return [
369
- ...ctx.warnings,
370
- { warning: 'W_UNRESOLVABLE_NAMESPACE', line: ctx.line },
371
- ];
372
- }
373
- if (evt.data.defaultValue === false) {
374
- return [
375
- ...ctx.warnings,
376
- { warning: 'W_DYNAMIC_DEFAULT_VALUE', line: ctx.line },
377
- ];
378
- }
379
- return ctx.warnings;
380
- },
381
- keys: (ctx, evt) => {
382
- const ns = evt.data.namespace === null ? ctx.useTranslate : evt.data.namespace;
383
- if (!evt.data.keyName || ns === false)
384
- return ctx.keys;
385
- return [
386
- ...ctx.keys,
387
- {
388
- keyName: evt.data.keyName,
389
- namespace: ns || undefined,
390
- defaultValue: evt.data.defaultValue || undefined,
391
- line: ctx.line,
392
- },
393
- ];
394
- },
395
- }),
396
- consumeParameters: assign({
397
- key: (ctx, evt) => ({
398
- keyName: ctx.key.keyName || evt.data.keyName,
399
- defaultValue: ctx.key.defaultValue || evt.data.defaultValue || undefined,
400
- namespace: evt.data.namespace ?? ctx.key.namespace,
401
- line: ctx.line,
402
- }),
403
- warnings: (ctx, evt) => {
404
- if (evt.data.defaultValue !== false)
405
- return ctx.warnings;
406
- return [
407
- ...ctx.warnings,
408
- { warning: 'W_DYNAMIC_DEFAULT_VALUE', line: ctx.line },
409
- ];
410
- },
411
- }),
412
- emitWarningFromParameters: assign({
413
- warnings: (ctx, evt) => [
414
- ...ctx.warnings,
415
- {
416
- warning: evt.data.keyName === false
417
- ? 'W_DYNAMIC_KEY'
418
- : 'W_DYNAMIC_NAMESPACE',
419
- line: ctx.line,
420
- },
421
- ],
422
- key: VOID_KEY,
423
- }),
424
- dynamicKeyName: assign({
425
- warnings: (ctx, _evt) => [
426
- ...ctx.warnings,
427
- { warning: 'W_DYNAMIC_KEY', line: ctx.line },
428
- ],
429
- key: VOID_KEY,
430
- }),
431
- dynamicNamespace: assign({
432
- warnings: (ctx, _evt) => [
433
- ...ctx.warnings,
434
- { warning: 'W_DYNAMIC_NAMESPACE', line: ctx.line },
435
- ],
436
- key: VOID_KEY,
437
- }),
438
- dynamicOptions: assign({
439
- key: VOID_KEY,
440
- warnings: (ctx, _evt) => [
441
- ...ctx.warnings,
442
- { warning: 'W_DYNAMIC_OPTIONS', line: ctx.line },
443
- ],
444
- }),
445
- pushKey: assign({
446
- keys: (ctx, _evt) => {
447
- if (!ctx.key.keyName || ctx.key.namespace === false)
448
- return ctx.keys;
449
- return [
450
- ...ctx.keys,
451
- {
452
- keyName: ctx.key.keyName.trim(),
453
- namespace: ctx.key.namespace === ''
454
- ? undefined
455
- : ctx.key.namespace?.trim(),
456
- defaultValue: ctx.key.defaultValue?.trim().replace(/\s+/g, ' '),
457
- line: ctx.line,
458
- },
459
- ];
460
- },
461
- key: (_ctx, _evt) => ({ keyName: '', line: 0 }),
462
- }),
463
- pushImmediateKey: assign({
464
- ignore: (_ctx, evt) => ({ type: 'key', line: evt.line + 1 }),
465
- keys: (ctx, evt) => [
466
- ...ctx.keys,
467
- {
468
- keyName: evt.keyName,
469
- namespace: evt.namespace,
470
- defaultValue: evt.defaultValue,
471
- line: evt.line,
472
- },
473
- ],
474
- }),
475
- pushWarning: assign({
476
- warnings: (ctx, evt) => [
477
- ...ctx.warnings,
478
- { warning: evt.kind, line: evt.line },
479
- ],
480
- }),
481
- markAsInSetup: assign({
482
- currentState: 1 /* State.SETUP */,
483
- }),
484
- markAsInScript: assign({
485
- currentState: 2 /* State.SCRIPT */,
486
- }),
487
- markAsInTemplate: assign({
488
- currentState: 3 /* State.TEMPLATE */,
489
- }),
490
- },
491
- });
@@ -1,55 +0,0 @@
1
- // Vue SFC are a bit of a nightmare. :D
2
- //
3
- // 1: We need to extract the script setup, script and template blocks.
4
- // 2: We need to resolve them if necessary (script src="" is allowed).
5
- // 3: We need to define uses of `useTranslate` in setup script.
6
- // 4: We finally can go through the template file.
7
- import { interpret } from 'xstate';
8
- import tokenizer from '../tokenizer.js';
9
- import vueSfcDecoderMachine from '../machines/vue/decoder.js';
10
- import vueSfcExtractorMachine from '../machines/vue/extract.js';
11
- function extractSfcTokens(tokens) {
12
- const machine = interpret(vueSfcDecoderMachine);
13
- machine.start();
14
- for (let i = 0; i < tokens.length; i++) {
15
- machine.send(tokens[i]);
16
- }
17
- const snapshot = machine.getSnapshot();
18
- return snapshot.context;
19
- }
20
- function sort(a, b) {
21
- if (a.line === b.line)
22
- return 0;
23
- if (a.line > b.line)
24
- return 1;
25
- return -1;
26
- }
27
- export default async function handleVueSfc(code, fileName) {
28
- const tokens = await tokenizer(code, fileName);
29
- const decoded = extractSfcTokens(tokens);
30
- const machine = interpret(vueSfcExtractorMachine);
31
- machine.start();
32
- machine.send({ type: 'SETUP' });
33
- for (let i = 0; i < decoded.setup.length; i++) {
34
- machine.send(decoded.setup[i]);
35
- }
36
- machine.send({ type: 'SCRIPT' });
37
- for (let i = 0; i < decoded.script.length; i++) {
38
- machine.send(decoded.script[i]);
39
- }
40
- machine.send({ type: 'TEMPLATE' });
41
- for (let i = 0; i < decoded.template.length; i++) {
42
- machine.send(decoded.template[i]);
43
- }
44
- const snapshot = machine.getSnapshot();
45
- const warnings = decoded.invalidSetup
46
- ? [
47
- ...snapshot.context.warnings,
48
- { warning: 'W_VUE_SETUP_IS_A_REFERENCE', line: decoded.invalidSetup },
49
- ]
50
- : snapshot.context.warnings;
51
- return {
52
- warnings: warnings.sort(sort),
53
- keys: snapshot.context.keys.sort(sort),
54
- };
55
- }