@nordcraft/search 1.0.43 → 1.0.45

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