@nordcraft/search 1.0.43 → 1.0.44

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 (53) hide show
  1. package/dist/rules/actions/legacyActionRule.fix.js +140 -0
  2. package/dist/rules/actions/legacyActionRule.fix.js.map +1 -0
  3. package/dist/rules/actions/legacyActionRule.js +3 -144
  4. package/dist/rules/actions/legacyActionRule.js.map +1 -1
  5. package/dist/rules/actions/legacyActionRule.test.js +1 -0
  6. package/dist/rules/actions/legacyActionRule.test.js.map +1 -1
  7. package/dist/rules/actions/noReferenceProjectActionRule.js +33 -40
  8. package/dist/rules/actions/noReferenceProjectActionRule.js.map +1 -1
  9. package/dist/rules/apis/noReferenceApiRule.js +7 -2
  10. package/dist/rules/apis/noReferenceApiRule.js.map +1 -1
  11. package/dist/rules/apis/noReferenceApiRule.test.js +65 -1
  12. package/dist/rules/apis/noReferenceApiRule.test.js.map +1 -1
  13. package/dist/rules/attributes/noReferenceAttributeRule.js +5 -1
  14. package/dist/rules/attributes/noReferenceAttributeRule.js.map +1 -1
  15. package/dist/rules/attributes/noReferenceAttributeRule.test.js +33 -1
  16. package/dist/rules/attributes/noReferenceAttributeRule.test.js.map +1 -1
  17. package/dist/rules/components/noReferenceComponentRule.js +18 -28
  18. package/dist/rules/components/noReferenceComponentRule.js.map +1 -1
  19. package/dist/rules/events/noReferenceEventRule.js +6 -2
  20. package/dist/rules/events/noReferenceEventRule.js.map +1 -1
  21. package/dist/rules/events/noReferenceEventRule.test.js +57 -1
  22. package/dist/rules/events/noReferenceEventRule.test.js.map +1 -1
  23. package/dist/rules/formulas/legacyFormulaRule.fix.js +574 -0
  24. package/dist/rules/formulas/legacyFormulaRule.fix.js.map +1 -0
  25. package/dist/rules/formulas/legacyFormulaRule.js +5 -580
  26. package/dist/rules/formulas/legacyFormulaRule.js.map +1 -1
  27. package/dist/rules/formulas/noReferenceComponentFormulaRule.js +8 -1
  28. package/dist/rules/formulas/noReferenceComponentFormulaRule.js.map +1 -1
  29. package/dist/rules/formulas/noReferenceProjectFormulaRule.js +63 -72
  30. package/dist/rules/formulas/noReferenceProjectFormulaRule.js.map +1 -1
  31. package/dist/searchProject.js +36 -16
  32. package/dist/searchProject.js.map +1 -1
  33. package/dist/util/removeUnused.fix.js +3 -0
  34. package/dist/util/removeUnused.fix.js.map +1 -0
  35. package/package.json +2 -2
  36. package/src/rules/actions/legacyActionRule.fix.ts +157 -0
  37. package/src/rules/actions/legacyActionRule.test.ts +1 -0
  38. package/src/rules/actions/legacyActionRule.ts +3 -159
  39. package/src/rules/actions/noReferenceProjectActionRule.ts +39 -47
  40. package/src/rules/apis/noReferenceApiRule.test.ts +67 -1
  41. package/src/rules/apis/noReferenceApiRule.ts +9 -2
  42. package/src/rules/attributes/noReferenceAttributeRule.test.ts +35 -1
  43. package/src/rules/attributes/noReferenceAttributeRule.ts +7 -2
  44. package/src/rules/components/noReferenceComponentRule.ts +23 -34
  45. package/src/rules/events/noReferenceEventRule.test.ts +59 -1
  46. package/src/rules/events/noReferenceEventRule.ts +8 -3
  47. package/src/rules/formulas/legacyFormulaRule.fix.ts +661 -0
  48. package/src/rules/formulas/legacyFormulaRule.ts +9 -670
  49. package/src/rules/formulas/noReferenceComponentFormulaRule.ts +15 -3
  50. package/src/rules/formulas/noReferenceProjectFormulaRule.ts +70 -77
  51. package/src/searchProject.ts +42 -22
  52. package/src/types.d.ts +16 -8
  53. package/src/util/removeUnused.fix.ts +5 -0
