a textual notation to locate fields within atproto records (draft spec) microcosm.tngl.io/RecordPath/
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

initial interop tests

phil 2faf139d af035107

+2182 -3
+126
interop-tests/enumerate.json
··· 1 + { 2 + "description": "RecordPath enumeration tests. Each test provides a record and the complete set of expected paths with their types. Expected paths are compared as unordered sets.", 3 + "tests": [ 4 + { 5 + "description": "flat object with scalars", 6 + "record": { 7 + "$type": "test.example", 8 + "name": "alice", 9 + "count": 3 10 + }, 11 + "expected": [ 12 + { "path": "$type", "type": "scalar" }, 13 + { "path": "name", "type": "scalar" }, 14 + { "path": "count", "type": "scalar" } 15 + ] 16 + }, 17 + { 18 + "description": "nested object", 19 + "record": { 20 + "subject": { 21 + "uri": "at://example", 22 + "cid": "bafyreiabc" 23 + } 24 + }, 25 + "expected": [ 26 + { "path": "subject", "type": "scalar" }, 27 + { "path": "subject.uri", "type": "scalar" }, 28 + { "path": "subject.cid", "type": "scalar" } 29 + ] 30 + }, 31 + { 32 + "description": "array of scalars", 33 + "record": { 34 + "tags": ["art", "science"] 35 + }, 36 + "expected": [ 37 + { "path": "tags", "type": "scalar" }, 38 + { "path": "tags[]", "type": "vector" } 39 + ] 40 + }, 41 + { 42 + "description": "array of plain objects", 43 + "record": { 44 + "items": [ 45 + { "name": "one" }, 46 + { "name": "two" } 47 + ] 48 + }, 49 + "expected": [ 50 + { "path": "items", "type": "scalar" }, 51 + { "path": "items[]", "type": "vector" }, 52 + { "path": "items[].name", "type": "vector" } 53 + ] 54 + }, 55 + { 56 + "description": "array of unions", 57 + "record": { 58 + "features": [ 59 + { "$type": "example#link", "uri": "https://example.com" }, 60 + { "$type": "example#mention", "did": "did:plc:alice" } 61 + ] 62 + }, 63 + "expected": [ 64 + { "path": "features", "type": "scalar" }, 65 + { "path": "features[example#link]", "type": "vector" }, 66 + { "path": "features[example#link].$type", "type": "vector" }, 67 + { "path": "features[example#link].uri", "type": "vector" }, 68 + { "path": "features[example#mention]", "type": "vector" }, 69 + { "path": "features[example#mention].$type", "type": "vector" }, 70 + { "path": "features[example#mention].did", "type": "vector" } 71 + ] 72 + }, 73 + { 74 + "description": "scalar union (nested object with $type)", 75 + "record": { 76 + "$type": "test.record", 77 + "embed": { 78 + "$type": "test.embed.external", 79 + "uri": "https://example.com" 80 + } 81 + }, 82 + "expected": [ 83 + { "path": "$type", "type": "scalar" }, 84 + { "path": "embed", "type": "scalar" }, 85 + { "path": "embed{test.embed.external}", "type": "scalar" }, 86 + { "path": "embed{test.embed.external}.$type", "type": "scalar" }, 87 + { "path": "embed{test.embed.external}.uri", "type": "scalar" } 88 + ] 89 + }, 90 + { 91 + "description": "root $type is not union-qualified", 92 + "record": { 93 + "$type": "app.bsky.feed.like", 94 + "text": "hello" 95 + }, 96 + "expected": [ 97 + { "path": "$type", "type": "scalar" }, 98 + { "path": "text", "type": "scalar" } 99 + ] 100 + }, 101 + { 102 + "description": "nested arrays produce vector paths throughout", 103 + "record": { 104 + "groups": [ 105 + { "items": ["a", "b"] }, 106 + { "items": ["c"] } 107 + ] 108 + }, 109 + "expected": [ 110 + { "path": "groups", "type": "scalar" }, 111 + { "path": "groups[]", "type": "vector" }, 112 + { "path": "groups[].items", "type": "vector" }, 113 + { "path": "groups[].items[]", "type": "vector" } 114 + ] 115 + }, 116 + { 117 + "description": "field name requiring escape", 118 + "record": { 119 + "dot.key": "value" 120 + }, 121 + "expected": [ 122 + { "path": "dot!.key", "type": "scalar" } 123 + ] 124 + } 125 + ] 126 + }
+293
interop-tests/match.json
··· 1 + { 2 + "description": "RecordPath match tests. Each test provides a record, a path, and the expected matched values. For vector paths, matched values are compared as unordered sets.", 3 + "tests": [ 4 + { 5 + "description": "simple top-level scalar field", 6 + "record": { 7 + "$type": "app.bsky.feed.like", 8 + "createdAt": "2024-01-15T00:00:00.000Z", 9 + "subject": { 10 + "uri": "at://did:plc:example/app.bsky.feed.post/abc", 11 + "cid": "bafyreiabc" 12 + } 13 + }, 14 + "path": "createdAt", 15 + "expected": ["2024-01-15T00:00:00.000Z"] 16 + }, 17 + { 18 + "description": "nested scalar field", 19 + "record": { 20 + "$type": "app.bsky.feed.like", 21 + "subject": { 22 + "uri": "at://did:plc:example/app.bsky.feed.post/abc", 23 + "cid": "bafyreiabc" 24 + } 25 + }, 26 + "path": "subject.uri", 27 + "expected": ["at://did:plc:example/app.bsky.feed.post/abc"] 28 + }, 29 + { 30 + "description": "select sub-object", 31 + "record": { 32 + "$type": "app.bsky.feed.like", 33 + "subject": { 34 + "uri": "at://did:plc:example/app.bsky.feed.post/abc", 35 + "cid": "bafyreiabc" 36 + } 37 + }, 38 + "path": "subject", 39 + "expected": [ 40 + { 41 + "uri": "at://did:plc:example/app.bsky.feed.post/abc", 42 + "cid": "bafyreiabc" 43 + } 44 + ] 45 + }, 46 + { 47 + "description": "select $type as regular field", 48 + "record": { 49 + "$type": "app.bsky.feed.like", 50 + "subject": { "uri": "at://example", "cid": "bafyreiabc" } 51 + }, 52 + "path": "$type", 53 + "expected": ["app.bsky.feed.like"] 54 + }, 55 + { 56 + "description": "non-existent field returns empty", 57 + "record": { 58 + "$type": "app.bsky.feed.like", 59 + "subject": { "uri": "at://example" } 60 + }, 61 + "path": "missing", 62 + "expected": [] 63 + }, 64 + { 65 + "description": "non-existent nested field returns empty", 66 + "record": { 67 + "subject": { "uri": "at://example" } 68 + }, 69 + "path": "subject.missing", 70 + "expected": [] 71 + }, 72 + { 73 + "description": "path into scalar returns empty", 74 + "record": { 75 + "text": "hello" 76 + }, 77 + "path": "text.nested", 78 + "expected": [] 79 + }, 80 + { 81 + "description": "array of scalars", 82 + "record": { 83 + "tags": ["art", "science"] 84 + }, 85 + "path": "tags[]", 86 + "expected": ["art", "science"] 87 + }, 88 + { 89 + "description": "array of objects, select field", 90 + "record": { 91 + "references": [ 92 + { "title": "paper one" }, 93 + { "title": "paper two" } 94 + ] 95 + }, 96 + "path": "references[].title", 97 + "expected": ["paper one", "paper two"] 98 + }, 99 + { 100 + "description": "nested array traversal", 101 + "record": { 102 + "references": [ 103 + { "urls": ["https://a.example.com", "https://b.example.com"] }, 104 + { "urls": ["https://c.example.com"] } 105 + ] 106 + }, 107 + "path": "references[].urls[]", 108 + "expected": [ 109 + "https://a.example.com", 110 + "https://b.example.com", 111 + "https://c.example.com" 112 + ] 113 + }, 114 + { 115 + "description": "array path on non-array returns empty", 116 + "record": { 117 + "tags": "not-an-array" 118 + }, 119 + "path": "tags[]", 120 + "expected": [] 121 + }, 122 + { 123 + "description": "empty array returns empty", 124 + "record": { 125 + "tags": [] 126 + }, 127 + "path": "tags[]", 128 + "expected": [] 129 + }, 130 + { 131 + "description": "array of unions, filter by $type", 132 + "record": { 133 + "facets": [ 134 + { 135 + "features": [ 136 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://example.com" }, 137 + { "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:alice" } 138 + ] 139 + } 140 + ] 141 + }, 142 + "path": "facets[].features[app.bsky.richtext.facet#link].uri", 143 + "expected": ["https://example.com"] 144 + }, 145 + { 146 + "description": "array of unions, different $type filter", 147 + "record": { 148 + "facets": [ 149 + { 150 + "features": [ 151 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://example.com" }, 152 + { "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:alice" } 153 + ] 154 + } 155 + ] 156 + }, 157 + "path": "facets[].features[app.bsky.richtext.facet#mention].did", 158 + "expected": ["did:plc:alice"] 159 + }, 160 + { 161 + "description": "array of unions, wrong $type returns empty", 162 + "record": { 163 + "features": [ 164 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://example.com" } 165 + ] 166 + }, 167 + "path": "features[app.bsky.richtext.facet#mention].did", 168 + "expected": [] 169 + }, 170 + { 171 + "description": "array of unions, multiple matching elements", 172 + "record": { 173 + "features": [ 174 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://a.example.com" }, 175 + { "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:alice" }, 176 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://b.example.com" } 177 + ] 178 + }, 179 + "path": "features[app.bsky.richtext.facet#link].uri", 180 + "expected": ["https://a.example.com", "https://b.example.com"] 181 + }, 182 + { 183 + "description": "scalar union field", 184 + "record": { 185 + "$type": "app.bsky.feed.post", 186 + "embed": { 187 + "$type": "app.bsky.embed.external", 188 + "external": { 189 + "uri": "https://example.com", 190 + "title": "Example" 191 + } 192 + } 193 + }, 194 + "path": "embed{app.bsky.embed.external}.external.uri", 195 + "expected": ["https://example.com"] 196 + }, 197 + { 198 + "description": "scalar union, wrong $type returns empty", 199 + "record": { 200 + "$type": "app.bsky.feed.post", 201 + "embed": { 202 + "$type": "app.bsky.embed.external", 203 + "external": { "uri": "https://example.com" } 204 + } 205 + }, 206 + "path": "embed{app.bsky.embed.record}.record.uri", 207 + "expected": [] 208 + }, 209 + { 210 + "description": "scalar union, select the union object itself", 211 + "record": { 212 + "embed": { 213 + "$type": "app.bsky.embed.external", 214 + "external": { "uri": "https://example.com" } 215 + } 216 + }, 217 + "path": "embed{app.bsky.embed.external}", 218 + "expected": [ 219 + { 220 + "$type": "app.bsky.embed.external", 221 + "external": { "uri": "https://example.com" } 222 + } 223 + ] 224 + }, 225 + { 226 + "description": "escaped dot in field name", 227 + "record": { 228 + "dot.key": "dotted" 229 + }, 230 + "path": "dot!.key", 231 + "expected": ["dotted"] 232 + }, 233 + { 234 + "description": "escaped bang in field name", 235 + "record": { 236 + "a!b": "banged" 237 + }, 238 + "path": "a!!b", 239 + "expected": ["banged"] 240 + }, 241 + { 242 + "description": "escaped bracket in field name", 243 + "record": { 244 + "a[0]": "bracketed" 245 + }, 246 + "path": "a![0!]", 247 + "expected": ["bracketed"] 248 + }, 249 + { 250 + "description": "escaped brace in field name", 251 + "record": { 252 + "a{b}": "braced" 253 + }, 254 + "path": "a!{b!}", 255 + "expected": ["braced"] 256 + }, 257 + { 258 + "description": "$-prefixed key is ordinary", 259 + "record": { 260 + "$custom": "value" 261 + }, 262 + "path": "$custom", 263 + "expected": ["value"] 264 + }, 265 + { 266 + "description": "root-level $type is not treated as union qualifier", 267 + "record": { 268 + "$type": "app.bsky.feed.like", 269 + "subject": { "uri": "at://example" } 270 + }, 271 + "path": "subject.uri", 272 + "expected": ["at://example"] 273 + }, 274 + { 275 + "description": "boolean value", 276 + "record": { "active": true }, 277 + "path": "active", 278 + "expected": [true] 279 + }, 280 + { 281 + "description": "null value", 282 + "record": { "deleted": null }, 283 + "path": "deleted", 284 + "expected": [null] 285 + }, 286 + { 287 + "description": "numeric value", 288 + "record": { "count": 42 }, 289 + "path": "count", 290 + "expected": [42] 291 + } 292 + ] 293 + }
+117
interop-tests/parse.json
··· 1 + { 2 + "description": "RecordPath parsing tests: type classification (scalar vs vector) and validity.", 3 + "type_tests": [ 4 + { 5 + "description": "simple key is scalar", 6 + "path": "text", 7 + "type": "scalar" 8 + }, 9 + { 10 + "description": "dotted path is scalar", 11 + "path": "subject.uri", 12 + "type": "scalar" 13 + }, 14 + { 15 + "description": "deeply nested path is scalar", 16 + "path": "a.b.c.d.e", 17 + "type": "scalar" 18 + }, 19 + { 20 + "description": "scalar union is scalar", 21 + "path": "embed{app.bsky.embed.record}.record.uri", 22 + "type": "scalar" 23 + }, 24 + { 25 + "description": "bare array is vector", 26 + "path": "tags[]", 27 + "type": "vector" 28 + }, 29 + { 30 + "description": "array with trailing key is vector", 31 + "path": "items[].name", 32 + "type": "vector" 33 + }, 34 + { 35 + "description": "union array is vector", 36 + "path": "features[app.bsky.richtext.facet#link].uri", 37 + "type": "vector" 38 + }, 39 + { 40 + "description": "nested arrays is vector", 41 + "path": "groups[].items[]", 42 + "type": "vector" 43 + }, 44 + { 45 + "description": "scalar union + array is vector", 46 + "path": "embed{app.bsky.embed.images}.images[].alt", 47 + "type": "vector" 48 + }, 49 + { 50 + "description": "escaped dot does not make it vector", 51 + "path": "dot!.key", 52 + "type": "scalar" 53 + }, 54 + { 55 + "description": "escaped bracket does not make it vector", 56 + "path": "a![0!]", 57 + "type": "scalar" 58 + }, 59 + { 60 + "description": "$type path is scalar", 61 + "path": "$type", 62 + "type": "scalar" 63 + } 64 + ], 65 + "invalid_tests": [ 66 + { 67 + "description": "empty string", 68 + "path": "", 69 + "note": "a RecordPath must have at least one segment" 70 + }, 71 + { 72 + "description": "unclosed square bracket", 73 + "path": "field[", 74 + "note": "missing closing ]" 75 + }, 76 + { 77 + "description": "unclosed curly brace", 78 + "path": "field{nsid", 79 + "note": "missing closing }" 80 + }, 81 + { 82 + "description": "unopened square bracket", 83 + "path": "field]", 84 + "note": "missing opening [" 85 + }, 86 + { 87 + "description": "unopened curly brace", 88 + "path": "field}nsid", 89 + "note": "missing opening {" 90 + }, 91 + { 92 + "description": "trailing dot", 93 + "path": "field.", 94 + "note": "empty segment after dot" 95 + }, 96 + { 97 + "description": "leading dot", 98 + "path": ".field", 99 + "note": "empty segment before dot" 100 + }, 101 + { 102 + "description": "double dot", 103 + "path": "a..b", 104 + "note": "empty segment between dots" 105 + }, 106 + { 107 + "description": "escape followed by a non-escapable character", 108 + "path": "field!s", 109 + "note": "escape character with nothing to escape" 110 + }, 111 + { 112 + "description": "lone escape at end of input", 113 + "path": "field!", 114 + "note": "escape character with nothing to escape" 115 + } 116 + ] 117 + }
+1572 -1
ref-impl-js/package-lock.json
··· 9 9 "version": "0.0.1", 10 10 "license": "MIT OR Apache-2.0", 11 11 "devDependencies": { 12 - "typescript": "^5.0.0" 12 + "typescript": "^5.0.0", 13 + "vitest": "^3.0.0" 14 + } 15 + }, 16 + "node_modules/@esbuild/aix-ppc64": { 17 + "version": "0.27.7", 18 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", 19 + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", 20 + "cpu": [ 21 + "ppc64" 22 + ], 23 + "dev": true, 24 + "license": "MIT", 25 + "optional": true, 26 + "os": [ 27 + "aix" 28 + ], 29 + "engines": { 30 + "node": ">=18" 31 + } 32 + }, 33 + "node_modules/@esbuild/android-arm": { 34 + "version": "0.27.7", 35 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", 36 + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", 37 + "cpu": [ 38 + "arm" 39 + ], 40 + "dev": true, 41 + "license": "MIT", 42 + "optional": true, 43 + "os": [ 44 + "android" 45 + ], 46 + "engines": { 47 + "node": ">=18" 48 + } 49 + }, 50 + "node_modules/@esbuild/android-arm64": { 51 + "version": "0.27.7", 52 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", 53 + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", 54 + "cpu": [ 55 + "arm64" 56 + ], 57 + "dev": true, 58 + "license": "MIT", 59 + "optional": true, 60 + "os": [ 61 + "android" 62 + ], 63 + "engines": { 64 + "node": ">=18" 65 + } 66 + }, 67 + "node_modules/@esbuild/android-x64": { 68 + "version": "0.27.7", 69 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", 70 + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", 71 + "cpu": [ 72 + "x64" 73 + ], 74 + "dev": true, 75 + "license": "MIT", 76 + "optional": true, 77 + "os": [ 78 + "android" 79 + ], 80 + "engines": { 81 + "node": ">=18" 82 + } 83 + }, 84 + "node_modules/@esbuild/darwin-arm64": { 85 + "version": "0.27.7", 86 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", 87 + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", 88 + "cpu": [ 89 + "arm64" 90 + ], 91 + "dev": true, 92 + "license": "MIT", 93 + "optional": true, 94 + "os": [ 95 + "darwin" 96 + ], 97 + "engines": { 98 + "node": ">=18" 99 + } 100 + }, 101 + "node_modules/@esbuild/darwin-x64": { 102 + "version": "0.27.7", 103 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", 104 + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", 105 + "cpu": [ 106 + "x64" 107 + ], 108 + "dev": true, 109 + "license": "MIT", 110 + "optional": true, 111 + "os": [ 112 + "darwin" 113 + ], 114 + "engines": { 115 + "node": ">=18" 116 + } 117 + }, 118 + "node_modules/@esbuild/freebsd-arm64": { 119 + "version": "0.27.7", 120 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", 121 + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", 122 + "cpu": [ 123 + "arm64" 124 + ], 125 + "dev": true, 126 + "license": "MIT", 127 + "optional": true, 128 + "os": [ 129 + "freebsd" 130 + ], 131 + "engines": { 132 + "node": ">=18" 133 + } 134 + }, 135 + "node_modules/@esbuild/freebsd-x64": { 136 + "version": "0.27.7", 137 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", 138 + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", 139 + "cpu": [ 140 + "x64" 141 + ], 142 + "dev": true, 143 + "license": "MIT", 144 + "optional": true, 145 + "os": [ 146 + "freebsd" 147 + ], 148 + "engines": { 149 + "node": ">=18" 150 + } 151 + }, 152 + "node_modules/@esbuild/linux-arm": { 153 + "version": "0.27.7", 154 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", 155 + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", 156 + "cpu": [ 157 + "arm" 158 + ], 159 + "dev": true, 160 + "license": "MIT", 161 + "optional": true, 162 + "os": [ 163 + "linux" 164 + ], 165 + "engines": { 166 + "node": ">=18" 167 + } 168 + }, 169 + "node_modules/@esbuild/linux-arm64": { 170 + "version": "0.27.7", 171 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", 172 + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", 173 + "cpu": [ 174 + "arm64" 175 + ], 176 + "dev": true, 177 + "license": "MIT", 178 + "optional": true, 179 + "os": [ 180 + "linux" 181 + ], 182 + "engines": { 183 + "node": ">=18" 184 + } 185 + }, 186 + "node_modules/@esbuild/linux-ia32": { 187 + "version": "0.27.7", 188 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", 189 + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", 190 + "cpu": [ 191 + "ia32" 192 + ], 193 + "dev": true, 194 + "license": "MIT", 195 + "optional": true, 196 + "os": [ 197 + "linux" 198 + ], 199 + "engines": { 200 + "node": ">=18" 201 + } 202 + }, 203 + "node_modules/@esbuild/linux-loong64": { 204 + "version": "0.27.7", 205 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", 206 + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", 207 + "cpu": [ 208 + "loong64" 209 + ], 210 + "dev": true, 211 + "license": "MIT", 212 + "optional": true, 213 + "os": [ 214 + "linux" 215 + ], 216 + "engines": { 217 + "node": ">=18" 218 + } 219 + }, 220 + "node_modules/@esbuild/linux-mips64el": { 221 + "version": "0.27.7", 222 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", 223 + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", 224 + "cpu": [ 225 + "mips64el" 226 + ], 227 + "dev": true, 228 + "license": "MIT", 229 + "optional": true, 230 + "os": [ 231 + "linux" 232 + ], 233 + "engines": { 234 + "node": ">=18" 235 + } 236 + }, 237 + "node_modules/@esbuild/linux-ppc64": { 238 + "version": "0.27.7", 239 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", 240 + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", 241 + "cpu": [ 242 + "ppc64" 243 + ], 244 + "dev": true, 245 + "license": "MIT", 246 + "optional": true, 247 + "os": [ 248 + "linux" 249 + ], 250 + "engines": { 251 + "node": ">=18" 252 + } 253 + }, 254 + "node_modules/@esbuild/linux-riscv64": { 255 + "version": "0.27.7", 256 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", 257 + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", 258 + "cpu": [ 259 + "riscv64" 260 + ], 261 + "dev": true, 262 + "license": "MIT", 263 + "optional": true, 264 + "os": [ 265 + "linux" 266 + ], 267 + "engines": { 268 + "node": ">=18" 269 + } 270 + }, 271 + "node_modules/@esbuild/linux-s390x": { 272 + "version": "0.27.7", 273 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", 274 + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", 275 + "cpu": [ 276 + "s390x" 277 + ], 278 + "dev": true, 279 + "license": "MIT", 280 + "optional": true, 281 + "os": [ 282 + "linux" 283 + ], 284 + "engines": { 285 + "node": ">=18" 286 + } 287 + }, 288 + "node_modules/@esbuild/linux-x64": { 289 + "version": "0.27.7", 290 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", 291 + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", 292 + "cpu": [ 293 + "x64" 294 + ], 295 + "dev": true, 296 + "license": "MIT", 297 + "optional": true, 298 + "os": [ 299 + "linux" 300 + ], 301 + "engines": { 302 + "node": ">=18" 303 + } 304 + }, 305 + "node_modules/@esbuild/netbsd-arm64": { 306 + "version": "0.27.7", 307 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", 308 + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", 309 + "cpu": [ 310 + "arm64" 311 + ], 312 + "dev": true, 313 + "license": "MIT", 314 + "optional": true, 315 + "os": [ 316 + "netbsd" 317 + ], 318 + "engines": { 319 + "node": ">=18" 320 + } 321 + }, 322 + "node_modules/@esbuild/netbsd-x64": { 323 + "version": "0.27.7", 324 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", 325 + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", 326 + "cpu": [ 327 + "x64" 328 + ], 329 + "dev": true, 330 + "license": "MIT", 331 + "optional": true, 332 + "os": [ 333 + "netbsd" 334 + ], 335 + "engines": { 336 + "node": ">=18" 337 + } 338 + }, 339 + "node_modules/@esbuild/openbsd-arm64": { 340 + "version": "0.27.7", 341 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", 342 + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", 343 + "cpu": [ 344 + "arm64" 345 + ], 346 + "dev": true, 347 + "license": "MIT", 348 + "optional": true, 349 + "os": [ 350 + "openbsd" 351 + ], 352 + "engines": { 353 + "node": ">=18" 354 + } 355 + }, 356 + "node_modules/@esbuild/openbsd-x64": { 357 + "version": "0.27.7", 358 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", 359 + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", 360 + "cpu": [ 361 + "x64" 362 + ], 363 + "dev": true, 364 + "license": "MIT", 365 + "optional": true, 366 + "os": [ 367 + "openbsd" 368 + ], 369 + "engines": { 370 + "node": ">=18" 371 + } 372 + }, 373 + "node_modules/@esbuild/openharmony-arm64": { 374 + "version": "0.27.7", 375 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", 376 + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", 377 + "cpu": [ 378 + "arm64" 379 + ], 380 + "dev": true, 381 + "license": "MIT", 382 + "optional": true, 383 + "os": [ 384 + "openharmony" 385 + ], 386 + "engines": { 387 + "node": ">=18" 388 + } 389 + }, 390 + "node_modules/@esbuild/sunos-x64": { 391 + "version": "0.27.7", 392 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", 393 + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", 394 + "cpu": [ 395 + "x64" 396 + ], 397 + "dev": true, 398 + "license": "MIT", 399 + "optional": true, 400 + "os": [ 401 + "sunos" 402 + ], 403 + "engines": { 404 + "node": ">=18" 405 + } 406 + }, 407 + "node_modules/@esbuild/win32-arm64": { 408 + "version": "0.27.7", 409 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", 410 + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", 411 + "cpu": [ 412 + "arm64" 413 + ], 414 + "dev": true, 415 + "license": "MIT", 416 + "optional": true, 417 + "os": [ 418 + "win32" 419 + ], 420 + "engines": { 421 + "node": ">=18" 422 + } 423 + }, 424 + "node_modules/@esbuild/win32-ia32": { 425 + "version": "0.27.7", 426 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", 427 + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", 428 + "cpu": [ 429 + "ia32" 430 + ], 431 + "dev": true, 432 + "license": "MIT", 433 + "optional": true, 434 + "os": [ 435 + "win32" 436 + ], 437 + "engines": { 438 + "node": ">=18" 439 + } 440 + }, 441 + "node_modules/@esbuild/win32-x64": { 442 + "version": "0.27.7", 443 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", 444 + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", 445 + "cpu": [ 446 + "x64" 447 + ], 448 + "dev": true, 449 + "license": "MIT", 450 + "optional": true, 451 + "os": [ 452 + "win32" 453 + ], 454 + "engines": { 455 + "node": ">=18" 456 + } 457 + }, 458 + "node_modules/@jridgewell/sourcemap-codec": { 459 + "version": "1.5.5", 460 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 461 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 462 + "dev": true, 463 + "license": "MIT" 464 + }, 465 + "node_modules/@rollup/rollup-android-arm-eabi": { 466 + "version": "4.60.1", 467 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", 468 + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", 469 + "cpu": [ 470 + "arm" 471 + ], 472 + "dev": true, 473 + "license": "MIT", 474 + "optional": true, 475 + "os": [ 476 + "android" 477 + ] 478 + }, 479 + "node_modules/@rollup/rollup-android-arm64": { 480 + "version": "4.60.1", 481 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", 482 + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", 483 + "cpu": [ 484 + "arm64" 485 + ], 486 + "dev": true, 487 + "license": "MIT", 488 + "optional": true, 489 + "os": [ 490 + "android" 491 + ] 492 + }, 493 + "node_modules/@rollup/rollup-darwin-arm64": { 494 + "version": "4.60.1", 495 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", 496 + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", 497 + "cpu": [ 498 + "arm64" 499 + ], 500 + "dev": true, 501 + "license": "MIT", 502 + "optional": true, 503 + "os": [ 504 + "darwin" 505 + ] 506 + }, 507 + "node_modules/@rollup/rollup-darwin-x64": { 508 + "version": "4.60.1", 509 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", 510 + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", 511 + "cpu": [ 512 + "x64" 513 + ], 514 + "dev": true, 515 + "license": "MIT", 516 + "optional": true, 517 + "os": [ 518 + "darwin" 519 + ] 520 + }, 521 + "node_modules/@rollup/rollup-freebsd-arm64": { 522 + "version": "4.60.1", 523 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", 524 + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", 525 + "cpu": [ 526 + "arm64" 527 + ], 528 + "dev": true, 529 + "license": "MIT", 530 + "optional": true, 531 + "os": [ 532 + "freebsd" 533 + ] 534 + }, 535 + "node_modules/@rollup/rollup-freebsd-x64": { 536 + "version": "4.60.1", 537 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", 538 + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", 539 + "cpu": [ 540 + "x64" 541 + ], 542 + "dev": true, 543 + "license": "MIT", 544 + "optional": true, 545 + "os": [ 546 + "freebsd" 547 + ] 548 + }, 549 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 550 + "version": "4.60.1", 551 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", 552 + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", 553 + "cpu": [ 554 + "arm" 555 + ], 556 + "dev": true, 557 + "license": "MIT", 558 + "optional": true, 559 + "os": [ 560 + "linux" 561 + ] 562 + }, 563 + "node_modules/@rollup/rollup-linux-arm-musleabihf": { 564 + "version": "4.60.1", 565 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", 566 + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", 567 + "cpu": [ 568 + "arm" 569 + ], 570 + "dev": true, 571 + "license": "MIT", 572 + "optional": true, 573 + "os": [ 574 + "linux" 575 + ] 576 + }, 577 + "node_modules/@rollup/rollup-linux-arm64-gnu": { 578 + "version": "4.60.1", 579 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", 580 + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", 581 + "cpu": [ 582 + "arm64" 583 + ], 584 + "dev": true, 585 + "license": "MIT", 586 + "optional": true, 587 + "os": [ 588 + "linux" 589 + ] 590 + }, 591 + "node_modules/@rollup/rollup-linux-arm64-musl": { 592 + "version": "4.60.1", 593 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", 594 + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", 595 + "cpu": [ 596 + "arm64" 597 + ], 598 + "dev": true, 599 + "license": "MIT", 600 + "optional": true, 601 + "os": [ 602 + "linux" 603 + ] 604 + }, 605 + "node_modules/@rollup/rollup-linux-loong64-gnu": { 606 + "version": "4.60.1", 607 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", 608 + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", 609 + "cpu": [ 610 + "loong64" 611 + ], 612 + "dev": true, 613 + "license": "MIT", 614 + "optional": true, 615 + "os": [ 616 + "linux" 617 + ] 618 + }, 619 + "node_modules/@rollup/rollup-linux-loong64-musl": { 620 + "version": "4.60.1", 621 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", 622 + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", 623 + "cpu": [ 624 + "loong64" 625 + ], 626 + "dev": true, 627 + "license": "MIT", 628 + "optional": true, 629 + "os": [ 630 + "linux" 631 + ] 632 + }, 633 + "node_modules/@rollup/rollup-linux-ppc64-gnu": { 634 + "version": "4.60.1", 635 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", 636 + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", 637 + "cpu": [ 638 + "ppc64" 639 + ], 640 + "dev": true, 641 + "license": "MIT", 642 + "optional": true, 643 + "os": [ 644 + "linux" 645 + ] 646 + }, 647 + "node_modules/@rollup/rollup-linux-ppc64-musl": { 648 + "version": "4.60.1", 649 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", 650 + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", 651 + "cpu": [ 652 + "ppc64" 653 + ], 654 + "dev": true, 655 + "license": "MIT", 656 + "optional": true, 657 + "os": [ 658 + "linux" 659 + ] 660 + }, 661 + "node_modules/@rollup/rollup-linux-riscv64-gnu": { 662 + "version": "4.60.1", 663 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", 664 + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", 665 + "cpu": [ 666 + "riscv64" 667 + ], 668 + "dev": true, 669 + "license": "MIT", 670 + "optional": true, 671 + "os": [ 672 + "linux" 673 + ] 674 + }, 675 + "node_modules/@rollup/rollup-linux-riscv64-musl": { 676 + "version": "4.60.1", 677 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", 678 + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", 679 + "cpu": [ 680 + "riscv64" 681 + ], 682 + "dev": true, 683 + "license": "MIT", 684 + "optional": true, 685 + "os": [ 686 + "linux" 687 + ] 688 + }, 689 + "node_modules/@rollup/rollup-linux-s390x-gnu": { 690 + "version": "4.60.1", 691 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", 692 + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", 693 + "cpu": [ 694 + "s390x" 695 + ], 696 + "dev": true, 697 + "license": "MIT", 698 + "optional": true, 699 + "os": [ 700 + "linux" 701 + ] 702 + }, 703 + "node_modules/@rollup/rollup-linux-x64-gnu": { 704 + "version": "4.60.1", 705 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", 706 + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", 707 + "cpu": [ 708 + "x64" 709 + ], 710 + "dev": true, 711 + "license": "MIT", 712 + "optional": true, 713 + "os": [ 714 + "linux" 715 + ] 716 + }, 717 + "node_modules/@rollup/rollup-linux-x64-musl": { 718 + "version": "4.60.1", 719 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", 720 + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", 721 + "cpu": [ 722 + "x64" 723 + ], 724 + "dev": true, 725 + "license": "MIT", 726 + "optional": true, 727 + "os": [ 728 + "linux" 729 + ] 730 + }, 731 + "node_modules/@rollup/rollup-openbsd-x64": { 732 + "version": "4.60.1", 733 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", 734 + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", 735 + "cpu": [ 736 + "x64" 737 + ], 738 + "dev": true, 739 + "license": "MIT", 740 + "optional": true, 741 + "os": [ 742 + "openbsd" 743 + ] 744 + }, 745 + "node_modules/@rollup/rollup-openharmony-arm64": { 746 + "version": "4.60.1", 747 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", 748 + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", 749 + "cpu": [ 750 + "arm64" 751 + ], 752 + "dev": true, 753 + "license": "MIT", 754 + "optional": true, 755 + "os": [ 756 + "openharmony" 757 + ] 758 + }, 759 + "node_modules/@rollup/rollup-win32-arm64-msvc": { 760 + "version": "4.60.1", 761 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", 762 + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", 763 + "cpu": [ 764 + "arm64" 765 + ], 766 + "dev": true, 767 + "license": "MIT", 768 + "optional": true, 769 + "os": [ 770 + "win32" 771 + ] 772 + }, 773 + "node_modules/@rollup/rollup-win32-ia32-msvc": { 774 + "version": "4.60.1", 775 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", 776 + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", 777 + "cpu": [ 778 + "ia32" 779 + ], 780 + "dev": true, 781 + "license": "MIT", 782 + "optional": true, 783 + "os": [ 784 + "win32" 785 + ] 786 + }, 787 + "node_modules/@rollup/rollup-win32-x64-gnu": { 788 + "version": "4.60.1", 789 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", 790 + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", 791 + "cpu": [ 792 + "x64" 793 + ], 794 + "dev": true, 795 + "license": "MIT", 796 + "optional": true, 797 + "os": [ 798 + "win32" 799 + ] 800 + }, 801 + "node_modules/@rollup/rollup-win32-x64-msvc": { 802 + "version": "4.60.1", 803 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", 804 + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", 805 + "cpu": [ 806 + "x64" 807 + ], 808 + "dev": true, 809 + "license": "MIT", 810 + "optional": true, 811 + "os": [ 812 + "win32" 813 + ] 814 + }, 815 + "node_modules/@types/chai": { 816 + "version": "5.2.3", 817 + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", 818 + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", 819 + "dev": true, 820 + "license": "MIT", 821 + "dependencies": { 822 + "@types/deep-eql": "*", 823 + "assertion-error": "^2.0.1" 824 + } 825 + }, 826 + "node_modules/@types/deep-eql": { 827 + "version": "4.0.2", 828 + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", 829 + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", 830 + "dev": true, 831 + "license": "MIT" 832 + }, 833 + "node_modules/@types/estree": { 834 + "version": "1.0.8", 835 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 836 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 837 + "dev": true, 838 + "license": "MIT" 839 + }, 840 + "node_modules/@vitest/expect": { 841 + "version": "3.2.4", 842 + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", 843 + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", 844 + "dev": true, 845 + "license": "MIT", 846 + "dependencies": { 847 + "@types/chai": "^5.2.2", 848 + "@vitest/spy": "3.2.4", 849 + "@vitest/utils": "3.2.4", 850 + "chai": "^5.2.0", 851 + "tinyrainbow": "^2.0.0" 852 + }, 853 + "funding": { 854 + "url": "https://opencollective.com/vitest" 855 + } 856 + }, 857 + "node_modules/@vitest/mocker": { 858 + "version": "3.2.4", 859 + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", 860 + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", 861 + "dev": true, 862 + "license": "MIT", 863 + "dependencies": { 864 + "@vitest/spy": "3.2.4", 865 + "estree-walker": "^3.0.3", 866 + "magic-string": "^0.30.17" 867 + }, 868 + "funding": { 869 + "url": "https://opencollective.com/vitest" 870 + }, 871 + "peerDependencies": { 872 + "msw": "^2.4.9", 873 + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" 874 + }, 875 + "peerDependenciesMeta": { 876 + "msw": { 877 + "optional": true 878 + }, 879 + "vite": { 880 + "optional": true 881 + } 882 + } 883 + }, 884 + "node_modules/@vitest/pretty-format": { 885 + "version": "3.2.4", 886 + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", 887 + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", 888 + "dev": true, 889 + "license": "MIT", 890 + "dependencies": { 891 + "tinyrainbow": "^2.0.0" 892 + }, 893 + "funding": { 894 + "url": "https://opencollective.com/vitest" 895 + } 896 + }, 897 + "node_modules/@vitest/runner": { 898 + "version": "3.2.4", 899 + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", 900 + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", 901 + "dev": true, 902 + "license": "MIT", 903 + "dependencies": { 904 + "@vitest/utils": "3.2.4", 905 + "pathe": "^2.0.3", 906 + "strip-literal": "^3.0.0" 907 + }, 908 + "funding": { 909 + "url": "https://opencollective.com/vitest" 910 + } 911 + }, 912 + "node_modules/@vitest/snapshot": { 913 + "version": "3.2.4", 914 + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", 915 + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", 916 + "dev": true, 917 + "license": "MIT", 918 + "dependencies": { 919 + "@vitest/pretty-format": "3.2.4", 920 + "magic-string": "^0.30.17", 921 + "pathe": "^2.0.3" 922 + }, 923 + "funding": { 924 + "url": "https://opencollective.com/vitest" 925 + } 926 + }, 927 + "node_modules/@vitest/spy": { 928 + "version": "3.2.4", 929 + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", 930 + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", 931 + "dev": true, 932 + "license": "MIT", 933 + "dependencies": { 934 + "tinyspy": "^4.0.3" 935 + }, 936 + "funding": { 937 + "url": "https://opencollective.com/vitest" 938 + } 939 + }, 940 + "node_modules/@vitest/utils": { 941 + "version": "3.2.4", 942 + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", 943 + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", 944 + "dev": true, 945 + "license": "MIT", 946 + "dependencies": { 947 + "@vitest/pretty-format": "3.2.4", 948 + "loupe": "^3.1.4", 949 + "tinyrainbow": "^2.0.0" 950 + }, 951 + "funding": { 952 + "url": "https://opencollective.com/vitest" 953 + } 954 + }, 955 + "node_modules/assertion-error": { 956 + "version": "2.0.1", 957 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 958 + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 959 + "dev": true, 960 + "license": "MIT", 961 + "engines": { 962 + "node": ">=12" 963 + } 964 + }, 965 + "node_modules/cac": { 966 + "version": "6.7.14", 967 + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 968 + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 969 + "dev": true, 970 + "license": "MIT", 971 + "engines": { 972 + "node": ">=8" 973 + } 974 + }, 975 + "node_modules/chai": { 976 + "version": "5.3.3", 977 + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", 978 + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", 979 + "dev": true, 980 + "license": "MIT", 981 + "dependencies": { 982 + "assertion-error": "^2.0.1", 983 + "check-error": "^2.1.1", 984 + "deep-eql": "^5.0.1", 985 + "loupe": "^3.1.0", 986 + "pathval": "^2.0.0" 987 + }, 988 + "engines": { 989 + "node": ">=18" 990 + } 991 + }, 992 + "node_modules/check-error": { 993 + "version": "2.1.3", 994 + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", 995 + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", 996 + "dev": true, 997 + "license": "MIT", 998 + "engines": { 999 + "node": ">= 16" 1000 + } 1001 + }, 1002 + "node_modules/debug": { 1003 + "version": "4.4.3", 1004 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1005 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1006 + "dev": true, 1007 + "license": "MIT", 1008 + "dependencies": { 1009 + "ms": "^2.1.3" 1010 + }, 1011 + "engines": { 1012 + "node": ">=6.0" 1013 + }, 1014 + "peerDependenciesMeta": { 1015 + "supports-color": { 1016 + "optional": true 1017 + } 1018 + } 1019 + }, 1020 + "node_modules/deep-eql": { 1021 + "version": "5.0.2", 1022 + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1023 + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1024 + "dev": true, 1025 + "license": "MIT", 1026 + "engines": { 1027 + "node": ">=6" 1028 + } 1029 + }, 1030 + "node_modules/es-module-lexer": { 1031 + "version": "1.7.0", 1032 + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", 1033 + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", 1034 + "dev": true, 1035 + "license": "MIT" 1036 + }, 1037 + "node_modules/esbuild": { 1038 + "version": "0.27.7", 1039 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", 1040 + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", 1041 + "dev": true, 1042 + "hasInstallScript": true, 1043 + "license": "MIT", 1044 + "bin": { 1045 + "esbuild": "bin/esbuild" 1046 + }, 1047 + "engines": { 1048 + "node": ">=18" 1049 + }, 1050 + "optionalDependencies": { 1051 + "@esbuild/aix-ppc64": "0.27.7", 1052 + "@esbuild/android-arm": "0.27.7", 1053 + "@esbuild/android-arm64": "0.27.7", 1054 + "@esbuild/android-x64": "0.27.7", 1055 + "@esbuild/darwin-arm64": "0.27.7", 1056 + "@esbuild/darwin-x64": "0.27.7", 1057 + "@esbuild/freebsd-arm64": "0.27.7", 1058 + "@esbuild/freebsd-x64": "0.27.7", 1059 + "@esbuild/linux-arm": "0.27.7", 1060 + "@esbuild/linux-arm64": "0.27.7", 1061 + "@esbuild/linux-ia32": "0.27.7", 1062 + "@esbuild/linux-loong64": "0.27.7", 1063 + "@esbuild/linux-mips64el": "0.27.7", 1064 + "@esbuild/linux-ppc64": "0.27.7", 1065 + "@esbuild/linux-riscv64": "0.27.7", 1066 + "@esbuild/linux-s390x": "0.27.7", 1067 + "@esbuild/linux-x64": "0.27.7", 1068 + "@esbuild/netbsd-arm64": "0.27.7", 1069 + "@esbuild/netbsd-x64": "0.27.7", 1070 + "@esbuild/openbsd-arm64": "0.27.7", 1071 + "@esbuild/openbsd-x64": "0.27.7", 1072 + "@esbuild/openharmony-arm64": "0.27.7", 1073 + "@esbuild/sunos-x64": "0.27.7", 1074 + "@esbuild/win32-arm64": "0.27.7", 1075 + "@esbuild/win32-ia32": "0.27.7", 1076 + "@esbuild/win32-x64": "0.27.7" 1077 + } 1078 + }, 1079 + "node_modules/estree-walker": { 1080 + "version": "3.0.3", 1081 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1082 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1083 + "dev": true, 1084 + "license": "MIT", 1085 + "dependencies": { 1086 + "@types/estree": "^1.0.0" 1087 + } 1088 + }, 1089 + "node_modules/expect-type": { 1090 + "version": "1.3.0", 1091 + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", 1092 + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", 1093 + "dev": true, 1094 + "license": "Apache-2.0", 1095 + "engines": { 1096 + "node": ">=12.0.0" 1097 + } 1098 + }, 1099 + "node_modules/fdir": { 1100 + "version": "6.5.0", 1101 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 1102 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1103 + "dev": true, 1104 + "license": "MIT", 1105 + "engines": { 1106 + "node": ">=12.0.0" 1107 + }, 1108 + "peerDependencies": { 1109 + "picomatch": "^3 || ^4" 1110 + }, 1111 + "peerDependenciesMeta": { 1112 + "picomatch": { 1113 + "optional": true 1114 + } 1115 + } 1116 + }, 1117 + "node_modules/fsevents": { 1118 + "version": "2.3.3", 1119 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1120 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1121 + "dev": true, 1122 + "hasInstallScript": true, 1123 + "license": "MIT", 1124 + "optional": true, 1125 + "os": [ 1126 + "darwin" 1127 + ], 1128 + "engines": { 1129 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1130 + } 1131 + }, 1132 + "node_modules/js-tokens": { 1133 + "version": "9.0.1", 1134 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", 1135 + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", 1136 + "dev": true, 1137 + "license": "MIT" 1138 + }, 1139 + "node_modules/loupe": { 1140 + "version": "3.2.1", 1141 + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", 1142 + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", 1143 + "dev": true, 1144 + "license": "MIT" 1145 + }, 1146 + "node_modules/magic-string": { 1147 + "version": "0.30.21", 1148 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 1149 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 1150 + "dev": true, 1151 + "license": "MIT", 1152 + "dependencies": { 1153 + "@jridgewell/sourcemap-codec": "^1.5.5" 1154 + } 1155 + }, 1156 + "node_modules/ms": { 1157 + "version": "2.1.3", 1158 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1159 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1160 + "dev": true, 1161 + "license": "MIT" 1162 + }, 1163 + "node_modules/nanoid": { 1164 + "version": "3.3.11", 1165 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 1166 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1167 + "dev": true, 1168 + "funding": [ 1169 + { 1170 + "type": "github", 1171 + "url": "https://github.com/sponsors/ai" 1172 + } 1173 + ], 1174 + "license": "MIT", 1175 + "bin": { 1176 + "nanoid": "bin/nanoid.cjs" 1177 + }, 1178 + "engines": { 1179 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1180 + } 1181 + }, 1182 + "node_modules/pathe": { 1183 + "version": "2.0.3", 1184 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 1185 + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 1186 + "dev": true, 1187 + "license": "MIT" 1188 + }, 1189 + "node_modules/pathval": { 1190 + "version": "2.0.1", 1191 + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", 1192 + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", 1193 + "dev": true, 1194 + "license": "MIT", 1195 + "engines": { 1196 + "node": ">= 14.16" 1197 + } 1198 + }, 1199 + "node_modules/picocolors": { 1200 + "version": "1.1.1", 1201 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1202 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1203 + "dev": true, 1204 + "license": "ISC" 1205 + }, 1206 + "node_modules/picomatch": { 1207 + "version": "4.0.4", 1208 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", 1209 + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", 1210 + "dev": true, 1211 + "license": "MIT", 1212 + "engines": { 1213 + "node": ">=12" 1214 + }, 1215 + "funding": { 1216 + "url": "https://github.com/sponsors/jonschlinkert" 1217 + } 1218 + }, 1219 + "node_modules/postcss": { 1220 + "version": "8.5.10", 1221 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", 1222 + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", 1223 + "dev": true, 1224 + "funding": [ 1225 + { 1226 + "type": "opencollective", 1227 + "url": "https://opencollective.com/postcss/" 1228 + }, 1229 + { 1230 + "type": "tidelift", 1231 + "url": "https://tidelift.com/funding/github/npm/postcss" 1232 + }, 1233 + { 1234 + "type": "github", 1235 + "url": "https://github.com/sponsors/ai" 1236 + } 1237 + ], 1238 + "license": "MIT", 1239 + "dependencies": { 1240 + "nanoid": "^3.3.11", 1241 + "picocolors": "^1.1.1", 1242 + "source-map-js": "^1.2.1" 1243 + }, 1244 + "engines": { 1245 + "node": "^10 || ^12 || >=14" 1246 + } 1247 + }, 1248 + "node_modules/rollup": { 1249 + "version": "4.60.1", 1250 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", 1251 + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", 1252 + "dev": true, 1253 + "license": "MIT", 1254 + "dependencies": { 1255 + "@types/estree": "1.0.8" 1256 + }, 1257 + "bin": { 1258 + "rollup": "dist/bin/rollup" 1259 + }, 1260 + "engines": { 1261 + "node": ">=18.0.0", 1262 + "npm": ">=8.0.0" 1263 + }, 1264 + "optionalDependencies": { 1265 + "@rollup/rollup-android-arm-eabi": "4.60.1", 1266 + "@rollup/rollup-android-arm64": "4.60.1", 1267 + "@rollup/rollup-darwin-arm64": "4.60.1", 1268 + "@rollup/rollup-darwin-x64": "4.60.1", 1269 + "@rollup/rollup-freebsd-arm64": "4.60.1", 1270 + "@rollup/rollup-freebsd-x64": "4.60.1", 1271 + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", 1272 + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", 1273 + "@rollup/rollup-linux-arm64-gnu": "4.60.1", 1274 + "@rollup/rollup-linux-arm64-musl": "4.60.1", 1275 + "@rollup/rollup-linux-loong64-gnu": "4.60.1", 1276 + "@rollup/rollup-linux-loong64-musl": "4.60.1", 1277 + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", 1278 + "@rollup/rollup-linux-ppc64-musl": "4.60.1", 1279 + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", 1280 + "@rollup/rollup-linux-riscv64-musl": "4.60.1", 1281 + "@rollup/rollup-linux-s390x-gnu": "4.60.1", 1282 + "@rollup/rollup-linux-x64-gnu": "4.60.1", 1283 + "@rollup/rollup-linux-x64-musl": "4.60.1", 1284 + "@rollup/rollup-openbsd-x64": "4.60.1", 1285 + "@rollup/rollup-openharmony-arm64": "4.60.1", 1286 + "@rollup/rollup-win32-arm64-msvc": "4.60.1", 1287 + "@rollup/rollup-win32-ia32-msvc": "4.60.1", 1288 + "@rollup/rollup-win32-x64-gnu": "4.60.1", 1289 + "@rollup/rollup-win32-x64-msvc": "4.60.1", 1290 + "fsevents": "~2.3.2" 1291 + } 1292 + }, 1293 + "node_modules/siginfo": { 1294 + "version": "2.0.0", 1295 + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 1296 + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 1297 + "dev": true, 1298 + "license": "ISC" 1299 + }, 1300 + "node_modules/source-map-js": { 1301 + "version": "1.2.1", 1302 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1303 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1304 + "dev": true, 1305 + "license": "BSD-3-Clause", 1306 + "engines": { 1307 + "node": ">=0.10.0" 1308 + } 1309 + }, 1310 + "node_modules/stackback": { 1311 + "version": "0.0.2", 1312 + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 1313 + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 1314 + "dev": true, 1315 + "license": "MIT" 1316 + }, 1317 + "node_modules/std-env": { 1318 + "version": "3.10.0", 1319 + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", 1320 + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", 1321 + "dev": true, 1322 + "license": "MIT" 1323 + }, 1324 + "node_modules/strip-literal": { 1325 + "version": "3.1.0", 1326 + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", 1327 + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", 1328 + "dev": true, 1329 + "license": "MIT", 1330 + "dependencies": { 1331 + "js-tokens": "^9.0.1" 1332 + }, 1333 + "funding": { 1334 + "url": "https://github.com/sponsors/antfu" 1335 + } 1336 + }, 1337 + "node_modules/tinybench": { 1338 + "version": "2.9.0", 1339 + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 1340 + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 1341 + "dev": true, 1342 + "license": "MIT" 1343 + }, 1344 + "node_modules/tinyexec": { 1345 + "version": "0.3.2", 1346 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", 1347 + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", 1348 + "dev": true, 1349 + "license": "MIT" 1350 + }, 1351 + "node_modules/tinyglobby": { 1352 + "version": "0.2.16", 1353 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", 1354 + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", 1355 + "dev": true, 1356 + "license": "MIT", 1357 + "dependencies": { 1358 + "fdir": "^6.5.0", 1359 + "picomatch": "^4.0.4" 1360 + }, 1361 + "engines": { 1362 + "node": ">=12.0.0" 1363 + }, 1364 + "funding": { 1365 + "url": "https://github.com/sponsors/SuperchupuDev" 1366 + } 1367 + }, 1368 + "node_modules/tinypool": { 1369 + "version": "1.1.1", 1370 + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", 1371 + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", 1372 + "dev": true, 1373 + "license": "MIT", 1374 + "engines": { 1375 + "node": "^18.0.0 || >=20.0.0" 1376 + } 1377 + }, 1378 + "node_modules/tinyrainbow": { 1379 + "version": "2.0.0", 1380 + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", 1381 + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", 1382 + "dev": true, 1383 + "license": "MIT", 1384 + "engines": { 1385 + "node": ">=14.0.0" 1386 + } 1387 + }, 1388 + "node_modules/tinyspy": { 1389 + "version": "4.0.4", 1390 + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", 1391 + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", 1392 + "dev": true, 1393 + "license": "MIT", 1394 + "engines": { 1395 + "node": ">=14.0.0" 13 1396 } 14 1397 }, 15 1398 "node_modules/typescript": { ··· 24 1407 }, 25 1408 "engines": { 26 1409 "node": ">=14.17" 1410 + } 1411 + }, 1412 + "node_modules/vite": { 1413 + "version": "7.3.2", 1414 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", 1415 + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", 1416 + "dev": true, 1417 + "license": "MIT", 1418 + "dependencies": { 1419 + "esbuild": "^0.27.0", 1420 + "fdir": "^6.5.0", 1421 + "picomatch": "^4.0.3", 1422 + "postcss": "^8.5.6", 1423 + "rollup": "^4.43.0", 1424 + "tinyglobby": "^0.2.15" 1425 + }, 1426 + "bin": { 1427 + "vite": "bin/vite.js" 1428 + }, 1429 + "engines": { 1430 + "node": "^20.19.0 || >=22.12.0" 1431 + }, 1432 + "funding": { 1433 + "url": "https://github.com/vitejs/vite?sponsor=1" 1434 + }, 1435 + "optionalDependencies": { 1436 + "fsevents": "~2.3.3" 1437 + }, 1438 + "peerDependencies": { 1439 + "@types/node": "^20.19.0 || >=22.12.0", 1440 + "jiti": ">=1.21.0", 1441 + "less": "^4.0.0", 1442 + "lightningcss": "^1.21.0", 1443 + "sass": "^1.70.0", 1444 + "sass-embedded": "^1.70.0", 1445 + "stylus": ">=0.54.8", 1446 + "sugarss": "^5.0.0", 1447 + "terser": "^5.16.0", 1448 + "tsx": "^4.8.1", 1449 + "yaml": "^2.4.2" 1450 + }, 1451 + "peerDependenciesMeta": { 1452 + "@types/node": { 1453 + "optional": true 1454 + }, 1455 + "jiti": { 1456 + "optional": true 1457 + }, 1458 + "less": { 1459 + "optional": true 1460 + }, 1461 + "lightningcss": { 1462 + "optional": true 1463 + }, 1464 + "sass": { 1465 + "optional": true 1466 + }, 1467 + "sass-embedded": { 1468 + "optional": true 1469 + }, 1470 + "stylus": { 1471 + "optional": true 1472 + }, 1473 + "sugarss": { 1474 + "optional": true 1475 + }, 1476 + "terser": { 1477 + "optional": true 1478 + }, 1479 + "tsx": { 1480 + "optional": true 1481 + }, 1482 + "yaml": { 1483 + "optional": true 1484 + } 1485 + } 1486 + }, 1487 + "node_modules/vite-node": { 1488 + "version": "3.2.4", 1489 + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", 1490 + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", 1491 + "dev": true, 1492 + "license": "MIT", 1493 + "dependencies": { 1494 + "cac": "^6.7.14", 1495 + "debug": "^4.4.1", 1496 + "es-module-lexer": "^1.7.0", 1497 + "pathe": "^2.0.3", 1498 + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" 1499 + }, 1500 + "bin": { 1501 + "vite-node": "vite-node.mjs" 1502 + }, 1503 + "engines": { 1504 + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1505 + }, 1506 + "funding": { 1507 + "url": "https://opencollective.com/vitest" 1508 + } 1509 + }, 1510 + "node_modules/vitest": { 1511 + "version": "3.2.4", 1512 + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", 1513 + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", 1514 + "dev": true, 1515 + "license": "MIT", 1516 + "dependencies": { 1517 + "@types/chai": "^5.2.2", 1518 + "@vitest/expect": "3.2.4", 1519 + "@vitest/mocker": "3.2.4", 1520 + "@vitest/pretty-format": "^3.2.4", 1521 + "@vitest/runner": "3.2.4", 1522 + "@vitest/snapshot": "3.2.4", 1523 + "@vitest/spy": "3.2.4", 1524 + "@vitest/utils": "3.2.4", 1525 + "chai": "^5.2.0", 1526 + "debug": "^4.4.1", 1527 + "expect-type": "^1.2.1", 1528 + "magic-string": "^0.30.17", 1529 + "pathe": "^2.0.3", 1530 + "picomatch": "^4.0.2", 1531 + "std-env": "^3.9.0", 1532 + "tinybench": "^2.9.0", 1533 + "tinyexec": "^0.3.2", 1534 + "tinyglobby": "^0.2.14", 1535 + "tinypool": "^1.1.1", 1536 + "tinyrainbow": "^2.0.0", 1537 + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", 1538 + "vite-node": "3.2.4", 1539 + "why-is-node-running": "^2.3.0" 1540 + }, 1541 + "bin": { 1542 + "vitest": "vitest.mjs" 1543 + }, 1544 + "engines": { 1545 + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1546 + }, 1547 + "funding": { 1548 + "url": "https://opencollective.com/vitest" 1549 + }, 1550 + "peerDependencies": { 1551 + "@edge-runtime/vm": "*", 1552 + "@types/debug": "^4.1.12", 1553 + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 1554 + "@vitest/browser": "3.2.4", 1555 + "@vitest/ui": "3.2.4", 1556 + "happy-dom": "*", 1557 + "jsdom": "*" 1558 + }, 1559 + "peerDependenciesMeta": { 1560 + "@edge-runtime/vm": { 1561 + "optional": true 1562 + }, 1563 + "@types/debug": { 1564 + "optional": true 1565 + }, 1566 + "@types/node": { 1567 + "optional": true 1568 + }, 1569 + "@vitest/browser": { 1570 + "optional": true 1571 + }, 1572 + "@vitest/ui": { 1573 + "optional": true 1574 + }, 1575 + "happy-dom": { 1576 + "optional": true 1577 + }, 1578 + "jsdom": { 1579 + "optional": true 1580 + } 1581 + } 1582 + }, 1583 + "node_modules/why-is-node-running": { 1584 + "version": "2.3.0", 1585 + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 1586 + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 1587 + "dev": true, 1588 + "license": "MIT", 1589 + "dependencies": { 1590 + "siginfo": "^2.0.0", 1591 + "stackback": "0.0.2" 1592 + }, 1593 + "bin": { 1594 + "why-is-node-running": "cli.js" 1595 + }, 1596 + "engines": { 1597 + "node": ">=8" 27 1598 } 28 1599 } 29 1600 }
+4 -2
ref-impl-js/package.json
··· 16 16 "scripts": { 17 17 "build": "tsc", 18 18 "dev": "tsc --watch", 19 - "test": "echo \"Error: no test specified\" && exit 1" 19 + "test": "vitest run", 20 + "test:watch": "vitest" 20 21 }, 21 22 "repository": { 22 23 "type": "git", ··· 28 29 "author": "fig", 29 30 "license": "MIT OR Apache-2.0", 30 31 "devDependencies": { 31 - "typescript": "^5.0.0" 32 + "typescript": "^5.0.0", 33 + "vitest": "^3.0.0" 32 34 } 33 35 }
+68
ref-impl-js/test/interop.test.ts
··· 1 + import { describe, it, expect } from 'vitest'; 2 + import { readFileSync } from 'node:fs'; 3 + import { join, dirname } from 'node:path'; 4 + import { fileURLToPath } from 'node:url'; 5 + import { match, enumerate, parse, isVector, type PathInfo } from '../src/index.js'; 6 + 7 + const __dirname = dirname(fileURLToPath(import.meta.url)); 8 + const fixturesDir = join(__dirname, '..', '..', 'interop-tests'); 9 + 10 + function loadFixture(name: string) { 11 + return JSON.parse(readFileSync(join(fixturesDir, name), 'utf-8')); 12 + } 13 + 14 + // -- Match tests -- 15 + 16 + const matchFixture = loadFixture('match.json'); 17 + 18 + describe('match', () => { 19 + for (const t of matchFixture.tests) { 20 + it(t.description, () => { 21 + const result = match(t.record, t.path); 22 + expect(result).toEqual(t.expected); 23 + }); 24 + } 25 + }); 26 + 27 + // -- Enumerate tests -- 28 + 29 + const enumFixture = loadFixture('enumerate.json'); 30 + 31 + describe('enumerate', () => { 32 + for (const t of enumFixture.tests) { 33 + it(t.description, () => { 34 + const result = enumerate(t.record); 35 + 36 + // Compare as sets of {path, type} 37 + const resultSet = new Set(result.map((p: PathInfo) => `${p.path}:${p.type}`)); 38 + const expectedSet = new Set( 39 + t.expected.map((p: { path: string; type: string }) => `${p.path}:${p.type}`) 40 + ); 41 + 42 + expect(resultSet).toEqual(expectedSet); 43 + }); 44 + } 45 + }); 46 + 47 + // -- Parse type classification tests -- 48 + 49 + const parseFixture = loadFixture('parse.json'); 50 + 51 + describe('type classification', () => { 52 + for (const t of parseFixture.type_tests) { 53 + it(t.description, () => { 54 + const result = isVector(t.path) ? 'vector' : 'scalar'; 55 + expect(result).toBe(t.type); 56 + }); 57 + } 58 + }); 59 + 60 + // -- Parse validity tests -- 61 + 62 + describe('invalid paths', () => { 63 + for (const t of parseFixture.invalid_tests) { 64 + it(t.description, () => { 65 + expect(() => parse(t.path)).toThrow(); 66 + }); 67 + } 68 + });
+2
spec.md
··· 233 233 234 234 - lexicon awareness notes 235 235 - backlinks example: match links on non-link fields if they happen to parse 236 + 237 + - bring back the expected order of matches: depth-first-search order (probably as a "should")