@hyperlane-xyz/utils 28.1.0 → 29.0.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 (116) hide show
  1. package/dist/addresses.d.ts +1 -1
  2. package/dist/addresses.d.ts.map +1 -1
  3. package/dist/addresses.js +5 -7
  4. package/dist/addresses.js.map +1 -1
  5. package/dist/validator.d.ts.map +1 -1
  6. package/dist/validator.js +7 -4
  7. package/dist/validator.js.map +1 -1
  8. package/package.json +7 -5
  9. package/dist/addresses.test.d.ts +0 -2
  10. package/dist/addresses.test.d.ts.map +0 -1
  11. package/dist/addresses.test.js +0 -124
  12. package/dist/addresses.test.js.map +0 -1
  13. package/dist/amount.test.d.ts +0 -2
  14. package/dist/amount.test.d.ts.map +0 -1
  15. package/dist/amount.test.js +0 -113
  16. package/dist/amount.test.js.map +0 -1
  17. package/dist/arrays.test.d.ts +0 -2
  18. package/dist/arrays.test.d.ts.map +0 -1
  19. package/dist/arrays.test.js +0 -77
  20. package/dist/arrays.test.js.map +0 -1
  21. package/dist/async.test.d.ts +0 -2
  22. package/dist/async.test.d.ts.map +0 -1
  23. package/dist/async.test.js +0 -335
  24. package/dist/async.test.js.map +0 -1
  25. package/dist/base58.test.d.ts +0 -2
  26. package/dist/base58.test.d.ts.map +0 -1
  27. package/dist/base58.test.js +0 -31
  28. package/dist/base58.test.js.map +0 -1
  29. package/dist/base64.test.d.ts +0 -2
  30. package/dist/base64.test.d.ts.map +0 -1
  31. package/dist/base64.test.js +0 -54
  32. package/dist/base64.test.js.map +0 -1
  33. package/dist/big-numbers.test.d.ts +0 -2
  34. package/dist/big-numbers.test.d.ts.map +0 -1
  35. package/dist/big-numbers.test.js +0 -96
  36. package/dist/big-numbers.test.js.map +0 -1
  37. package/dist/checkpoints.test.d.ts +0 -2
  38. package/dist/checkpoints.test.d.ts.map +0 -1
  39. package/dist/checkpoints.test.js +0 -105
  40. package/dist/checkpoints.test.js.map +0 -1
  41. package/dist/env.test.d.ts +0 -2
  42. package/dist/env.test.d.ts.map +0 -1
  43. package/dist/env.test.js +0 -16
  44. package/dist/env.test.js.map +0 -1
  45. package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts +0 -2
  46. package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts.map +0 -1
  47. package/dist/eslint-rules/no-restricted-imports-from-exports.test.js +0 -259
  48. package/dist/eslint-rules/no-restricted-imports-from-exports.test.js.map +0 -1
  49. package/dist/eslint-rules/sort-yaml-arrays.test.d.ts +0 -2
  50. package/dist/eslint-rules/sort-yaml-arrays.test.d.ts.map +0 -1
  51. package/dist/eslint-rules/sort-yaml-arrays.test.js +0 -629
  52. package/dist/eslint-rules/sort-yaml-arrays.test.js.map +0 -1
  53. package/dist/fs/format.test.d.ts +0 -2
  54. package/dist/fs/format.test.d.ts.map +0 -1
  55. package/dist/fs/format.test.js +0 -153
  56. package/dist/fs/format.test.js.map +0 -1
  57. package/dist/fs/json.test.d.ts +0 -2
  58. package/dist/fs/json.test.d.ts.map +0 -1
  59. package/dist/fs/json.test.js +0 -148
  60. package/dist/fs/json.test.js.map +0 -1
  61. package/dist/fs/utils.test.d.ts +0 -2
  62. package/dist/fs/utils.test.d.ts.map +0 -1
  63. package/dist/fs/utils.test.js +0 -120
  64. package/dist/fs/utils.test.js.map +0 -1
  65. package/dist/fs/yaml.test.d.ts +0 -2
  66. package/dist/fs/yaml.test.d.ts.map +0 -1
  67. package/dist/fs/yaml.test.js +0 -134
  68. package/dist/fs/yaml.test.js.map +0 -1
  69. package/dist/ids.test.d.ts +0 -2
  70. package/dist/ids.test.d.ts.map +0 -1
  71. package/dist/ids.test.js +0 -39
  72. package/dist/ids.test.js.map +0 -1
  73. package/dist/lazy.test.d.ts +0 -2
  74. package/dist/lazy.test.d.ts.map +0 -1
  75. package/dist/lazy.test.js +0 -129
  76. package/dist/lazy.test.js.map +0 -1
  77. package/dist/logging.test.d.ts +0 -2
  78. package/dist/logging.test.d.ts.map +0 -1
  79. package/dist/logging.test.js +0 -35
  80. package/dist/logging.test.js.map +0 -1
  81. package/dist/math.test.d.ts +0 -2
  82. package/dist/math.test.d.ts.map +0 -1
  83. package/dist/math.test.js +0 -45
  84. package/dist/math.test.js.map +0 -1
  85. package/dist/objects.test.d.ts +0 -2
  86. package/dist/objects.test.d.ts.map +0 -1
  87. package/dist/objects.test.js +0 -655
  88. package/dist/objects.test.js.map +0 -1
  89. package/dist/rpc.test.d.ts +0 -2
  90. package/dist/rpc.test.d.ts.map +0 -1
  91. package/dist/rpc.test.js +0 -49
  92. package/dist/rpc.test.js.map +0 -1
  93. package/dist/sets.test.d.ts +0 -2
  94. package/dist/sets.test.d.ts.map +0 -1
  95. package/dist/sets.test.js +0 -35
  96. package/dist/sets.test.js.map +0 -1
  97. package/dist/strings.test.d.ts +0 -2
  98. package/dist/strings.test.d.ts.map +0 -1
  99. package/dist/strings.test.js +0 -42
  100. package/dist/strings.test.js.map +0 -1
  101. package/dist/typeof.test.d.ts +0 -2
  102. package/dist/typeof.test.d.ts.map +0 -1
  103. package/dist/typeof.test.js +0 -34
  104. package/dist/typeof.test.js.map +0 -1
  105. package/dist/url.test.d.ts +0 -2
  106. package/dist/url.test.d.ts.map +0 -1
  107. package/dist/url.test.js +0 -29
  108. package/dist/url.test.js.map +0 -1
  109. package/dist/validation.test.d.ts +0 -2
  110. package/dist/validation.test.d.ts.map +0 -1
  111. package/dist/validation.test.js +0 -11
  112. package/dist/validation.test.js.map +0 -1
  113. package/dist/yaml.test.d.ts +0 -2
  114. package/dist/yaml.test.d.ts.map +0 -1
  115. package/dist/yaml.test.js +0 -519
  116. package/dist/yaml.test.js.map +0 -1
