@hyperlane-xyz/utils 0.0.0-beta-20251201221151

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 (210) hide show
  1. package/README.md +20 -0
  2. package/dist/addresses.d.ts +65 -0
  3. package/dist/addresses.d.ts.map +1 -0
  4. package/dist/addresses.js +475 -0
  5. package/dist/addresses.js.map +1 -0
  6. package/dist/addresses.test.d.ts +2 -0
  7. package/dist/addresses.test.d.ts.map +1 -0
  8. package/dist/addresses.test.js +68 -0
  9. package/dist/addresses.test.js.map +1 -0
  10. package/dist/amount.d.ts +70 -0
  11. package/dist/amount.d.ts.map +1 -0
  12. package/dist/amount.js +143 -0
  13. package/dist/amount.js.map +1 -0
  14. package/dist/amount.test.d.ts +2 -0
  15. package/dist/amount.test.d.ts.map +1 -0
  16. package/dist/amount.test.js +113 -0
  17. package/dist/amount.test.js.map +1 -0
  18. package/dist/arrays.d.ts +11 -0
  19. package/dist/arrays.d.ts.map +1 -0
  20. package/dist/arrays.js +26 -0
  21. package/dist/arrays.js.map +1 -0
  22. package/dist/arrays.test.d.ts +2 -0
  23. package/dist/arrays.test.d.ts.map +1 -0
  24. package/dist/arrays.test.js +77 -0
  25. package/dist/arrays.test.js.map +1 -0
  26. package/dist/async.d.ts +66 -0
  27. package/dist/async.d.ts.map +1 -0
  28. package/dist/async.js +146 -0
  29. package/dist/async.js.map +1 -0
  30. package/dist/async.test.d.ts +2 -0
  31. package/dist/async.test.d.ts.map +1 -0
  32. package/dist/async.test.js +204 -0
  33. package/dist/async.test.js.map +1 -0
  34. package/dist/base58.d.ts +5 -0
  35. package/dist/base58.d.ts.map +1 -0
  36. package/dist/base58.js +15 -0
  37. package/dist/base58.js.map +1 -0
  38. package/dist/base58.test.d.ts +2 -0
  39. package/dist/base58.test.d.ts.map +1 -0
  40. package/dist/base58.test.js +31 -0
  41. package/dist/base58.test.js.map +1 -0
  42. package/dist/base64.d.ts +3 -0
  43. package/dist/base64.d.ts.map +1 -0
  44. package/dist/base64.js +25 -0
  45. package/dist/base64.js.map +1 -0
  46. package/dist/base64.test.d.ts +2 -0
  47. package/dist/base64.test.d.ts.map +1 -0
  48. package/dist/base64.test.js +54 -0
  49. package/dist/base64.test.js.map +1 -0
  50. package/dist/big-numbers.d.ts +50 -0
  51. package/dist/big-numbers.d.ts.map +1 -0
  52. package/dist/big-numbers.js +80 -0
  53. package/dist/big-numbers.js.map +1 -0
  54. package/dist/big-numbers.test.d.ts +2 -0
  55. package/dist/big-numbers.test.d.ts.map +1 -0
  56. package/dist/big-numbers.test.js +96 -0
  57. package/dist/big-numbers.test.js.map +1 -0
  58. package/dist/calldata.d.ts +3 -0
  59. package/dist/calldata.d.ts.map +1 -0
  60. package/dist/calldata.js +4 -0
  61. package/dist/calldata.js.map +1 -0
  62. package/dist/checkpoints.d.ts +6 -0
  63. package/dist/checkpoints.d.ts.map +1 -0
  64. package/dist/checkpoints.js +24 -0
  65. package/dist/checkpoints.js.map +1 -0
  66. package/dist/checkpoints.test.d.ts +2 -0
  67. package/dist/checkpoints.test.d.ts.map +1 -0
  68. package/dist/checkpoints.test.js +105 -0
  69. package/dist/checkpoints.test.js.map +1 -0
  70. package/dist/config.d.ts +25 -0
  71. package/dist/config.d.ts.map +1 -0
  72. package/dist/config.js +84 -0
  73. package/dist/config.js.map +1 -0
  74. package/dist/domains.d.ts +2 -0
  75. package/dist/domains.d.ts.map +1 -0
  76. package/dist/domains.js +6 -0
  77. package/dist/domains.js.map +1 -0
  78. package/dist/env.d.ts +4 -0
  79. package/dist/env.d.ts.map +1 -0
  80. package/dist/env.js +17 -0
  81. package/dist/env.js.map +1 -0
  82. package/dist/env.test.d.ts +2 -0
  83. package/dist/env.test.d.ts.map +1 -0
  84. package/dist/env.test.js +16 -0
  85. package/dist/env.test.js.map +1 -0
  86. package/dist/eslint-rules/index.d.ts +157 -0
  87. package/dist/eslint-rules/index.d.ts.map +1 -0
  88. package/dist/eslint-rules/index.js +58 -0
  89. package/dist/eslint-rules/index.js.map +1 -0
  90. package/dist/eslint-rules/no-restricted-imports-from-exports.d.ts +4 -0
  91. package/dist/eslint-rules/no-restricted-imports-from-exports.d.ts.map +1 -0
  92. package/dist/eslint-rules/no-restricted-imports-from-exports.js +141 -0
  93. package/dist/eslint-rules/no-restricted-imports-from-exports.js.map +1 -0
  94. package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts +2 -0
  95. package/dist/eslint-rules/no-restricted-imports-from-exports.test.d.ts.map +1 -0
  96. package/dist/eslint-rules/no-restricted-imports-from-exports.test.js +258 -0
  97. package/dist/eslint-rules/no-restricted-imports-from-exports.test.js.map +1 -0
  98. package/dist/eslint-rules/sort-yaml-arrays.d.ts +39 -0
  99. package/dist/eslint-rules/sort-yaml-arrays.d.ts.map +1 -0
  100. package/dist/eslint-rules/sort-yaml-arrays.js +74 -0
  101. package/dist/eslint-rules/sort-yaml-arrays.js.map +1 -0
  102. package/dist/eslint-rules/sort-yaml-arrays.test.d.ts +2 -0
  103. package/dist/eslint-rules/sort-yaml-arrays.test.d.ts.map +1 -0
  104. package/dist/eslint-rules/sort-yaml-arrays.test.js +621 -0
  105. package/dist/eslint-rules/sort-yaml-arrays.test.js.map +1 -0
  106. package/dist/ids.d.ts +20 -0
  107. package/dist/ids.d.ts.map +1 -0
  108. package/dist/ids.js +42 -0
  109. package/dist/ids.js.map +1 -0
  110. package/dist/ids.test.d.ts +2 -0
  111. package/dist/ids.test.d.ts.map +1 -0
  112. package/dist/ids.test.js +39 -0
  113. package/dist/ids.test.js.map +1 -0
  114. package/dist/index.d.ts +30 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +29 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/logging.d.ts +32 -0
  119. package/dist/logging.d.ts.map +1 -0
  120. package/dist/logging.js +146 -0
  121. package/dist/logging.js.map +1 -0
  122. package/dist/logging.test.d.ts +2 -0
  123. package/dist/logging.test.d.ts.map +1 -0
  124. package/dist/logging.test.js +35 -0
  125. package/dist/logging.test.js.map +1 -0
  126. package/dist/math.d.ts +6 -0
  127. package/dist/math.d.ts.map +1 -0
  128. package/dist/math.js +21 -0
  129. package/dist/math.js.map +1 -0
  130. package/dist/math.test.d.ts +2 -0
  131. package/dist/math.test.d.ts.map +1 -0
  132. package/dist/math.test.js +45 -0
  133. package/dist/math.test.js.map +1 -0
  134. package/dist/messages.d.ts +22 -0
  135. package/dist/messages.d.ts.map +1 -0
  136. package/dist/messages.js +64 -0
  137. package/dist/messages.js.map +1 -0
  138. package/dist/multisig.d.ts +4 -0
  139. package/dist/multisig.d.ts.map +1 -0
  140. package/dist/multisig.js +53 -0
  141. package/dist/multisig.js.map +1 -0
  142. package/dist/objects.d.ts +74 -0
  143. package/dist/objects.d.ts.map +1 -0
  144. package/dist/objects.js +331 -0
  145. package/dist/objects.js.map +1 -0
  146. package/dist/objects.test.d.ts +2 -0
  147. package/dist/objects.test.d.ts.map +1 -0
  148. package/dist/objects.test.js +655 -0
  149. package/dist/objects.test.js.map +1 -0
  150. package/dist/result.d.ts +11 -0
  151. package/dist/result.d.ts.map +1 -0
  152. package/dist/result.js +7 -0
  153. package/dist/result.js.map +1 -0
  154. package/dist/sets.d.ts +5 -0
  155. package/dist/sets.d.ts.map +1 -0
  156. package/dist/sets.js +33 -0
  157. package/dist/sets.js.map +1 -0
  158. package/dist/sets.test.d.ts +2 -0
  159. package/dist/sets.test.d.ts.map +1 -0
  160. package/dist/sets.test.js +35 -0
  161. package/dist/sets.test.js.map +1 -0
  162. package/dist/strings.d.ts +11 -0
  163. package/dist/strings.d.ts.map +1 -0
  164. package/dist/strings.js +49 -0
  165. package/dist/strings.js.map +1 -0
  166. package/dist/strings.test.d.ts +2 -0
  167. package/dist/strings.test.d.ts.map +1 -0
  168. package/dist/strings.test.js +42 -0
  169. package/dist/strings.test.js.map +1 -0
  170. package/dist/typeof.d.ts +3 -0
  171. package/dist/typeof.d.ts.map +1 -0
  172. package/dist/typeof.js +7 -0
  173. package/dist/typeof.js.map +1 -0
  174. package/dist/typeof.test.d.ts +2 -0
  175. package/dist/typeof.test.d.ts.map +1 -0
  176. package/dist/typeof.test.js +34 -0
  177. package/dist/typeof.test.js.map +1 -0
  178. package/dist/types.d.ts +111 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +23 -0
  181. package/dist/types.js.map +1 -0
  182. package/dist/url.d.ts +4 -0
  183. package/dist/url.d.ts.map +1 -0
  184. package/dist/url.js +34 -0
  185. package/dist/url.js.map +1 -0
  186. package/dist/url.test.d.ts +2 -0
  187. package/dist/url.test.d.ts.map +1 -0
  188. package/dist/url.test.js +29 -0
  189. package/dist/url.test.js.map +1 -0
  190. package/dist/validation.d.ts +2 -0
  191. package/dist/validation.d.ts.map +1 -0
  192. package/dist/validation.js +6 -0
  193. package/dist/validation.js.map +1 -0
  194. package/dist/validation.test.d.ts +2 -0
  195. package/dist/validation.test.d.ts.map +1 -0
  196. package/dist/validation.test.js +11 -0
  197. package/dist/validation.test.js.map +1 -0
  198. package/dist/validator.d.ts +30 -0
  199. package/dist/validator.d.ts.map +1 -0
  200. package/dist/validator.js +76 -0
  201. package/dist/validator.js.map +1 -0
  202. package/dist/yaml.d.ts +22 -0
  203. package/dist/yaml.d.ts.map +1 -0
  204. package/dist/yaml.js +293 -0
  205. package/dist/yaml.js.map +1 -0
  206. package/dist/yaml.test.d.ts +2 -0
  207. package/dist/yaml.test.d.ts.map +1 -0
  208. package/dist/yaml.test.js +519 -0
  209. package/dist/yaml.test.js.map +1 -0
  210. package/package.json +80 -0
