Demonstration bridge between ATproto and GraphQL. Generate schema types and interface with the ATmosphere via GraphQL queries. Includes a TypeScript server with IDE.
2
fork

Configure Feed

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

refactor: rewrite in TypeScript

Tim Ryan c1f4c82e 18a33473

+4965
+3
.gitignore
··· 55 55 __pycache__ 56 56 schema/schema-generated.graphql 57 57 .pytest_cache 58 + 59 + # Node.js 60 + node_modules
+3922
js/package-lock.json
··· 1 + { 2 + "name": "js", 3 + "version": "1.0.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "js", 9 + "version": "1.0.0", 10 + "license": "ISC", 11 + "dependencies": { 12 + "express": "^5.2.1", 13 + "glob": "^13.0.6", 14 + "graphql": "^15.10.2", 15 + "graphql-http": "^1.22.4", 16 + "ruru": "^2.0.0" 17 + }, 18 + "devDependencies": { 19 + "@atproto/lex": "^0.0.23", 20 + "@types/node": "^25.5.0", 21 + "ts-node": "^10.9.2", 22 + "typescript": "^6.0.2" 23 + } 24 + }, 25 + "node_modules/@atproto-labs/did-resolver": { 26 + "version": "0.2.6", 27 + "resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.2.6.tgz", 28 + "integrity": "sha512-2K1bC04nI2fmgNcvof+yA28IhGlpWn2JKYlPa7To9JTKI45FINCGkQSGiL2nyXlyzDJJ34fZ1aq6/IRFIOIiqg==", 29 + "dev": true, 30 + "license": "MIT", 31 + "dependencies": { 32 + "@atproto-labs/fetch": "0.2.3", 33 + "@atproto-labs/pipe": "0.1.1", 34 + "@atproto-labs/simple-store": "0.3.0", 35 + "@atproto-labs/simple-store-memory": "0.1.4", 36 + "@atproto/did": "0.3.0", 37 + "zod": "^3.23.8" 38 + } 39 + }, 40 + "node_modules/@atproto-labs/fetch": { 41 + "version": "0.2.3", 42 + "resolved": "https://registry.npmjs.org/@atproto-labs/fetch/-/fetch-0.2.3.tgz", 43 + "integrity": "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==", 44 + "dev": true, 45 + "license": "MIT", 46 + "dependencies": { 47 + "@atproto-labs/pipe": "0.1.1" 48 + } 49 + }, 50 + "node_modules/@atproto-labs/pipe": { 51 + "version": "0.1.1", 52 + "resolved": "https://registry.npmjs.org/@atproto-labs/pipe/-/pipe-0.1.1.tgz", 53 + "integrity": "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==", 54 + "dev": true, 55 + "license": "MIT" 56 + }, 57 + "node_modules/@atproto-labs/simple-store": { 58 + "version": "0.3.0", 59 + "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store/-/simple-store-0.3.0.tgz", 60 + "integrity": "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==", 61 + "dev": true, 62 + "license": "MIT" 63 + }, 64 + "node_modules/@atproto-labs/simple-store-memory": { 65 + "version": "0.1.4", 66 + "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store-memory/-/simple-store-memory-0.1.4.tgz", 67 + "integrity": "sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==", 68 + "dev": true, 69 + "license": "MIT", 70 + "dependencies": { 71 + "@atproto-labs/simple-store": "0.3.0", 72 + "lru-cache": "^10.2.0" 73 + } 74 + }, 75 + "node_modules/@atproto/common": { 76 + "version": "0.5.15", 77 + "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.15.tgz", 78 + "integrity": "sha512-+cdfdMPAIbH9zQGLfH1gNY2KEZsMxj0EelVQL5uJUFL+UkkAXiiqWj7J5mbax8sf02cC/afJnfkWzERNAheKoA==", 79 + "dev": true, 80 + "license": "MIT", 81 + "dependencies": { 82 + "@atproto/common-web": "^0.4.19", 83 + "@atproto/lex-cbor": "^0.0.15", 84 + "@atproto/lex-data": "^0.0.14", 85 + "multiformats": "^9.9.0", 86 + "pino": "^8.21.0" 87 + }, 88 + "engines": { 89 + "node": ">=18.7.0" 90 + } 91 + }, 92 + "node_modules/@atproto/common-web": { 93 + "version": "0.4.19", 94 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.19.tgz", 95 + "integrity": "sha512-3BTi58p5WpT+9/zb6UZrdsXcfPo5P45UJm0E4iwHLILr+jc37CuBj9JReDSZ4U0i9RTrI3ZkfySyZ9bd+LnMsw==", 96 + "dev": true, 97 + "license": "MIT", 98 + "dependencies": { 99 + "@atproto/lex-data": "^0.0.14", 100 + "@atproto/lex-json": "^0.0.14", 101 + "@atproto/syntax": "^0.5.1", 102 + "zod": "^3.23.8" 103 + } 104 + }, 105 + "node_modules/@atproto/crypto": { 106 + "version": "0.4.5", 107 + "resolved": "https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.5.tgz", 108 + "integrity": "sha512-n40aKkMoCatP0u9Yvhrdk6fXyOHFDDbkdm4h4HCyWW+KlKl8iXfD5iV+ECq+w5BM+QH25aIpt3/j6EUNerhLxw==", 109 + "dev": true, 110 + "license": "MIT", 111 + "dependencies": { 112 + "@noble/curves": "^1.7.0", 113 + "@noble/hashes": "^1.6.1", 114 + "uint8arrays": "3.0.0" 115 + }, 116 + "engines": { 117 + "node": ">=18.7.0" 118 + } 119 + }, 120 + "node_modules/@atproto/did": { 121 + "version": "0.3.0", 122 + "resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.3.0.tgz", 123 + "integrity": "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA==", 124 + "dev": true, 125 + "license": "MIT", 126 + "dependencies": { 127 + "zod": "^3.23.8" 128 + } 129 + }, 130 + "node_modules/@atproto/lex": { 131 + "version": "0.0.23", 132 + "resolved": "https://registry.npmjs.org/@atproto/lex/-/lex-0.0.23.tgz", 133 + "integrity": "sha512-AjfuL2wzBASsMlhdfPBY/S1Vg9wOEJ8DnQM5TlmgVr7UmhQMiW+YVE9YC3RdKzaTbYBDTFr1HsUuarsPg+nvUg==", 134 + "dev": true, 135 + "license": "MIT", 136 + "dependencies": { 137 + "@atproto/lex-builder": "^0.0.20", 138 + "@atproto/lex-client": "^0.0.18", 139 + "@atproto/lex-data": "^0.0.14", 140 + "@atproto/lex-installer": "^0.0.23", 141 + "@atproto/lex-json": "^0.0.14", 142 + "@atproto/lex-schema": "^0.0.17", 143 + "tslib": "^2.8.1", 144 + "yargs": "^17.0.0" 145 + }, 146 + "bin": { 147 + "lex": "bin/lex", 148 + "ts-lex": "bin/lex" 149 + } 150 + }, 151 + "node_modules/@atproto/lex-builder": { 152 + "version": "0.0.20", 153 + "resolved": "https://registry.npmjs.org/@atproto/lex-builder/-/lex-builder-0.0.20.tgz", 154 + "integrity": "sha512-cbUvYw4KNHsdMTXQlJxzYA7HfJoY4a12a1m1J8GP0togIUDHSsNC/UGsTx2ieHfVkWhErElNyMWB2cAFZeyVWQ==", 155 + "dev": true, 156 + "license": "MIT", 157 + "dependencies": { 158 + "@atproto/lex-document": "^0.0.18", 159 + "@atproto/lex-schema": "^0.0.17", 160 + "prettier": "^3.2.5", 161 + "ts-morph": "^27.0.0", 162 + "tslib": "^2.8.1" 163 + } 164 + }, 165 + "node_modules/@atproto/lex-cbor": { 166 + "version": "0.0.15", 167 + "resolved": "https://registry.npmjs.org/@atproto/lex-cbor/-/lex-cbor-0.0.15.tgz", 168 + "integrity": "sha512-3osDicK9bAMXJlKjLKqwYrhLQ60bOguWBNjE+fuNjMuizNzC0aqaClE3d+qMsFuFq9bjEHFw+4Vr9Qmd/m6VYg==", 169 + "dev": true, 170 + "license": "MIT", 171 + "dependencies": { 172 + "@atproto/lex-data": "^0.0.14", 173 + "tslib": "^2.8.1" 174 + } 175 + }, 176 + "node_modules/@atproto/lex-client": { 177 + "version": "0.0.18", 178 + "resolved": "https://registry.npmjs.org/@atproto/lex-client/-/lex-client-0.0.18.tgz", 179 + "integrity": "sha512-dCnlG9nxNY6ZkaNggSlOPhb9NqDt/H1nm16ZZhe81G2iV10Niq44OcxZdVtZVjszElW3+V9ZfsK04B0f3Rid0Q==", 180 + "dev": true, 181 + "license": "MIT", 182 + "dependencies": { 183 + "@atproto/lex-data": "^0.0.14", 184 + "@atproto/lex-json": "^0.0.14", 185 + "@atproto/lex-schema": "^0.0.17", 186 + "tslib": "^2.8.1" 187 + } 188 + }, 189 + "node_modules/@atproto/lex-data": { 190 + "version": "0.0.14", 191 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.14.tgz", 192 + "integrity": "sha512-53DUa9664SS76nGAMYopWsO10OH0AAdf7P/HSKB6Wzx3iqe6lk/K61QZnKxOG1LreYl5CfvIJU6eNf4txI6GlQ==", 193 + "dev": true, 194 + "license": "MIT", 195 + "dependencies": { 196 + "multiformats": "^9.9.0", 197 + "tslib": "^2.8.1", 198 + "uint8arrays": "3.0.0", 199 + "unicode-segmenter": "^0.14.0" 200 + } 201 + }, 202 + "node_modules/@atproto/lex-document": { 203 + "version": "0.0.18", 204 + "resolved": "https://registry.npmjs.org/@atproto/lex-document/-/lex-document-0.0.18.tgz", 205 + "integrity": "sha512-nfBgMbFyQKZj8LSVe0leHhfsvn0kmIQMC1wPqzJb/M1jSv5266J8Jl7wWy8QsXhz/+EoxPXygFp4hTM+l09beQ==", 206 + "dev": true, 207 + "license": "MIT", 208 + "dependencies": { 209 + "@atproto/lex-schema": "^0.0.17", 210 + "core-js": "^3", 211 + "tslib": "^2.8.1" 212 + } 213 + }, 214 + "node_modules/@atproto/lex-installer": { 215 + "version": "0.0.23", 216 + "resolved": "https://registry.npmjs.org/@atproto/lex-installer/-/lex-installer-0.0.23.tgz", 217 + "integrity": "sha512-bCob01wMRVyaLPnwBoEi6XXBiG7d7wioX217Lwr+wdg9/yDw61slh8AKI0o1pvQqmMxA980gGMpCrSiSj/jfog==", 218 + "dev": true, 219 + "license": "MIT", 220 + "dependencies": { 221 + "@atproto/lex-builder": "^0.0.20", 222 + "@atproto/lex-cbor": "^0.0.15", 223 + "@atproto/lex-data": "^0.0.14", 224 + "@atproto/lex-document": "^0.0.18", 225 + "@atproto/lex-resolver": "^0.0.20", 226 + "@atproto/lex-schema": "^0.0.17", 227 + "@atproto/syntax": "^0.5.2", 228 + "tslib": "^2.8.1" 229 + } 230 + }, 231 + "node_modules/@atproto/lex-json": { 232 + "version": "0.0.14", 233 + "resolved": "https://registry.npmjs.org/@atproto/lex-json/-/lex-json-0.0.14.tgz", 234 + "integrity": "sha512-6lPkDKqe7teEu4WrN5q7400cvZKgYS3uwUMvzG3F9XkgVYhOwSDCtouV/nSLBbpvo3l9OP0kiigtclcNcyekww==", 235 + "dev": true, 236 + "license": "MIT", 237 + "dependencies": { 238 + "@atproto/lex-data": "^0.0.14", 239 + "tslib": "^2.8.1" 240 + } 241 + }, 242 + "node_modules/@atproto/lex-resolver": { 243 + "version": "0.0.20", 244 + "resolved": "https://registry.npmjs.org/@atproto/lex-resolver/-/lex-resolver-0.0.20.tgz", 245 + "integrity": "sha512-ZmEvLW+1Yv5/eLIP0McOlgsUh1/FFCCy1BK6WaI1vM4IwsHZiqjmymOPfnn39WyOhyOBqvSZ7/8hzR03Yu5V/w==", 246 + "dev": true, 247 + "license": "MIT", 248 + "dependencies": { 249 + "@atproto-labs/did-resolver": "^0.2.6", 250 + "@atproto/crypto": "^0.4.5", 251 + "@atproto/lex-client": "^0.0.18", 252 + "@atproto/lex-data": "^0.0.14", 253 + "@atproto/lex-document": "^0.0.18", 254 + "@atproto/lex-schema": "^0.0.17", 255 + "@atproto/repo": "^0.9.0", 256 + "@atproto/syntax": "^0.5.2", 257 + "tslib": "^2.8.1" 258 + } 259 + }, 260 + "node_modules/@atproto/lex-schema": { 261 + "version": "0.0.17", 262 + "resolved": "https://registry.npmjs.org/@atproto/lex-schema/-/lex-schema-0.0.17.tgz", 263 + "integrity": "sha512-WLeGIRgLQEhpTd5jpaplvKEtITS7PCygWHmCD645q0MFzQ+C2AM8KWwUqvhVHOgHNNRPZrYfMgnsq6gYmu2tEQ==", 264 + "dev": true, 265 + "license": "MIT", 266 + "dependencies": { 267 + "@atproto/lex-data": "^0.0.14", 268 + "@atproto/syntax": "^0.5.2", 269 + "@standard-schema/spec": "^1.1.0", 270 + "iso-datestring-validator": "^2.2.2", 271 + "tslib": "^2.8.1" 272 + } 273 + }, 274 + "node_modules/@atproto/repo": { 275 + "version": "0.9.0", 276 + "resolved": "https://registry.npmjs.org/@atproto/repo/-/repo-0.9.0.tgz", 277 + "integrity": "sha512-hl85f7CJniLoJS5bwOSnLjN7X4kS1ETs5yetKJyJRVZE4SgM+nWPRd+D08dAzeU+VAZi4fjeZXOlOLJtS4Y0KQ==", 278 + "dev": true, 279 + "license": "MIT", 280 + "dependencies": { 281 + "@atproto/common": "^0.5.15", 282 + "@atproto/common-web": "^0.4.19", 283 + "@atproto/crypto": "^0.4.5", 284 + "@atproto/lex-cbor": "^0.0.15", 285 + "@atproto/lex-data": "^0.0.14", 286 + "@atproto/syntax": "^0.5.2", 287 + "varint": "^6.0.0", 288 + "zod": "^3.23.8" 289 + }, 290 + "engines": { 291 + "node": ">=18.7.0" 292 + } 293 + }, 294 + "node_modules/@atproto/syntax": { 295 + "version": "0.5.2", 296 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.5.2.tgz", 297 + "integrity": "sha512-W41szOnkppoHr0iCUrzL8gy3OD6qmDyp1UvUgmTx2oFQfgbudpz51T/gznesiCcqiUT5obfHdx4PJ+WdlEOE7Q==", 298 + "dev": true, 299 + "license": "MIT", 300 + "dependencies": { 301 + "tslib": "^2.8.1" 302 + } 303 + }, 304 + "node_modules/@cspotcode/source-map-support": { 305 + "version": "0.8.1", 306 + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 307 + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 308 + "dev": true, 309 + "license": "MIT", 310 + "dependencies": { 311 + "@jridgewell/trace-mapping": "0.3.9" 312 + }, 313 + "engines": { 314 + "node": ">=12" 315 + } 316 + }, 317 + "node_modules/@emotion/is-prop-valid": { 318 + "version": "1.4.0", 319 + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", 320 + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", 321 + "license": "MIT", 322 + "dependencies": { 323 + "@emotion/memoize": "^0.9.0" 324 + } 325 + }, 326 + "node_modules/@emotion/memoize": { 327 + "version": "0.9.0", 328 + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", 329 + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", 330 + "license": "MIT" 331 + }, 332 + "node_modules/@floating-ui/core": { 333 + "version": "1.7.5", 334 + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", 335 + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", 336 + "license": "MIT", 337 + "dependencies": { 338 + "@floating-ui/utils": "^0.2.11" 339 + } 340 + }, 341 + "node_modules/@floating-ui/dom": { 342 + "version": "1.7.6", 343 + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", 344 + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", 345 + "license": "MIT", 346 + "dependencies": { 347 + "@floating-ui/core": "^1.7.5", 348 + "@floating-ui/utils": "^0.2.11" 349 + } 350 + }, 351 + "node_modules/@floating-ui/react": { 352 + "version": "0.26.28", 353 + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", 354 + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", 355 + "license": "MIT", 356 + "dependencies": { 357 + "@floating-ui/react-dom": "^2.1.2", 358 + "@floating-ui/utils": "^0.2.8", 359 + "tabbable": "^6.0.0" 360 + }, 361 + "peerDependencies": { 362 + "react": ">=16.8.0", 363 + "react-dom": ">=16.8.0" 364 + } 365 + }, 366 + "node_modules/@floating-ui/react-dom": { 367 + "version": "2.1.8", 368 + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", 369 + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", 370 + "license": "MIT", 371 + "dependencies": { 372 + "@floating-ui/dom": "^1.7.6" 373 + }, 374 + "peerDependencies": { 375 + "react": ">=16.8.0", 376 + "react-dom": ">=16.8.0" 377 + } 378 + }, 379 + "node_modules/@floating-ui/utils": { 380 + "version": "0.2.11", 381 + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", 382 + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", 383 + "license": "MIT" 384 + }, 385 + "node_modules/@graphiql/plugin-doc-explorer": { 386 + "version": "0.4.1", 387 + "resolved": "https://registry.npmjs.org/@graphiql/plugin-doc-explorer/-/plugin-doc-explorer-0.4.1.tgz", 388 + "integrity": "sha512-+ram1dDDGMqJn/f9n5I8E6grTvxcM9JZYt/HhtYLuCvkN8kERI6/E3zBHBshhIUnQZoXioZ03fAzXg7JOn0Kyg==", 389 + "license": "MIT", 390 + "dependencies": { 391 + "@headlessui/react": "^2.2", 392 + "zustand": "^5" 393 + }, 394 + "peerDependencies": { 395 + "@graphiql/react": "^0.37.0", 396 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", 397 + "react": "^18 || ^19", 398 + "react-compiler-runtime": "19.1.0-rc.1", 399 + "react-dom": "^18 || ^19" 400 + } 401 + }, 402 + "node_modules/@graphiql/plugin-history": { 403 + "version": "0.4.1", 404 + "resolved": "https://registry.npmjs.org/@graphiql/plugin-history/-/plugin-history-0.4.1.tgz", 405 + "integrity": "sha512-UyGI/Nm5tzKNMB71li41p6TfkthLqHkmNi9CgHzAM1zKgPIrtSq7Q8WCWKHLOEB5n4/8X8sXFeyQfHgnGYTXYg==", 406 + "license": "MIT", 407 + "dependencies": { 408 + "@graphiql/toolkit": "^0.11.3", 409 + "zustand": "^5" 410 + }, 411 + "peerDependencies": { 412 + "@graphiql/react": "^0.37.0", 413 + "react": "^18 || ^19", 414 + "react-compiler-runtime": "19.1.0-rc.1", 415 + "react-dom": "^18 || ^19" 416 + } 417 + }, 418 + "node_modules/@graphiql/react": { 419 + "version": "0.37.3", 420 + "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.37.3.tgz", 421 + "integrity": "sha512-rNJjwsYGhcZRdZ2FnyU6ss06xQaZ4UordyvOhp7+b/bEqQiEBpMOLJjuUr48Z6T7zEbZBnzCJpIJyXNqlcfQeA==", 422 + "license": "MIT", 423 + "dependencies": { 424 + "@graphiql/toolkit": "^0.11.3", 425 + "@radix-ui/react-dialog": "^1.1", 426 + "@radix-ui/react-dropdown-menu": "^2.1", 427 + "@radix-ui/react-tooltip": "^1.2", 428 + "@radix-ui/react-visually-hidden": "^1.2", 429 + "clsx": "^1.2.1", 430 + "framer-motion": "^12.12", 431 + "get-value": "^3.0.1", 432 + "graphql-language-service": "^5.5.0", 433 + "jsonc-parser": "^3.3.1", 434 + "markdown-it": "^14.1.0", 435 + "monaco-editor": "0.52.2", 436 + "monaco-graphql": "^1.7.3", 437 + "prettier": "^3.5.3", 438 + "set-value": "^4.1.0", 439 + "zustand": "^5" 440 + }, 441 + "peerDependencies": { 442 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", 443 + "react": "^18 || ^19", 444 + "react-compiler-runtime": "19.1.0-rc.1", 445 + "react-dom": "^18 || ^19" 446 + } 447 + }, 448 + "node_modules/@graphiql/toolkit": { 449 + "version": "0.11.3", 450 + "resolved": "https://registry.npmjs.org/@graphiql/toolkit/-/toolkit-0.11.3.tgz", 451 + "integrity": "sha512-Glf0fK1cdHLNq52UWPzfSrYIJuNxy8h4451Pw1ZVpJ7dtU+tm7GVVC64UjEDQ/v2j3fnG4cX8jvR75IvfL6nzQ==", 452 + "license": "MIT", 453 + "dependencies": { 454 + "@n1ru4l/push-pull-async-iterable-iterator": "^3.1.0", 455 + "meros": "^1.1.4" 456 + }, 457 + "peerDependencies": { 458 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", 459 + "graphql-ws": ">= 4.5.0" 460 + }, 461 + "peerDependenciesMeta": { 462 + "graphql-ws": { 463 + "optional": true 464 + } 465 + } 466 + }, 467 + "node_modules/@headlessui/react": { 468 + "version": "2.2.9", 469 + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.9.tgz", 470 + "integrity": "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==", 471 + "license": "MIT", 472 + "dependencies": { 473 + "@floating-ui/react": "^0.26.16", 474 + "@react-aria/focus": "^3.20.2", 475 + "@react-aria/interactions": "^3.25.0", 476 + "@tanstack/react-virtual": "^3.13.9", 477 + "use-sync-external-store": "^1.5.0" 478 + }, 479 + "engines": { 480 + "node": ">=10" 481 + }, 482 + "peerDependencies": { 483 + "react": "^18 || ^19 || ^19.0.0-rc", 484 + "react-dom": "^18 || ^19 || ^19.0.0-rc" 485 + } 486 + }, 487 + "node_modules/@jridgewell/resolve-uri": { 488 + "version": "3.1.2", 489 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 490 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 491 + "dev": true, 492 + "license": "MIT", 493 + "engines": { 494 + "node": ">=6.0.0" 495 + } 496 + }, 497 + "node_modules/@jridgewell/sourcemap-codec": { 498 + "version": "1.5.5", 499 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 500 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 501 + "dev": true, 502 + "license": "MIT" 503 + }, 504 + "node_modules/@jridgewell/trace-mapping": { 505 + "version": "0.3.9", 506 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 507 + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 508 + "dev": true, 509 + "license": "MIT", 510 + "dependencies": { 511 + "@jridgewell/resolve-uri": "^3.0.3", 512 + "@jridgewell/sourcemap-codec": "^1.4.10" 513 + } 514 + }, 515 + "node_modules/@n1ru4l/push-pull-async-iterable-iterator": { 516 + "version": "3.2.0", 517 + "resolved": "https://registry.npmjs.org/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz", 518 + "integrity": "sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==", 519 + "license": "MIT", 520 + "engines": { 521 + "node": ">=12" 522 + } 523 + }, 524 + "node_modules/@noble/curves": { 525 + "version": "1.9.7", 526 + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", 527 + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", 528 + "dev": true, 529 + "license": "MIT", 530 + "dependencies": { 531 + "@noble/hashes": "1.8.0" 532 + }, 533 + "engines": { 534 + "node": "^14.21.3 || >=16" 535 + }, 536 + "funding": { 537 + "url": "https://paulmillr.com/funding/" 538 + } 539 + }, 540 + "node_modules/@noble/hashes": { 541 + "version": "1.8.0", 542 + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", 543 + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", 544 + "dev": true, 545 + "license": "MIT", 546 + "engines": { 547 + "node": "^14.21.3 || >=16" 548 + }, 549 + "funding": { 550 + "url": "https://paulmillr.com/funding/" 551 + } 552 + }, 553 + "node_modules/@radix-ui/primitive": { 554 + "version": "1.1.3", 555 + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", 556 + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", 557 + "license": "MIT" 558 + }, 559 + "node_modules/@radix-ui/react-arrow": { 560 + "version": "1.1.7", 561 + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", 562 + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", 563 + "license": "MIT", 564 + "dependencies": { 565 + "@radix-ui/react-primitive": "2.1.3" 566 + }, 567 + "peerDependencies": { 568 + "@types/react": "*", 569 + "@types/react-dom": "*", 570 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 571 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 572 + }, 573 + "peerDependenciesMeta": { 574 + "@types/react": { 575 + "optional": true 576 + }, 577 + "@types/react-dom": { 578 + "optional": true 579 + } 580 + } 581 + }, 582 + "node_modules/@radix-ui/react-collection": { 583 + "version": "1.1.7", 584 + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", 585 + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", 586 + "license": "MIT", 587 + "dependencies": { 588 + "@radix-ui/react-compose-refs": "1.1.2", 589 + "@radix-ui/react-context": "1.1.2", 590 + "@radix-ui/react-primitive": "2.1.3", 591 + "@radix-ui/react-slot": "1.2.3" 592 + }, 593 + "peerDependencies": { 594 + "@types/react": "*", 595 + "@types/react-dom": "*", 596 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 597 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 598 + }, 599 + "peerDependenciesMeta": { 600 + "@types/react": { 601 + "optional": true 602 + }, 603 + "@types/react-dom": { 604 + "optional": true 605 + } 606 + } 607 + }, 608 + "node_modules/@radix-ui/react-compose-refs": { 609 + "version": "1.1.2", 610 + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", 611 + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", 612 + "license": "MIT", 613 + "peerDependencies": { 614 + "@types/react": "*", 615 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 616 + }, 617 + "peerDependenciesMeta": { 618 + "@types/react": { 619 + "optional": true 620 + } 621 + } 622 + }, 623 + "node_modules/@radix-ui/react-context": { 624 + "version": "1.1.2", 625 + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", 626 + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", 627 + "license": "MIT", 628 + "peerDependencies": { 629 + "@types/react": "*", 630 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 631 + }, 632 + "peerDependenciesMeta": { 633 + "@types/react": { 634 + "optional": true 635 + } 636 + } 637 + }, 638 + "node_modules/@radix-ui/react-dialog": { 639 + "version": "1.1.15", 640 + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", 641 + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", 642 + "license": "MIT", 643 + "dependencies": { 644 + "@radix-ui/primitive": "1.1.3", 645 + "@radix-ui/react-compose-refs": "1.1.2", 646 + "@radix-ui/react-context": "1.1.2", 647 + "@radix-ui/react-dismissable-layer": "1.1.11", 648 + "@radix-ui/react-focus-guards": "1.1.3", 649 + "@radix-ui/react-focus-scope": "1.1.7", 650 + "@radix-ui/react-id": "1.1.1", 651 + "@radix-ui/react-portal": "1.1.9", 652 + "@radix-ui/react-presence": "1.1.5", 653 + "@radix-ui/react-primitive": "2.1.3", 654 + "@radix-ui/react-slot": "1.2.3", 655 + "@radix-ui/react-use-controllable-state": "1.2.2", 656 + "aria-hidden": "^1.2.4", 657 + "react-remove-scroll": "^2.6.3" 658 + }, 659 + "peerDependencies": { 660 + "@types/react": "*", 661 + "@types/react-dom": "*", 662 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 663 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 664 + }, 665 + "peerDependenciesMeta": { 666 + "@types/react": { 667 + "optional": true 668 + }, 669 + "@types/react-dom": { 670 + "optional": true 671 + } 672 + } 673 + }, 674 + "node_modules/@radix-ui/react-direction": { 675 + "version": "1.1.1", 676 + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", 677 + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", 678 + "license": "MIT", 679 + "peerDependencies": { 680 + "@types/react": "*", 681 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 682 + }, 683 + "peerDependenciesMeta": { 684 + "@types/react": { 685 + "optional": true 686 + } 687 + } 688 + }, 689 + "node_modules/@radix-ui/react-dismissable-layer": { 690 + "version": "1.1.11", 691 + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", 692 + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", 693 + "license": "MIT", 694 + "dependencies": { 695 + "@radix-ui/primitive": "1.1.3", 696 + "@radix-ui/react-compose-refs": "1.1.2", 697 + "@radix-ui/react-primitive": "2.1.3", 698 + "@radix-ui/react-use-callback-ref": "1.1.1", 699 + "@radix-ui/react-use-escape-keydown": "1.1.1" 700 + }, 701 + "peerDependencies": { 702 + "@types/react": "*", 703 + "@types/react-dom": "*", 704 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 705 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 706 + }, 707 + "peerDependenciesMeta": { 708 + "@types/react": { 709 + "optional": true 710 + }, 711 + "@types/react-dom": { 712 + "optional": true 713 + } 714 + } 715 + }, 716 + "node_modules/@radix-ui/react-dropdown-menu": { 717 + "version": "2.1.16", 718 + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", 719 + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", 720 + "license": "MIT", 721 + "dependencies": { 722 + "@radix-ui/primitive": "1.1.3", 723 + "@radix-ui/react-compose-refs": "1.1.2", 724 + "@radix-ui/react-context": "1.1.2", 725 + "@radix-ui/react-id": "1.1.1", 726 + "@radix-ui/react-menu": "2.1.16", 727 + "@radix-ui/react-primitive": "2.1.3", 728 + "@radix-ui/react-use-controllable-state": "1.2.2" 729 + }, 730 + "peerDependencies": { 731 + "@types/react": "*", 732 + "@types/react-dom": "*", 733 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 734 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 735 + }, 736 + "peerDependenciesMeta": { 737 + "@types/react": { 738 + "optional": true 739 + }, 740 + "@types/react-dom": { 741 + "optional": true 742 + } 743 + } 744 + }, 745 + "node_modules/@radix-ui/react-focus-guards": { 746 + "version": "1.1.3", 747 + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", 748 + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", 749 + "license": "MIT", 750 + "peerDependencies": { 751 + "@types/react": "*", 752 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 753 + }, 754 + "peerDependenciesMeta": { 755 + "@types/react": { 756 + "optional": true 757 + } 758 + } 759 + }, 760 + "node_modules/@radix-ui/react-focus-scope": { 761 + "version": "1.1.7", 762 + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", 763 + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", 764 + "license": "MIT", 765 + "dependencies": { 766 + "@radix-ui/react-compose-refs": "1.1.2", 767 + "@radix-ui/react-primitive": "2.1.3", 768 + "@radix-ui/react-use-callback-ref": "1.1.1" 769 + }, 770 + "peerDependencies": { 771 + "@types/react": "*", 772 + "@types/react-dom": "*", 773 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 774 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 775 + }, 776 + "peerDependenciesMeta": { 777 + "@types/react": { 778 + "optional": true 779 + }, 780 + "@types/react-dom": { 781 + "optional": true 782 + } 783 + } 784 + }, 785 + "node_modules/@radix-ui/react-id": { 786 + "version": "1.1.1", 787 + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", 788 + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", 789 + "license": "MIT", 790 + "dependencies": { 791 + "@radix-ui/react-use-layout-effect": "1.1.1" 792 + }, 793 + "peerDependencies": { 794 + "@types/react": "*", 795 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 796 + }, 797 + "peerDependenciesMeta": { 798 + "@types/react": { 799 + "optional": true 800 + } 801 + } 802 + }, 803 + "node_modules/@radix-ui/react-menu": { 804 + "version": "2.1.16", 805 + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", 806 + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", 807 + "license": "MIT", 808 + "dependencies": { 809 + "@radix-ui/primitive": "1.1.3", 810 + "@radix-ui/react-collection": "1.1.7", 811 + "@radix-ui/react-compose-refs": "1.1.2", 812 + "@radix-ui/react-context": "1.1.2", 813 + "@radix-ui/react-direction": "1.1.1", 814 + "@radix-ui/react-dismissable-layer": "1.1.11", 815 + "@radix-ui/react-focus-guards": "1.1.3", 816 + "@radix-ui/react-focus-scope": "1.1.7", 817 + "@radix-ui/react-id": "1.1.1", 818 + "@radix-ui/react-popper": "1.2.8", 819 + "@radix-ui/react-portal": "1.1.9", 820 + "@radix-ui/react-presence": "1.1.5", 821 + "@radix-ui/react-primitive": "2.1.3", 822 + "@radix-ui/react-roving-focus": "1.1.11", 823 + "@radix-ui/react-slot": "1.2.3", 824 + "@radix-ui/react-use-callback-ref": "1.1.1", 825 + "aria-hidden": "^1.2.4", 826 + "react-remove-scroll": "^2.6.3" 827 + }, 828 + "peerDependencies": { 829 + "@types/react": "*", 830 + "@types/react-dom": "*", 831 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 832 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 833 + }, 834 + "peerDependenciesMeta": { 835 + "@types/react": { 836 + "optional": true 837 + }, 838 + "@types/react-dom": { 839 + "optional": true 840 + } 841 + } 842 + }, 843 + "node_modules/@radix-ui/react-popper": { 844 + "version": "1.2.8", 845 + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", 846 + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", 847 + "license": "MIT", 848 + "dependencies": { 849 + "@floating-ui/react-dom": "^2.0.0", 850 + "@radix-ui/react-arrow": "1.1.7", 851 + "@radix-ui/react-compose-refs": "1.1.2", 852 + "@radix-ui/react-context": "1.1.2", 853 + "@radix-ui/react-primitive": "2.1.3", 854 + "@radix-ui/react-use-callback-ref": "1.1.1", 855 + "@radix-ui/react-use-layout-effect": "1.1.1", 856 + "@radix-ui/react-use-rect": "1.1.1", 857 + "@radix-ui/react-use-size": "1.1.1", 858 + "@radix-ui/rect": "1.1.1" 859 + }, 860 + "peerDependencies": { 861 + "@types/react": "*", 862 + "@types/react-dom": "*", 863 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 864 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 865 + }, 866 + "peerDependenciesMeta": { 867 + "@types/react": { 868 + "optional": true 869 + }, 870 + "@types/react-dom": { 871 + "optional": true 872 + } 873 + } 874 + }, 875 + "node_modules/@radix-ui/react-portal": { 876 + "version": "1.1.9", 877 + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", 878 + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", 879 + "license": "MIT", 880 + "dependencies": { 881 + "@radix-ui/react-primitive": "2.1.3", 882 + "@radix-ui/react-use-layout-effect": "1.1.1" 883 + }, 884 + "peerDependencies": { 885 + "@types/react": "*", 886 + "@types/react-dom": "*", 887 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 888 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 889 + }, 890 + "peerDependenciesMeta": { 891 + "@types/react": { 892 + "optional": true 893 + }, 894 + "@types/react-dom": { 895 + "optional": true 896 + } 897 + } 898 + }, 899 + "node_modules/@radix-ui/react-presence": { 900 + "version": "1.1.5", 901 + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", 902 + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", 903 + "license": "MIT", 904 + "dependencies": { 905 + "@radix-ui/react-compose-refs": "1.1.2", 906 + "@radix-ui/react-use-layout-effect": "1.1.1" 907 + }, 908 + "peerDependencies": { 909 + "@types/react": "*", 910 + "@types/react-dom": "*", 911 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 912 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 913 + }, 914 + "peerDependenciesMeta": { 915 + "@types/react": { 916 + "optional": true 917 + }, 918 + "@types/react-dom": { 919 + "optional": true 920 + } 921 + } 922 + }, 923 + "node_modules/@radix-ui/react-primitive": { 924 + "version": "2.1.3", 925 + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", 926 + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", 927 + "license": "MIT", 928 + "dependencies": { 929 + "@radix-ui/react-slot": "1.2.3" 930 + }, 931 + "peerDependencies": { 932 + "@types/react": "*", 933 + "@types/react-dom": "*", 934 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 935 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 936 + }, 937 + "peerDependenciesMeta": { 938 + "@types/react": { 939 + "optional": true 940 + }, 941 + "@types/react-dom": { 942 + "optional": true 943 + } 944 + } 945 + }, 946 + "node_modules/@radix-ui/react-roving-focus": { 947 + "version": "1.1.11", 948 + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", 949 + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", 950 + "license": "MIT", 951 + "dependencies": { 952 + "@radix-ui/primitive": "1.1.3", 953 + "@radix-ui/react-collection": "1.1.7", 954 + "@radix-ui/react-compose-refs": "1.1.2", 955 + "@radix-ui/react-context": "1.1.2", 956 + "@radix-ui/react-direction": "1.1.1", 957 + "@radix-ui/react-id": "1.1.1", 958 + "@radix-ui/react-primitive": "2.1.3", 959 + "@radix-ui/react-use-callback-ref": "1.1.1", 960 + "@radix-ui/react-use-controllable-state": "1.2.2" 961 + }, 962 + "peerDependencies": { 963 + "@types/react": "*", 964 + "@types/react-dom": "*", 965 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 966 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 967 + }, 968 + "peerDependenciesMeta": { 969 + "@types/react": { 970 + "optional": true 971 + }, 972 + "@types/react-dom": { 973 + "optional": true 974 + } 975 + } 976 + }, 977 + "node_modules/@radix-ui/react-slot": { 978 + "version": "1.2.3", 979 + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", 980 + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", 981 + "license": "MIT", 982 + "dependencies": { 983 + "@radix-ui/react-compose-refs": "1.1.2" 984 + }, 985 + "peerDependencies": { 986 + "@types/react": "*", 987 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 988 + }, 989 + "peerDependenciesMeta": { 990 + "@types/react": { 991 + "optional": true 992 + } 993 + } 994 + }, 995 + "node_modules/@radix-ui/react-tooltip": { 996 + "version": "1.2.8", 997 + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", 998 + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", 999 + "license": "MIT", 1000 + "dependencies": { 1001 + "@radix-ui/primitive": "1.1.3", 1002 + "@radix-ui/react-compose-refs": "1.1.2", 1003 + "@radix-ui/react-context": "1.1.2", 1004 + "@radix-ui/react-dismissable-layer": "1.1.11", 1005 + "@radix-ui/react-id": "1.1.1", 1006 + "@radix-ui/react-popper": "1.2.8", 1007 + "@radix-ui/react-portal": "1.1.9", 1008 + "@radix-ui/react-presence": "1.1.5", 1009 + "@radix-ui/react-primitive": "2.1.3", 1010 + "@radix-ui/react-slot": "1.2.3", 1011 + "@radix-ui/react-use-controllable-state": "1.2.2", 1012 + "@radix-ui/react-visually-hidden": "1.2.3" 1013 + }, 1014 + "peerDependencies": { 1015 + "@types/react": "*", 1016 + "@types/react-dom": "*", 1017 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 1018 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1019 + }, 1020 + "peerDependenciesMeta": { 1021 + "@types/react": { 1022 + "optional": true 1023 + }, 1024 + "@types/react-dom": { 1025 + "optional": true 1026 + } 1027 + } 1028 + }, 1029 + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-visually-hidden": { 1030 + "version": "1.2.3", 1031 + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", 1032 + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", 1033 + "license": "MIT", 1034 + "dependencies": { 1035 + "@radix-ui/react-primitive": "2.1.3" 1036 + }, 1037 + "peerDependencies": { 1038 + "@types/react": "*", 1039 + "@types/react-dom": "*", 1040 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 1041 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1042 + }, 1043 + "peerDependenciesMeta": { 1044 + "@types/react": { 1045 + "optional": true 1046 + }, 1047 + "@types/react-dom": { 1048 + "optional": true 1049 + } 1050 + } 1051 + }, 1052 + "node_modules/@radix-ui/react-use-callback-ref": { 1053 + "version": "1.1.1", 1054 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", 1055 + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", 1056 + "license": "MIT", 1057 + "peerDependencies": { 1058 + "@types/react": "*", 1059 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1060 + }, 1061 + "peerDependenciesMeta": { 1062 + "@types/react": { 1063 + "optional": true 1064 + } 1065 + } 1066 + }, 1067 + "node_modules/@radix-ui/react-use-controllable-state": { 1068 + "version": "1.2.2", 1069 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", 1070 + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", 1071 + "license": "MIT", 1072 + "dependencies": { 1073 + "@radix-ui/react-use-effect-event": "0.0.2", 1074 + "@radix-ui/react-use-layout-effect": "1.1.1" 1075 + }, 1076 + "peerDependencies": { 1077 + "@types/react": "*", 1078 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1079 + }, 1080 + "peerDependenciesMeta": { 1081 + "@types/react": { 1082 + "optional": true 1083 + } 1084 + } 1085 + }, 1086 + "node_modules/@radix-ui/react-use-effect-event": { 1087 + "version": "0.0.2", 1088 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", 1089 + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", 1090 + "license": "MIT", 1091 + "dependencies": { 1092 + "@radix-ui/react-use-layout-effect": "1.1.1" 1093 + }, 1094 + "peerDependencies": { 1095 + "@types/react": "*", 1096 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1097 + }, 1098 + "peerDependenciesMeta": { 1099 + "@types/react": { 1100 + "optional": true 1101 + } 1102 + } 1103 + }, 1104 + "node_modules/@radix-ui/react-use-escape-keydown": { 1105 + "version": "1.1.1", 1106 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", 1107 + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", 1108 + "license": "MIT", 1109 + "dependencies": { 1110 + "@radix-ui/react-use-callback-ref": "1.1.1" 1111 + }, 1112 + "peerDependencies": { 1113 + "@types/react": "*", 1114 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1115 + }, 1116 + "peerDependenciesMeta": { 1117 + "@types/react": { 1118 + "optional": true 1119 + } 1120 + } 1121 + }, 1122 + "node_modules/@radix-ui/react-use-layout-effect": { 1123 + "version": "1.1.1", 1124 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", 1125 + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", 1126 + "license": "MIT", 1127 + "peerDependencies": { 1128 + "@types/react": "*", 1129 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1130 + }, 1131 + "peerDependenciesMeta": { 1132 + "@types/react": { 1133 + "optional": true 1134 + } 1135 + } 1136 + }, 1137 + "node_modules/@radix-ui/react-use-rect": { 1138 + "version": "1.1.1", 1139 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", 1140 + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", 1141 + "license": "MIT", 1142 + "dependencies": { 1143 + "@radix-ui/rect": "1.1.1" 1144 + }, 1145 + "peerDependencies": { 1146 + "@types/react": "*", 1147 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1148 + }, 1149 + "peerDependenciesMeta": { 1150 + "@types/react": { 1151 + "optional": true 1152 + } 1153 + } 1154 + }, 1155 + "node_modules/@radix-ui/react-use-size": { 1156 + "version": "1.1.1", 1157 + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", 1158 + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", 1159 + "license": "MIT", 1160 + "dependencies": { 1161 + "@radix-ui/react-use-layout-effect": "1.1.1" 1162 + }, 1163 + "peerDependencies": { 1164 + "@types/react": "*", 1165 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1166 + }, 1167 + "peerDependenciesMeta": { 1168 + "@types/react": { 1169 + "optional": true 1170 + } 1171 + } 1172 + }, 1173 + "node_modules/@radix-ui/react-visually-hidden": { 1174 + "version": "1.2.4", 1175 + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.4.tgz", 1176 + "integrity": "sha512-kaeiyGCe844dkb9AVF+rb4yTyb1LiLN/e3es3nLiRyN4dC8AduBYPMnnNlDjX2VDOcvDEiPnRNMJeWCfsX0txg==", 1177 + "license": "MIT", 1178 + "dependencies": { 1179 + "@radix-ui/react-primitive": "2.1.4" 1180 + }, 1181 + "peerDependencies": { 1182 + "@types/react": "*", 1183 + "@types/react-dom": "*", 1184 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 1185 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1186 + }, 1187 + "peerDependenciesMeta": { 1188 + "@types/react": { 1189 + "optional": true 1190 + }, 1191 + "@types/react-dom": { 1192 + "optional": true 1193 + } 1194 + } 1195 + }, 1196 + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { 1197 + "version": "2.1.4", 1198 + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", 1199 + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", 1200 + "license": "MIT", 1201 + "dependencies": { 1202 + "@radix-ui/react-slot": "1.2.4" 1203 + }, 1204 + "peerDependencies": { 1205 + "@types/react": "*", 1206 + "@types/react-dom": "*", 1207 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", 1208 + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1209 + }, 1210 + "peerDependenciesMeta": { 1211 + "@types/react": { 1212 + "optional": true 1213 + }, 1214 + "@types/react-dom": { 1215 + "optional": true 1216 + } 1217 + } 1218 + }, 1219 + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { 1220 + "version": "1.2.4", 1221 + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", 1222 + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", 1223 + "license": "MIT", 1224 + "dependencies": { 1225 + "@radix-ui/react-compose-refs": "1.1.2" 1226 + }, 1227 + "peerDependencies": { 1228 + "@types/react": "*", 1229 + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" 1230 + }, 1231 + "peerDependenciesMeta": { 1232 + "@types/react": { 1233 + "optional": true 1234 + } 1235 + } 1236 + }, 1237 + "node_modules/@radix-ui/rect": { 1238 + "version": "1.1.1", 1239 + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", 1240 + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", 1241 + "license": "MIT" 1242 + }, 1243 + "node_modules/@react-aria/focus": { 1244 + "version": "3.21.5", 1245 + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", 1246 + "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", 1247 + "license": "Apache-2.0", 1248 + "dependencies": { 1249 + "@react-aria/interactions": "^3.27.1", 1250 + "@react-aria/utils": "^3.33.1", 1251 + "@react-types/shared": "^3.33.1", 1252 + "@swc/helpers": "^0.5.0", 1253 + "clsx": "^2.0.0" 1254 + }, 1255 + "peerDependencies": { 1256 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", 1257 + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1258 + } 1259 + }, 1260 + "node_modules/@react-aria/focus/node_modules/clsx": { 1261 + "version": "2.1.1", 1262 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1263 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1264 + "license": "MIT", 1265 + "engines": { 1266 + "node": ">=6" 1267 + } 1268 + }, 1269 + "node_modules/@react-aria/interactions": { 1270 + "version": "3.27.1", 1271 + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", 1272 + "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", 1273 + "license": "Apache-2.0", 1274 + "dependencies": { 1275 + "@react-aria/ssr": "^3.9.10", 1276 + "@react-aria/utils": "^3.33.1", 1277 + "@react-stately/flags": "^3.1.2", 1278 + "@react-types/shared": "^3.33.1", 1279 + "@swc/helpers": "^0.5.0" 1280 + }, 1281 + "peerDependencies": { 1282 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", 1283 + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1284 + } 1285 + }, 1286 + "node_modules/@react-aria/ssr": { 1287 + "version": "3.9.10", 1288 + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", 1289 + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", 1290 + "license": "Apache-2.0", 1291 + "dependencies": { 1292 + "@swc/helpers": "^0.5.0" 1293 + }, 1294 + "engines": { 1295 + "node": ">= 12" 1296 + }, 1297 + "peerDependencies": { 1298 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1299 + } 1300 + }, 1301 + "node_modules/@react-aria/utils": { 1302 + "version": "3.33.1", 1303 + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.33.1.tgz", 1304 + "integrity": "sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==", 1305 + "license": "Apache-2.0", 1306 + "dependencies": { 1307 + "@react-aria/ssr": "^3.9.10", 1308 + "@react-stately/flags": "^3.1.2", 1309 + "@react-stately/utils": "^3.11.0", 1310 + "@react-types/shared": "^3.33.1", 1311 + "@swc/helpers": "^0.5.0", 1312 + "clsx": "^2.0.0" 1313 + }, 1314 + "peerDependencies": { 1315 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", 1316 + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1317 + } 1318 + }, 1319 + "node_modules/@react-aria/utils/node_modules/clsx": { 1320 + "version": "2.1.1", 1321 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1322 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1323 + "license": "MIT", 1324 + "engines": { 1325 + "node": ">=6" 1326 + } 1327 + }, 1328 + "node_modules/@react-stately/flags": { 1329 + "version": "3.1.2", 1330 + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz", 1331 + "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", 1332 + "license": "Apache-2.0", 1333 + "dependencies": { 1334 + "@swc/helpers": "^0.5.0" 1335 + } 1336 + }, 1337 + "node_modules/@react-stately/utils": { 1338 + "version": "3.11.0", 1339 + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.11.0.tgz", 1340 + "integrity": "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==", 1341 + "license": "Apache-2.0", 1342 + "dependencies": { 1343 + "@swc/helpers": "^0.5.0" 1344 + }, 1345 + "peerDependencies": { 1346 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1347 + } 1348 + }, 1349 + "node_modules/@react-types/shared": { 1350 + "version": "3.33.1", 1351 + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.33.1.tgz", 1352 + "integrity": "sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==", 1353 + "license": "Apache-2.0", 1354 + "peerDependencies": { 1355 + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" 1356 + } 1357 + }, 1358 + "node_modules/@standard-schema/spec": { 1359 + "version": "1.1.0", 1360 + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", 1361 + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", 1362 + "dev": true, 1363 + "license": "MIT" 1364 + }, 1365 + "node_modules/@swc/helpers": { 1366 + "version": "0.5.20", 1367 + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.20.tgz", 1368 + "integrity": "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==", 1369 + "license": "Apache-2.0", 1370 + "dependencies": { 1371 + "tslib": "^2.8.0" 1372 + } 1373 + }, 1374 + "node_modules/@tanstack/react-virtual": { 1375 + "version": "3.13.23", 1376 + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.23.tgz", 1377 + "integrity": "sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==", 1378 + "license": "MIT", 1379 + "dependencies": { 1380 + "@tanstack/virtual-core": "3.13.23" 1381 + }, 1382 + "funding": { 1383 + "type": "github", 1384 + "url": "https://github.com/sponsors/tannerlinsley" 1385 + }, 1386 + "peerDependencies": { 1387 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", 1388 + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 1389 + } 1390 + }, 1391 + "node_modules/@tanstack/virtual-core": { 1392 + "version": "3.13.23", 1393 + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.23.tgz", 1394 + "integrity": "sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==", 1395 + "license": "MIT", 1396 + "funding": { 1397 + "type": "github", 1398 + "url": "https://github.com/sponsors/tannerlinsley" 1399 + } 1400 + }, 1401 + "node_modules/@ts-morph/common": { 1402 + "version": "0.28.1", 1403 + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.28.1.tgz", 1404 + "integrity": "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==", 1405 + "dev": true, 1406 + "license": "MIT", 1407 + "dependencies": { 1408 + "minimatch": "^10.0.1", 1409 + "path-browserify": "^1.0.1", 1410 + "tinyglobby": "^0.2.14" 1411 + } 1412 + }, 1413 + "node_modules/@tsconfig/node10": { 1414 + "version": "1.0.12", 1415 + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", 1416 + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", 1417 + "dev": true, 1418 + "license": "MIT" 1419 + }, 1420 + "node_modules/@tsconfig/node12": { 1421 + "version": "1.0.11", 1422 + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 1423 + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 1424 + "dev": true, 1425 + "license": "MIT" 1426 + }, 1427 + "node_modules/@tsconfig/node14": { 1428 + "version": "1.0.3", 1429 + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 1430 + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 1431 + "dev": true, 1432 + "license": "MIT" 1433 + }, 1434 + "node_modules/@tsconfig/node16": { 1435 + "version": "1.0.4", 1436 + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 1437 + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 1438 + "dev": true, 1439 + "license": "MIT" 1440 + }, 1441 + "node_modules/@types/interpret": { 1442 + "version": "1.1.4", 1443 + "resolved": "https://registry.npmjs.org/@types/interpret/-/interpret-1.1.4.tgz", 1444 + "integrity": "sha512-r+tPKWHYqaxJOYA3Eik0mMi+SEREqOXLmsooRFmc6GHv7nWUDixFtKN+cegvsPlDcEZd9wxsdp041v2imQuvag==", 1445 + "license": "MIT", 1446 + "dependencies": { 1447 + "@types/node": "*" 1448 + } 1449 + }, 1450 + "node_modules/@types/node": { 1451 + "version": "25.5.0", 1452 + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", 1453 + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", 1454 + "license": "MIT", 1455 + "dependencies": { 1456 + "undici-types": "~7.18.0" 1457 + } 1458 + }, 1459 + "node_modules/@types/semver": { 1460 + "version": "7.7.1", 1461 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", 1462 + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", 1463 + "license": "MIT" 1464 + }, 1465 + "node_modules/abort-controller": { 1466 + "version": "3.0.0", 1467 + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 1468 + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 1469 + "dev": true, 1470 + "license": "MIT", 1471 + "dependencies": { 1472 + "event-target-shim": "^5.0.0" 1473 + }, 1474 + "engines": { 1475 + "node": ">=6.5" 1476 + } 1477 + }, 1478 + "node_modules/acorn": { 1479 + "version": "8.16.0", 1480 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", 1481 + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", 1482 + "dev": true, 1483 + "license": "MIT", 1484 + "bin": { 1485 + "acorn": "bin/acorn" 1486 + }, 1487 + "engines": { 1488 + "node": ">=0.4.0" 1489 + } 1490 + }, 1491 + "node_modules/acorn-walk": { 1492 + "version": "8.3.5", 1493 + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", 1494 + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", 1495 + "dev": true, 1496 + "license": "MIT", 1497 + "dependencies": { 1498 + "acorn": "^8.11.0" 1499 + }, 1500 + "engines": { 1501 + "node": ">=0.4.0" 1502 + } 1503 + }, 1504 + "node_modules/ansi-regex": { 1505 + "version": "5.0.1", 1506 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1507 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1508 + "license": "MIT", 1509 + "engines": { 1510 + "node": ">=8" 1511 + } 1512 + }, 1513 + "node_modules/ansi-styles": { 1514 + "version": "4.3.0", 1515 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1516 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1517 + "license": "MIT", 1518 + "dependencies": { 1519 + "color-convert": "^2.0.1" 1520 + }, 1521 + "engines": { 1522 + "node": ">=8" 1523 + }, 1524 + "funding": { 1525 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1526 + } 1527 + }, 1528 + "node_modules/arg": { 1529 + "version": "4.1.3", 1530 + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 1531 + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 1532 + "dev": true, 1533 + "license": "MIT" 1534 + }, 1535 + "node_modules/argparse": { 1536 + "version": "2.0.1", 1537 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1538 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1539 + "license": "Python-2.0" 1540 + }, 1541 + "node_modules/aria-hidden": { 1542 + "version": "1.2.6", 1543 + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", 1544 + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", 1545 + "license": "MIT", 1546 + "dependencies": { 1547 + "tslib": "^2.0.0" 1548 + }, 1549 + "engines": { 1550 + "node": ">=10" 1551 + } 1552 + }, 1553 + "node_modules/atomic-sleep": { 1554 + "version": "1.0.0", 1555 + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 1556 + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 1557 + "dev": true, 1558 + "license": "MIT", 1559 + "engines": { 1560 + "node": ">=8.0.0" 1561 + } 1562 + }, 1563 + "node_modules/balanced-match": { 1564 + "version": "4.0.4", 1565 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", 1566 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", 1567 + "license": "MIT", 1568 + "engines": { 1569 + "node": "18 || 20 || >=22" 1570 + } 1571 + }, 1572 + "node_modules/base64-js": { 1573 + "version": "1.5.1", 1574 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1575 + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1576 + "dev": true, 1577 + "funding": [ 1578 + { 1579 + "type": "github", 1580 + "url": "https://github.com/sponsors/feross" 1581 + }, 1582 + { 1583 + "type": "patreon", 1584 + "url": "https://www.patreon.com/feross" 1585 + }, 1586 + { 1587 + "type": "consulting", 1588 + "url": "https://feross.org/support" 1589 + } 1590 + ], 1591 + "license": "MIT" 1592 + }, 1593 + "node_modules/body-parser": { 1594 + "version": "2.2.2", 1595 + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", 1596 + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", 1597 + "license": "MIT", 1598 + "dependencies": { 1599 + "bytes": "^3.1.2", 1600 + "content-type": "^1.0.5", 1601 + "debug": "^4.4.3", 1602 + "http-errors": "^2.0.0", 1603 + "iconv-lite": "^0.7.0", 1604 + "on-finished": "^2.4.1", 1605 + "qs": "^6.14.1", 1606 + "raw-body": "^3.0.1", 1607 + "type-is": "^2.0.1" 1608 + }, 1609 + "engines": { 1610 + "node": ">=18" 1611 + }, 1612 + "funding": { 1613 + "type": "opencollective", 1614 + "url": "https://opencollective.com/express" 1615 + } 1616 + }, 1617 + "node_modules/body-parser/node_modules/iconv-lite": { 1618 + "version": "0.7.2", 1619 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", 1620 + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", 1621 + "license": "MIT", 1622 + "dependencies": { 1623 + "safer-buffer": ">= 2.1.2 < 3.0.0" 1624 + }, 1625 + "engines": { 1626 + "node": ">=0.10.0" 1627 + }, 1628 + "funding": { 1629 + "type": "opencollective", 1630 + "url": "https://opencollective.com/express" 1631 + } 1632 + }, 1633 + "node_modules/body-parser/node_modules/raw-body": { 1634 + "version": "3.0.2", 1635 + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", 1636 + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", 1637 + "license": "MIT", 1638 + "dependencies": { 1639 + "bytes": "~3.1.2", 1640 + "http-errors": "~2.0.1", 1641 + "iconv-lite": "~0.7.0", 1642 + "unpipe": "~1.0.0" 1643 + }, 1644 + "engines": { 1645 + "node": ">= 0.10" 1646 + } 1647 + }, 1648 + "node_modules/brace-expansion": { 1649 + "version": "5.0.5", 1650 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", 1651 + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", 1652 + "license": "MIT", 1653 + "dependencies": { 1654 + "balanced-match": "^4.0.2" 1655 + }, 1656 + "engines": { 1657 + "node": "18 || 20 || >=22" 1658 + } 1659 + }, 1660 + "node_modules/buffer": { 1661 + "version": "6.0.3", 1662 + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 1663 + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 1664 + "dev": true, 1665 + "funding": [ 1666 + { 1667 + "type": "github", 1668 + "url": "https://github.com/sponsors/feross" 1669 + }, 1670 + { 1671 + "type": "patreon", 1672 + "url": "https://www.patreon.com/feross" 1673 + }, 1674 + { 1675 + "type": "consulting", 1676 + "url": "https://feross.org/support" 1677 + } 1678 + ], 1679 + "license": "MIT", 1680 + "dependencies": { 1681 + "base64-js": "^1.3.1", 1682 + "ieee754": "^1.2.1" 1683 + } 1684 + }, 1685 + "node_modules/bytes": { 1686 + "version": "3.1.2", 1687 + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1688 + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 1689 + "license": "MIT", 1690 + "engines": { 1691 + "node": ">= 0.8" 1692 + } 1693 + }, 1694 + "node_modules/call-bind-apply-helpers": { 1695 + "version": "1.0.2", 1696 + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1697 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1698 + "license": "MIT", 1699 + "dependencies": { 1700 + "es-errors": "^1.3.0", 1701 + "function-bind": "^1.1.2" 1702 + }, 1703 + "engines": { 1704 + "node": ">= 0.4" 1705 + } 1706 + }, 1707 + "node_modules/call-bound": { 1708 + "version": "1.0.4", 1709 + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 1710 + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 1711 + "license": "MIT", 1712 + "dependencies": { 1713 + "call-bind-apply-helpers": "^1.0.2", 1714 + "get-intrinsic": "^1.3.0" 1715 + }, 1716 + "engines": { 1717 + "node": ">= 0.4" 1718 + }, 1719 + "funding": { 1720 + "url": "https://github.com/sponsors/ljharb" 1721 + } 1722 + }, 1723 + "node_modules/chalk": { 1724 + "version": "4.1.2", 1725 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1726 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1727 + "license": "MIT", 1728 + "dependencies": { 1729 + "ansi-styles": "^4.1.0", 1730 + "supports-color": "^7.1.0" 1731 + }, 1732 + "engines": { 1733 + "node": ">=10" 1734 + }, 1735 + "funding": { 1736 + "url": "https://github.com/chalk/chalk?sponsor=1" 1737 + } 1738 + }, 1739 + "node_modules/cliui": { 1740 + "version": "8.0.1", 1741 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1742 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1743 + "license": "ISC", 1744 + "dependencies": { 1745 + "string-width": "^4.2.0", 1746 + "strip-ansi": "^6.0.1", 1747 + "wrap-ansi": "^7.0.0" 1748 + }, 1749 + "engines": { 1750 + "node": ">=12" 1751 + } 1752 + }, 1753 + "node_modules/clsx": { 1754 + "version": "1.2.1", 1755 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", 1756 + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", 1757 + "license": "MIT", 1758 + "engines": { 1759 + "node": ">=6" 1760 + } 1761 + }, 1762 + "node_modules/code-block-writer": { 1763 + "version": "13.0.3", 1764 + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", 1765 + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", 1766 + "dev": true, 1767 + "license": "MIT" 1768 + }, 1769 + "node_modules/color-convert": { 1770 + "version": "2.0.1", 1771 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1772 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1773 + "license": "MIT", 1774 + "dependencies": { 1775 + "color-name": "~1.1.4" 1776 + }, 1777 + "engines": { 1778 + "node": ">=7.0.0" 1779 + } 1780 + }, 1781 + "node_modules/color-name": { 1782 + "version": "1.1.4", 1783 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1784 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1785 + "license": "MIT" 1786 + }, 1787 + "node_modules/content-disposition": { 1788 + "version": "1.0.1", 1789 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", 1790 + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", 1791 + "license": "MIT", 1792 + "engines": { 1793 + "node": ">=18" 1794 + }, 1795 + "funding": { 1796 + "type": "opencollective", 1797 + "url": "https://opencollective.com/express" 1798 + } 1799 + }, 1800 + "node_modules/content-type": { 1801 + "version": "1.0.5", 1802 + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1803 + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 1804 + "license": "MIT", 1805 + "engines": { 1806 + "node": ">= 0.6" 1807 + } 1808 + }, 1809 + "node_modules/cookie": { 1810 + "version": "0.7.2", 1811 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", 1812 + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 1813 + "license": "MIT", 1814 + "engines": { 1815 + "node": ">= 0.6" 1816 + } 1817 + }, 1818 + "node_modules/cookie-signature": { 1819 + "version": "1.2.2", 1820 + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 1821 + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 1822 + "license": "MIT", 1823 + "engines": { 1824 + "node": ">=6.6.0" 1825 + } 1826 + }, 1827 + "node_modules/core-js": { 1828 + "version": "3.49.0", 1829 + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", 1830 + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", 1831 + "dev": true, 1832 + "hasInstallScript": true, 1833 + "license": "MIT", 1834 + "funding": { 1835 + "type": "opencollective", 1836 + "url": "https://opencollective.com/core-js" 1837 + } 1838 + }, 1839 + "node_modules/create-require": { 1840 + "version": "1.1.1", 1841 + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 1842 + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 1843 + "dev": true, 1844 + "license": "MIT" 1845 + }, 1846 + "node_modules/debounce-promise": { 1847 + "version": "3.1.2", 1848 + "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz", 1849 + "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==", 1850 + "license": "MIT" 1851 + }, 1852 + "node_modules/debug": { 1853 + "version": "4.4.3", 1854 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1855 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1856 + "license": "MIT", 1857 + "dependencies": { 1858 + "ms": "^2.1.3" 1859 + }, 1860 + "engines": { 1861 + "node": ">=6.0" 1862 + }, 1863 + "peerDependenciesMeta": { 1864 + "supports-color": { 1865 + "optional": true 1866 + } 1867 + } 1868 + }, 1869 + "node_modules/depd": { 1870 + "version": "2.0.0", 1871 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1872 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1873 + "license": "MIT", 1874 + "engines": { 1875 + "node": ">= 0.8" 1876 + } 1877 + }, 1878 + "node_modules/detect-node-es": { 1879 + "version": "1.1.0", 1880 + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", 1881 + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", 1882 + "license": "MIT" 1883 + }, 1884 + "node_modules/diff": { 1885 + "version": "4.0.4", 1886 + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", 1887 + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", 1888 + "dev": true, 1889 + "license": "BSD-3-Clause", 1890 + "engines": { 1891 + "node": ">=0.3.1" 1892 + } 1893 + }, 1894 + "node_modules/dunder-proto": { 1895 + "version": "1.0.1", 1896 + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1897 + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1898 + "license": "MIT", 1899 + "dependencies": { 1900 + "call-bind-apply-helpers": "^1.0.1", 1901 + "es-errors": "^1.3.0", 1902 + "gopd": "^1.2.0" 1903 + }, 1904 + "engines": { 1905 + "node": ">= 0.4" 1906 + } 1907 + }, 1908 + "node_modules/ee-first": { 1909 + "version": "1.1.1", 1910 + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1911 + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 1912 + "license": "MIT" 1913 + }, 1914 + "node_modules/emoji-regex": { 1915 + "version": "8.0.0", 1916 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1917 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1918 + "license": "MIT" 1919 + }, 1920 + "node_modules/encodeurl": { 1921 + "version": "2.0.0", 1922 + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 1923 + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 1924 + "license": "MIT", 1925 + "engines": { 1926 + "node": ">= 0.8" 1927 + } 1928 + }, 1929 + "node_modules/entities": { 1930 + "version": "4.5.0", 1931 + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1932 + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1933 + "license": "BSD-2-Clause", 1934 + "engines": { 1935 + "node": ">=0.12" 1936 + }, 1937 + "funding": { 1938 + "url": "https://github.com/fb55/entities?sponsor=1" 1939 + } 1940 + }, 1941 + "node_modules/es-define-property": { 1942 + "version": "1.0.1", 1943 + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1944 + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1945 + "license": "MIT", 1946 + "engines": { 1947 + "node": ">= 0.4" 1948 + } 1949 + }, 1950 + "node_modules/es-errors": { 1951 + "version": "1.3.0", 1952 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1953 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1954 + "license": "MIT", 1955 + "engines": { 1956 + "node": ">= 0.4" 1957 + } 1958 + }, 1959 + "node_modules/es-object-atoms": { 1960 + "version": "1.1.1", 1961 + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1962 + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1963 + "license": "MIT", 1964 + "dependencies": { 1965 + "es-errors": "^1.3.0" 1966 + }, 1967 + "engines": { 1968 + "node": ">= 0.4" 1969 + } 1970 + }, 1971 + "node_modules/escalade": { 1972 + "version": "3.2.0", 1973 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1974 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1975 + "license": "MIT", 1976 + "engines": { 1977 + "node": ">=6" 1978 + } 1979 + }, 1980 + "node_modules/escape-html": { 1981 + "version": "1.0.3", 1982 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1983 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 1984 + "license": "MIT" 1985 + }, 1986 + "node_modules/etag": { 1987 + "version": "1.8.1", 1988 + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1989 + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1990 + "license": "MIT", 1991 + "engines": { 1992 + "node": ">= 0.6" 1993 + } 1994 + }, 1995 + "node_modules/event-target-shim": { 1996 + "version": "5.0.1", 1997 + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1998 + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1999 + "dev": true, 2000 + "license": "MIT", 2001 + "engines": { 2002 + "node": ">=6" 2003 + } 2004 + }, 2005 + "node_modules/eventemitter3": { 2006 + "version": "4.0.7", 2007 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 2008 + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", 2009 + "license": "MIT" 2010 + }, 2011 + "node_modules/events": { 2012 + "version": "3.3.0", 2013 + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 2014 + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 2015 + "dev": true, 2016 + "license": "MIT", 2017 + "engines": { 2018 + "node": ">=0.8.x" 2019 + } 2020 + }, 2021 + "node_modules/express": { 2022 + "version": "5.2.1", 2023 + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", 2024 + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", 2025 + "license": "MIT", 2026 + "dependencies": { 2027 + "accepts": "^2.0.0", 2028 + "body-parser": "^2.2.1", 2029 + "content-disposition": "^1.0.0", 2030 + "content-type": "^1.0.5", 2031 + "cookie": "^0.7.1", 2032 + "cookie-signature": "^1.2.1", 2033 + "debug": "^4.4.0", 2034 + "depd": "^2.0.0", 2035 + "encodeurl": "^2.0.0", 2036 + "escape-html": "^1.0.3", 2037 + "etag": "^1.8.1", 2038 + "finalhandler": "^2.1.0", 2039 + "fresh": "^2.0.0", 2040 + "http-errors": "^2.0.0", 2041 + "merge-descriptors": "^2.0.0", 2042 + "mime-types": "^3.0.0", 2043 + "on-finished": "^2.4.1", 2044 + "once": "^1.4.0", 2045 + "parseurl": "^1.3.3", 2046 + "proxy-addr": "^2.0.7", 2047 + "qs": "^6.14.0", 2048 + "range-parser": "^1.2.1", 2049 + "router": "^2.2.0", 2050 + "send": "^1.1.0", 2051 + "serve-static": "^2.2.0", 2052 + "statuses": "^2.0.1", 2053 + "type-is": "^2.0.1", 2054 + "vary": "^1.1.2" 2055 + }, 2056 + "engines": { 2057 + "node": ">= 18" 2058 + }, 2059 + "funding": { 2060 + "type": "opencollective", 2061 + "url": "https://opencollective.com/express" 2062 + } 2063 + }, 2064 + "node_modules/express/node_modules/accepts": { 2065 + "version": "2.0.0", 2066 + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 2067 + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 2068 + "license": "MIT", 2069 + "dependencies": { 2070 + "mime-types": "^3.0.0", 2071 + "negotiator": "^1.0.0" 2072 + }, 2073 + "engines": { 2074 + "node": ">= 0.6" 2075 + } 2076 + }, 2077 + "node_modules/express/node_modules/mime-db": { 2078 + "version": "1.54.0", 2079 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 2080 + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 2081 + "license": "MIT", 2082 + "engines": { 2083 + "node": ">= 0.6" 2084 + } 2085 + }, 2086 + "node_modules/express/node_modules/mime-types": { 2087 + "version": "3.0.2", 2088 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", 2089 + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", 2090 + "license": "MIT", 2091 + "dependencies": { 2092 + "mime-db": "^1.54.0" 2093 + }, 2094 + "engines": { 2095 + "node": ">=18" 2096 + }, 2097 + "funding": { 2098 + "type": "opencollective", 2099 + "url": "https://opencollective.com/express" 2100 + } 2101 + }, 2102 + "node_modules/express/node_modules/negotiator": { 2103 + "version": "1.0.0", 2104 + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 2105 + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 2106 + "license": "MIT", 2107 + "engines": { 2108 + "node": ">= 0.6" 2109 + } 2110 + }, 2111 + "node_modules/fast-redact": { 2112 + "version": "3.5.0", 2113 + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", 2114 + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", 2115 + "dev": true, 2116 + "license": "MIT", 2117 + "engines": { 2118 + "node": ">=6" 2119 + } 2120 + }, 2121 + "node_modules/fdir": { 2122 + "version": "6.5.0", 2123 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2124 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2125 + "dev": true, 2126 + "license": "MIT", 2127 + "engines": { 2128 + "node": ">=12.0.0" 2129 + }, 2130 + "peerDependencies": { 2131 + "picomatch": "^3 || ^4" 2132 + }, 2133 + "peerDependenciesMeta": { 2134 + "picomatch": { 2135 + "optional": true 2136 + } 2137 + } 2138 + }, 2139 + "node_modules/finalhandler": { 2140 + "version": "2.1.1", 2141 + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", 2142 + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", 2143 + "license": "MIT", 2144 + "dependencies": { 2145 + "debug": "^4.4.0", 2146 + "encodeurl": "^2.0.0", 2147 + "escape-html": "^1.0.3", 2148 + "on-finished": "^2.4.1", 2149 + "parseurl": "^1.3.3", 2150 + "statuses": "^2.0.1" 2151 + }, 2152 + "engines": { 2153 + "node": ">= 18.0.0" 2154 + }, 2155 + "funding": { 2156 + "type": "opencollective", 2157 + "url": "https://opencollective.com/express" 2158 + } 2159 + }, 2160 + "node_modules/follow-redirects": { 2161 + "version": "1.15.11", 2162 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", 2163 + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", 2164 + "funding": [ 2165 + { 2166 + "type": "individual", 2167 + "url": "https://github.com/sponsors/RubenVerborgh" 2168 + } 2169 + ], 2170 + "license": "MIT", 2171 + "engines": { 2172 + "node": ">=4.0" 2173 + }, 2174 + "peerDependenciesMeta": { 2175 + "debug": { 2176 + "optional": true 2177 + } 2178 + } 2179 + }, 2180 + "node_modules/forwarded": { 2181 + "version": "0.2.0", 2182 + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2183 + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 2184 + "license": "MIT", 2185 + "engines": { 2186 + "node": ">= 0.6" 2187 + } 2188 + }, 2189 + "node_modules/framer-motion": { 2190 + "version": "12.38.0", 2191 + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", 2192 + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", 2193 + "license": "MIT", 2194 + "dependencies": { 2195 + "motion-dom": "^12.38.0", 2196 + "motion-utils": "^12.36.0", 2197 + "tslib": "^2.4.0" 2198 + }, 2199 + "peerDependencies": { 2200 + "@emotion/is-prop-valid": "*", 2201 + "react": "^18.0.0 || ^19.0.0", 2202 + "react-dom": "^18.0.0 || ^19.0.0" 2203 + }, 2204 + "peerDependenciesMeta": { 2205 + "@emotion/is-prop-valid": { 2206 + "optional": true 2207 + }, 2208 + "react": { 2209 + "optional": true 2210 + }, 2211 + "react-dom": { 2212 + "optional": true 2213 + } 2214 + } 2215 + }, 2216 + "node_modules/fresh": { 2217 + "version": "2.0.0", 2218 + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 2219 + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 2220 + "license": "MIT", 2221 + "engines": { 2222 + "node": ">= 0.8" 2223 + } 2224 + }, 2225 + "node_modules/function-bind": { 2226 + "version": "1.1.2", 2227 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2228 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2229 + "license": "MIT", 2230 + "funding": { 2231 + "url": "https://github.com/sponsors/ljharb" 2232 + } 2233 + }, 2234 + "node_modules/get-caller-file": { 2235 + "version": "2.0.5", 2236 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2237 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2238 + "license": "ISC", 2239 + "engines": { 2240 + "node": "6.* || 8.* || >= 10.*" 2241 + } 2242 + }, 2243 + "node_modules/get-intrinsic": { 2244 + "version": "1.3.0", 2245 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 2246 + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 2247 + "license": "MIT", 2248 + "dependencies": { 2249 + "call-bind-apply-helpers": "^1.0.2", 2250 + "es-define-property": "^1.0.1", 2251 + "es-errors": "^1.3.0", 2252 + "es-object-atoms": "^1.1.1", 2253 + "function-bind": "^1.1.2", 2254 + "get-proto": "^1.0.1", 2255 + "gopd": "^1.2.0", 2256 + "has-symbols": "^1.1.0", 2257 + "hasown": "^2.0.2", 2258 + "math-intrinsics": "^1.1.0" 2259 + }, 2260 + "engines": { 2261 + "node": ">= 0.4" 2262 + }, 2263 + "funding": { 2264 + "url": "https://github.com/sponsors/ljharb" 2265 + } 2266 + }, 2267 + "node_modules/get-nonce": { 2268 + "version": "1.0.1", 2269 + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", 2270 + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", 2271 + "license": "MIT", 2272 + "engines": { 2273 + "node": ">=6" 2274 + } 2275 + }, 2276 + "node_modules/get-proto": { 2277 + "version": "1.0.1", 2278 + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 2279 + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 2280 + "license": "MIT", 2281 + "dependencies": { 2282 + "dunder-proto": "^1.0.1", 2283 + "es-object-atoms": "^1.0.0" 2284 + }, 2285 + "engines": { 2286 + "node": ">= 0.4" 2287 + } 2288 + }, 2289 + "node_modules/get-value": { 2290 + "version": "3.0.1", 2291 + "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz", 2292 + "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==", 2293 + "license": "MIT", 2294 + "dependencies": { 2295 + "isobject": "^3.0.1" 2296 + }, 2297 + "engines": { 2298 + "node": ">=6.0" 2299 + } 2300 + }, 2301 + "node_modules/glob": { 2302 + "version": "13.0.6", 2303 + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", 2304 + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", 2305 + "license": "BlueOak-1.0.0", 2306 + "dependencies": { 2307 + "minimatch": "^10.2.2", 2308 + "minipass": "^7.1.3", 2309 + "path-scurry": "^2.0.2" 2310 + }, 2311 + "engines": { 2312 + "node": "18 || 20 || >=22" 2313 + }, 2314 + "funding": { 2315 + "url": "https://github.com/sponsors/isaacs" 2316 + } 2317 + }, 2318 + "node_modules/gopd": { 2319 + "version": "1.2.0", 2320 + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 2321 + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 2322 + "license": "MIT", 2323 + "engines": { 2324 + "node": ">= 0.4" 2325 + }, 2326 + "funding": { 2327 + "url": "https://github.com/sponsors/ljharb" 2328 + } 2329 + }, 2330 + "node_modules/graphile-config": { 2331 + "version": "1.0.0", 2332 + "resolved": "https://registry.npmjs.org/graphile-config/-/graphile-config-1.0.0.tgz", 2333 + "integrity": "sha512-nPKrrpmYT/cMibqHnNL+zLIRrC/SQhop7yV4tZiyrC/C0mckdlghRWR9oPV7UppkeFIdgTt5/7UQCrwhX82faQ==", 2334 + "license": "MIT", 2335 + "dependencies": { 2336 + "@types/interpret": "^1.1.4", 2337 + "@types/node": "^22.19.1", 2338 + "@types/semver": "^7.7.1", 2339 + "chalk": "^4.1.2", 2340 + "debug": "^4.4.3", 2341 + "interpret": "^3.1.1", 2342 + "semver": "^7.7.3", 2343 + "tslib": "^2.8.1", 2344 + "yargs": "^17.7.2" 2345 + }, 2346 + "engines": { 2347 + "node": ">=22" 2348 + } 2349 + }, 2350 + "node_modules/graphile-config/node_modules/@types/node": { 2351 + "version": "22.19.15", 2352 + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", 2353 + "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", 2354 + "license": "MIT", 2355 + "dependencies": { 2356 + "undici-types": "~6.21.0" 2357 + } 2358 + }, 2359 + "node_modules/graphile-config/node_modules/undici-types": { 2360 + "version": "6.21.0", 2361 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", 2362 + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", 2363 + "license": "MIT" 2364 + }, 2365 + "node_modules/graphiql": { 2366 + "version": "5.2.2", 2367 + "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-5.2.2.tgz", 2368 + "integrity": "sha512-qYhw7e2QPLPEIdJXqlLa/XkZtEu2SVYyD71abOpPnrzmJzTdB+QsEswFIMg9u1WGkEtp/wi8epCsuKeA/chRcg==", 2369 + "license": "MIT", 2370 + "dependencies": { 2371 + "@graphiql/plugin-doc-explorer": "^0.4.1", 2372 + "@graphiql/plugin-history": "^0.4.1", 2373 + "@graphiql/react": "^0.37.3", 2374 + "react-compiler-runtime": "19.1.0-rc.1" 2375 + }, 2376 + "peerDependencies": { 2377 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", 2378 + "react": "^18 || ^19", 2379 + "react-dom": "^18 || ^19" 2380 + } 2381 + }, 2382 + "node_modules/graphql": { 2383 + "version": "15.10.2", 2384 + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.2.tgz", 2385 + "integrity": "sha512-1PRqdDPAmViWr4h1GVBT8RoPZfWSGZa7kDzleTilOfVIslsgf+cia3Nl95v1KDmR4iERPaT7WzQ+tN4MJmbg3w==", 2386 + "license": "MIT", 2387 + "engines": { 2388 + "node": ">= 10.x" 2389 + } 2390 + }, 2391 + "node_modules/graphql-http": { 2392 + "version": "1.22.4", 2393 + "resolved": "https://registry.npmjs.org/graphql-http/-/graphql-http-1.22.4.tgz", 2394 + "integrity": "sha512-OC3ucK988teMf+Ak/O+ZJ0N2ukcgrEurypp8ePyJFWq83VzwRAmHxxr+XxrMpxO/FIwI4a7m/Fzv3tWGJv0wPA==", 2395 + "license": "MIT", 2396 + "workspaces": [ 2397 + "implementations/**/*" 2398 + ], 2399 + "engines": { 2400 + "node": ">=12" 2401 + }, 2402 + "peerDependencies": { 2403 + "graphql": ">=0.11 <=16" 2404 + } 2405 + }, 2406 + "node_modules/graphql-language-service": { 2407 + "version": "5.5.0", 2408 + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.5.0.tgz", 2409 + "integrity": "sha512-9EvWrLLkF6Y5e29/2cmFoAO6hBPPAZlCyjznmpR11iFtRydfkss+9m6x+htA8h7YznGam+TtJwS6JuwoWWgb2Q==", 2410 + "license": "MIT", 2411 + "dependencies": { 2412 + "debounce-promise": "^3.1.2", 2413 + "nullthrows": "^1.0.0", 2414 + "vscode-languageserver-types": "^3.17.1" 2415 + }, 2416 + "bin": { 2417 + "graphql": "dist/temp-bin.js" 2418 + }, 2419 + "peerDependencies": { 2420 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0" 2421 + } 2422 + }, 2423 + "node_modules/has-flag": { 2424 + "version": "4.0.0", 2425 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2426 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2427 + "license": "MIT", 2428 + "engines": { 2429 + "node": ">=8" 2430 + } 2431 + }, 2432 + "node_modules/has-symbols": { 2433 + "version": "1.1.0", 2434 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 2435 + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 2436 + "license": "MIT", 2437 + "engines": { 2438 + "node": ">= 0.4" 2439 + }, 2440 + "funding": { 2441 + "url": "https://github.com/sponsors/ljharb" 2442 + } 2443 + }, 2444 + "node_modules/hasown": { 2445 + "version": "2.0.2", 2446 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2447 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2448 + "license": "MIT", 2449 + "dependencies": { 2450 + "function-bind": "^1.1.2" 2451 + }, 2452 + "engines": { 2453 + "node": ">= 0.4" 2454 + } 2455 + }, 2456 + "node_modules/http-errors": { 2457 + "version": "2.0.1", 2458 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", 2459 + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", 2460 + "license": "MIT", 2461 + "dependencies": { 2462 + "depd": "~2.0.0", 2463 + "inherits": "~2.0.4", 2464 + "setprototypeof": "~1.2.0", 2465 + "statuses": "~2.0.2", 2466 + "toidentifier": "~1.0.1" 2467 + }, 2468 + "engines": { 2469 + "node": ">= 0.8" 2470 + }, 2471 + "funding": { 2472 + "type": "opencollective", 2473 + "url": "https://opencollective.com/express" 2474 + } 2475 + }, 2476 + "node_modules/http-proxy": { 2477 + "version": "1.18.1", 2478 + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", 2479 + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", 2480 + "license": "MIT", 2481 + "dependencies": { 2482 + "eventemitter3": "^4.0.0", 2483 + "follow-redirects": "^1.0.0", 2484 + "requires-port": "^1.0.0" 2485 + }, 2486 + "engines": { 2487 + "node": ">=8.0.0" 2488 + } 2489 + }, 2490 + "node_modules/ieee754": { 2491 + "version": "1.2.1", 2492 + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2493 + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 2494 + "dev": true, 2495 + "funding": [ 2496 + { 2497 + "type": "github", 2498 + "url": "https://github.com/sponsors/feross" 2499 + }, 2500 + { 2501 + "type": "patreon", 2502 + "url": "https://www.patreon.com/feross" 2503 + }, 2504 + { 2505 + "type": "consulting", 2506 + "url": "https://feross.org/support" 2507 + } 2508 + ], 2509 + "license": "BSD-3-Clause" 2510 + }, 2511 + "node_modules/inherits": { 2512 + "version": "2.0.4", 2513 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2514 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2515 + "license": "ISC" 2516 + }, 2517 + "node_modules/interpret": { 2518 + "version": "3.1.1", 2519 + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", 2520 + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", 2521 + "license": "MIT", 2522 + "engines": { 2523 + "node": ">=10.13.0" 2524 + } 2525 + }, 2526 + "node_modules/ipaddr.js": { 2527 + "version": "1.9.1", 2528 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2529 + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2530 + "license": "MIT", 2531 + "engines": { 2532 + "node": ">= 0.10" 2533 + } 2534 + }, 2535 + "node_modules/is-fullwidth-code-point": { 2536 + "version": "3.0.0", 2537 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2538 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2539 + "license": "MIT", 2540 + "engines": { 2541 + "node": ">=8" 2542 + } 2543 + }, 2544 + "node_modules/is-plain-object": { 2545 + "version": "2.0.4", 2546 + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2547 + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2548 + "license": "MIT", 2549 + "dependencies": { 2550 + "isobject": "^3.0.1" 2551 + }, 2552 + "engines": { 2553 + "node": ">=0.10.0" 2554 + } 2555 + }, 2556 + "node_modules/is-primitive": { 2557 + "version": "3.0.1", 2558 + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", 2559 + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", 2560 + "license": "MIT", 2561 + "engines": { 2562 + "node": ">=0.10.0" 2563 + } 2564 + }, 2565 + "node_modules/is-promise": { 2566 + "version": "4.0.0", 2567 + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 2568 + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 2569 + "license": "MIT" 2570 + }, 2571 + "node_modules/iso-datestring-validator": { 2572 + "version": "2.2.2", 2573 + "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 2574 + "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 2575 + "dev": true, 2576 + "license": "MIT" 2577 + }, 2578 + "node_modules/isobject": { 2579 + "version": "3.0.1", 2580 + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2581 + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 2582 + "license": "MIT", 2583 + "engines": { 2584 + "node": ">=0.10.0" 2585 + } 2586 + }, 2587 + "node_modules/jsonc-parser": { 2588 + "version": "3.3.1", 2589 + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", 2590 + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", 2591 + "license": "MIT" 2592 + }, 2593 + "node_modules/linkify-it": { 2594 + "version": "5.0.0", 2595 + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", 2596 + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", 2597 + "license": "MIT", 2598 + "dependencies": { 2599 + "uc.micro": "^2.0.0" 2600 + } 2601 + }, 2602 + "node_modules/lru-cache": { 2603 + "version": "10.4.3", 2604 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 2605 + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 2606 + "dev": true, 2607 + "license": "ISC" 2608 + }, 2609 + "node_modules/make-error": { 2610 + "version": "1.3.6", 2611 + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 2612 + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 2613 + "dev": true, 2614 + "license": "ISC" 2615 + }, 2616 + "node_modules/markdown-it": { 2617 + "version": "14.1.1", 2618 + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", 2619 + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", 2620 + "license": "MIT", 2621 + "dependencies": { 2622 + "argparse": "^2.0.1", 2623 + "entities": "^4.4.0", 2624 + "linkify-it": "^5.0.0", 2625 + "mdurl": "^2.0.0", 2626 + "punycode.js": "^2.3.1", 2627 + "uc.micro": "^2.1.0" 2628 + }, 2629 + "bin": { 2630 + "markdown-it": "bin/markdown-it.mjs" 2631 + } 2632 + }, 2633 + "node_modules/math-intrinsics": { 2634 + "version": "1.1.0", 2635 + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 2636 + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 2637 + "license": "MIT", 2638 + "engines": { 2639 + "node": ">= 0.4" 2640 + } 2641 + }, 2642 + "node_modules/mdurl": { 2643 + "version": "2.0.0", 2644 + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", 2645 + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", 2646 + "license": "MIT" 2647 + }, 2648 + "node_modules/media-typer": { 2649 + "version": "1.1.0", 2650 + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 2651 + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 2652 + "license": "MIT", 2653 + "engines": { 2654 + "node": ">= 0.8" 2655 + } 2656 + }, 2657 + "node_modules/merge-descriptors": { 2658 + "version": "2.0.0", 2659 + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 2660 + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 2661 + "license": "MIT", 2662 + "engines": { 2663 + "node": ">=18" 2664 + }, 2665 + "funding": { 2666 + "url": "https://github.com/sponsors/sindresorhus" 2667 + } 2668 + }, 2669 + "node_modules/meros": { 2670 + "version": "1.3.2", 2671 + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.2.tgz", 2672 + "integrity": "sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A==", 2673 + "license": "MIT", 2674 + "engines": { 2675 + "node": ">=13" 2676 + }, 2677 + "peerDependencies": { 2678 + "@types/node": ">=13" 2679 + }, 2680 + "peerDependenciesMeta": { 2681 + "@types/node": { 2682 + "optional": true 2683 + } 2684 + } 2685 + }, 2686 + "node_modules/minimatch": { 2687 + "version": "10.2.4", 2688 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", 2689 + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", 2690 + "license": "BlueOak-1.0.0", 2691 + "dependencies": { 2692 + "brace-expansion": "^5.0.2" 2693 + }, 2694 + "engines": { 2695 + "node": "18 || 20 || >=22" 2696 + }, 2697 + "funding": { 2698 + "url": "https://github.com/sponsors/isaacs" 2699 + } 2700 + }, 2701 + "node_modules/minipass": { 2702 + "version": "7.1.3", 2703 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", 2704 + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", 2705 + "license": "BlueOak-1.0.0", 2706 + "engines": { 2707 + "node": ">=16 || 14 >=14.17" 2708 + } 2709 + }, 2710 + "node_modules/monaco-editor": { 2711 + "version": "0.52.2", 2712 + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz", 2713 + "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==", 2714 + "license": "MIT" 2715 + }, 2716 + "node_modules/monaco-graphql": { 2717 + "version": "1.7.3", 2718 + "resolved": "https://registry.npmjs.org/monaco-graphql/-/monaco-graphql-1.7.3.tgz", 2719 + "integrity": "sha512-6LAIcg/vT2NGLjHnT+5iIZONsZCaCuz2orbg7qD/u4Ry9R7rDotLh0HAzIF/yKdzEA5fTZC+TofSx2O+Zi+0ow==", 2720 + "license": "MIT", 2721 + "dependencies": { 2722 + "graphql-language-service": "^5.5.0", 2723 + "picomatch-browser": "^2.2.6" 2724 + }, 2725 + "peerDependencies": { 2726 + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0", 2727 + "monaco-editor": ">= 0.20.0 < 0.53", 2728 + "prettier": "^2.8.0 || ^3.0.0" 2729 + } 2730 + }, 2731 + "node_modules/motion-dom": { 2732 + "version": "12.38.0", 2733 + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", 2734 + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", 2735 + "license": "MIT", 2736 + "dependencies": { 2737 + "motion-utils": "^12.36.0" 2738 + } 2739 + }, 2740 + "node_modules/motion-utils": { 2741 + "version": "12.36.0", 2742 + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", 2743 + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", 2744 + "license": "MIT" 2745 + }, 2746 + "node_modules/ms": { 2747 + "version": "2.1.3", 2748 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2749 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2750 + "license": "MIT" 2751 + }, 2752 + "node_modules/multiformats": { 2753 + "version": "9.9.0", 2754 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 2755 + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 2756 + "dev": true, 2757 + "license": "(Apache-2.0 AND MIT)" 2758 + }, 2759 + "node_modules/nullthrows": { 2760 + "version": "1.1.1", 2761 + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", 2762 + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", 2763 + "license": "MIT" 2764 + }, 2765 + "node_modules/object-inspect": { 2766 + "version": "1.13.4", 2767 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 2768 + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 2769 + "license": "MIT", 2770 + "engines": { 2771 + "node": ">= 0.4" 2772 + }, 2773 + "funding": { 2774 + "url": "https://github.com/sponsors/ljharb" 2775 + } 2776 + }, 2777 + "node_modules/on-exit-leak-free": { 2778 + "version": "2.1.2", 2779 + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", 2780 + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", 2781 + "dev": true, 2782 + "license": "MIT", 2783 + "engines": { 2784 + "node": ">=14.0.0" 2785 + } 2786 + }, 2787 + "node_modules/on-finished": { 2788 + "version": "2.4.1", 2789 + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2790 + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2791 + "license": "MIT", 2792 + "dependencies": { 2793 + "ee-first": "1.1.1" 2794 + }, 2795 + "engines": { 2796 + "node": ">= 0.8" 2797 + } 2798 + }, 2799 + "node_modules/once": { 2800 + "version": "1.4.0", 2801 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2802 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2803 + "license": "ISC", 2804 + "dependencies": { 2805 + "wrappy": "1" 2806 + } 2807 + }, 2808 + "node_modules/parseurl": { 2809 + "version": "1.3.3", 2810 + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2811 + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2812 + "license": "MIT", 2813 + "engines": { 2814 + "node": ">= 0.8" 2815 + } 2816 + }, 2817 + "node_modules/path-browserify": { 2818 + "version": "1.0.1", 2819 + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 2820 + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", 2821 + "dev": true, 2822 + "license": "MIT" 2823 + }, 2824 + "node_modules/path-scurry": { 2825 + "version": "2.0.2", 2826 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", 2827 + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", 2828 + "license": "BlueOak-1.0.0", 2829 + "dependencies": { 2830 + "lru-cache": "^11.0.0", 2831 + "minipass": "^7.1.2" 2832 + }, 2833 + "engines": { 2834 + "node": "18 || 20 || >=22" 2835 + }, 2836 + "funding": { 2837 + "url": "https://github.com/sponsors/isaacs" 2838 + } 2839 + }, 2840 + "node_modules/path-scurry/node_modules/lru-cache": { 2841 + "version": "11.2.7", 2842 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", 2843 + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", 2844 + "license": "BlueOak-1.0.0", 2845 + "engines": { 2846 + "node": "20 || >=22" 2847 + } 2848 + }, 2849 + "node_modules/path-to-regexp": { 2850 + "version": "8.4.0", 2851 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz", 2852 + "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==", 2853 + "license": "MIT", 2854 + "funding": { 2855 + "type": "opencollective", 2856 + "url": "https://opencollective.com/express" 2857 + } 2858 + }, 2859 + "node_modules/picomatch": { 2860 + "version": "4.0.4", 2861 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", 2862 + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", 2863 + "dev": true, 2864 + "license": "MIT", 2865 + "engines": { 2866 + "node": ">=12" 2867 + }, 2868 + "funding": { 2869 + "url": "https://github.com/sponsors/jonschlinkert" 2870 + } 2871 + }, 2872 + "node_modules/picomatch-browser": { 2873 + "version": "2.2.6", 2874 + "resolved": "https://registry.npmjs.org/picomatch-browser/-/picomatch-browser-2.2.6.tgz", 2875 + "integrity": "sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==", 2876 + "license": "MIT", 2877 + "engines": { 2878 + "node": ">=8.6" 2879 + }, 2880 + "funding": { 2881 + "url": "https://github.com/sponsors/jonschlinkert" 2882 + } 2883 + }, 2884 + "node_modules/pino": { 2885 + "version": "8.21.0", 2886 + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", 2887 + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", 2888 + "dev": true, 2889 + "license": "MIT", 2890 + "dependencies": { 2891 + "atomic-sleep": "^1.0.0", 2892 + "fast-redact": "^3.1.1", 2893 + "on-exit-leak-free": "^2.1.0", 2894 + "pino-abstract-transport": "^1.2.0", 2895 + "pino-std-serializers": "^6.0.0", 2896 + "process-warning": "^3.0.0", 2897 + "quick-format-unescaped": "^4.0.3", 2898 + "real-require": "^0.2.0", 2899 + "safe-stable-stringify": "^2.3.1", 2900 + "sonic-boom": "^3.7.0", 2901 + "thread-stream": "^2.6.0" 2902 + }, 2903 + "bin": { 2904 + "pino": "bin.js" 2905 + } 2906 + }, 2907 + "node_modules/pino-abstract-transport": { 2908 + "version": "1.2.0", 2909 + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", 2910 + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", 2911 + "dev": true, 2912 + "license": "MIT", 2913 + "dependencies": { 2914 + "readable-stream": "^4.0.0", 2915 + "split2": "^4.0.0" 2916 + } 2917 + }, 2918 + "node_modules/pino-std-serializers": { 2919 + "version": "6.2.2", 2920 + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", 2921 + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", 2922 + "dev": true, 2923 + "license": "MIT" 2924 + }, 2925 + "node_modules/prettier": { 2926 + "version": "3.8.1", 2927 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", 2928 + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", 2929 + "license": "MIT", 2930 + "bin": { 2931 + "prettier": "bin/prettier.cjs" 2932 + }, 2933 + "engines": { 2934 + "node": ">=14" 2935 + }, 2936 + "funding": { 2937 + "url": "https://github.com/prettier/prettier?sponsor=1" 2938 + } 2939 + }, 2940 + "node_modules/process": { 2941 + "version": "0.11.10", 2942 + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2943 + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 2944 + "dev": true, 2945 + "license": "MIT", 2946 + "engines": { 2947 + "node": ">= 0.6.0" 2948 + } 2949 + }, 2950 + "node_modules/process-warning": { 2951 + "version": "3.0.0", 2952 + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", 2953 + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", 2954 + "dev": true, 2955 + "license": "MIT" 2956 + }, 2957 + "node_modules/proxy-addr": { 2958 + "version": "2.0.7", 2959 + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2960 + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2961 + "license": "MIT", 2962 + "dependencies": { 2963 + "forwarded": "0.2.0", 2964 + "ipaddr.js": "1.9.1" 2965 + }, 2966 + "engines": { 2967 + "node": ">= 0.10" 2968 + } 2969 + }, 2970 + "node_modules/punycode.js": { 2971 + "version": "2.3.1", 2972 + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", 2973 + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", 2974 + "license": "MIT", 2975 + "engines": { 2976 + "node": ">=6" 2977 + } 2978 + }, 2979 + "node_modules/qs": { 2980 + "version": "6.15.0", 2981 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", 2982 + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", 2983 + "license": "BSD-3-Clause", 2984 + "dependencies": { 2985 + "side-channel": "^1.1.0" 2986 + }, 2987 + "engines": { 2988 + "node": ">=0.6" 2989 + }, 2990 + "funding": { 2991 + "url": "https://github.com/sponsors/ljharb" 2992 + } 2993 + }, 2994 + "node_modules/quick-format-unescaped": { 2995 + "version": "4.0.4", 2996 + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 2997 + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", 2998 + "dev": true, 2999 + "license": "MIT" 3000 + }, 3001 + "node_modules/range-parser": { 3002 + "version": "1.2.1", 3003 + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3004 + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 3005 + "license": "MIT", 3006 + "engines": { 3007 + "node": ">= 0.6" 3008 + } 3009 + }, 3010 + "node_modules/react": { 3011 + "version": "19.2.4", 3012 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", 3013 + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", 3014 + "license": "MIT", 3015 + "peer": true, 3016 + "engines": { 3017 + "node": ">=0.10.0" 3018 + } 3019 + }, 3020 + "node_modules/react-compiler-runtime": { 3021 + "version": "19.1.0-rc.1", 3022 + "resolved": "https://registry.npmjs.org/react-compiler-runtime/-/react-compiler-runtime-19.1.0-rc.1.tgz", 3023 + "integrity": "sha512-wCt6g+cRh8g32QT18/9blfQHywGjYu+4FlEc3CW1mx3pPxYzZZl1y+VtqxRgnKKBCFLIGUYxog4j4rs5YS86hw==", 3024 + "license": "MIT", 3025 + "peerDependencies": { 3026 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^0.0.0-experimental" 3027 + } 3028 + }, 3029 + "node_modules/react-dom": { 3030 + "version": "19.2.4", 3031 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", 3032 + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", 3033 + "license": "MIT", 3034 + "peer": true, 3035 + "dependencies": { 3036 + "scheduler": "^0.27.0" 3037 + }, 3038 + "peerDependencies": { 3039 + "react": "^19.2.4" 3040 + } 3041 + }, 3042 + "node_modules/react-remove-scroll": { 3043 + "version": "2.7.2", 3044 + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", 3045 + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", 3046 + "license": "MIT", 3047 + "dependencies": { 3048 + "react-remove-scroll-bar": "^2.3.7", 3049 + "react-style-singleton": "^2.2.3", 3050 + "tslib": "^2.1.0", 3051 + "use-callback-ref": "^1.3.3", 3052 + "use-sidecar": "^1.1.3" 3053 + }, 3054 + "engines": { 3055 + "node": ">=10" 3056 + }, 3057 + "peerDependencies": { 3058 + "@types/react": "*", 3059 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 3060 + }, 3061 + "peerDependenciesMeta": { 3062 + "@types/react": { 3063 + "optional": true 3064 + } 3065 + } 3066 + }, 3067 + "node_modules/react-remove-scroll-bar": { 3068 + "version": "2.3.8", 3069 + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", 3070 + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", 3071 + "license": "MIT", 3072 + "dependencies": { 3073 + "react-style-singleton": "^2.2.2", 3074 + "tslib": "^2.0.0" 3075 + }, 3076 + "engines": { 3077 + "node": ">=10" 3078 + }, 3079 + "peerDependencies": { 3080 + "@types/react": "*", 3081 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3082 + }, 3083 + "peerDependenciesMeta": { 3084 + "@types/react": { 3085 + "optional": true 3086 + } 3087 + } 3088 + }, 3089 + "node_modules/react-style-singleton": { 3090 + "version": "2.2.3", 3091 + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", 3092 + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", 3093 + "license": "MIT", 3094 + "dependencies": { 3095 + "get-nonce": "^1.0.0", 3096 + "tslib": "^2.0.0" 3097 + }, 3098 + "engines": { 3099 + "node": ">=10" 3100 + }, 3101 + "peerDependencies": { 3102 + "@types/react": "*", 3103 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 3104 + }, 3105 + "peerDependenciesMeta": { 3106 + "@types/react": { 3107 + "optional": true 3108 + } 3109 + } 3110 + }, 3111 + "node_modules/readable-stream": { 3112 + "version": "4.7.0", 3113 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", 3114 + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", 3115 + "dev": true, 3116 + "license": "MIT", 3117 + "dependencies": { 3118 + "abort-controller": "^3.0.0", 3119 + "buffer": "^6.0.3", 3120 + "events": "^3.3.0", 3121 + "process": "^0.11.10", 3122 + "string_decoder": "^1.3.0" 3123 + }, 3124 + "engines": { 3125 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3126 + } 3127 + }, 3128 + "node_modules/real-require": { 3129 + "version": "0.2.0", 3130 + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 3131 + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", 3132 + "dev": true, 3133 + "license": "MIT", 3134 + "engines": { 3135 + "node": ">= 12.13.0" 3136 + } 3137 + }, 3138 + "node_modules/require-directory": { 3139 + "version": "2.1.1", 3140 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3141 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 3142 + "license": "MIT", 3143 + "engines": { 3144 + "node": ">=0.10.0" 3145 + } 3146 + }, 3147 + "node_modules/requires-port": { 3148 + "version": "1.0.0", 3149 + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 3150 + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", 3151 + "license": "MIT" 3152 + }, 3153 + "node_modules/router": { 3154 + "version": "2.2.0", 3155 + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", 3156 + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 3157 + "license": "MIT", 3158 + "dependencies": { 3159 + "debug": "^4.4.0", 3160 + "depd": "^2.0.0", 3161 + "is-promise": "^4.0.0", 3162 + "parseurl": "^1.3.3", 3163 + "path-to-regexp": "^8.0.0" 3164 + }, 3165 + "engines": { 3166 + "node": ">= 18" 3167 + } 3168 + }, 3169 + "node_modules/ruru": { 3170 + "version": "2.0.0", 3171 + "resolved": "https://registry.npmjs.org/ruru/-/ruru-2.0.0.tgz", 3172 + "integrity": "sha512-I8N4Jw0jsgFqgUnsLMR9BHnWyVX0xj7GfDYIjsvjt538zIVs/PiggdepsYjH6K2ul9bjHoS15p7XL2SnywSdCw==", 3173 + "license": "MIT", 3174 + "dependencies": { 3175 + "@emotion/is-prop-valid": "^1.4.0", 3176 + "graphile-config": "^1.0.0", 3177 + "graphql": "^16.9.0", 3178 + "http-proxy": "^1.18.1", 3179 + "ruru-types": "^2.0.0", 3180 + "tslib": "^2.8.1", 3181 + "yargs": "^17.7.2" 3182 + }, 3183 + "bin": { 3184 + "ruru": "dist/cli-run.js" 3185 + }, 3186 + "engines": { 3187 + "node": ">=22" 3188 + }, 3189 + "peerDependencies": { 3190 + "graphile-config": "^1.0.0-rc.5", 3191 + "graphql": "^16.9.0", 3192 + "react": "^18 || ^19", 3193 + "react-dom": "^18 || ^19" 3194 + }, 3195 + "peerDependenciesMeta": { 3196 + "react": { 3197 + "optional": true 3198 + }, 3199 + "react-dom": { 3200 + "optional": true 3201 + } 3202 + } 3203 + }, 3204 + "node_modules/ruru/node_modules/graphql": { 3205 + "version": "16.13.2", 3206 + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", 3207 + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", 3208 + "license": "MIT", 3209 + "engines": { 3210 + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" 3211 + } 3212 + }, 3213 + "node_modules/ruru/node_modules/ruru-types": { 3214 + "version": "2.0.0", 3215 + "resolved": "https://registry.npmjs.org/ruru-types/-/ruru-types-2.0.0.tgz", 3216 + "integrity": "sha512-7dBZHeU8Pnj0V+tLiPzr8RhpdsNuAwu5yhZqcolu6pzpItLG/LKKzN+gKAiCp17z6Lfpdu7bXs+9JS39PO+VxA==", 3217 + "license": "MIT", 3218 + "dependencies": { 3219 + "@graphiql/toolkit": "^0.11.3", 3220 + "graphiql": "^5.2.1" 3221 + }, 3222 + "engines": { 3223 + "node": ">=22" 3224 + }, 3225 + "peerDependencies": { 3226 + "graphql": "^16.9.0", 3227 + "react": "^18 || ^19", 3228 + "react-dom": "^18 || ^19" 3229 + }, 3230 + "peerDependenciesMeta": { 3231 + "react": { 3232 + "optional": true 3233 + }, 3234 + "react-dom": { 3235 + "optional": true 3236 + } 3237 + } 3238 + }, 3239 + "node_modules/safe-buffer": { 3240 + "version": "5.2.1", 3241 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3242 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 3243 + "dev": true, 3244 + "funding": [ 3245 + { 3246 + "type": "github", 3247 + "url": "https://github.com/sponsors/feross" 3248 + }, 3249 + { 3250 + "type": "patreon", 3251 + "url": "https://www.patreon.com/feross" 3252 + }, 3253 + { 3254 + "type": "consulting", 3255 + "url": "https://feross.org/support" 3256 + } 3257 + ], 3258 + "license": "MIT" 3259 + }, 3260 + "node_modules/safe-stable-stringify": { 3261 + "version": "2.5.0", 3262 + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", 3263 + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", 3264 + "dev": true, 3265 + "license": "MIT", 3266 + "engines": { 3267 + "node": ">=10" 3268 + } 3269 + }, 3270 + "node_modules/safer-buffer": { 3271 + "version": "2.1.2", 3272 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3273 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 3274 + "license": "MIT" 3275 + }, 3276 + "node_modules/scheduler": { 3277 + "version": "0.27.0", 3278 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 3279 + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", 3280 + "license": "MIT", 3281 + "peer": true 3282 + }, 3283 + "node_modules/semver": { 3284 + "version": "7.7.4", 3285 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", 3286 + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", 3287 + "license": "ISC", 3288 + "bin": { 3289 + "semver": "bin/semver.js" 3290 + }, 3291 + "engines": { 3292 + "node": ">=10" 3293 + } 3294 + }, 3295 + "node_modules/send": { 3296 + "version": "1.2.1", 3297 + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", 3298 + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", 3299 + "license": "MIT", 3300 + "dependencies": { 3301 + "debug": "^4.4.3", 3302 + "encodeurl": "^2.0.0", 3303 + "escape-html": "^1.0.3", 3304 + "etag": "^1.8.1", 3305 + "fresh": "^2.0.0", 3306 + "http-errors": "^2.0.1", 3307 + "mime-types": "^3.0.2", 3308 + "ms": "^2.1.3", 3309 + "on-finished": "^2.4.1", 3310 + "range-parser": "^1.2.1", 3311 + "statuses": "^2.0.2" 3312 + }, 3313 + "engines": { 3314 + "node": ">= 18" 3315 + }, 3316 + "funding": { 3317 + "type": "opencollective", 3318 + "url": "https://opencollective.com/express" 3319 + } 3320 + }, 3321 + "node_modules/send/node_modules/mime-db": { 3322 + "version": "1.54.0", 3323 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 3324 + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 3325 + "license": "MIT", 3326 + "engines": { 3327 + "node": ">= 0.6" 3328 + } 3329 + }, 3330 + "node_modules/send/node_modules/mime-types": { 3331 + "version": "3.0.2", 3332 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", 3333 + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", 3334 + "license": "MIT", 3335 + "dependencies": { 3336 + "mime-db": "^1.54.0" 3337 + }, 3338 + "engines": { 3339 + "node": ">=18" 3340 + }, 3341 + "funding": { 3342 + "type": "opencollective", 3343 + "url": "https://opencollective.com/express" 3344 + } 3345 + }, 3346 + "node_modules/serve-static": { 3347 + "version": "2.2.1", 3348 + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", 3349 + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", 3350 + "license": "MIT", 3351 + "dependencies": { 3352 + "encodeurl": "^2.0.0", 3353 + "escape-html": "^1.0.3", 3354 + "parseurl": "^1.3.3", 3355 + "send": "^1.2.0" 3356 + }, 3357 + "engines": { 3358 + "node": ">= 18" 3359 + }, 3360 + "funding": { 3361 + "type": "opencollective", 3362 + "url": "https://opencollective.com/express" 3363 + } 3364 + }, 3365 + "node_modules/set-value": { 3366 + "version": "4.1.0", 3367 + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", 3368 + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", 3369 + "funding": [ 3370 + "https://github.com/sponsors/jonschlinkert", 3371 + "https://paypal.me/jonathanschlinkert", 3372 + "https://jonschlinkert.dev/sponsor" 3373 + ], 3374 + "license": "MIT", 3375 + "dependencies": { 3376 + "is-plain-object": "^2.0.4", 3377 + "is-primitive": "^3.0.1" 3378 + }, 3379 + "engines": { 3380 + "node": ">=11.0" 3381 + } 3382 + }, 3383 + "node_modules/setprototypeof": { 3384 + "version": "1.2.0", 3385 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3386 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 3387 + "license": "ISC" 3388 + }, 3389 + "node_modules/side-channel": { 3390 + "version": "1.1.0", 3391 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 3392 + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 3393 + "license": "MIT", 3394 + "dependencies": { 3395 + "es-errors": "^1.3.0", 3396 + "object-inspect": "^1.13.3", 3397 + "side-channel-list": "^1.0.0", 3398 + "side-channel-map": "^1.0.1", 3399 + "side-channel-weakmap": "^1.0.2" 3400 + }, 3401 + "engines": { 3402 + "node": ">= 0.4" 3403 + }, 3404 + "funding": { 3405 + "url": "https://github.com/sponsors/ljharb" 3406 + } 3407 + }, 3408 + "node_modules/side-channel-list": { 3409 + "version": "1.0.0", 3410 + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 3411 + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 3412 + "license": "MIT", 3413 + "dependencies": { 3414 + "es-errors": "^1.3.0", 3415 + "object-inspect": "^1.13.3" 3416 + }, 3417 + "engines": { 3418 + "node": ">= 0.4" 3419 + }, 3420 + "funding": { 3421 + "url": "https://github.com/sponsors/ljharb" 3422 + } 3423 + }, 3424 + "node_modules/side-channel-map": { 3425 + "version": "1.0.1", 3426 + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 3427 + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 3428 + "license": "MIT", 3429 + "dependencies": { 3430 + "call-bound": "^1.0.2", 3431 + "es-errors": "^1.3.0", 3432 + "get-intrinsic": "^1.2.5", 3433 + "object-inspect": "^1.13.3" 3434 + }, 3435 + "engines": { 3436 + "node": ">= 0.4" 3437 + }, 3438 + "funding": { 3439 + "url": "https://github.com/sponsors/ljharb" 3440 + } 3441 + }, 3442 + "node_modules/side-channel-weakmap": { 3443 + "version": "1.0.2", 3444 + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 3445 + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 3446 + "license": "MIT", 3447 + "dependencies": { 3448 + "call-bound": "^1.0.2", 3449 + "es-errors": "^1.3.0", 3450 + "get-intrinsic": "^1.2.5", 3451 + "object-inspect": "^1.13.3", 3452 + "side-channel-map": "^1.0.1" 3453 + }, 3454 + "engines": { 3455 + "node": ">= 0.4" 3456 + }, 3457 + "funding": { 3458 + "url": "https://github.com/sponsors/ljharb" 3459 + } 3460 + }, 3461 + "node_modules/sonic-boom": { 3462 + "version": "3.8.1", 3463 + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", 3464 + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", 3465 + "dev": true, 3466 + "license": "MIT", 3467 + "dependencies": { 3468 + "atomic-sleep": "^1.0.0" 3469 + } 3470 + }, 3471 + "node_modules/split2": { 3472 + "version": "4.2.0", 3473 + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 3474 + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 3475 + "dev": true, 3476 + "license": "ISC", 3477 + "engines": { 3478 + "node": ">= 10.x" 3479 + } 3480 + }, 3481 + "node_modules/statuses": { 3482 + "version": "2.0.2", 3483 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", 3484 + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", 3485 + "license": "MIT", 3486 + "engines": { 3487 + "node": ">= 0.8" 3488 + } 3489 + }, 3490 + "node_modules/string_decoder": { 3491 + "version": "1.3.0", 3492 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3493 + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3494 + "dev": true, 3495 + "license": "MIT", 3496 + "dependencies": { 3497 + "safe-buffer": "~5.2.0" 3498 + } 3499 + }, 3500 + "node_modules/string-width": { 3501 + "version": "4.2.3", 3502 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3503 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3504 + "license": "MIT", 3505 + "dependencies": { 3506 + "emoji-regex": "^8.0.0", 3507 + "is-fullwidth-code-point": "^3.0.0", 3508 + "strip-ansi": "^6.0.1" 3509 + }, 3510 + "engines": { 3511 + "node": ">=8" 3512 + } 3513 + }, 3514 + "node_modules/strip-ansi": { 3515 + "version": "6.0.1", 3516 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3517 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3518 + "license": "MIT", 3519 + "dependencies": { 3520 + "ansi-regex": "^5.0.1" 3521 + }, 3522 + "engines": { 3523 + "node": ">=8" 3524 + } 3525 + }, 3526 + "node_modules/supports-color": { 3527 + "version": "7.2.0", 3528 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3529 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3530 + "license": "MIT", 3531 + "dependencies": { 3532 + "has-flag": "^4.0.0" 3533 + }, 3534 + "engines": { 3535 + "node": ">=8" 3536 + } 3537 + }, 3538 + "node_modules/tabbable": { 3539 + "version": "6.4.0", 3540 + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", 3541 + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", 3542 + "license": "MIT" 3543 + }, 3544 + "node_modules/thread-stream": { 3545 + "version": "2.7.0", 3546 + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", 3547 + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", 3548 + "dev": true, 3549 + "license": "MIT", 3550 + "dependencies": { 3551 + "real-require": "^0.2.0" 3552 + } 3553 + }, 3554 + "node_modules/tinyglobby": { 3555 + "version": "0.2.15", 3556 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 3557 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 3558 + "dev": true, 3559 + "license": "MIT", 3560 + "dependencies": { 3561 + "fdir": "^6.5.0", 3562 + "picomatch": "^4.0.3" 3563 + }, 3564 + "engines": { 3565 + "node": ">=12.0.0" 3566 + }, 3567 + "funding": { 3568 + "url": "https://github.com/sponsors/SuperchupuDev" 3569 + } 3570 + }, 3571 + "node_modules/toidentifier": { 3572 + "version": "1.0.1", 3573 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3574 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 3575 + "license": "MIT", 3576 + "engines": { 3577 + "node": ">=0.6" 3578 + } 3579 + }, 3580 + "node_modules/ts-morph": { 3581 + "version": "27.0.2", 3582 + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-27.0.2.tgz", 3583 + "integrity": "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==", 3584 + "dev": true, 3585 + "license": "MIT", 3586 + "dependencies": { 3587 + "@ts-morph/common": "~0.28.1", 3588 + "code-block-writer": "^13.0.3" 3589 + } 3590 + }, 3591 + "node_modules/ts-node": { 3592 + "version": "10.9.2", 3593 + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 3594 + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 3595 + "dev": true, 3596 + "license": "MIT", 3597 + "dependencies": { 3598 + "@cspotcode/source-map-support": "^0.8.0", 3599 + "@tsconfig/node10": "^1.0.7", 3600 + "@tsconfig/node12": "^1.0.7", 3601 + "@tsconfig/node14": "^1.0.0", 3602 + "@tsconfig/node16": "^1.0.2", 3603 + "acorn": "^8.4.1", 3604 + "acorn-walk": "^8.1.1", 3605 + "arg": "^4.1.0", 3606 + "create-require": "^1.1.0", 3607 + "diff": "^4.0.1", 3608 + "make-error": "^1.1.1", 3609 + "v8-compile-cache-lib": "^3.0.1", 3610 + "yn": "3.1.1" 3611 + }, 3612 + "bin": { 3613 + "ts-node": "dist/bin.js", 3614 + "ts-node-cwd": "dist/bin-cwd.js", 3615 + "ts-node-esm": "dist/bin-esm.js", 3616 + "ts-node-script": "dist/bin-script.js", 3617 + "ts-node-transpile-only": "dist/bin-transpile.js", 3618 + "ts-script": "dist/bin-script-deprecated.js" 3619 + }, 3620 + "peerDependencies": { 3621 + "@swc/core": ">=1.2.50", 3622 + "@swc/wasm": ">=1.2.50", 3623 + "@types/node": "*", 3624 + "typescript": ">=2.7" 3625 + }, 3626 + "peerDependenciesMeta": { 3627 + "@swc/core": { 3628 + "optional": true 3629 + }, 3630 + "@swc/wasm": { 3631 + "optional": true 3632 + } 3633 + } 3634 + }, 3635 + "node_modules/tslib": { 3636 + "version": "2.8.1", 3637 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 3638 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 3639 + "license": "0BSD" 3640 + }, 3641 + "node_modules/type-is": { 3642 + "version": "2.0.1", 3643 + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", 3644 + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", 3645 + "license": "MIT", 3646 + "dependencies": { 3647 + "content-type": "^1.0.5", 3648 + "media-typer": "^1.1.0", 3649 + "mime-types": "^3.0.0" 3650 + }, 3651 + "engines": { 3652 + "node": ">= 0.6" 3653 + } 3654 + }, 3655 + "node_modules/type-is/node_modules/mime-db": { 3656 + "version": "1.54.0", 3657 + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 3658 + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 3659 + "license": "MIT", 3660 + "engines": { 3661 + "node": ">= 0.6" 3662 + } 3663 + }, 3664 + "node_modules/type-is/node_modules/mime-types": { 3665 + "version": "3.0.2", 3666 + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", 3667 + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", 3668 + "license": "MIT", 3669 + "dependencies": { 3670 + "mime-db": "^1.54.0" 3671 + }, 3672 + "engines": { 3673 + "node": ">=18" 3674 + }, 3675 + "funding": { 3676 + "type": "opencollective", 3677 + "url": "https://opencollective.com/express" 3678 + } 3679 + }, 3680 + "node_modules/typescript": { 3681 + "version": "6.0.2", 3682 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", 3683 + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", 3684 + "dev": true, 3685 + "license": "Apache-2.0", 3686 + "bin": { 3687 + "tsc": "bin/tsc", 3688 + "tsserver": "bin/tsserver" 3689 + }, 3690 + "engines": { 3691 + "node": ">=14.17" 3692 + } 3693 + }, 3694 + "node_modules/uc.micro": { 3695 + "version": "2.1.0", 3696 + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", 3697 + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", 3698 + "license": "MIT" 3699 + }, 3700 + "node_modules/uint8arrays": { 3701 + "version": "3.0.0", 3702 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 3703 + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 3704 + "dev": true, 3705 + "license": "MIT", 3706 + "dependencies": { 3707 + "multiformats": "^9.4.2" 3708 + } 3709 + }, 3710 + "node_modules/undici-types": { 3711 + "version": "7.18.2", 3712 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", 3713 + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", 3714 + "license": "MIT" 3715 + }, 3716 + "node_modules/unicode-segmenter": { 3717 + "version": "0.14.5", 3718 + "resolved": "https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.5.tgz", 3719 + "integrity": "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==", 3720 + "dev": true, 3721 + "license": "MIT" 3722 + }, 3723 + "node_modules/unpipe": { 3724 + "version": "1.0.0", 3725 + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3726 + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3727 + "license": "MIT", 3728 + "engines": { 3729 + "node": ">= 0.8" 3730 + } 3731 + }, 3732 + "node_modules/use-callback-ref": { 3733 + "version": "1.3.3", 3734 + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", 3735 + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", 3736 + "license": "MIT", 3737 + "dependencies": { 3738 + "tslib": "^2.0.0" 3739 + }, 3740 + "engines": { 3741 + "node": ">=10" 3742 + }, 3743 + "peerDependencies": { 3744 + "@types/react": "*", 3745 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 3746 + }, 3747 + "peerDependenciesMeta": { 3748 + "@types/react": { 3749 + "optional": true 3750 + } 3751 + } 3752 + }, 3753 + "node_modules/use-sidecar": { 3754 + "version": "1.1.3", 3755 + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", 3756 + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", 3757 + "license": "MIT", 3758 + "dependencies": { 3759 + "detect-node-es": "^1.1.0", 3760 + "tslib": "^2.0.0" 3761 + }, 3762 + "engines": { 3763 + "node": ">=10" 3764 + }, 3765 + "peerDependencies": { 3766 + "@types/react": "*", 3767 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" 3768 + }, 3769 + "peerDependenciesMeta": { 3770 + "@types/react": { 3771 + "optional": true 3772 + } 3773 + } 3774 + }, 3775 + "node_modules/use-sync-external-store": { 3776 + "version": "1.6.0", 3777 + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", 3778 + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", 3779 + "license": "MIT", 3780 + "peerDependencies": { 3781 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3782 + } 3783 + }, 3784 + "node_modules/v8-compile-cache-lib": { 3785 + "version": "3.0.1", 3786 + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 3787 + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 3788 + "dev": true, 3789 + "license": "MIT" 3790 + }, 3791 + "node_modules/varint": { 3792 + "version": "6.0.0", 3793 + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", 3794 + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", 3795 + "dev": true, 3796 + "license": "MIT" 3797 + }, 3798 + "node_modules/vary": { 3799 + "version": "1.1.2", 3800 + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3801 + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3802 + "license": "MIT", 3803 + "engines": { 3804 + "node": ">= 0.8" 3805 + } 3806 + }, 3807 + "node_modules/vscode-languageserver-types": { 3808 + "version": "3.17.5", 3809 + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", 3810 + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", 3811 + "license": "MIT" 3812 + }, 3813 + "node_modules/wrap-ansi": { 3814 + "version": "7.0.0", 3815 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3816 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3817 + "license": "MIT", 3818 + "dependencies": { 3819 + "ansi-styles": "^4.0.0", 3820 + "string-width": "^4.1.0", 3821 + "strip-ansi": "^6.0.0" 3822 + }, 3823 + "engines": { 3824 + "node": ">=10" 3825 + }, 3826 + "funding": { 3827 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3828 + } 3829 + }, 3830 + "node_modules/wrappy": { 3831 + "version": "1.0.2", 3832 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3833 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3834 + "license": "ISC" 3835 + }, 3836 + "node_modules/y18n": { 3837 + "version": "5.0.8", 3838 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3839 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3840 + "license": "ISC", 3841 + "engines": { 3842 + "node": ">=10" 3843 + } 3844 + }, 3845 + "node_modules/yargs": { 3846 + "version": "17.7.2", 3847 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3848 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3849 + "license": "MIT", 3850 + "dependencies": { 3851 + "cliui": "^8.0.1", 3852 + "escalade": "^3.1.1", 3853 + "get-caller-file": "^2.0.5", 3854 + "require-directory": "^2.1.1", 3855 + "string-width": "^4.2.3", 3856 + "y18n": "^5.0.5", 3857 + "yargs-parser": "^21.1.1" 3858 + }, 3859 + "engines": { 3860 + "node": ">=12" 3861 + } 3862 + }, 3863 + "node_modules/yargs-parser": { 3864 + "version": "21.1.1", 3865 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3866 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3867 + "license": "ISC", 3868 + "engines": { 3869 + "node": ">=12" 3870 + } 3871 + }, 3872 + "node_modules/yn": { 3873 + "version": "3.1.1", 3874 + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 3875 + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 3876 + "dev": true, 3877 + "license": "MIT", 3878 + "engines": { 3879 + "node": ">=6" 3880 + } 3881 + }, 3882 + "node_modules/zod": { 3883 + "version": "3.25.76", 3884 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 3885 + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 3886 + "dev": true, 3887 + "license": "MIT", 3888 + "funding": { 3889 + "url": "https://github.com/sponsors/colinhacks" 3890 + } 3891 + }, 3892 + "node_modules/zustand": { 3893 + "version": "5.0.12", 3894 + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", 3895 + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", 3896 + "license": "MIT", 3897 + "engines": { 3898 + "node": ">=12.20.0" 3899 + }, 3900 + "peerDependencies": { 3901 + "@types/react": ">=18.0.0", 3902 + "immer": ">=9.0.6", 3903 + "react": ">=18.0.0", 3904 + "use-sync-external-store": ">=1.2.0" 3905 + }, 3906 + "peerDependenciesMeta": { 3907 + "@types/react": { 3908 + "optional": true 3909 + }, 3910 + "immer": { 3911 + "optional": true 3912 + }, 3913 + "react": { 3914 + "optional": true 3915 + }, 3916 + "use-sync-external-store": { 3917 + "optional": true 3918 + } 3919 + } 3920 + } 3921 + } 3922 + }
+26
js/package.json
··· 1 + { 2 + "name": "js", 3 + "version": "1.0.0", 4 + "description": "", 5 + "type": "module", 6 + "main": "index.js", 7 + "scripts": { 8 + "test": "echo \"Error: no test specified\" && exit 1" 9 + }, 10 + "keywords": [], 11 + "author": "", 12 + "license": "ISC", 13 + "devDependencies": { 14 + "@atproto/lex": "^0.0.23", 15 + "@types/node": "^25.5.0", 16 + "ts-node": "^10.9.2", 17 + "typescript": "^6.0.2" 18 + }, 19 + "dependencies": { 20 + "express": "^5.2.1", 21 + "glob": "^13.0.6", 22 + "graphql": "^15.10.2", 23 + "graphql-http": "^1.22.4", 24 + "ruru": "^2.0.0" 25 + } 26 + }
+41
js/public/index.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <body> 4 + <h1>ATproto <=> GraphQL Demo</h1> 5 + <p>This is an example GraphQL Server with ATproto.</p> 6 + <ul> 7 + <li><a href="/graphiql">Interactive GraphQL IDE (GraphiQL)</a></li> 8 + <li><a href="/graphql">GraphQL endpoint</a></li> 9 + </ul> 10 + <p>You are currently serving these procedures:</p> 11 + <ul> 12 + <li>TODO</li> 13 + </ul> 14 + </body> 15 + <head> 16 + <meta charset="UTF-8"> 17 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 18 + <title>Static Page</title> 19 + <style> 20 + body { 21 + background-color: #121212; 22 + color: #e0e0e0; 23 + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 24 + margin: 0; 25 + padding: 2rem; 26 + line-height: 1.6; 27 + } 28 + h1 { 29 + font-size: 2.5rem; 30 + margin-bottom: 1rem; 31 + color: #ffffff; 32 + } 33 + p { 34 + font-size: 1.2rem; 35 + } 36 + a:visited { 37 + color: #4aa; 38 + } 39 + </style> 40 + </head> 41 + </html>
+258
js/schema-generated.graphql
··· 1 + # app.bsky.actor.defs#profileViewDetailed 2 + type Lexicon_app_bsky_actor_defs_profileViewDetailed { 3 + did: ID! 4 + handle: ID! 5 + displayName: String 6 + description: String 7 + pronouns: String 8 + website: String 9 + avatar: String 10 + banner: String 11 + followersCount: Int 12 + followsCount: Int 13 + postsCount: Int 14 + associated: Lexicon_app_bsky_actor_defs_profileAssociated 15 + joinedViaStarterPack: Lexicon_app_bsky_graph_defs_starterPackViewBasic 16 + indexedAt: String 17 + createdAt: String 18 + viewer: Lexicon_app_bsky_actor_defs_viewerState 19 + labels: [Lexicon_com_atproto_label_defs_label!] 20 + pinnedPost: Lexicon_com_atproto_repo_strongRef 21 + verification: Lexicon_app_bsky_actor_defs_verificationState 22 + status: Lexicon_app_bsky_actor_defs_statusView 23 + } 24 + 25 + 26 + 27 + # com.atproto.server.getSessionOutput 28 + type Lexicon_com_atproto_server_getSessionOutput { 29 + handle: ID! 30 + did: ID! 31 + email: String 32 + emailConfirmed: Boolean 33 + emailAuthFactor: Boolean 34 + active: Boolean 35 + status: String 36 + } 37 + 38 + 39 + 40 + # app.bsky.actor.defs#profileAssociated 41 + type Lexicon_app_bsky_actor_defs_profileAssociated { 42 + lists: Int 43 + feedgens: Int 44 + starterPacks: Int 45 + labeler: Boolean 46 + chat: Lexicon_app_bsky_actor_defs_profileAssociatedChat 47 + activitySubscription: Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription 48 + germ: Lexicon_app_bsky_actor_defs_profileAssociatedGerm 49 + } 50 + 51 + 52 + 53 + # app.bsky.graph.defs#starterPackViewBasic 54 + type Lexicon_app_bsky_graph_defs_starterPackViewBasic { 55 + uri: String! 56 + cid: String! 57 + creator: Lexicon_app_bsky_actor_defs_profileViewBasic! 58 + listItemCount: Int 59 + joinedWeekCount: Int 60 + joinedAllTimeCount: Int 61 + labels: [Lexicon_com_atproto_label_defs_label!] 62 + indexedAt: String! 63 + } 64 + 65 + 66 + 67 + # app.bsky.actor.defs#viewerState 68 + type Lexicon_app_bsky_actor_defs_viewerState { 69 + muted: Boolean 70 + mutedByList: Lexicon_app_bsky_graph_defs_listViewBasic 71 + blockedBy: Boolean 72 + blocking: String 73 + blockingByList: Lexicon_app_bsky_graph_defs_listViewBasic 74 + following: String 75 + followedBy: String 76 + knownFollowers: Lexicon_app_bsky_actor_defs_knownFollowers 77 + activitySubscription: Lexicon_app_bsky_notification_defs_activitySubscription 78 + } 79 + 80 + 81 + 82 + # com.atproto.label.defs#label 83 + type Lexicon_com_atproto_label_defs_label { 84 + ver: Int 85 + src: ID! 86 + uri: String! 87 + cid: String 88 + val: String! 89 + neg: Boolean 90 + cts: String! 91 + exp: String 92 + sig: String 93 + } 94 + 95 + 96 + 97 + # com.atproto.repo.strongRef 98 + type Lexicon_com_atproto_repo_strongRef { 99 + uri: String! 100 + cid: String! 101 + } 102 + 103 + 104 + 105 + # app.bsky.actor.defs#verificationState 106 + type Lexicon_app_bsky_actor_defs_verificationState { 107 + verifications: [Lexicon_app_bsky_actor_defs_verificationView!]! 108 + verifiedStatus: String! 109 + trustedVerifierStatus: String! 110 + } 111 + 112 + 113 + 114 + # app.bsky.actor.defs#statusView 115 + type Lexicon_app_bsky_actor_defs_statusView { 116 + uri: String 117 + cid: String 118 + status: String! 119 + embed: Unknown 120 + expiresAt: String 121 + isActive: Boolean 122 + isDisabled: Boolean 123 + } 124 + 125 + 126 + 127 + # app.bsky.actor.defs#profileAssociatedChat 128 + type Lexicon_app_bsky_actor_defs_profileAssociatedChat { 129 + allowIncoming: String! 130 + } 131 + 132 + 133 + 134 + # app.bsky.actor.defs#profileAssociatedActivitySubscription 135 + type Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription { 136 + allowSubscriptions: String! 137 + } 138 + 139 + 140 + 141 + # app.bsky.actor.defs#profileAssociatedGerm 142 + type Lexicon_app_bsky_actor_defs_profileAssociatedGerm { 143 + messageMeUrl: String! 144 + showButtonTo: String! 145 + } 146 + 147 + 148 + 149 + # app.bsky.actor.defs#profileViewBasic 150 + type Lexicon_app_bsky_actor_defs_profileViewBasic { 151 + did: ID! 152 + handle: ID! 153 + displayName: String 154 + pronouns: String 155 + avatar: String 156 + associated: Lexicon_app_bsky_actor_defs_profileAssociated 157 + viewer: Lexicon_app_bsky_actor_defs_viewerState 158 + labels: [Lexicon_com_atproto_label_defs_label!] 159 + createdAt: String 160 + verification: Lexicon_app_bsky_actor_defs_verificationState 161 + status: Lexicon_app_bsky_actor_defs_statusView 162 + } 163 + 164 + 165 + 166 + # app.bsky.graph.defs#listViewBasic 167 + type Lexicon_app_bsky_graph_defs_listViewBasic { 168 + uri: String! 169 + cid: String! 170 + name: String! 171 + purpose: Lexicon_app_bsky_graph_defs_listPurpose! 172 + avatar: String 173 + listItemCount: Int 174 + labels: [Lexicon_com_atproto_label_defs_label!] 175 + viewer: Lexicon_app_bsky_graph_defs_listViewerState 176 + indexedAt: String 177 + } 178 + 179 + 180 + 181 + # app.bsky.actor.defs#knownFollowers 182 + type Lexicon_app_bsky_actor_defs_knownFollowers { 183 + count: Int! 184 + followers: [Lexicon_app_bsky_actor_defs_profileViewBasic!]! 185 + } 186 + 187 + 188 + 189 + # app.bsky.notification.defs#activitySubscription 190 + type Lexicon_app_bsky_notification_defs_activitySubscription { 191 + post: Boolean! 192 + reply: Boolean! 193 + } 194 + 195 + 196 + 197 + # app.bsky.actor.defs#verificationView 198 + type Lexicon_app_bsky_actor_defs_verificationView { 199 + issuer: ID! 200 + uri: String! 201 + isValid: Boolean! 202 + createdAt: String! 203 + } 204 + 205 + 206 + 207 + # app.bsky.graph.defs#listPurpose 208 + enum Lexicon_app_bsky_graph_defs_listPurpose { 209 + APP_BSKY_GRAPH_DEFS_MODLIST 210 + APP_BSKY_GRAPH_DEFS_CURATELIST 211 + APP_BSKY_GRAPH_DEFS_REFERENCELIST 212 + } 213 + 214 + 215 + 216 + # app.bsky.graph.defs#listViewerState 217 + type Lexicon_app_bsky_graph_defs_listViewerState { 218 + muted: Boolean 219 + blocked: String 220 + } 221 + 222 + 223 + 224 + type Lexicon_app_bsky_actor { 225 + getProfile(actor: ID!): Lexicon_app_bsky_actor_defs_profileViewDetailed 226 + } 227 + 228 + 229 + type Lexicon_app_bsky { 230 + actor: Lexicon_app_bsky_actor! 231 + } 232 + 233 + 234 + type Lexicon_app { 235 + bsky: Lexicon_app_bsky! 236 + } 237 + 238 + 239 + type Lexicon_com_atproto_server { 240 + getSession: Lexicon_com_atproto_server_getSessionOutput 241 + } 242 + 243 + 244 + type Lexicon_com_atproto { 245 + server: Lexicon_com_atproto_server! 246 + } 247 + 248 + 249 + type Lexicon_com { 250 + atproto: Lexicon_com_atproto! 251 + } 252 + 253 + 254 + type Lexicon { 255 + app: Lexicon_app! 256 + com: Lexicon_com! 257 + } 258 +
+495
js/src/generateLexiconSchema.ts
··· 1 + #!/usr/bin/env ts-node 2 + 3 + import { jsonToLex } from "@atproto/lex"; 4 + import fs from "fs"; 5 + import path from "path"; 6 + import { glob } from "glob"; 7 + 8 + interface LexiconPath { 9 + segments: string[]; 10 + dotPath(): string; 11 + filePath(): string; 12 + } 13 + 14 + class LexiconPathImpl implements LexiconPath { 15 + constructor(public segments: string[]) {} 16 + 17 + dotPath(): string { 18 + return this.segments.join("."); 19 + } 20 + 21 + filePath(): string { 22 + return this.segments.join("/"); 23 + } 24 + 25 + static fromString(pathStr: string): LexiconPath { 26 + return new LexiconPathImpl(pathStr.split(".")); 27 + } 28 + } 29 + 30 + // Constants 31 + const BASE_DIR = path.dirname(path.resolve(import.meta.dirname, ".")); 32 + const LEXICON_DIR = path.join(BASE_DIR, "../deps/atproto/lexicons"); 33 + 34 + const TYPE_MAPPING: Record<string, string> = { 35 + string: "String", 36 + integer: "Int", 37 + number: "Float", 38 + boolean: "Boolean", 39 + bytes: "String", 40 + }; 41 + 42 + const FORMAT_MAPPING: Record<string, string> = { 43 + did: "ID", 44 + handle: "ID", 45 + uri: "String", 46 + cid: "String", 47 + datetime: "String", 48 + date: "String", 49 + time: "String", 50 + "at-identifier": "ID", 51 + }; 52 + 53 + const SKIP_FIELDS = new Set(["debug"]); // Fields to skip in GraphQL output 54 + 55 + function resolveLexiconPath(lexiconPath: LexiconPath): string { 56 + const dirParts = lexiconPath.segments; 57 + const fileName = `${dirParts[dirParts.length - 1]}.json`; 58 + const filePath = path.join(LEXICON_DIR, ...dirParts.slice(0, -1), fileName); 59 + 60 + if (!fs.existsSync(filePath)) { 61 + throw new Error(`Lexicon file not found: ${filePath}`); 62 + } 63 + 64 + return filePath; 65 + } 66 + 67 + function normalizeReference(base: string, ref: string): string { 68 + if (base.includes("#") && ref[0] === "#") { 69 + return base.split("#")[0] + ref; 70 + } else if (!base.includes("#") && ref[0] === "#") { 71 + return base + ref; 72 + } else { 73 + return ref; 74 + } 75 + } 76 + 77 + function resolveReference(ref: string): any | null { 78 + try { 79 + if (ref.includes("#")) { 80 + const [lexiconId, typeName] = ref.split("#", 2); 81 + return resolveReferenceType(lexiconId, typeName || "main"); 82 + } else { 83 + return resolveReferenceType(ref, "main"); 84 + } 85 + } catch (e) { 86 + console.error(`Warning: Could not resolve reference ${ref}: ${e}`, e); 87 + return null; 88 + } 89 + } 90 + 91 + function resolveReferenceType(lexiconId: string, typeName: string): any | null { 92 + try { 93 + const lexiconPath = resolveLexiconPath( 94 + LexiconPathImpl.fromString(lexiconId), 95 + ); 96 + const lexiconData = JSON.parse(fs.readFileSync(lexiconPath, "utf-8")); 97 + const parsed = jsonToLex(lexiconData); 98 + 99 + if (!parsed || !parsed.defs) return null; 100 + 101 + const defs = parsed.defs; 102 + if (defs[typeName]) { 103 + return defs[typeName]; 104 + } 105 + 106 + return null; 107 + } catch (e) { 108 + console.error(`Error resolving reference ${lexiconId}#${typeName}: ${e}`); 109 + return null; 110 + } 111 + } 112 + 113 + function lexTypeToGraphQLType( 114 + base: string, 115 + lexType: any, 116 + isRequired: boolean = false, 117 + ): string { 118 + let output; 119 + if (lexType.type === "array") { 120 + const itemsType = lexType.items; 121 + const itemType = lexTypeToGraphQLType(base, itemsType, true); 122 + output = `[${itemType}]`; 123 + } else if (lexType.type === "ref") { 124 + const ref = normalizeReference(base, lexType.ref) || ""; 125 + const typeName = `Lexicon_${ref.replace(/#/g, ".").replace(/\./g, "_")}`; 126 + output = typeName; 127 + } else if (lexType.type === "string") { 128 + output = lexType.format && FORMAT_MAPPING[lexType.format] 129 + ? FORMAT_MAPPING[lexType.format] 130 + : "String"; 131 + } else if (TYPE_MAPPING[lexType.type]) { 132 + output = TYPE_MAPPING[lexType.type]; 133 + } else { 134 + output = "Unknown"; 135 + } 136 + 137 + const nullable_indicator = isRequired ? "!" : ""; 138 + return `${output}${nullable_indicator}` 139 + } 140 + 141 + function toUpperSnakeCase(s: string): string { 142 + return s.replace(/[^a-zA-Z0-9]+/g, "_").toUpperCase(); 143 + } 144 + 145 + function lexObjectDefinitionToGraphQL(typeName: string, typeDef: any): string { 146 + const graphqlLines: string[] = []; 147 + 148 + if (typeDef.type === "string" && typeDef.knownValues) { 149 + // Enums 150 + graphqlLines.push(`# ${typeName}`); 151 + graphqlLines.push( 152 + `enum Lexicon_${typeName.replace(/#/g, "_").replace(/\./g, "_")} {`, 153 + ); 154 + 155 + for (const fieldName of typeDef.knownValues) { 156 + graphqlLines.push(` ${toUpperSnakeCase(fieldName)}`); 157 + } 158 + } else if (typeDef.type === "object") { 159 + // Struct/object definitions 160 + graphqlLines.push(`# ${typeName}`); 161 + graphqlLines.push( 162 + `type Lexicon_${typeName.replace(/#/g, "_").replace(/\./g, "_")} {`, 163 + ); 164 + 165 + const properties = typeDef.properties || {}; 166 + const requiredFields = new Set(typeDef.required || []); 167 + 168 + for (const [fieldName, fieldDef] of Object.entries(properties)) { 169 + // Skip debug field as per requirements 170 + if (SKIP_FIELDS.has(fieldName)) { 171 + continue; 172 + } 173 + 174 + // Skip ref unions 175 + if (fieldDef.type === "refUnion") { 176 + continue; 177 + } 178 + 179 + // Skip "unknown" fields 180 + if (fieldDef.type === "unknown") { 181 + continue; 182 + } 183 + 184 + const isRequired = requiredFields.has(fieldName); 185 + const graphqlType = lexTypeToGraphQLType(typeName, fieldDef, isRequired); 186 + graphqlLines.push(` ${fieldName}: ${graphqlType}`); 187 + } 188 + } 189 + 190 + graphqlLines.push("}"); 191 + return graphqlLines.join("\n"); 192 + } 193 + 194 + function outputLexiconNamespaces( 195 + namespaces: Record<string, string>, 196 + root: LexiconPath, 197 + ): string[] { 198 + const lines: string[] = []; 199 + const chunks: string[] = []; 200 + const rootLen = root.segments.length; 201 + 202 + while (Object.keys(namespaces).length > 0) { 203 + const lexiconPath = LexiconPathImpl.fromString(Object.keys(namespaces)[0]); 204 + if (rootLen === lexiconPath.segments.length - 1) { 205 + // Done, output the type 206 + const path = lexiconPath.dotPath(); 207 + lines.push(namespaces[path]); 208 + delete namespaces[path]; 209 + } else { 210 + const nextSegment = lexiconPath.segments[rootLen]; 211 + const nextPath = 212 + rootLen > 0 ? `${root.dotPath()}.${nextSegment}` : nextSegment; 213 + 214 + const group: Record<string, string> = {}; 215 + for (const [path, def] of Object.entries(namespaces)) { 216 + if (path.startsWith(`${nextPath}.`)) { 217 + group[path] = def; 218 + delete namespaces[path]; 219 + } 220 + } 221 + 222 + const nestedChunks = outputLexiconNamespaces( 223 + group, 224 + LexiconPathImpl.fromString(nextPath), 225 + ); 226 + chunks.push(...nestedChunks); 227 + 228 + const typeName = `Lexicon_${LexiconPathImpl.fromString(nextPath).segments.join("_")}`; 229 + lines.push(`${nextSegment}: ${typeName}!`); 230 + } 231 + } 232 + 233 + const content = lines.map((line) => ` ${line}`).join("\n"); 234 + const typeName = ['Lexicon'].concat(root.segments).join("_"); 235 + chunks.push(`type ${typeName} {\n${content}\n}\n`); 236 + return chunks; 237 + } 238 + 239 + function generateLexiconStructure(lexiconPath: LexiconPath): { 240 + methodDef: string; 241 + objectDefinitions: Record<string, any>; 242 + } { 243 + const methodName = lexiconPath.segments[lexiconPath.segments.length - 1]; 244 + 245 + try { 246 + const filePath = resolveLexiconPath(lexiconPath); 247 + const lexiconData = JSON.parse(fs.readFileSync(filePath, "utf-8")); 248 + const parsed = jsonToLex(lexiconData); 249 + 250 + if (!parsed || typeof parsed !== 'object' || !('defs' in parsed)) { 251 + return { methodDef: "", objectDefinitions: {} }; 252 + } 253 + 254 + const defs = parsed.defs; 255 + const mainDef = defs.main; 256 + 257 + if (!mainDef || mainDef.type !== "query") { 258 + return { methodDef: "", objectDefinitions: {} }; 259 + } 260 + 261 + const referencedTypes = new Set<string>(); 262 + const objectDefinitions: Record<string, any> = {}; 263 + 264 + // Add parameters as fields 265 + const methodFields: string[] = []; 266 + if (mainDef.parameters) { 267 + const params = mainDef.parameters; 268 + const requiredFields = new Set(params.required || []); 269 + 270 + for (const [fieldName, fieldDef] of Object.entries( 271 + params.properties || {}, 272 + )) { 273 + const isRequired = requiredFields.has(fieldName); 274 + const graphqlType = lexTypeToGraphQLType( 275 + lexiconPath.dotPath(), 276 + fieldDef, 277 + isRequired, 278 + ); 279 + methodFields.push(`${fieldName}: ${graphqlType}`); 280 + 281 + // Sweep up refs 282 + if (fieldDef.type === "ref") { 283 + referencedTypes.add(fieldDef.ref); 284 + } 285 + } 286 + } 287 + 288 + const methodParams = 289 + methodFields.length > 0 ? `(${methodFields.join(", ")})` : ""; 290 + 291 + let returnType = null; 292 + 293 + if (mainDef.output) { 294 + const outputSchema = mainDef.output.schema; 295 + 296 + if (outputSchema.type === "ref") { 297 + // Use the output type as return type 298 + returnType = lexTypeToGraphQLType(lexiconPath.dotPath(), outputSchema); 299 + 300 + // Sweep up refs 301 + referencedTypes.add(outputSchema.ref); 302 + } else if (outputSchema.type === "object") { 303 + // Handle inline object definitions for return type 304 + const outputType = `Lexicon_${lexiconPath.segments.join("_")}Output`; 305 + returnType = outputType; 306 + objectDefinitions[`${lexiconPath.dotPath()}Output`] = outputSchema; 307 + } 308 + } 309 + 310 + // Resolve references 311 + for (const ref of referencedTypes) { 312 + const normalizedRef = normalizeReference(lexiconPath.dotPath(), ref); 313 + const refDef = resolveReference(normalizedRef); 314 + if (refDef) { 315 + objectDefinitions[ref] = refDef; 316 + } 317 + } 318 + 319 + const methodDef = returnType 320 + ? `${methodName}${methodParams}: ${returnType}` 321 + : `${methodName}${methodParams}`; 322 + 323 + return { methodDef, objectDefinitions }; 324 + } catch (e) { 325 + console.error( 326 + `Error processing lexicon ${lexiconPath.segments.join(".")}: ${e}`, 327 + ); 328 + return { methodDef: "", objectDefinitions: {} }; 329 + } 330 + } 331 + 332 + function generateDefinitions(lexiconIds: string[]): string[] { 333 + const chunks: string[] = []; 334 + const lexiconFields: Record<string, string> = {}; 335 + let objectDefinitions: Record<string, any> = {}; 336 + 337 + for (const lexiconId of lexiconIds) { 338 + const lexiconPath = LexiconPathImpl.fromString(lexiconId); 339 + 340 + // Generate main lexicon structure 341 + const { methodDef, objectDefinitions: collectedObjectDefinitions } = 342 + generateLexiconStructure(lexiconPath); 343 + lexiconFields[lexiconPath.dotPath()] = methodDef; 344 + objectDefinitions = { ...objectDefinitions, ...collectedObjectDefinitions }; 345 + } 346 + 347 + // Walk output types for more refs 348 + const finalDefinitions: Record<string, any> = {}; 349 + let newDefinitions: Record<string, any> = {}; 350 + 351 + while (Object.keys(objectDefinitions).length > 0) { 352 + for (const [objName, objDef] of Object.entries(objectDefinitions)) { 353 + if (objDef.type === "object") { 354 + for (const [fieldName, fieldDef] of Object.entries( 355 + objDef.properties || {}, 356 + )) { 357 + // Export refs 358 + if (fieldDef.type === "ref") { 359 + const ref = normalizeReference(objName, fieldDef.ref); 360 + const refDef = resolveReference(ref); 361 + if (refDef) { 362 + newDefinitions[ref] = refDef; 363 + } 364 + continue; 365 + } else if ( 366 + fieldDef.type === "array" && 367 + fieldDef.items?.type === "ref" 368 + ) { 369 + const ref = normalizeReference(objName, fieldDef.items.ref); 370 + const refDef = resolveReference(ref); 371 + if ( 372 + refDef && 373 + (refDef.type === "object" || refDef.type === "string") 374 + ) { 375 + newDefinitions[ref] = refDef; 376 + } 377 + continue; 378 + } 379 + } 380 + } 381 + 382 + finalDefinitions[objName] = objDef; 383 + } 384 + 385 + // Reset objectDefinitions to only be ones we haven't seen yet. 386 + objectDefinitions = {}; 387 + for (const [objKey, objDef] of Object.entries(newDefinitions)) { 388 + if (!(objKey in finalDefinitions)) { 389 + objectDefinitions[objKey] = objDef; 390 + } 391 + } 392 + } 393 + 394 + objectDefinitions = finalDefinitions; 395 + 396 + // Generate types for all output types 397 + for (const [name, typeDef] of Object.entries(objectDefinitions)) { 398 + chunks.push(lexObjectDefinitionToGraphQL(name, typeDef) + "\n\n"); 399 + } 400 + 401 + // Generate Lexicon structs iteratively. 402 + chunks.push( 403 + ...outputLexiconNamespaces(lexiconFields, new LexiconPathImpl([])), 404 + ); 405 + 406 + return chunks; 407 + } 408 + 409 + async function readSchemaFiles(schemaFiles: string[] | null): Promise<string> { 410 + if (!schemaFiles || schemaFiles.length === 0) { 411 + return ""; 412 + } 413 + 414 + let output = ""; 415 + 416 + for (const schemaFile of schemaFiles) { 417 + const stats = fs.statSync(schemaFile); 418 + 419 + if (stats.isFile()) { 420 + // If it's a single file, read it 421 + const content = fs.readFileSync(schemaFile, "utf-8"); 422 + output += `\n${content}\n`; 423 + } else if (stats.isDirectory()) { 424 + // If it's a directory, recursively read all .graphql files 425 + const files = await glob("**/*.graphql", { cwd: schemaFile }); 426 + for (const file of files) { 427 + const fullPath = path.join(schemaFile, file); 428 + const content = fs.readFileSync(fullPath, "utf-8"); 429 + output += `\n${content}\n`; 430 + } 431 + } 432 + } 433 + 434 + return output; 435 + } 436 + 437 + async function main() { 438 + const args = process.argv.slice(2); 439 + let lexiconIds: string[] = []; 440 + let output: string | null = null; 441 + let appendSchema: string[] | null = null; 442 + 443 + // Parse arguments 444 + let i = 0; 445 + while (i < args.length) { 446 + const arg = args[i]; 447 + 448 + if (arg === "--output" || arg === "-o") { 449 + i++; 450 + if (i < args.length) { 451 + output = args[i]; 452 + i++; 453 + } 454 + } else if (arg === "--append-schema" || arg === "-a") { 455 + i++; 456 + if (i < args.length) { 457 + appendSchema = appendSchema || []; 458 + appendSchema.push(args[i]); 459 + i++; 460 + } 461 + } else { 462 + // Positional arguments (lexicon IDs) 463 + lexiconIds.push(arg); 464 + i++; 465 + } 466 + } 467 + 468 + if (lexiconIds.length === 0) { 469 + console.error("Error: No lexicon identifiers provided"); 470 + process.exit(1); 471 + } 472 + 473 + let outputContent = ""; 474 + 475 + // Append additional schemas if provided via --append-schema 476 + if (appendSchema) { 477 + const additionalSchemas = await readSchemaFiles(appendSchema); 478 + outputContent += additionalSchemas; 479 + } 480 + 481 + // Append the new schema. 482 + outputContent += generateDefinitions(lexiconIds).join("\n\n"); 483 + 484 + // Write to output file 485 + if (output) { 486 + fs.writeFileSync(output, outputContent); 487 + } else { 488 + console.log(outputContent); 489 + } 490 + } 491 + 492 + main().catch((err) => { 493 + console.error("Error:", err); 494 + process.exit(1); 495 + });
+78
js/src/server/server.js
··· 1 + import express from "express"; 2 + import { createHandler } from 'graphql-http/lib/use/http'; 3 + import { buildSchema } from "graphql"; 4 + import { ruruHTML } from "ruru/server"; 5 + import { serveStatic } from "ruru/static"; 6 + 7 + // Initialize Express app 8 + const app = express(); 9 + 10 + // Define GraphQL schema using GraphQL-JS 11 + const schema = buildSchema(` 12 + type Query { 13 + hello: String 14 + user(id: ID!): User 15 + } 16 + 17 + type User { 18 + id: ID! 19 + name: String! 20 + email: String! 21 + } 22 + `); 23 + 24 + // Define GraphQL resolvers 25 + const root = { 26 + hello: () => "Hello, World!", 27 + user: ({ id }) => { 28 + // Mock data 29 + const users = { 30 + 1: { id: "1", name: "Alice", email: "alice@example.com" }, 31 + 2: { id: "2", name: "Bob", email: "bob@example.com" }, 32 + }; 33 + return users[id]; 34 + }, 35 + }; 36 + 37 + // Serve static files 38 + app.use(express.static("public")); 39 + 40 + const handler = createHandler({ schema }); 41 + 42 + // GraphQL endpoint 43 + app.all( 44 + "/graphql", 45 + createHandler({ schema }) 46 + ); 47 + 48 + /** 49 + * Setup GraphiQL 50 + */ 51 + 52 + const config = { staticPath: "/ruru-static/", endpoint: "/graphql" }; 53 + 54 + // Serve Ruru HTML 55 + app.get("/graphiql", (req, res) => { 56 + res.format({ 57 + html: () => res.status(200).send(ruruHTML(config)), 58 + default: () => res.status(406).send("Not Acceptable"), 59 + }); 60 + }); 61 + 62 + // Serve static files 63 + app.use(serveStatic(config.staticPath)); 64 + 65 + // Start the HTTP server 66 + const PORT = process.env.PORT || 4000; 67 + const httpServer = app.listen(PORT, () => { 68 + console.log(`Server ready at http://localhost:${PORT}`); 69 + console.log(`GraphQL endpoint: http://localhost:${PORT}/graphql`); 70 + console.log(`GraphiQL endpoint: http://localhost:${PORT}/graphiql`); 71 + }); 72 + 73 + // Handle server shutdown gracefully 74 + process.on("SIGINT", () => { 75 + httpServer.close(() => { 76 + console.log("Server closed"); 77 + }); 78 + });
+14
js/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "module": "CommonJS", 5 + "outDir": "./dist", 6 + "rootDir": "./src", 7 + "strict": true, 8 + "esModuleInterop": true, 9 + "skipLibCheck": true, 10 + "forceConsistentCasingInFileNames": true 11 + }, 12 + "include": ["src/**/*.ts"], 13 + "exclude": ["node_modules"] 14 + }
+13
tests/conftest.py
··· 1 + """Test configuration and fixtures for the schema generation tests.""" 2 + 3 + import os 4 + import sys 5 + from pathlib import Path 6 + 7 + # Add the project root to the Python path so we can import modules 8 + sys.path.insert(0, str(Path(__file__).parent.parent)) 9 + 10 + 11 + def pytest_configure(config): 12 + """Add custom markers if needed.""" 13 + pass
+115
tests/test_schema_generation.py
··· 1 + """Test for schema generation consistency.""" 2 + 3 + import os 4 + import tempfile 5 + from pathlib import Path 6 + from typing import List 7 + 8 + from schema.generate_lexicon_schema import generate_definitions, main 9 + 10 + # Constant for the expected output file 11 + EXPECTED_OUTPUT_FILE = "schema/schema-generated.graphql" 12 + 13 + 14 + def test_schema_generation_consistency(): 15 + """ 16 + Test that running the generate_lexicon_schema.py script produces consistent output. 17 + This test ensures that the generated schema doesn't change unexpectedly. 18 + """ 19 + # Expected lexicon IDs from the command line 20 + lexicon_ids = ["app.bsky.actor.getProfile", "com.atproto.server.getSession"] 21 + 22 + # Generate the expected output using the function directly 23 + generated_content = "\n\n".join(generate_definitions(lexicon_ids)) 24 + 25 + # Read the expected file if it exists 26 + expected_file_path = Path(EXPECTED_OUTPUT_FILE) 27 + if expected_file_path.exists(): 28 + with open(expected_file_path, "r") as f: 29 + expected_content = f.read() 30 + 31 + # Compare the generated content with the expected content 32 + assert generated_content == expected_content, ( 33 + "Generated schema content does not match the expected file. " 34 + "This could mean the schema has changed or the test needs to be updated." 35 + ) 36 + 37 + else: 38 + # If the expected file doesn't exist, create it with the current output 39 + with open(expected_file_path, "w") as f: 40 + f.write(generated_content) 41 + print(f"Created new expected output file: {expected_file_path}") 42 + 43 + 44 + def test_main_function_output(): 45 + """ 46 + Test the main function by running it with the specified lexicon IDs 47 + and verifying the output is consistent. 48 + """ 49 + # Expected lexicon IDs from the command line 50 + lexicon_ids = ["app.bsky.actor.getProfile", "com.atproto.server.getSession"] 51 + 52 + # Create a temporary file for testing 53 + with tempfile.NamedTemporaryFile( 54 + mode="w", suffix=".graphql", delete=False 55 + ) as tmp_file: 56 + tmp_path = tmp_file.name 57 + 58 + try: 59 + # Run the main function with the lexicon IDs and output to temp file 60 + main(lexicon_ids=lexicon_ids, output=tmp_path, append_schema=None) 61 + 62 + # Read the generated content 63 + with open(tmp_path, "r") as f: 64 + generated_content = f.read() 65 + 66 + # Read the expected file if it exists 67 + expected_file_path = Path(EXPECTED_OUTPUT_FILE) 68 + if expected_file_path.exists(): 69 + with open(expected_file_path, "r") as f: 70 + expected_content = f.read() 71 + 72 + # Compare the generated content with the expected content 73 + assert generated_content == expected_content, ( 74 + "Generated schema content does not match the expected file. " 75 + "This could mean the schema has changed or the test needs to be updated." 76 + ) 77 + else: 78 + # If the expected file doesn't exist, create it with the current output 79 + with open(expected_file_path, "w") as f: 80 + f.write(generated_content) 81 + print(f"Created new expected output file: {expected_file_path}") 82 + 83 + finally: 84 + # Clean up the temporary file 85 + if os.path.exists(tmp_path): 86 + os.unlink(tmp_path) 87 + 88 + 89 + def test_generate_definitions_function(): 90 + """ 91 + Test the generate_definitions function directly to ensure it produces consistent output. 92 + """ 93 + # Expected lexicon IDs from the command line 94 + lexicon_ids = ["app.bsky.actor.getProfile", "com.atproto.server.getSession"] 95 + 96 + # Generate definitions using the function 97 + generated_chunks = generate_definitions(lexicon_ids) 98 + generated_content = "\n\n".join(generated_chunks) 99 + 100 + # Read the expected file if it exists 101 + expected_file_path = Path(EXPECTED_OUTPUT_FILE) 102 + if expected_file_path.exists(): 103 + with open(expected_file_path, "r") as f: 104 + expected_content = f.read() 105 + 106 + # Compare the generated content with the expected content 107 + assert generated_content == expected_content, ( 108 + "Generated schema content does not match the expected file. " 109 + "This could mean the schema has changed or the test needs to be updated." 110 + ) 111 + else: 112 + # If the expected file doesn't exist, create it with the current output 113 + with open(expected_file_path, "w") as f: 114 + f.write(generated_content) 115 + print(f"Created new expected output file: {expected_file_path}")