package/dist/yaml.test.js DELETED
@@ -1,519 +0,0 @@
1
- //@ts-ignore
2
- import { expect } from 'chai';
3
- import { sortNestedArrays, transformYaml, tryParseJsonOrYaml, } from './yaml.js';
4
- describe('tryParseJsonOrYaml', () => {
5
- it('should parse valid JSON string', () => {
6
- const jsonString = '{"key": "value"}';
7
- const result = tryParseJsonOrYaml(jsonString);
8
- expect(result.success).to.be.true;
9
- expect(result.data).to.deep.equal({ key: 'value' });
10
- });
11
- it('should parse valid YAML string', () => {
12
- const yamlString = 'key: value';
13
- const result = tryParseJsonOrYaml(yamlString);
14
- expect(result.success).to.be.true;
15
- expect(result.data).to.deep.equal({ key: 'value' });
16
- });
17
- it('should fail for invalid JSON string', () => {
18
- const invalidJsonString = '{"key": "value"';
19
- const result = tryParseJsonOrYaml(invalidJsonString);
20
- expect(result.success).to.be.false;
21
- expect(result.error).to.equal('Input is not valid JSON or YAML');
22
- });
23
- it('should fail for invalid YAML string', () => {
24
- const invalidYamlString = 'key: value:';
25
- const result = tryParseJsonOrYaml(invalidYamlString);
26
- expect(result.success).to.be.false;
27
- expect(result.error).to.equal('Input is not valid JSON or YAML');
28
- });
29
- });
30
- describe('sortNestedArrays', () => {
31
- it('should sort a simple array by key', () => {
32
- const data = {
33
- items: [
34
- { name: 'c', value: 3 },
35
- { name: 'a', value: 1 },
36
- { name: 'b', value: 2 },
37
- ],
38
- };
39
- const config = {
40
- arrays: [{ path: 'items', sortKey: 'name' }],
41
- };
42
- const result = sortNestedArrays(data, config);
43
- expect(result.items).to.deep.equal([
44
- { name: 'a', value: 1 },
45
- { name: 'b', value: 2 },
46
- { name: 'c', value: 3 },
47
- ]);
48
- });
49
- it('should sort nested arrays by different keys', () => {
50
- const data = {
51
- level1: {
52
- items: [
53
- { id: 3, name: 'item3' },
54
- { id: 1, name: 'item1' },
55
- { id: 2, name: 'item2' },
56
- ],
57
- categories: [
58
- {
59
- code: 'cat-b',
60
- items: [
61
- { name: 'z', priority: 3 },
62
- { name: 'x', priority: 1 },
63
- { name: 'y', priority: 2 },
64
- ],
65
- },
66
- { code: 'cat-a', items: [] },
67
- ],
68
- },
69
- };
70
- const config = {
71
- arrays: [
72
- { path: 'level1.items', sortKey: 'id' },
73
- { path: 'level1.categories', sortKey: 'code' },
74
- { path: 'level1.categories[].items', sortKey: 'priority' },
75
- ],
76
- };
77
- const result = sortNestedArrays(data, config);
78
- expect(result.level1.items).to.deep.equal([
79
- { id: 1, name: 'item1' },
80
- { id: 2, name: 'item2' },
81
- { id: 3, name: 'item3' },
82
- ]);
83
- expect(result.level1.categories).to.deep.equal([
84
- { code: 'cat-a', items: [] },
85
- {
86
- code: 'cat-b',
87
- items: [
88
- { name: 'x', priority: 1 },
89
- { name: 'y', priority: 2 },
90
- { name: 'z', priority: 3 },
91
- ],
92
- },
93
- ]);
94
- });
95
- it('should handle array paths with wildcard patterns', () => {
96
- const data = {
97
- users: [
98
- {
99
- name: 'user2',
100
- tasks: [
101
- { id: 'c', completed: true },
102
- { id: 'a', completed: false },
103
- { id: 'b', completed: true },
104
- ],
105
- },
106
- {
107
- name: 'user1',
108
- tasks: [
109
- { id: 'z', completed: false },
110
- { id: 'x', completed: true },
111
- { id: 'y', completed: false },
112
- ],
113
- },
114
- ],
115
- };
116
- const config = {
117
- arrays: [
118
- { path: 'users', sortKey: 'name' },
119
- { path: 'users[].tasks', sortKey: 'id' },
120
- ],
121
- };
122
- const result = sortNestedArrays(data, config);
123
- expect(result.users[0].name).to.equal('user1');
124
- expect(result.users[1].name).to.equal('user2');
125
- expect(result.users[0].tasks.map((t) => t.id)).to.deep.equal([
126
- 'x',
127
- 'y',
128
- 'z',
129
- ]);
130
- expect(result.users[1].tasks.map((t) => t.id)).to.deep.equal([
131
- 'a',
132
- 'b',
133
- 'c',
134
- ]);
135
- });
136
- it('should not modify data when no sort configuration matches', () => {
137
- const data = {
138
- items: [
139
- { name: 'c', value: 3 },
140
- { name: 'a', value: 1 },
141
- { name: 'b', value: 2 },
142
- ],
143
- otherItems: [
144
- { id: 3, label: 'Three' },
145
- { id: 1, label: 'One' },
146
- { id: 2, label: 'Two' },
147
- ],
148
- };
149
- const config = {
150
- arrays: [
151
- { path: 'nonExistent', sortKey: 'name' },
152
- { path: 'items.wrong.path', sortKey: 'value' },
153
- ],
154
- };
155
- const result = sortNestedArrays(data, config);
156
- // Data should remain unchanged
157
- expect(result).to.deep.equal(data);
158
- // Verify the original order is preserved
159
- expect(result.items[0].name).to.equal('c');
160
- expect(result.items[1].name).to.equal('a');
161
- expect(result.items[2].name).to.equal('b');
162
- expect(result.otherItems[0].id).to.equal(3);
163
- expect(result.otherItems[1].id).to.equal(1);
164
- expect(result.otherItems[2].id).to.equal(2);
165
- });
166
- it('should not match when path length is shorter than pattern length', () => {
167
- const data = {
168
- items: [
169
- { name: 'c', value: 3 },
170
- { name: 'a', value: 1 },
171
- { name: 'b', value: 2 },
172
- ],
173
- };
174
- // Pattern with longer path than exists in data
175
- const config = {
176
- arrays: [{ path: 'items.subItems[].name', sortKey: 'value' }],
177
- };
178
- const result = sortNestedArrays(data, config);
179
- expect(result).to.deep.equal(data);
180
- expect(result.items[0].name).to.equal('c');
181
- expect(result.items[1].name).to.equal('a');
182
- expect(result.items[2].name).to.equal('b');
183
- });
184
- it('should demonstrate difference between [] and * notations', () => {
185
- const dataWithArray = {
186
- root: {
187
- categories: [
188
- {
189
- name: 'c',
190
- items: [
191
- {
192
- age: 20,
193
- name: 'c2',
194
- },
195
- {
196
- age: 10,
197
- name: 'c1',
198
- },
199
- ],
200
- },
201
- {
202
- name: 'a',
203
- items: [
204
- {
205
- age: 5,
206
- name: 'a2',
207
- },
208
- {
209
- age: 15,
210
- name: 'a1',
211
- },
212
- ],
213
- },
214
- {
215
- name: 'b',
216
- items: [
217
- {
218
- age: 30,
219
- name: 'b2',
220
- },
221
- {
222
- age: 25,
223
- name: 'b1',
224
- },
225
- ],
226
- },
227
- ],
228
- },
229
- };
230
- const dataWithObject = {
231
- root: {
232
- categories: {
233
- first: {
234
- name: 'c',
235
- items: [
236
- {
237
- age: 20,
238
- name: 'c2',
239
- },
240
- {
241
- age: 10,
242
- name: 'c1',
243
- },
244
- ],
245
- },
246
- second: {
247
- name: 'a',
248
- items: [
249
- {
250
- age: 5,
251
- name: 'a2',
252
- },
253
- {
254
- age: 15,
255
- name: 'a1',
256
- },
257
- ],
258
- },
259
- third: {
260
- name: 'b',
261
- items: [
262
- {
263
- age: 30,
264
- name: 'b2',
265
- },
266
- {
267
- age: 25,
268
- name: 'b1',
269
- },
270
- ],
271
- },
272
- },
273
- },
274
- };
275
- // Using [] notation only matches array structures
276
- const arrayOnlyConfig = {
277
- arrays: [{ path: 'root.categories[].items', sortKey: 'age' }],
278
- };
279
- // With * notation, both array and object children are matched
280
- const wildcardConfig = {
281
- arrays: [{ path: 'root.categories.*.items', sortKey: 'name' }],
282
- };
283
- const resultArrayNotationWithArray = sortNestedArrays(dataWithArray, arrayOnlyConfig);
284
- expect(resultArrayNotationWithArray.root.categories[0].items).to.deep.equal([
285
- { age: 10, name: 'c1' },
286
- { age: 20, name: 'c2' },
287
- ]);
288
- expect(resultArrayNotationWithArray.root.categories[1].items).to.deep.equal([
289
- { age: 5, name: 'a2' },
290
- { age: 15, name: 'a1' },
291
- ]);
292
- const resultArrayNotationWithObject = sortNestedArrays(dataWithObject, arrayOnlyConfig);
293
- expect(resultArrayNotationWithObject.root.categories.first.items).to.deep.equal([
294
- { age: 20, name: 'c2' },
295
- { age: 10, name: 'c1' },
296
- ]);
297
- const resultWildcardWithArray = sortNestedArrays(dataWithArray, wildcardConfig);
298
- expect(resultWildcardWithArray.root.categories[0].items).to.deep.equal([
299
- { age: 10, name: 'c1' },
300
- { age: 20, name: 'c2' },
301
- ]);
302
- const resultWildcardWithObject = sortNestedArrays(dataWithObject, wildcardConfig);
303
- expect(resultWildcardWithObject.root.categories.first.items).to.deep.equal([
304
- { age: 10, name: 'c1' },
305
- { age: 20, name: 'c2' },
306
- ]);
307
- expect(resultWildcardWithObject.root.categories.second.items).to.deep.equal([
308
- { age: 15, name: 'a1' },
309
- { age: 5, name: 'a2' },
310
- ]);
311
- const hybridConfig = {
312
- arrays: [
313
- { path: 'root.categories[].items', sortKey: 'age' },
314
- { path: 'root.categories.*.items', sortKey: 'name' },
315
- ],
316
- };
317
- const resultHybrid = sortNestedArrays(dataWithObject, hybridConfig);
318
- expect(resultHybrid.root.categories.first.items).to.deep.equal([
319
- { age: 10, name: 'c1' },
320
- { age: 20, name: 'c2' },
321
- ]);
322
- });
323
- });
324
- describe('transformYaml', () => {
325
- const testCases = [
326
- {
327
- name: 'should transform YAML content using the provided transformer',
328
- original: `
329
- name: test
330
- items:
331
- - id: 2
332
- name: item2
333
- - id: 1
334
- name: item1
335
- `,
336
- expected: `name: test
337
- items:
338
- - id: 1
339
- name: item1
340
- - id: 2
341
- name: item2`,
342
- transformer: (data) => {
343
- // Sort items by id
344
- if (data?.items) {
345
- data.items.sort((a, b) => a.id - b.id);
346
- }
347
- return data;
348
- },
349
- },
350
- {
351
- name: 'should preserve comments when transforming YAML',
352
- original: `
353
- # Root comment
354
- name: test
355
- # Comment for items
356
- items:
357
- # First item comment
358
- - id: 2
359
- name: item2
360
- # Second item comment
361
- - id: 1
362
- name: item1
363
- `,
364
- expected: `# Root comment
365
- name: test
366
- # Comment for items
367
- items:
368
- # Second item comment
369
- - id: 1
370
- name: item1
371
- # First item comment
372
- - id: 2
373
- name: item2`,
374
- transformer: (data) => {
375
- // Sort items by id
376
- if (data?.items) {
377
- data.items.sort((a, b) => a.id - b.id);
378
- }
379
- return data;
380
- },
381
- },
382
- {
383
- name: 'should handle nested objects and arrays',
384
- original: `
385
- config:
386
- settings:
387
- - name: setting3
388
- value: 30
389
- - name: setting1
390
- value: 10
391
- - name: setting2
392
- value: 20
393
- nested:
394
- arrays:
395
- - items:
396
- - key: c
397
- val: 3
398
- - key: a
399
- val: 1
400
- - key: b
401
- val: 2
402
- `,
403
- expected: `config:
404
- settings:
405
- - name: setting1
406
- value: 10
407
- - name: setting2
408
- value: 20
409
- - name: setting3
410
- value: 30
411
- nested:
412
- arrays:
413
- - items:
414
- - key: a
415
- val: 1
416
- - key: b
417
- val: 2
418
- - key: c
419
- val: 3`,
420
- transformer: (data) => {
421
- // Sort settings by name
422
- if (data?.config?.settings) {
423
- data.config.settings.sort((a, b) => a.name.localeCompare(b.name));
424
- }
425
- // Sort nested items by key
426
- if (data?.config?.nested?.arrays?.[0]?.items) {
427
- data.config.nested.arrays[0].items.sort((a, b) => a.key.localeCompare(b.key));
428
- }
429
- return data;
430
- },
431
- },
432
- {
433
- name: 'should handle empty arrays and add new items',
434
- original: `
435
- project:
436
- tasks: []
437
- status: pending
438
- `,
439
- expected: `project:
440
- tasks:
441
- - id: 1
442
- name: Task 1
443
- - id: 2
444
- name: Task 2
445
- status: pending`,
446
- transformer: (data) => {
447
- // Add new items to empty array
448
- if (data?.project?.tasks) {
449
- data.project.tasks = [
450
- { id: 1, name: 'Task 1' },
451
- { id: 2, name: 'Task 2' },
452
- ];
453
- }
454
- return data;
455
- },
456
- },
457
- {
458
- name: 'should handle inline comments',
459
- original: `
460
- services: # Main services
461
- - name: api # REST API
462
- port: 3000 # Default port
463
- - name: db # Database
464
- port: 5432 # Postgres port
465
- `,
466
- expected: `services: # Main services
467
- - name: db # Database
468
- port: 5432 # Postgres port
469
- - name: api # REST API
470
- port: 3000 # Default port`,
471
- transformer: (data) => {
472
- // Sort services by name in reverse
473
- if (data?.services) {
474
- data.services.sort((a, b) => b.name.localeCompare(a.name));
475
- }
476
- return data;
477
- },
478
- },
479
- {
480
- name: 'should handle property deletion and modification',
481
- original: `
482
- config:
483
- debug: true
484
- environment: development
485
- features:
486
- legacy: true
487
- experimental: false
488
- beta: true
489
- `,
490
- expected: `config:
491
- environment: production
492
- features:
493
- experimental: true
494
- beta: true`,
495
- transformer: (data) => {
496
- if (data?.config) {
497
- // Delete debug property
498
- delete data.config.debug;
499
- // Change environment value
500
- data.config.environment = 'production';
501
- // Remove legacy feature
502
- if (data.config.features) {
503
- delete data.config.features.legacy;
504
- // Enable experimental feature
505
- data.config.features.experimental = true;
506
- }
507
- }
508
- return data;
509
- },
510
- },
511
- ];
512
- testCases.forEach(({ name, original, expected, transformer }) => {
513
- it(name, () => {
514
- const result = transformYaml(original, transformer);
515
- expect(result.trim()).to.equal(expected);
516
- });
517
- });
518
- });
519
- //# sourceMappingURL=yaml.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yaml.test.js","sourceRoot":"","sources":["../src/yaml.test.ts"],"names":[],"mappings":"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"}