@@ -0,0 +1,621 @@
1
+ import { expect } from 'chai';
2
+ import rule from './sort-yaml-arrays.js';
3
+ describe('sort-yaml-arrays rule', () => {
4
+ let lintResult;
5
+ let fixer;
6
+ beforeEach(() => {
7
+ lintResult = null;
8
+ // Only implement replaceText since it's the only method actually used
9
+ const dummyFix = () => ({
10
+ range: [0, 0],
11
+ text: '',
12
+ });
13
+ fixer = {
14
+ replaceText: (_, text) => {
15
+ lintResult = { fixed: true, output: text };
16
+ return { range: [0, 0], text };
17
+ },
18
+ insertTextAfter: dummyFix,
19
+ insertTextAfterRange: dummyFix,
20
+ insertTextBefore: dummyFix,
21
+ insertTextBeforeRange: dummyFix,
22
+ remove: dummyFix,
23
+ removeRange: dummyFix,
24
+ replaceTextRange: dummyFix,
25
+ };
26
+ });
27
+ function runLint(yamlText, filename, options = {}) {
28
+ const context = {
29
+ id: 'sort-yaml-arrays',
30
+ options: [options],
31
+ filename,
32
+ sourceCode: {
33
+ getText: () => yamlText,
34
+ },
35
+ report: ({ fix }) => {
36
+ if (fix)
37
+ fix(fixer);
38
+ },
39
+ };
40
+ const ruleInstance = rule.create(context);
41
+ if (ruleInstance?.Program) {
42
+ const lineCount = yamlText.split('\n').length;
43
+ ruleInstance.Program({
44
+ parent: {},
45
+ sourceType: 'module',
46
+ type: 'Program',
47
+ body: [],
48
+ range: [0, yamlText.length],
49
+ loc: {
50
+ start: { line: 1, column: 0 },
51
+ end: { line: lineCount, column: 0 },
52
+ },
53
+ });
54
+ }
55
+ return lintResult;
56
+ }
57
+ const testCases = [
58
+ {
59
+ name: 'should sort people by name',
60
+ original: `people:
61
+ - name: Charlie
62
+ age: 30
63
+ - name: Alice
64
+ age: 25
65
+ - name: Bob
66
+ age: 35`,
67
+ expected: `people:
68
+ - name: Alice
69
+ age: 25
70
+ - name: Bob
71
+ age: 35
72
+ - name: Charlie
73
+ age: 30`,
74
+ options: {
75
+ arrays: [{ path: 'people', sortKey: 'name' }],
76
+ },
77
+ },
78
+ {
79
+ name: 'should sort people by age',
80
+ original: `people:
81
+ - name: Charlie
82
+ age: 30
83
+ - name: Alice
84
+ age: 25
85
+ - name: Bob
86
+ age: 35`,
87
+ expected: `people:
88
+ - name: Alice
89
+ age: 25
90
+ - name: Charlie
91
+ age: 30
92
+ - name: Bob
93
+ age: 35`,
94
+ options: {
95
+ arrays: [{ path: 'people', sortKey: 'age' }],
96
+ },
97
+ },
98
+ {
99
+ name: 'should sort nested arrays',
100
+ original: `departments:
101
+ - name: Engineering
102
+ employees:
103
+ - name: Dave
104
+ position: Developer
105
+ - name: Alice
106
+ position: Manager
107
+ - name: Marketing
108
+ employees:
109
+ - name: Zack
110
+ position: Designer
111
+ - name: Bob
112
+ position: Director`,
113
+ expected: `departments:
114
+ - name: Engineering
115
+ employees:
116
+ - name: Alice
117
+ position: Manager
118
+ - name: Dave
119
+ position: Developer
120
+ - name: Marketing
121
+ employees:
122
+ - name: Bob
123
+ position: Director
124
+ - name: Zack
125
+ position: Designer`,
126
+ options: {
127
+ arrays: [{ path: 'departments[].employees', sortKey: 'name' }],
128
+ },
129
+ },
130
+ {
131
+ name: 'should sort multiple arrays with different keys',
132
+ original: `company:
133
+ departments:
134
+ - id: 3
135
+ name: Engineering
136
+ projects:
137
+ - priority: 2
138
+ name: Website
139
+ - priority: 1
140
+ name: API
141
+ - id: 1
142
+ name: Marketing
143
+ projects:
144
+ - priority: 3
145
+ name: Campaign
146
+ - priority: 1
147
+ name: Branding`,
148
+ expected: `company:
149
+ departments:
150
+ - id: 1
151
+ name: Marketing
152
+ projects:
153
+ - priority: 1
154
+ name: Branding
155
+ - priority: 3
156
+ name: Campaign
157
+ - id: 3
158
+ name: Engineering
159
+ projects:
160
+ - priority: 1
161
+ name: API
162
+ - priority: 2
163
+ name: Website`,
164
+ options: {
165
+ arrays: [
166
+ { path: 'company.departments', sortKey: 'id' },
167
+ { path: 'company.departments.*.projects', sortKey: 'priority' },
168
+ ],
169
+ },
170
+ },
171
+ {
172
+ name: 'should preserve comments',
173
+ original: `# This is a top comment
174
+ people:
175
+ # First person
176
+ - name: Charlie
177
+ age: 30
178
+ # Second person
179
+ - name: Alice
180
+ age: 25
181
+ # Third person
182
+ - name: Bob
183
+ age: 35`,
184
+ expected: `# This is a top comment
185
+ people:
186
+ # Second person
187
+ - name: Alice
188
+ age: 25
189
+ # Third person
190
+ - name: Bob
191
+ age: 35
192
+ # First person
193
+ - name: Charlie
194
+ age: 30`,
195
+ options: {
196
+ arrays: [{ path: 'people', sortKey: 'name' }],
197
+ },
198
+ },
199
+ {
200
+ name: 'should sort arrays with numeric values',
201
+ original: `versions:
202
+ - version: 1.2.0
203
+ released: true
204
+ - version: 0.9.0
205
+ released: true
206
+ - version: 2.0.0
207
+ released: false`,
208
+ expected: `versions:
209
+ - version: 0.9.0
210
+ released: true
211
+ - version: 1.2.0
212
+ released: true
213
+ - version: 2.0.0
214
+ released: false`,
215
+ options: {
216
+ arrays: [{ path: 'versions', sortKey: 'version' }],
217
+ },
218
+ },
219
+ {
220
+ name: 'should sort arrays with boolean values',
221
+ original: `features:
222
+ - name: auth
223
+ enabled: true
224
+ - name: notifications
225
+ enabled: true
226
+ - name: search
227
+ enabled: false`,
228
+ expected: `features:
229
+ - name: search
230
+ enabled: false
231
+ - name: auth
232
+ enabled: true
233
+ - name: notifications
234
+ enabled: true`,
235
+ options: {
236
+ arrays: [{ path: 'features', sortKey: 'enabled' }],
237
+ },
238
+ },
239
+ {
240
+ name: 'should handle deeply nested structures',
241
+ original: `organization:
242
+ divisions:
243
+ americas:
244
+ regions:
245
+ - code: US-W
246
+ name: West
247
+ offices:
248
+ - city: Portland
249
+ employees: 120
250
+ - city: Seattle
251
+ employees: 200
252
+ - city: San Francisco
253
+ employees: 300
254
+ - code: US-E
255
+ name: East
256
+ offices:
257
+ - city: New York
258
+ employees: 450
259
+ - city: Boston
260
+ employees: 150`,
261
+ expected: `organization:
262
+ divisions:
263
+ americas:
264
+ regions:
265
+ - code: US-W
266
+ name: West
267
+ offices:
268
+ - city: Portland
269
+ employees: 120
270
+ - city: Seattle
271
+ employees: 200
272
+ - city: San Francisco
273
+ employees: 300
274
+ - code: US-E
275
+ name: East
276
+ offices:
277
+ - city: Boston
278
+ employees: 150
279
+ - city: New York
280
+ employees: 450`,
281
+ options: {
282
+ arrays: [
283
+ {
284
+ path: 'organization.divisions.americas.regions.*.offices',
285
+ sortKey: 'employees',
286
+ },
287
+ ],
288
+ },
289
+ },
290
+ {
291
+ name: 'should handle arrays without the sort key',
292
+ original: `items:
293
+ - id: 3
294
+ name: Hammer
295
+ - name: Screwdriver
296
+ - id: 1
297
+ name: Wrench
298
+ - id: 2`,
299
+ expected: `items:
300
+ - id: 1
301
+ name: Wrench
302
+ - id: 2
303
+ - id: 3
304
+ name: Hammer
305
+ - name: Screwdriver`,
306
+ options: {
307
+ arrays: [{ path: 'items', sortKey: 'id' }],
308
+ },
309
+ },
310
+ {
311
+ name: 'should preserve inline comments when sorting',
312
+ original: `configs:
313
+ - name: production # Production environment
314
+ priority: 3
315
+ active: true
316
+ - name: staging # Staging environment
317
+ priority: 2
318
+ active: true
319
+ - name: development # Development environment
320
+ priority: 1
321
+ active: false`,
322
+ expected: `configs:
323
+ - name: development # Development environment
324
+ priority: 1
325
+ active: false
326
+ - name: staging # Staging environment
327
+ priority: 2
328
+ active: true
329
+ - name: production # Production environment
330
+ priority: 3
331
+ active: true`,
332
+ options: {
333
+ arrays: [{ path: 'configs', sortKey: 'priority' }],
334
+ },
335
+ },
336
+ {
337
+ name: 'should preserve multi-line comments between items',
338
+ original: `services:
339
+ # Database service
340
+ # Handles all data storage
341
+ - name: db
342
+ port: 5432
343
+ # API service
344
+ # Handles external requests
345
+ - name: api
346
+ port: 3000
347
+ # Web service
348
+ # Serves the frontend
349
+ - name: web
350
+ port: 8080`,
351
+ expected: `services:
352
+ # API service
353
+ # Handles external requests
354
+ - name: api
355
+ port: 3000
356
+ # Database service
357
+ # Handles all data storage
358
+ - name: db
359
+ port: 5432
360
+ # Web service
361
+ # Serves the frontend
362
+ - name: web
363
+ port: 8080`,
364
+ options: {
365
+ arrays: [{ path: 'services', sortKey: 'name' }],
366
+ },
367
+ },
368
+ {
369
+ name: 'should handle array indexing with [] in path',
370
+ original: `data:
371
+ - list:
372
+ - value: 3
373
+ - value: 1
374
+ - list:
375
+ - value: 5
376
+ - value: 2`,
377
+ expected: `data:
378
+ - list:
379
+ - value: 1
380
+ - value: 3
381
+ - list:
382
+ - value: 2
383
+ - value: 5`,
384
+ options: {
385
+ arrays: [{ path: 'data[].list', sortKey: 'value' }],
386
+ },
387
+ },
388
+ {
389
+ name: 'should handle wildcard at beginning of path',
390
+ original: `store:
391
+ products:
392
+ - name: Laptop
393
+ price: 1200
394
+ - name: Phone
395
+ price: 800
396
+ services:
397
+ - name: Repair
398
+ price: 150
399
+ - name: Installation
400
+ price: 50`,
401
+ expected: `store:
402
+ products:
403
+ - name: Phone
404
+ price: 800
405
+ - name: Laptop
406
+ price: 1200
407
+ services:
408
+ - name: Installation
409
+ price: 50
410
+ - name: Repair
411
+ price: 150`,
412
+ options: {
413
+ arrays: [
414
+ { path: '*.products', sortKey: 'price' },
415
+ { path: '*.services', sortKey: 'price' },
416
+ ],
417
+ },
418
+ },
419
+ {
420
+ name: 'should handle multiple wildcards in path',
421
+ original: `departments:
422
+ engineering:
423
+ teams:
424
+ frontend:
425
+ members:
426
+ - name: Dave
427
+ level: 3
428
+ - name: Alice
429
+ level: 5
430
+ backend:
431
+ members:
432
+ - name: Bob
433
+ level: 4
434
+ - name: Carol
435
+ level: 2
436
+ design:
437
+ teams:
438
+ ux:
439
+ members:
440
+ - name: Eve
441
+ level: 3
442
+ - name: Frank
443
+ level: 1`,
444
+ expected: `departments:
445
+ engineering:
446
+ teams:
447
+ frontend:
448
+ members:
449
+ - name: Dave
450
+ level: 3
451
+ - name: Alice
452
+ level: 5
453
+ backend:
454
+ members:
455
+ - name: Carol
456
+ level: 2
457
+ - name: Bob
458
+ level: 4
459
+ design:
460
+ teams:
461
+ ux:
462
+ members:
463
+ - name: Frank
464
+ level: 1
465
+ - name: Eve
466
+ level: 3`,
467
+ options: {
468
+ arrays: [{ path: 'departments.*.teams.*.members', sortKey: 'level' }],
469
+ },
470
+ },
471
+ {
472
+ name: 'should handle array notation with number indexes',
473
+ original: `data:
474
+ - id: 1
475
+ items:
476
+ - order: B
477
+ quantity: 5
478
+ - order: A
479
+ quantity: 10
480
+ - id: 2
481
+ items:
482
+ - order: D
483
+ quantity: 2
484
+ - order: C
485
+ quantity: 8`,
486
+ expected: `data:
487
+ - id: 1
488
+ items:
489
+ - order: A
490
+ quantity: 10
491
+ - order: B
492
+ quantity: 5
493
+ - id: 2
494
+ items:
495
+ - order: C
496
+ quantity: 8
497
+ - order: D
498
+ quantity: 2`,
499
+ options: {
500
+ arrays: [{ path: 'data[].items', sortKey: 'order' }],
501
+ },
502
+ },
503
+ {
504
+ name: 'should handle complex path with array notation and wildcards',
505
+ original: `repositories:
506
+ - name: frontend
507
+ branches:
508
+ main:
509
+ commits:
510
+ - hash: abc123
511
+ priority: 3
512
+ - hash: def456
513
+ priority: 1
514
+ develop:
515
+ commits:
516
+ - hash: ghi789
517
+ priority: 2
518
+ - hash: jkl012
519
+ priority: 4
520
+ - name: backend
521
+ branches:
522
+ main:
523
+ commits:
524
+ - hash: mno345
525
+ priority: 5
526
+ - hash: pqr678
527
+ priority: 2
528
+ staging:
529
+ commits:
530
+ - hash: stu901
531
+ priority: 1
532
+ - hash: vwx234
533
+ priority: 3`,
534
+ expected: `repositories:
535
+ - name: frontend
536
+ branches:
537
+ main:
538
+ commits:
539
+ - hash: def456
540
+ priority: 1
541
+ - hash: abc123
542
+ priority: 3
543
+ develop:
544
+ commits:
545
+ - hash: ghi789
546
+ priority: 2
547
+ - hash: jkl012
548
+ priority: 4
549
+ - name: backend
550
+ branches:
551
+ main:
552
+ commits:
553
+ - hash: pqr678
554
+ priority: 2
555
+ - hash: mno345
556
+ priority: 5
557
+ staging:
558
+ commits:
559
+ - hash: stu901
560
+ priority: 1
561
+ - hash: vwx234
562
+ priority: 3`,
563
+ options: {
564
+ arrays: [
565
+ { path: 'repositories[].branches.*.commits', sortKey: 'priority' },
566
+ ],
567
+ },
568
+ },
569
+ {
570
+ name: 'should handle missing sort keys by placing them at the end',
571
+ original: `projects:
572
+ - name: Alpha
573
+ priority: 2
574
+ status: active
575
+ - name: Beta
576
+ status: pending
577
+ - name: Gamma
578
+ priority: 1
579
+ status: active
580
+ - name: Delta
581
+ priority: 3
582
+ status: inactive
583
+ - name: Epsilon
584
+ status: active`,
585
+ expected: `projects:
586
+ - name: Gamma
587
+ priority: 1
588
+ status: active
589
+ - name: Alpha
590
+ priority: 2
591
+ status: active
592
+ - name: Delta
593
+ priority: 3
594
+ status: inactive
595
+ - name: Beta
596
+ status: pending
597
+ - name: Epsilon
598
+ status: active`,
599
+ options: {
600
+ arrays: [{ path: 'projects', sortKey: 'priority' }],
601
+ },
602
+ },
603
+ ];
604
+ testCases.forEach(({ name, original, expected, options = { arrays: [] } }) => {
605
+ it(name, () => {
606
+ const result = runLint(original, 'test.yaml', options);
607
+ if (result) {
608
+ expect(result.fixed).to.be.true;
609
+ expect(result.output).to.equal(expected);
610
+ }
611
+ else {
612
+ expect(original).to.equal(expected);
613
+ }
614
+ });
615
+ });
616
+ it('should ignore non-YAML files', () => {
617
+ const result = runLint(`const data = { name: 'test' };`, 'test.js');
618
+ expect(result).to.be.null;
619
+ });
620
+ });
621
+ //# sourceMappingURL=sort-yaml-arrays.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-yaml-arrays.test.js","sourceRoot":"","sources":["../../src/eslint-rules/sort-yaml-arrays.test.ts"],"names":[],"mappings":"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"}
package/dist/ids.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import { BytesLike } from 'ethers';
2
+ /**
3
+ * Converts a 20-byte (or other length) ID to a 32-byte ID.
4
+ * Ensures that a bytes-like is 32 long. left-padding with 0s if not.
5
+ *
6
+ * @param data A string or array of bytes to canonize
7
+ * @returns A Uint8Array of length 32
8
+ */
9
+ export declare function canonizeId(data: BytesLike): Uint8Array;
10
+ /**
11
+ * Converts a Hyperlane ID of 20 or 32 bytes to the corresponding EVM Address.
12
+ *
13
+ * For 32-byte IDs this enforces the EVM convention of using the LAST 20 bytes.
14
+ *
15
+ * @param data The data to truncate
16
+ * @returns A 20-byte, 0x-prepended hex string representing the EVM Address
17
+ * @throws if the data is not 20 or 32 bytes
18
+ */
19
+ export declare function evmId(data: BytesLike): string;
20
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,QAAQ,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAUtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAU7C"}
package/dist/ids.js ADDED
@@ -0,0 +1,42 @@
1
+ import { utils } from 'ethers';
2
+ /**
3
+ * Converts a 20-byte (or other length) ID to a 32-byte ID.
4
+ * Ensures that a bytes-like is 32 long. left-padding with 0s if not.
5
+ *
6
+ * @param data A string or array of bytes to canonize
7
+ * @returns A Uint8Array of length 32
8
+ */
9
+ export function canonizeId(data) {
10
+ if (!data)
11
+ throw new Error('Bad input. Undefined');
12
+ const buf = utils.arrayify(data);
13
+ if (buf.length > 32) {
14
+ throw new Error('Too long');
15
+ }
16
+ if (buf.length !== 20 && buf.length != 32) {
17
+ throw new Error('bad input, expect address or bytes32');
18
+ }
19
+ return utils.zeroPad(buf, 32);
20
+ }
21
+ /**
22
+ * Converts a Hyperlane ID of 20 or 32 bytes to the corresponding EVM Address.
23
+ *
24
+ * For 32-byte IDs this enforces the EVM convention of using the LAST 20 bytes.
25
+ *
26
+ * @param data The data to truncate
27
+ * @returns A 20-byte, 0x-prepended hex string representing the EVM Address
28
+ * @throws if the data is not 20 or 32 bytes
29
+ */
30
+ export function evmId(data) {
31
+ const u8a = utils.arrayify(data);
32
+ if (u8a.length === 32) {
33
+ return utils.hexlify(u8a.slice(12, 32));
34
+ }
35
+ else if (u8a.length === 20) {
36
+ return utils.hexlify(u8a);
37
+ }
38
+ else {
39
+ throw new Error(`Invalid id length. expected 20 or 32. Got ${u8a.length}`);
40
+ }
41
+ }
42
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CAAC,IAAe;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ids.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.test.d.ts","sourceRoot":"","sources":["../src/ids.test.ts"],"names":[],"mappings":""}