@@ -1,20 +1,9 @@
1
- import type {
2
- AndOperation,
3
- ArrayOperation,
4
- FunctionOperation,
5
- OrOperation,
6
- SwitchOperation,
7
- } from '@nordcraft/core/dist/formula/formula'
1
+ import type { FunctionOperation } from '@nordcraft/core/dist/formula/formula'
8
2
  import { isToddleFormula } from '@nordcraft/core/dist/formula/formulaTypes'
9
- import { omitKeys, set } from '@nordcraft/core/dist/utils/collections'
10
3
  import { isDefined } from '@nordcraft/core/dist/utils/util'
11
4
  import type { ProjectFiles } from '@nordcraft/ssr/dist/ssr.types'
12
- import type { FormulaNode, NodeType, Rule } from '../../types'
13
- import {
14
- ARRAY_ARGUMENT_MAPPINGS,
15
- PREDICATE_ARGUMENT_MAPPINGS,
16
- renameArguments,
17
- } from '../../util/helpers'
5
+ import type { Rule } from '../../types'
6
+ import { replaceLegacyFormula } from './legacyFormulaRule.fix'
18
7
 
19
8
  export const legacyFormulaRule: Rule<{
20
9
  name: string
@@ -23,7 +12,11 @@ export const legacyFormulaRule: Rule<{
23
12
  level: 'warning',
24
13
  category: 'Deprecation',
25
14
  visit: (report, data) => {
26
- if (!isIssue(data)) {
15
+ if (
16
+ data.nodeType !== 'formula' ||
17
+ data.value.type !== 'function' ||
18
+ !isLegacyFormula(data.value, data.files)
19
+ ) {
27
20
  return
28
21
  }
29
22
  report(
@@ -36,664 +29,10 @@ export const legacyFormulaRule: Rule<{
36
29
  )
37
30
  },
38
31
  fixes: {
39
- 'replace-legacy-formula': (data) => {
40
- if (!isIssue(data)) {
41
- return
42
- }
43
- switch (data.value.name) {
44
- // Known legacy formulas first
45
- case 'AND': {
46
- const { name, ...legacyAndFormula } = data.value
47
- const andFormula: AndOperation = {
48
- ...legacyAndFormula,
49
- type: 'and',
50
- arguments: legacyAndFormula.arguments.map((a) => {
51
- const { name, ...argument } = a
52
- return argument
53
- }),
54
- }
55
- return set(data.files, data.path, andFormula)
56
- }
57
- case 'CONCAT': {
58
- const newConcatFormula: FunctionOperation = {
59
- ...data.value,
60
- name: '@toddle/concatenate',
61
- display_name: 'Concatenate',
62
- }
63
- return set(data.files, data.path, newConcatFormula)
64
- }
65
- case 'DEFAULT': {
66
- const newDefaultFormula: FunctionOperation = {
67
- ...data.value,
68
- name: '@toddle/defaultTo',
69
- // The old DEFAULT formula did not support variableArguments
70
- variableArguments: true,
71
- display_name: 'Default to',
72
- }
73
- return set(data.files, data.path, newDefaultFormula)
74
- }
75
- case 'DELETE': {
76
- const newDeleteFormula: FunctionOperation = {
77
- ...data.value,
78
- name: '@toddle/deleteKey',
79
- display_name: 'Delete',
80
- }
81
- return set(data.files, data.path, newDeleteFormula)
82
- }
83
- case 'DROP_LAST': {
84
- const newDropLastFormula: FunctionOperation = {
85
- ...data.value,
86
- name: '@toddle/dropLast',
87
- display_name: 'Drop Last',
88
- arguments: renameArguments(
89
- ARRAY_ARGUMENT_MAPPINGS,
90
- data.value.arguments,
91
- ),
92
- }
93
- return set(data.files, data.path, newDropLastFormula)
94
- }
95
- case 'EQ': {
96
- const newEqualsFormula: FunctionOperation = {
97
- ...data.value,
98
- name: '@toddle/equals',
99
- display_name: 'Equals',
100
- }
101
- return set(data.files, data.path, newEqualsFormula)
102
- }
103
- case 'FIND INDEX': {
104
- const newFindIndexFormula: FunctionOperation = {
105
- ...data.value,
106
- name: '@toddle/findIndex',
107
- display_name: 'Find index',
108
- arguments: renameArguments(
109
- PREDICATE_ARGUMENT_MAPPINGS,
110
- data.value.arguments,
111
- ),
112
- }
113
- return set(data.files, data.path, newFindIndexFormula)
114
- }
115
- case 'FLAT': {
116
- const newFlattenFormula: FunctionOperation = {
117
- ...data.value,
118
- name: '@toddle/flatten',
119
- display_name: 'Flatten',
120
- arguments: renameArguments(
121
- ARRAY_ARGUMENT_MAPPINGS,
122
- data.value.arguments,
123
- ),
124
- }
125
- return set(data.files, data.path, newFlattenFormula)
126
- }
127
- case 'GT': {
128
- const newGreaterThanFormula: FunctionOperation = {
129
- ...data.value,
130
- name: '@toddle/greaterThan',
131
- display_name: 'Greater than',
132
- }
133
- return set(data.files, data.path, newGreaterThanFormula)
134
- }
135
- case 'GTE': {
136
- const newGreaterOrEqualFormula: FunctionOperation = {
137
- ...data.value,
138
- name: '@toddle/greaterOrEqueal',
139
- display_name: 'Greater or equal',
140
- }
141
- return set(data.files, data.path, newGreaterOrEqualFormula)
142
- }
143
- case 'GROUP_BY': {
144
- const newGroupbyFormula: FunctionOperation = {
145
- ...data.value,
146
- name: '@toddle/groupBy',
147
- display_name: 'Group by',
148
- arguments: renameArguments(
149
- PREDICATE_ARGUMENT_MAPPINGS,
150
- data.value.arguments,
151
- ),
152
- }
153
- return set(data.files, data.path, newGroupbyFormula)
154
- }
155
- case 'IF': {
156
- const legacyIfFormula = omitKeys(data.value, ['arguments', 'name'])
157
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
158
- const ifArguments = data.value.arguments ?? []
159
- const switchFormula: SwitchOperation = {
160
- ...legacyIfFormula,
161
- type: 'switch',
162
- cases: [
163
- {
164
- condition: ifArguments[0]?.formula,
165
- formula: ifArguments[1]?.formula,
166
- },
167
- ],
168
- default: ifArguments[2]?.formula,
169
- }
170
- return set(data.files, data.path, switchFormula)
171
- }
172
- case 'INDEX OF': {
173
- const newIndexofFormula: FunctionOperation = {
174
- ...data.value,
175
- name: '@toddle/indexOf',
176
- display_name: 'Index of',
177
- arguments: renameArguments(
178
- PREDICATE_ARGUMENT_MAPPINGS,
179
- data.value.arguments,
180
- ),
181
- }
182
- return set(data.files, data.path, newIndexofFormula)
183
- }
184
- case 'JSON_PARSE': {
185
- const newJsonParseFormula: FunctionOperation = {
186
- ...data.value,
187
- name: '@toddle/parseJSON',
188
- display_name: 'Parse JSON',
189
- arguments: renameArguments(
190
- { Input: 'JSON string' },
191
- data.value.arguments,
192
- ),
193
- }
194
- return set(data.files, data.path, newJsonParseFormula)
195
- }
196
- case 'KEY_BY': {
197
- const newKeyByFormula: FunctionOperation = {
198
- ...data.value,
199
- name: '@toddle/keyBy',
200
- display_name: 'Key by',
201
- arguments: renameArguments(
202
- {
203
- ...ARRAY_ARGUMENT_MAPPINGS,
204
- 'Key formula': 'Formula',
205
- },
206
- data.value.arguments,
207
- ),
208
- }
209
- return set(data.files, data.path, newKeyByFormula)
210
- }
211
- case 'LIST': {
212
- const newArrayFormula: ArrayOperation = {
213
- type: 'array',
214
- arguments: data.value.arguments,
215
- }
216
- return set(data.files, data.path, newArrayFormula)
217
- }
218
- case 'LOWER': {
219
- const newLowercaseFormula: FunctionOperation = {
220
- ...data.value,
221
- name: '@toddle/lowercase',
222
- display_name: 'Lower case',
223
- }
224
- return set(data.files, data.path, newLowercaseFormula)
225
- }
226
- case 'LT': {
227
- const newLessThanFormula: FunctionOperation = {
228
- ...data.value,
229
- name: '@toddle/lessThan',
230
- display_name: 'Less than',
231
- }
232
- return set(data.files, data.path, newLessThanFormula)
233
- }
234
- case 'LTE': {
235
- const newLessOrEqualFormula: FunctionOperation = {
236
- ...data.value,
237
- name: '@toddle/lessOrEqual',
238
- display_name: 'Less or equal',
239
- }
240
- return set(data.files, data.path, newLessOrEqualFormula)
241
- }
242
- case 'MOD': {
243
- const newModuloFormula: FunctionOperation = {
244
- ...data.value,
245
- arguments: renameArguments(
246
- { Dividor: 'Divider' },
247
- data.value.arguments,
248
- ),
249
- name: '@toddle/modulo',
250
- display_name: 'Modulo',
251
- }
252
- return set(data.files, data.path, newModuloFormula)
253
- }
254
- case 'NEQ': {
255
- const newNotEqualFormula: FunctionOperation = {
256
- ...data.value,
257
- name: '@toddle/notEqual',
258
- display_name: 'Not equal',
259
- }
260
- return set(data.files, data.path, newNotEqualFormula)
261
- }
262
- case 'OR': {
263
- const { name, ...legacyOrFormula } = data.value
264
- // Replace the AND formula with an 'and' formula
265
- const andFormula: OrOperation = {
266
- ...legacyOrFormula,
267
- type: 'or',
268
- arguments: legacyOrFormula.arguments.map((a) => {
269
- const { name, ...argument } = a
270
- return argument
271
- }),
272
- }
273
- return set(data.files, data.path, andFormula)
274
- }
275
- case 'RANDOM': {
276
- const newRandomNumberFormula: FunctionOperation = {
277
- ...data.value,
278
- name: '@toddle/randomNumber',
279
- display_name: 'Random number',
280
- }
281
- return set(data.files, data.path, newRandomNumberFormula)
282
- }
283
- case 'SIZE': {
284
- const newSizeFormula: FunctionOperation = {
285
- ...data.value,
286
- name: '@toddle/size',
287
- display_name: 'Size',
288
- }
289
- return set(data.files, data.path, newSizeFormula)
290
- }
291
- case 'SQRT': {
292
- const newSqrtFormula: FunctionOperation = {
293
- ...data.value,
294
- name: '@toddle/squareRoot',
295
- display_name: 'Square Root',
296
- }
297
- return set(data.files, data.path, newSqrtFormula)
298
- }
299
- case 'STARTS_WITH': {
300
- const newStartsWithFormula: FunctionOperation = {
301
- ...data.value,
302
- name: '@toddle/startsWith',
303
- display_name: 'Starts with',
304
- arguments: renameArguments(
305
- { Input: 'String' },
306
- data.value.arguments,
307
- ),
308
- }
309
- return set(data.files, data.path, newStartsWithFormula)
310
- }
311
- case 'TAKE_LAST': {
312
- const newTakeLastFormula: FunctionOperation = {
313
- ...data.value,
314
- name: '@toddle/takeLast',
315
- display_name: 'Take last',
316
- arguments: renameArguments(
317
- ARRAY_ARGUMENT_MAPPINGS,
318
- data.value.arguments,
319
- ),
320
- }
321
- return set(data.files, data.path, newTakeLastFormula)
322
- }
323
- case 'TYPE':
324
- // We can't autofix this one as the types have changed
325
- break
326
- case 'UPPER': {
327
- const newUpperFormula: FunctionOperation = {
328
- ...data.value,
329
- name: '@toddle/uppercase',
330
- display_name: 'Uppercase',
331
- arguments: renameArguments(
332
- ARRAY_ARGUMENT_MAPPINGS,
333
- data.value.arguments,
334
- ),
335
- }
336
- return set(data.files, data.path, newUpperFormula)
337
- }
338
- case 'URI_ENCODE': {
339
- const newUriEncodeFormula: FunctionOperation = {
340
- ...data.value,
341
- name: '@toddle/encodeURIComponent',
342
- display_name: 'Encode URI Component',
343
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
344
- arguments: data.value.arguments?.map((arg) => ({
345
- ...arg,
346
- // Let's fix this typo as well
347
- name: arg.name === 'URI' ? 'URIComponent' : arg.name,
348
- })),
349
- }
350
- return set(data.files, data.path, newUriEncodeFormula)
351
- }
352
-
353
- // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //
354
- // ℹ️ Below is handling of the builtin formulas that can be updated ℹ️ //
355
- // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //
356
-
357
- case 'ABSOLUTE': {
358
- const newAbsoluteFormula: FunctionOperation = {
359
- ...data.value,
360
- name: '@toddle/absolute',
361
- display_name: 'Absolute',
362
- }
363
- return set(data.files, data.path, newAbsoluteFormula)
364
- }
365
- case 'ADD': {
366
- const newAddFormula: FunctionOperation = {
367
- ...data.value,
368
- name: '@toddle/add',
369
- display_name: 'Add',
370
- }
371
- return set(data.files, data.path, newAddFormula)
372
- }
373
- case 'APPEND': {
374
- const newAppendFormula: FunctionOperation = {
375
- ...data.value,
376
- name: '@toddle/append',
377
- display_name: 'Append',
378
- }
379
- return set(data.files, data.path, newAppendFormula)
380
- }
381
- case 'CLAMP': {
382
- const newClampFormula: FunctionOperation = {
383
- ...data.value,
384
- name: '@toddle/clamp',
385
- display_name: 'Clamp',
386
- }
387
- return set(data.files, data.path, newClampFormula)
388
- }
389
- case 'DIVIDE': {
390
- const newDivideFormula: FunctionOperation = {
391
- ...data.value,
392
- name: '@toddle/divide',
393
- display_name: 'Divide',
394
- }
395
- return set(data.files, data.path, newDivideFormula)
396
- }
397
- case 'DROP': {
398
- const newDropFormula: FunctionOperation = {
399
- ...data.value,
400
- name: '@toddle/drop',
401
- display_name: 'Drop',
402
- }
403
- return set(data.files, data.path, newDropFormula)
404
- }
405
- case 'ENTRIES': {
406
- const newEntriesFormula: FunctionOperation = {
407
- ...data.value,
408
- name: '@toddle/entries',
409
- display_name: 'Entries',
410
- }
411
- return set(data.files, data.path, newEntriesFormula)
412
- }
413
- case 'EVERY': {
414
- const newEveryFormula: FunctionOperation = {
415
- ...data.value,
416
- name: '@toddle/every',
417
- display_name: 'Every',
418
- arguments: renameArguments(
419
- PREDICATE_ARGUMENT_MAPPINGS,
420
- data.value.arguments,
421
- ),
422
- }
423
- return set(data.files, data.path, newEveryFormula)
424
- }
425
- case 'FILTER': {
426
- const newFilterFormula: FunctionOperation = {
427
- ...data.value,
428
- name: '@toddle/filter',
429
- display_name: 'Filter',
430
- arguments: renameArguments(
431
- PREDICATE_ARGUMENT_MAPPINGS,
432
- data.value.arguments,
433
- ),
434
- }
435
- return set(data.files, data.path, newFilterFormula)
436
- }
437
- case 'FIND': {
438
- const newFindFormula: FunctionOperation = {
439
- ...data.value,
440
- name: '@toddle/find',
441
- display_name: 'Find',
442
- arguments: renameArguments(
443
- PREDICATE_ARGUMENT_MAPPINGS,
444
- data.value.arguments,
445
- ),
446
- }
447
- return set(data.files, data.path, newFindFormula)
448
- }
449
- case 'FROMENTRIES': {
450
- const newFromentriesFormula: FunctionOperation = {
451
- ...data.value,
452
- name: '@toddle/fromEntries',
453
- display_name: 'From entries',
454
- arguments: renameArguments(
455
- PREDICATE_ARGUMENT_MAPPINGS,
456
- data.value.arguments,
457
- ),
458
- }
459
- return set(data.files, data.path, newFromentriesFormula)
460
- }
461
- case 'GET': {
462
- const newGetFormula: FunctionOperation = {
463
- ...data.value,
464
- name: '@toddle/get',
465
- display_name: 'Get',
466
- }
467
- return set(data.files, data.path, newGetFormula)
468
- }
469
- case 'INCLUDES': {
470
- const newIncludesFormula: FunctionOperation = {
471
- ...data.value,
472
- name: '@toddle/includes',
473
- display_name: 'Includes',
474
- arguments: renameArguments(
475
- PREDICATE_ARGUMENT_MAPPINGS,
476
- data.value.arguments,
477
- ),
478
- }
479
- return set(data.files, data.path, newIncludesFormula)
480
- }
481
- case 'JOIN': {
482
- const newJoinFormula: FunctionOperation = {
483
- ...data.value,
484
- name: '@toddle/join',
485
- display_name: 'Join',
486
- arguments: renameArguments(
487
- PREDICATE_ARGUMENT_MAPPINGS,
488
- data.value.arguments,
489
- ),
490
- }
491
- return set(data.files, data.path, newJoinFormula)
492
- }
493
- case 'MAP': {
494
- const newMapFormula: FunctionOperation = {
495
- ...data.value,
496
- name: '@toddle/map',
497
- display_name: 'Map',
498
- arguments: renameArguments(
499
- {
500
- ...ARRAY_ARGUMENT_MAPPINGS,
501
- 'Mapping fx': 'Formula',
502
- },
503
- data.value.arguments,
504
- ),
505
- }
506
- return set(data.files, data.path, newMapFormula)
507
- }
508
- case 'MAX': {
509
- const newMaxFormula: FunctionOperation = {
510
- ...data.value,
511
- name: '@toddle/max',
512
- display_name: 'Max',
513
- arguments: renameArguments(
514
- ARRAY_ARGUMENT_MAPPINGS,
515
- data.value.arguments,
516
- ),
517
- }
518
- return set(data.files, data.path, newMaxFormula)
519
- }
520
- case 'MIN': {
521
- const newMinFormula: FunctionOperation = {
522
- ...data.value,
523
- name: '@toddle/min',
524
- display_name: 'Min',
525
- arguments: renameArguments(
526
- ARRAY_ARGUMENT_MAPPINGS,
527
- data.value.arguments,
528
- ),
529
- }
530
- return set(data.files, data.path, newMinFormula)
531
- }
532
- case 'MINUS': {
533
- const newMinusFormula: FunctionOperation = {
534
- ...data.value,
535
- name: '@toddle/minus',
536
- display_name: 'Minus',
537
- }
538
- return set(data.files, data.path, newMinusFormula)
539
- }
540
- case 'MULTIPLY': {
541
- const newMultiplyFormula: FunctionOperation = {
542
- ...data.value,
543
- name: '@toddle/multiply',
544
- display_name: 'Multiply',
545
- }
546
- return set(data.files, data.path, newMultiplyFormula)
547
- }
548
- case 'NOT': {
549
- const newNotFormula: FunctionOperation = {
550
- ...data.value,
551
- name: '@toddle/not',
552
- display_name: 'Not',
553
- }
554
- return set(data.files, data.path, newNotFormula)
555
- }
556
- case 'NUMBER': {
557
- const newNumberFormula: FunctionOperation = {
558
- ...data.value,
559
- name: '@toddle/number',
560
- display_name: 'Number',
561
- }
562
- return set(data.files, data.path, newNumberFormula)
563
- }
564
- case 'RANGE': {
565
- const newRangeFormula: FunctionOperation = {
566
- ...data.value,
567
- name: '@toddle/range',
568
- display_name: 'Range',
569
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
570
- arguments: data.value.arguments?.map((arg, i) => ({
571
- ...arg,
572
- // The Max argument didn't always have a name
573
- name: i === 1 && typeof arg.name !== 'string' ? 'Max' : arg.name,
574
- })),
575
- }
576
- return set(data.files, data.path, newRangeFormula)
577
- }
578
- case 'REDUCE': {
579
- const newReduceFormula: FunctionOperation = {
580
- ...data.value,
581
- name: '@toddle/reduce',
582
- display_name: 'Reduce',
583
- arguments: renameArguments(
584
- { 'Reducer fx': 'Formula' },
585
- data.value.arguments,
586
- ),
587
- }
588
- return set(data.files, data.path, newReduceFormula)
589
- }
590
- case 'REPLACEALL': {
591
- const newReplaceallFormula: FunctionOperation = {
592
- ...data.value,
593
- name: '@toddle/replaceAll',
594
- display_name: 'Replace all',
595
- arguments: renameArguments(
596
- // Yes, there was a typo in the old argument name
597
- { 'String to repalce': 'Search' },
598
- data.value.arguments,
599
- ),
600
- }
601
- return set(data.files, data.path, newReplaceallFormula)
602
- }
603
- case 'REVERSE': {
604
- const newReverseFormula: FunctionOperation = {
605
- ...data.value,
606
- name: '@toddle/reverse',
607
- display_name: 'Reverse',
608
- arguments: renameArguments(
609
- ARRAY_ARGUMENT_MAPPINGS,
610
- data.value.arguments,
611
- ),
612
- }
613
- return set(data.files, data.path, newReverseFormula)
614
- }
615
- case 'ROUND': {
616
- const newRoundFormula: FunctionOperation = {
617
- ...data.value,
618
- name: '@toddle/round',
619
- display_name: 'Round',
620
- }
621
- return set(data.files, data.path, newRoundFormula)
622
- }
623
- case 'SET': {
624
- const newSetFormula: FunctionOperation = {
625
- ...data.value,
626
- name: '@toddle/set',
627
- display_name: 'Set',
628
- }
629
- return set(data.files, data.path, newSetFormula)
630
- }
631
- case 'SOME': {
632
- const newSomeFormula: FunctionOperation = {
633
- ...data.value,
634
- name: '@toddle/some',
635
- display_name: 'Some',
636
- arguments: renameArguments(
637
- PREDICATE_ARGUMENT_MAPPINGS,
638
- data.value.arguments,
639
- ),
640
- }
641
- return set(data.files, data.path, newSomeFormula)
642
- }
643
- case 'SPLIT': {
644
- const newSplitFormula: FunctionOperation = {
645
- ...data.value,
646
- name: '@toddle/split',
647
- display_name: 'Split',
648
- }
649
- return set(data.files, data.path, newSplitFormula)
650
- }
651
- case 'STRING': {
652
- const newStringFormula: FunctionOperation = {
653
- ...data.value,
654
- name: '@toddle/string',
655
- display_name: 'String',
656
- }
657
- return set(data.files, data.path, newStringFormula)
658
- }
659
- case 'SUM': {
660
- const newSumFormula: FunctionOperation = {
661
- ...data.value,
662
- name: '@toddle/sum',
663
- display_name: 'Sum',
664
- }
665
- return set(data.files, data.path, newSumFormula)
666
- }
667
- case 'TAKE': {
668
- const newTakeFormula: FunctionOperation = {
669
- ...data.value,
670
- name: '@toddle/take',
671
- display_name: 'Take',
672
- arguments: renameArguments(
673
- ARRAY_ARGUMENT_MAPPINGS,
674
- data.value.arguments,
675
- ),
676
- }
677
- return set(data.files, data.path, newTakeFormula)
678
- }
679
- case 'TRIM': {
680
- const newTrimFormula: FunctionOperation = {
681
- ...data.value,
682
- name: '@toddle/trim',
683
- display_name: 'Trim',
684
- }
685
- return set(data.files, data.path, newTrimFormula)
686
- }
687
- }
688
- },
32
+ 'replace-legacy-formula': replaceLegacyFormula,
689
33
  },
690
34
  }
691
35
 
692
- const isIssue = (data: NodeType): data is FormulaNode<FunctionOperation> =>
693
- data.nodeType === 'formula' &&
694
- data.value.type === 'function' &&
695
- isLegacyFormula(data.value, data.files)
696
-
697
36
  export type LegacyFormulaRuleFix = 'replace-legacy-formula'
698
37
 
699
38
  const isLegacyFormula = (