diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01f234a..dc11d70 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,10 +6,18 @@ on: push: branches: [main] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: ci: name: Continuous integration - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node: [20, 22, 24] steps: - name: Checkout @@ -23,7 +31,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 22 + node-version: ${{ matrix.node }} cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 43360a3..fe1961c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,8 +28,8 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Build - run: pnpm build + - name: Check formatting + run: pnpm format:check - name: Lint run: pnpm lint @@ -37,6 +37,9 @@ jobs: - name: Run tests run: pnpm test + - name: Build + run: pnpm build + - name: Publish to npm run: pnpm publish env: diff --git a/package.json b/package.json index 0e2f28d..62f7585 100644 --- a/package.json +++ b/package.json @@ -42,15 +42,16 @@ ], "scripts": { "build": "rm -rf lib && tsc --project tsconfig.build.json", - "lint": "oxlint", - "lint:fix": "oxlint --fix", - "test": "vitest", - "typecheck": "tsc --noEmit", - "test:coverage": "vitest --coverage", "format": "prettier . --write --experimental-cli", "format:check": "prettier . --check --experimental-cli", "knip": "knip", - "knip:fix": "knip --fix" + "knip:fix": "knip --fix", + "lint": "oxlint", + "lint:fix": "oxlint --fix", + "test": "vitest run", + "test:coverage": "vitest --coverage", + "test:watch": "vitest --watch", + "typecheck": "tsc --noEmit" }, "dependencies": { "graphql": "^16.11.0", @@ -60,21 +61,32 @@ }, "devDependencies": { "@types/jsonld": "^1.5.15", - "@types/node": "^22.15.34", + "@types/node": "^22.16.5", "@vitest/coverage-v8": "3.2.4", - "knip": "^5.61.3", - "msw": "^2.10.2", + "knip": "^5.62.0", + "msw": "^2.10.4", "openapi-types": "^12.1.3", - "oxlint": "^1.4.0", + "oxlint": "^1.8.0", "prettier": "^3.6.2", "typescript": "^5.8.3", "vitest": "^3.2.4" }, - "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184", + "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad", "engines": { - "node": ">=18" + "node": ">= 20" }, "publishConfig": { "access": "public" + }, + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": ">= 10.0.0", + "onFail": "download" + }, + "runtime": { + "name": "node", + "version": ">=20" + } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7339755..e1138d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,9 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - brace-expansion: ^2.0.2 - importers: .: @@ -28,23 +25,23 @@ importers: specifier: ^1.5.15 version: 1.5.15 '@types/node': - specifier: ^22.15.34 - version: 22.15.34 + specifier: ^22.16.5 + version: 22.16.5 '@vitest/coverage-v8': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/node@22.15.34)(jiti@2.4.2)(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3))) + version: 3.2.4(vitest@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))) knip: - specifier: ^5.61.3 - version: 5.61.3(@types/node@22.15.34)(typescript@5.8.3) + specifier: ^5.62.0 + version: 5.62.0(@types/node@22.16.5)(typescript@5.8.3) msw: - specifier: ^2.10.2 - version: 2.10.2(@types/node@22.15.34)(typescript@5.8.3) + specifier: ^2.10.4 + version: 2.10.4(@types/node@22.16.5)(typescript@5.8.3) openapi-types: specifier: ^12.1.3 version: 12.1.3 oxlint: - specifier: ^1.4.0 - version: 1.4.0 + specifier: ^1.8.0 + version: 1.8.0 prettier: specifier: ^3.6.2 version: 3.6.2 @@ -53,7 +50,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@22.15.34)(jiti@2.4.2)(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3)) + version: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3)) packages: @@ -69,13 +66,13 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.5': - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.27.6': - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@1.0.2': @@ -95,161 +92,167 @@ packages: resolution: {integrity: sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==} engines: {node: '>=14.0'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.4': + resolution: {integrity: sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.4': + resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.3': + resolution: {integrity: sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==} - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + '@esbuild/aix-ppc64@0.25.6': + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/android-arm64@0.25.6': + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm@0.25.6': + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-x64@0.25.6': + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/darwin-arm64@0.25.6': + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-x64@0.25.6': + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/freebsd-arm64@0.25.6': + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-x64@0.25.6': + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/linux-arm64@0.25.6': + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm@0.25.6': + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-ia32@0.25.6': + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-loong64@0.25.6': + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-mips64el@0.25.6': + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-ppc64@0.25.6': + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-riscv64@0.25.6': + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-s390x@0.25.6': + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-x64@0.25.6': + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/netbsd-arm64@0.25.6': + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-x64@0.25.6': + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/openbsd-arm64@0.25.6': + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-x64@0.25.6': + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/openharmony-arm64@0.25.6': + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.6': + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/win32-arm64@0.25.6': + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-ia32@0.25.6': + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-x64@0.25.6': + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -258,8 +261,8 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@inquirer/confirm@5.1.12': - resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==} + '@inquirer/confirm@5.1.13': + resolution: {integrity: sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -267,8 +270,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.13': - resolution: {integrity: sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA==} + '@inquirer/core@10.1.14': + resolution: {integrity: sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -297,30 +300,25 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} '@mswjs/interceptors@0.39.2': resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -343,108 +341,138 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@oxc-resolver/binding-darwin-arm64@11.3.0': - resolution: {integrity: sha512-iEvscsg+grOxFpEzJE9nBhfMRwtfy2gd7tAPASusFhISteqSOzTcNdQwo4L/jWE1wt9SQF1BXs/6QHJbldWRVQ==} + '@oxc-resolver/binding-android-arm-eabi@11.5.2': + resolution: {integrity: sha512-g3Dh0uN8E1fJAi+m5LxDU1frUz5q4ox/arqXGpEmt+u7wRXBpXnGsxDV/GFB59AmVWbQAiyhVCiM2GymkaxwwQ==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.5.2': + resolution: {integrity: sha512-bij8HIMXYGsxdxuvycpkgvTfBpj6tv5jKaZ4tcPKPJjewH5WYIaSAT4PJYlAidP/0m8jyPu5GGkslF7/qPUhAg==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.5.2': + resolution: {integrity: sha512-C2hjujTOPgyi4sgc4UL+JHlEiClTNncLUdwiilMnwjiEcxSe7ubBmeZRENUd9bx8P9DbS1ApaBjwv13ZngrZRw==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@11.3.0': - resolution: {integrity: sha512-dalUsxrsnZ69esao4qiIL0clK5d9qaRJVr+v+Bn4yGMk5o0B8eQP5lVzv6MiW5czQJpIO648CtsIXi0RLC7r7Q==} + '@oxc-resolver/binding-darwin-x64@11.5.2': + resolution: {integrity: sha512-Llf2qMBzs4PdbnrA7s3tVjW7MXnjUXepfqQkEXM2klxIggcbtbIESe3KupYHoo0Q0p6hLHwWoadyM32Ho2hLzA==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@11.3.0': - resolution: {integrity: sha512-g3jirS9hGMeKvSgTWujiRpSXtBcIYj0545sY0XIkG37mCP4oIh94/ykrR60JuN8YjUSfYc+7UV6We5dP8+fzJQ==} + '@oxc-resolver/binding-freebsd-x64@11.5.2': + resolution: {integrity: sha512-dKCHhqgKW3eqnJBlgLC03qoDSVeZSZJVcSVpyomu0XrrNha3wVyv6aJjN7A8HnjUCqJDibbZfTtD3/gnsm30eQ==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@11.3.0': - resolution: {integrity: sha512-KO2key+SCiCJTyq8IFzl0WjonqtFPR0HLWTY8GnMENjBhY9o8P8LrNQ1rJVamRMMqFpCkOlKo4VAj2jMf6wqDQ==} + '@oxc-resolver/binding-linux-arm-gnueabihf@11.5.2': + resolution: {integrity: sha512-AMV4MbHdUvwA6oBLk90/gPo3gPMZl9+DHeas8BxRdq/uX1BFQ05s+mhy9ATGElGQsRVVOPya9qczOdb8eAlM6w==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.5.2': + resolution: {integrity: sha512-hTCkii4HwQushiD3L86cefvojTY6OSDzcrQZHVaUmrtkL0OQnRT9qUff83lJIQhb94rjaEfQsgUdVl1bvuUK/Q==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@11.3.0': - resolution: {integrity: sha512-nyAukSnWeA9K7Dot/52G1zvZiJAj3guW2AbiqDGv5awtEitOpBrppGsIbMli3sNU/tXOKnX5HJn43s/3ciYEgA==} + '@oxc-resolver/binding-linux-arm64-gnu@11.5.2': + resolution: {integrity: sha512-EXkMvem90Pdw0bw0TlOhAHFAGLopb1LaVwsxF+iSc/zQtuR62kl2jGMQRvsW4NHaF+nUN29H8IYQDzox4gxsRw==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-arm64-musl@11.3.0': - resolution: {integrity: sha512-Aj2GAqX6vuUmTNZjvz10d2DMdzmEdrT3Oh1ac/+WE16rsnhD8liieLVM9ss/9jfiybHq/et3TsdBusdfG2BImA==} + '@oxc-resolver/binding-linux-arm64-musl@11.5.2': + resolution: {integrity: sha512-UvA2QZB73XPXmFweDRyXyUchN1YnEx+cca7a/ojdhT+stDe0WKMK32y27oabWokJJsZZOd+W40dD7sxjzx7K/g==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-riscv64-gnu@11.3.0': - resolution: {integrity: sha512-rkdVhNkMzwpGV94o5Q+AdUNPlhEm38r/mAQpbvIQrWO59XQAM6OpVqi7W0Y45wwSbeFAoPdOwWCEZC6USREkZw==} + '@oxc-resolver/binding-linux-ppc64-gnu@11.5.2': + resolution: {integrity: sha512-0rllGQIAmeb+vAtmco0PnTzqlMs0DQs+QvHu/8AQAmgrlKBZDJJmRvLqMv6EXgTrLlWxoM0o9oNf7mZ0tEenUQ==} + cpu: [ppc64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.5.2': + resolution: {integrity: sha512-kfE5ALnGsxEyz/e6lZbNUyPjZwTIuExTVJLVzjT/RjvaltSZ6J0u/6/CKsVFD3t686yqse1fnXuydUsgAFmuXg==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-musl@11.5.2': + resolution: {integrity: sha512-O6lbEl+heEd3QS2GOwm+iDGMqEWA18X/b9JNodzEHe2TJeOJAV/5xJ7jQTGA2seoy6/REhW744O35DyPFxZ2aQ==} cpu: [riscv64] os: [linux] - '@oxc-resolver/binding-linux-s390x-gnu@11.3.0': - resolution: {integrity: sha512-NAOvR5pgPV1o7C9KwEUSmPQ+bxQOBKRXlQPRfcaCb0pZe/rhKqps/T3UCOKqVTp0dUwdCIcM11Ybs/wp6tzWbQ==} + '@oxc-resolver/binding-linux-s390x-gnu@11.5.2': + resolution: {integrity: sha512-6ZASmeqVq+xEQZz/EH+U4j1hPeqVQ8Eo58oYrt9FGJhseowAh6TAOHXe80HAJH6HQTcws1fhS/A7I4hm6NOgZA==} cpu: [s390x] os: [linux] - '@oxc-resolver/binding-linux-x64-gnu@11.3.0': - resolution: {integrity: sha512-rqfo/XwsVj/OW1LPaQiaTyOEPD+pp7CX9rIrnUDfa4DWA4GUpRSlH+9VXX/zYt3lbNaWayWvy0dTwZ59cQTUgQ==} + '@oxc-resolver/binding-linux-x64-gnu@11.5.2': + resolution: {integrity: sha512-MYTtU3sKGZfvOYVpUfFHFcxLGOI8WN5BIQeWgNnNDEBHasthEDnyeNYpj6QbLd3XMz84gGA1G+mKMm/lVUF6hA==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-linux-x64-musl@11.3.0': - resolution: {integrity: sha512-td0T/dunQrv4Yq3OcwYeOorJDt/kmG1/69D0tvPeZ6HhErG/fRPWKOSpKKlg5scMKEbII7qBJO0Msdc5MzWTBw==} + '@oxc-resolver/binding-linux-x64-musl@11.5.2': + resolution: {integrity: sha512-7u1ANU1jkDUbC5ZxGXWDs0OLuUvV3DzqHUI+g41wHdz0iLoVSJ7rR+hl/crHIm4PpFkYbpU+joRslM5OLxeKlw==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-wasm32-wasi@11.3.0': - resolution: {integrity: sha512-bpzvfpPmjMJ6D9I2htHU8M087D/rruubcCJOG/3cjLeHtGxsucEP8i8nazigWydLsZqU3cEkPSJwUJENI2/Pyg==} + '@oxc-resolver/binding-wasm32-wasi@11.5.2': + resolution: {integrity: sha512-2tOsCVH+THg9b9h6MiTymTrveSUWAOaQGj2CPQ4XJncxECsZY6MfxKLul+XsW4KLpstE89KBemRIQi6Il0Twew==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@11.3.0': - resolution: {integrity: sha512-pmwT5jVufkLWEAxEKDWKlB2hHDRNS3TAYGjzyezAMGPx9qvI3rYIikZsUozyCYhp1TlTgxBB70R9Ma2vXQ6vVw==} + '@oxc-resolver/binding-win32-arm64-msvc@11.5.2': + resolution: {integrity: sha512-NmpFIoT86wD2cNAweoEMLKZ4aaGzbYzmeMcYK65Ml9PbH53YXe5XZOXdzVExLKGJ3Rorf055n/67pRRvpIm/sQ==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@11.3.0': - resolution: {integrity: sha512-QvgzwCpoSpDTjFC/7pGPFGZDWRr52pOfTbuWfPwTQH+Jo/iCrQmh1Q8Yg81eED7dnPjdivDlXoM0iMgBz1gDBg==} + '@oxc-resolver/binding-win32-ia32-msvc@11.5.2': + resolution: {integrity: sha512-1EwjnPP5sEKdQl4+3edw+8xMZ79qk7iPXOJRUtdE0jLEdlFmzpnLBfsz54G7mOiQvnc6uR8YePBQb1iCRnysNA==} + cpu: [ia32] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.5.2': + resolution: {integrity: sha512-eB8eV8SdO+OpbJJ3dvTgSPOsDsW7SJp+ih5WIBWt7pWMlVbQyjBwDgTI8gGTqg2iwdEEUVqlfivEEs22hKnxRw==} cpu: [x64] os: [win32] - '@oxlint/darwin-arm64@1.4.0': - resolution: {integrity: sha512-G3UsDnZpykvQ5GDzDCAhgBMwM6SzbQyH1If/oH5e/CutUC7sq/QTY8a2l1Hu7liK/euvKiZtM3C/cKdUKy1DNw==} + '@oxlint/darwin-arm64@1.8.0': + resolution: {integrity: sha512-1juYJF1xqRNkswzDSN1V44NoZ+O2Mkc9LjbkDB/UErb8dxTqFhCZC3CQR6Em55/tys1FtajXgK3B+ykWnY9HNQ==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@1.4.0': - resolution: {integrity: sha512-4AgFOkf88iG/nH/bR0i6WV/SKap2ZvBwxvZ9TvrF4Cxag3bVBViy36DgoZXr7AloEybtXZ0IRdrQEJstHkwbtg==} + '@oxlint/darwin-x64@1.8.0': + resolution: {integrity: sha512-5b7J/XE2eGhx3+vw6IFuuL0BbIF3wRzo4SWHVXN9rO3WYq2YpoHToY4C5WMWb8toVZcoJlx4Y1lq3IO2V78zTg==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@1.4.0': - resolution: {integrity: sha512-9qZarfKyq6v56GhcN0IyejQsmv8GiSi+lJjjXQ/uaa50JrY4/2+i63uRJceUT7SBZbCj1PHvgZuqN+QXov6dWg==} + '@oxlint/linux-arm64-gnu@1.8.0': + resolution: {integrity: sha512-pzfk9IZBbYuIYn4sbT//Vox8B8e8hOZPkIQnNAdzhpGtRjV4NYOgNL5/h2QZC+ecmxl8H+Gi9WV6dyKjFrBtcw==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@1.4.0': - resolution: {integrity: sha512-Nfbvqi+o5wU/ZPOYUpM+QMzT6Or8Mog89IUsKRJBBmIPUvcwQhyCKp8B4CZswNJyXisJ3gZ3kdCaaKgnsLln4Q==} + '@oxlint/linux-arm64-musl@1.8.0': + resolution: {integrity: sha512-6rpaeAG271wbUNM+WeJhdvJDDMwfoenm7rPY304dxnC+fcuR8Q0LSv09dGeNWrsqjjZuDP9R10qR154nysBxFg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@1.4.0': - resolution: {integrity: sha512-z/71xdZpvudjZsaEDk+EJxEzDIcyCaKbvUtGjAfKv60jLuP83bDHD0VD8GI8FSPjhlLpDPmrbcXWbT690Q7NAA==} + '@oxlint/linux-x64-gnu@1.8.0': + resolution: {integrity: sha512-qPEF8tKMu+63b58gPfwU3KyJf2z9KyorbrC0yGXFHQLzRPEtrh6bAjf+AzCs3n8WhDR1K6jPgcPT4Sp8bahCyQ==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@1.4.0': - resolution: {integrity: sha512-D6C165X6/hjZ1yi2mNttzeihjL3IoW0s612VNyfW6KrV/lesSaIFTXqII3ThOOQezGTDhpz4xudemcv0g7iFlg==} + '@oxlint/linux-x64-musl@1.8.0': + resolution: {integrity: sha512-JyErk/LsLg/tA3XkHhU8VIxahOdq56L99mbpMFGLTkOQgtnhY2MDAYULVgOuFFX3v6Q02o4mpIR/SwW/tRnZlg==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@1.4.0': - resolution: {integrity: sha512-wFa7ywGt0jnuukynANm5k/D189YwrQKHIdNgBjBsTvvJZNxGzVy8Q5dwsG0qwWS6RkVh9CMUpOTccPsKBdGHkQ==} + '@oxlint/win32-arm64@1.8.0': + resolution: {integrity: sha512-QvhtDAU9bBdC2m5xO+ibKyMG4KZR44wB0vDbQ5YkQxJiuXrlleHLyz0+saFzVYQ/Fvc0QgIRTIwiVz9dzxidVw==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@1.4.0': - resolution: {integrity: sha512-B3ezHSEzQL6Enszl9i9wLwIhWt3lkJ5x2xmgvJ77RrzoaF46QciGvs4TeGU++kPRe5DKpRGlgsruig7GLNUaSg==} + '@oxlint/win32-x64@1.8.0': + resolution: {integrity: sha512-veXJXgF905UOvuxtmvzM328b4Itm8Fyu+lUq4PagXOmyRScevaVUXq6++ui3A/Gxd8yo0SHspHCbYkpuvJkXqQ==} cpu: [x64] os: [win32] @@ -452,108 +480,108 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.41.1': - resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} + '@rollup/rollup-android-arm-eabi@4.45.1': + resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.41.1': - resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==} + '@rollup/rollup-android-arm64@4.45.1': + resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.41.1': - resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==} + '@rollup/rollup-darwin-arm64@4.45.1': + resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.41.1': - resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==} + '@rollup/rollup-darwin-x64@4.45.1': + resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.41.1': - resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==} + '@rollup/rollup-freebsd-arm64@4.45.1': + resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.41.1': - resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==} + '@rollup/rollup-freebsd-x64@4.45.1': + resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': - resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.41.1': - resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.41.1': - resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} + '@rollup/rollup-linux-arm64-gnu@4.45.1': + resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.41.1': - resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} + '@rollup/rollup-linux-arm64-musl@4.45.1': + resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': - resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': - resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.41.1': - resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.41.1': - resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} + '@rollup/rollup-linux-riscv64-musl@4.45.1': + resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.41.1': - resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} + '@rollup/rollup-linux-s390x-gnu@4.45.1': + resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.41.1': - resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} + '@rollup/rollup-linux-x64-gnu@4.45.1': + resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.41.1': - resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} + '@rollup/rollup-linux-x64-musl@4.45.1': + resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.41.1': - resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} + '@rollup/rollup-win32-arm64-msvc@4.45.1': + resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.41.1': - resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==} + '@rollup/rollup-win32-ia32-msvc@4.45.1': + resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.41.1': - resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==} + '@rollup/rollup-win32-x64-msvc@4.45.1': + resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} cpu: [x64] os: [win32] - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.0': + resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -564,17 +592,17 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/jsonld@1.5.15': resolution: {integrity: sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==} - '@types/node@22.15.34': - resolution: {integrity: sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==} + '@types/node@22.16.5': + resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} - '@types/statuses@2.0.5': - resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -668,9 +696,9 @@ packages: canonicalize@1.0.8: resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} @@ -728,8 +756,8 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.25.6: + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} engines: {node: '>=18'} hasBin: true @@ -744,8 +772,8 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} fast-glob@3.3.3: @@ -758,8 +786,8 @@ packages: fd-package-json@2.0.0: resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} - fdir@6.4.5: - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -882,8 +910,8 @@ packages: resolution: {integrity: sha512-ZTL2Q9aus/aycsxw/pB5ffWcbrr/219DTlJ/TTvTOMWMcxkUCCMxdvJ/6zrWGNACVdlO2ySad5EShC8d52IwEA==} engines: {node: '>=16.14.0'} - knip@5.61.3: - resolution: {integrity: sha512-8iSz8i8ufIjuUwUKzEwye7ROAW0RzCze7T770bUiz0PKL+SSwbs4RS32fjMztLwcOzSsNPlXdUAeqmkdzXxJ1Q==} + knip@5.62.0: + resolution: {integrity: sha512-hfTUVzmrMNMT1khlZfAYmBABeehwWUUrizLQoLamoRhSFkygsGIXWx31kaWKBgEaIVL77T3Uz7IxGvSw+CvQ6A==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -946,8 +974,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.10.2: - resolution: {integrity: sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==} + msw@2.10.4: + resolution: {integrity: sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -965,6 +993,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-postinstall@0.3.0: + resolution: {integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -980,11 +1013,11 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - oxc-resolver@11.3.0: - resolution: {integrity: sha512-Hd7oMoyyJrZyjNxXAhawmn+JQxUY0W3yK3kmoVZGJpY09g82ijRKKkqjKIbgly6Hc4WCfeb+2dQIKe7jO8j7/Q==} + oxc-resolver@11.5.2: + resolution: {integrity: sha512-mYkOsrgvlm4OLPCgSR2XCMkJ203PwSOASxzHYzW7Kz3GXONVbe2VTpgwL/yBo0igSUwlZWTUKEbRJLscJ6N5QQ==} - oxlint@1.4.0: - resolution: {integrity: sha512-whu+lxSL9GCzO+b+X++tk81d5UoCeAq+plU5DWSoLqmwjCV0OyDkRlfGPDhbBHXm2z6GrepvF0d0Sb66z6SG4A==} + oxlint@1.8.0: + resolution: {integrity: sha512-kDC3zuplBM35GbrZ/3rRdDrZ6unpUkUjM8P3VSbyLgaYh2xZeg0TLLDbYALNAUyChVonNafXzgHZmbwnHfrTRg==} engines: {node: '>=8.*'} hasBin: true @@ -1005,8 +1038,8 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} picocolors@1.1.1: @@ -1016,12 +1049,12 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - postcss@8.5.4: - resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} prettier@3.6.2: @@ -1057,8 +1090,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.41.1: - resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} + rollup@4.45.1: + resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1088,8 +1121,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - smol-toml@1.4.0: - resolution: {integrity: sha512-IMxaDA/58wBvkvX77ykQ6e9r6fjs8xbxpz8bMCyVQ/fEFWbA5uJrnaVwDuhLrrANGdd7apRyTPDBvI893Bxu9g==} + smol-toml@1.4.1: + resolution: {integrity: sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==} engines: {node: '>= 18'} source-map-js@1.2.1: @@ -1099,8 +1132,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} std-env@3.9.0: @@ -1205,19 +1238,19 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.0.4: + resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -1322,31 +1355,31 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} - zod-validation-error@3.5.2: - resolution: {integrity: sha512-mdi7YOLtram5dzJ5aDtm1AG9+mxRma1iaMrZdYIpFO7epdKBUwLHIxTF8CPDeCQ828zAXYtizrKlEJAtzgfgrw==} + zod-validation-error@3.5.3: + resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} engines: {node: '>=18.0.0'} peerDependencies: - zod: ^3.25.0 + zod: ^3.25.0 || ^4.0.0 - zod@3.25.67: - resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} - '@babel/parser@7.27.5': + '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.28.1 - '@babel/types@7.27.6': + '@babel/types@7.28.1': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -1359,7 +1392,7 @@ snapshots: '@bundled-es-modules/statuses@1.0.1': dependencies: - statuses: 2.0.1 + statuses: 2.0.2 '@bundled-es-modules/tough-cookie@0.1.6': dependencies: @@ -1374,110 +1407,113 @@ snapshots: transitivePeerDependencies: - web-streams-polyfill - '@emnapi/core@1.4.3': + '@emnapi/core@1.4.4': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.0.3 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.4': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.0.3': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.5': + '@esbuild/aix-ppc64@0.25.6': + optional: true + + '@esbuild/android-arm64@0.25.6': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/android-arm@0.25.6': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-x64@0.25.6': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/darwin-arm64@0.25.6': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/darwin-x64@0.25.6': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/freebsd-arm64@0.25.6': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/freebsd-x64@0.25.6': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/linux-arm64@0.25.6': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/linux-arm@0.25.6': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/linux-ia32@0.25.6': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/linux-loong64@0.25.6': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/linux-mips64el@0.25.6': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/linux-ppc64@0.25.6': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/linux-riscv64@0.25.6': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/linux-s390x@0.25.6': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/linux-x64@0.25.6': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/netbsd-arm64@0.25.6': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/netbsd-x64@0.25.6': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/openbsd-arm64@0.25.6': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/openbsd-x64@0.25.6': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/openharmony-arm64@0.25.6': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/sunos-x64@0.25.6': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/win32-arm64@0.25.6': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/win32-ia32@0.25.6': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/win32-x64@0.25.6': optional: true '@fastify/busboy@2.1.1': {} - '@inquirer/confirm@5.1.12(@types/node@22.15.34)': + '@inquirer/confirm@5.1.13(@types/node@22.16.5)': dependencies: - '@inquirer/core': 10.1.13(@types/node@22.15.34) - '@inquirer/type': 3.0.7(@types/node@22.15.34) + '@inquirer/core': 10.1.14(@types/node@22.16.5) + '@inquirer/type': 3.0.7(@types/node@22.16.5) optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 22.16.5 - '@inquirer/core@10.1.13(@types/node@22.15.34)': + '@inquirer/core@10.1.14(@types/node@22.16.5)': dependencies: '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@22.15.34) + '@inquirer/type': 3.0.7(@types/node@22.16.5) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -1485,13 +1521,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 22.16.5 '@inquirer/figures@1.0.12': {} - '@inquirer/type@3.0.7(@types/node@22.15.34)': + '@inquirer/type@3.0.7(@types/node@22.16.5)': optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 22.16.5 '@isaacs/cliui@8.0.2': dependencies: @@ -1504,22 +1540,19 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@mswjs/interceptors@0.39.2': dependencies: @@ -1530,11 +1563,11 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@0.2.11': + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.4.4 + '@emnapi/runtime': 1.4.4 + '@tybys/wasm-util': 0.10.0 optional: true '@nodelib/fs.scandir@2.1.5': @@ -1558,135 +1591,153 @@ snapshots: '@open-draft/until@2.1.0': {} - '@oxc-resolver/binding-darwin-arm64@11.3.0': + '@oxc-resolver/binding-android-arm-eabi@11.5.2': + optional: true + + '@oxc-resolver/binding-android-arm64@11.5.2': optional: true - '@oxc-resolver/binding-darwin-x64@11.3.0': + '@oxc-resolver/binding-darwin-arm64@11.5.2': optional: true - '@oxc-resolver/binding-freebsd-x64@11.3.0': + '@oxc-resolver/binding-darwin-x64@11.5.2': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@11.3.0': + '@oxc-resolver/binding-freebsd-x64@11.5.2': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@11.3.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@11.5.2': optional: true - '@oxc-resolver/binding-linux-arm64-musl@11.3.0': + '@oxc-resolver/binding-linux-arm-musleabihf@11.5.2': optional: true - '@oxc-resolver/binding-linux-riscv64-gnu@11.3.0': + '@oxc-resolver/binding-linux-arm64-gnu@11.5.2': optional: true - '@oxc-resolver/binding-linux-s390x-gnu@11.3.0': + '@oxc-resolver/binding-linux-arm64-musl@11.5.2': optional: true - '@oxc-resolver/binding-linux-x64-gnu@11.3.0': + '@oxc-resolver/binding-linux-ppc64-gnu@11.5.2': optional: true - '@oxc-resolver/binding-linux-x64-musl@11.3.0': + '@oxc-resolver/binding-linux-riscv64-gnu@11.5.2': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.3.0': + '@oxc-resolver/binding-linux-riscv64-musl@11.5.2': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.5.2': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.5.2': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.5.2': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.5.2': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.5.2': optional: true - '@oxc-resolver/binding-win32-arm64-msvc@11.3.0': + '@oxc-resolver/binding-win32-ia32-msvc@11.5.2': optional: true - '@oxc-resolver/binding-win32-x64-msvc@11.3.0': + '@oxc-resolver/binding-win32-x64-msvc@11.5.2': optional: true - '@oxlint/darwin-arm64@1.4.0': + '@oxlint/darwin-arm64@1.8.0': optional: true - '@oxlint/darwin-x64@1.4.0': + '@oxlint/darwin-x64@1.8.0': optional: true - '@oxlint/linux-arm64-gnu@1.4.0': + '@oxlint/linux-arm64-gnu@1.8.0': optional: true - '@oxlint/linux-arm64-musl@1.4.0': + '@oxlint/linux-arm64-musl@1.8.0': optional: true - '@oxlint/linux-x64-gnu@1.4.0': + '@oxlint/linux-x64-gnu@1.8.0': optional: true - '@oxlint/linux-x64-musl@1.4.0': + '@oxlint/linux-x64-musl@1.8.0': optional: true - '@oxlint/win32-arm64@1.4.0': + '@oxlint/win32-arm64@1.8.0': optional: true - '@oxlint/win32-x64@1.4.0': + '@oxlint/win32-x64@1.8.0': optional: true '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.41.1': + '@rollup/rollup-android-arm-eabi@4.45.1': optional: true - '@rollup/rollup-android-arm64@4.41.1': + '@rollup/rollup-android-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-arm64@4.41.1': + '@rollup/rollup-darwin-arm64@4.45.1': optional: true - '@rollup/rollup-darwin-x64@4.41.1': + '@rollup/rollup-darwin-x64@4.45.1': optional: true - '@rollup/rollup-freebsd-arm64@4.41.1': + '@rollup/rollup-freebsd-arm64@4.45.1': optional: true - '@rollup/rollup-freebsd-x64@4.41.1': + '@rollup/rollup-freebsd-x64@4.45.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.41.1': + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.41.1': + '@rollup/rollup-linux-arm-musleabihf@4.45.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.41.1': + '@rollup/rollup-linux-arm64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.41.1': + '@rollup/rollup-linux-arm64-musl@4.45.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.41.1': + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.41.1': + '@rollup/rollup-linux-riscv64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.41.1': + '@rollup/rollup-linux-riscv64-musl@4.45.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.41.1': + '@rollup/rollup-linux-s390x-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.41.1': + '@rollup/rollup-linux-x64-gnu@4.45.1': optional: true - '@rollup/rollup-linux-x64-musl@4.41.1': + '@rollup/rollup-linux-x64-musl@4.45.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.41.1': + '@rollup/rollup-win32-arm64-msvc@4.45.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.41.1': + '@rollup/rollup-win32-ia32-msvc@4.45.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.41.1': + '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 optional: true @@ -1699,19 +1750,19 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} '@types/jsonld@1.5.15': {} - '@types/node@22.15.34': + '@types/node@22.16.5': dependencies: undici-types: 6.21.0 - '@types/statuses@2.0.5': {} + '@types/statuses@2.0.6': {} '@types/tough-cookie@4.0.5': {} - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@22.15.34)(jiti@2.4.2)(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3)))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3)))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -1726,7 +1777,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@22.15.34)(jiti@2.4.2)(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3)) + vitest: 3.2.4(@types/node@22.16.5)(jiti@2.4.2)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3)) transitivePeerDependencies: - supports-color @@ -1735,17 +1786,17 @@ snapshots: '@types/chai': 5.2.2 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.0 + chai: 5.2.1 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.34)(jiti@2.4.2))': + '@vitest/mocker@3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(vite@7.0.4(@types/node@22.16.5)(jiti@2.4.2))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.10.2(@types/node@22.15.34)(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.34)(jiti@2.4.2) + msw: 2.10.4(@types/node@22.16.5)(typescript@5.8.3) + vite: 7.0.4(@types/node@22.16.5)(jiti@2.4.2) '@vitest/pretty-format@3.2.4': dependencies: @@ -1797,7 +1848,7 @@ snapshots: ast-v8-to-istanbul@0.3.3: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 estree-walker: 3.0.3 js-tokens: 9.0.1 @@ -1815,13 +1866,13 @@ snapshots: canonicalize@1.0.8: {} - chai@5.2.0: + chai@5.2.1: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 loupe: 3.1.4 - pathval: 2.0.0 + pathval: 2.0.1 check-error@2.1.1: {} @@ -1863,43 +1914,44 @@ snapshots: es-module-lexer@1.7.0: {} - esbuild@0.25.5: + esbuild@0.25.6: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 + '@esbuild/aix-ppc64': 0.25.6 + '@esbuild/android-arm': 0.25.6 + '@esbuild/android-arm64': 0.25.6 + '@esbuild/android-x64': 0.25.6 + '@esbuild/darwin-arm64': 0.25.6 + '@esbuild/darwin-x64': 0.25.6 + '@esbuild/freebsd-arm64': 0.25.6 + '@esbuild/freebsd-x64': 0.25.6 + '@esbuild/linux-arm': 0.25.6 + '@esbuild/linux-arm64': 0.25.6 + '@esbuild/linux-ia32': 0.25.6 + '@esbuild/linux-loong64': 0.25.6 + '@esbuild/linux-mips64el': 0.25.6 + '@esbuild/linux-ppc64': 0.25.6 + '@esbuild/linux-riscv64': 0.25.6 + '@esbuild/linux-s390x': 0.25.6 + '@esbuild/linux-x64': 0.25.6 + '@esbuild/netbsd-arm64': 0.25.6 + '@esbuild/netbsd-x64': 0.25.6 + '@esbuild/openbsd-arm64': 0.25.6 + '@esbuild/openbsd-x64': 0.25.6 + '@esbuild/openharmony-arm64': 0.25.6 + '@esbuild/sunos-x64': 0.25.6 + '@esbuild/win32-arm64': 0.25.6 + '@esbuild/win32-ia32': 0.25.6 + '@esbuild/win32-x64': 0.25.6 escalade@3.2.0: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 event-target-shim@5.0.1: {} - expect-type@1.2.1: {} + expect-type@1.2.2: {} fast-glob@3.3.3: dependencies: @@ -1917,9 +1969,9 @@ snapshots: dependencies: walk-up-path: 4.0.0 - fdir@6.4.5(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fetch-blob@3.2.0: dependencies: @@ -1995,7 +2047,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -2031,23 +2083,23 @@ snapshots: jsonref@9.0.0: {} - knip@5.61.3(@types/node@22.15.34)(typescript@5.8.3): + knip@5.62.0(@types/node@22.16.5)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 - '@types/node': 22.15.34 + '@types/node': 22.16.5 fast-glob: 3.3.3 formatly: 0.2.4 jiti: 2.4.2 js-yaml: 4.1.0 minimist: 1.2.8 - oxc-resolver: 11.3.0 + oxc-resolver: 11.5.2 picocolors: 1.1.1 - picomatch: 4.0.2 - smol-toml: 1.4.0 + picomatch: 4.0.3 + smol-toml: 1.4.1 strip-json-comments: 5.0.2 typescript: 5.8.3 - zod: 3.25.67 - zod-validation-error: 3.5.2(zod@3.25.67) + zod: 3.25.76 + zod-validation-error: 3.5.3(zod@3.25.76) ky-universal@0.11.0(ky@0.33.3)(web-streams-polyfill@3.3.3): dependencies: @@ -2069,12 +2121,12 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 magicast@0.3.5: dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 source-map-js: 1.2.1 make-dir@4.0.0: @@ -2098,17 +2150,17 @@ snapshots: ms@2.1.3: {} - msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3): + msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.12(@types/node@22.15.34) + '@inquirer/confirm': 5.1.13(@types/node@22.16.5) '@mswjs/interceptors': 0.39.2 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 - '@types/statuses': 2.0.5 + '@types/statuses': 2.0.6 graphql: 16.11.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 @@ -2127,6 +2179,8 @@ snapshots: nanoid@3.3.11: {} + napi-postinstall@0.3.0: {} + node-domexception@1.0.0: {} node-fetch@3.3.2: @@ -2139,32 +2193,40 @@ snapshots: outvariant@1.4.3: {} - oxc-resolver@11.3.0: + oxc-resolver@11.5.2: + dependencies: + napi-postinstall: 0.3.0 optionalDependencies: - '@oxc-resolver/binding-darwin-arm64': 11.3.0 - '@oxc-resolver/binding-darwin-x64': 11.3.0 - '@oxc-resolver/binding-freebsd-x64': 11.3.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 11.3.0 - '@oxc-resolver/binding-linux-arm64-gnu': 11.3.0 - '@oxc-resolver/binding-linux-arm64-musl': 11.3.0 - '@oxc-resolver/binding-linux-riscv64-gnu': 11.3.0 - '@oxc-resolver/binding-linux-s390x-gnu': 11.3.0 - '@oxc-resolver/binding-linux-x64-gnu': 11.3.0 - '@oxc-resolver/binding-linux-x64-musl': 11.3.0 - '@oxc-resolver/binding-wasm32-wasi': 11.3.0 - '@oxc-resolver/binding-win32-arm64-msvc': 11.3.0 - '@oxc-resolver/binding-win32-x64-msvc': 11.3.0 - - oxlint@1.4.0: + '@oxc-resolver/binding-android-arm-eabi': 11.5.2 + '@oxc-resolver/binding-android-arm64': 11.5.2 + '@oxc-resolver/binding-darwin-arm64': 11.5.2 + '@oxc-resolver/binding-darwin-x64': 11.5.2 + '@oxc-resolver/binding-freebsd-x64': 11.5.2 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.5.2 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.5.2 + '@oxc-resolver/binding-linux-arm64-gnu': 11.5.2 + '@oxc-resolver/binding-linux-arm64-musl': 11.5.2 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.5.2 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.5.2 + '@oxc-resolver/binding-linux-riscv64-musl': 11.5.2 + '@oxc-resolver/binding-linux-s390x-gnu': 11.5.2 + '@oxc-resolver/binding-linux-x64-gnu': 11.5.2 + '@oxc-resolver/binding-linux-x64-musl': 11.5.2 + '@oxc-resolver/binding-wasm32-wasi': 11.5.2 + '@oxc-resolver/binding-win32-arm64-msvc': 11.5.2 + '@oxc-resolver/binding-win32-ia32-msvc': 11.5.2 + '@oxc-resolver/binding-win32-x64-msvc': 11.5.2 + + oxlint@1.8.0: optionalDependencies: - '@oxlint/darwin-arm64': 1.4.0 - '@oxlint/darwin-x64': 1.4.0 - '@oxlint/linux-arm64-gnu': 1.4.0 - '@oxlint/linux-arm64-musl': 1.4.0 - '@oxlint/linux-x64-gnu': 1.4.0 - '@oxlint/linux-x64-musl': 1.4.0 - '@oxlint/win32-arm64': 1.4.0 - '@oxlint/win32-x64': 1.4.0 + '@oxlint/darwin-arm64': 1.8.0 + '@oxlint/darwin-x64': 1.8.0 + '@oxlint/linux-arm64-gnu': 1.8.0 + '@oxlint/linux-arm64-musl': 1.8.0 + '@oxlint/linux-x64-gnu': 1.8.0 + '@oxlint/linux-x64-musl': 1.8.0 + '@oxlint/win32-arm64': 1.8.0 + '@oxlint/win32-x64': 1.8.0 package-json-from-dist@1.0.1: {} @@ -2179,15 +2241,15 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} - postcss@8.5.4: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -2215,30 +2277,30 @@ snapshots: reusify@1.1.0: {} - rollup@4.41.1: + rollup@4.45.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.41.1 - '@rollup/rollup-android-arm64': 4.41.1 - '@rollup/rollup-darwin-arm64': 4.41.1 - '@rollup/rollup-darwin-x64': 4.41.1 - '@rollup/rollup-freebsd-arm64': 4.41.1 - '@rollup/rollup-freebsd-x64': 4.41.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.1 - '@rollup/rollup-linux-arm-musleabihf': 4.41.1 - '@rollup/rollup-linux-arm64-gnu': 4.41.1 - '@rollup/rollup-linux-arm64-musl': 4.41.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1 - '@rollup/rollup-linux-riscv64-gnu': 4.41.1 - '@rollup/rollup-linux-riscv64-musl': 4.41.1 - '@rollup/rollup-linux-s390x-gnu': 4.41.1 - '@rollup/rollup-linux-x64-gnu': 4.41.1 - '@rollup/rollup-linux-x64-musl': 4.41.1 - '@rollup/rollup-win32-arm64-msvc': 4.41.1 - '@rollup/rollup-win32-ia32-msvc': 4.41.1 - '@rollup/rollup-win32-x64-msvc': 4.41.1 + '@rollup/rollup-android-arm-eabi': 4.45.1 + '@rollup/rollup-android-arm64': 4.45.1 + '@rollup/rollup-darwin-arm64': 4.45.1 + '@rollup/rollup-darwin-x64': 4.45.1 + '@rollup/rollup-freebsd-arm64': 4.45.1 + '@rollup/rollup-freebsd-x64': 4.45.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 + '@rollup/rollup-linux-arm-musleabihf': 4.45.1 + '@rollup/rollup-linux-arm64-gnu': 4.45.1 + '@rollup/rollup-linux-arm64-musl': 4.45.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-musl': 4.45.1 + '@rollup/rollup-linux-s390x-gnu': 4.45.1 + '@rollup/rollup-linux-x64-gnu': 4.45.1 + '@rollup/rollup-linux-x64-musl': 4.45.1 + '@rollup/rollup-win32-arm64-msvc': 4.45.1 + '@rollup/rollup-win32-ia32-msvc': 4.45.1 + '@rollup/rollup-win32-x64-msvc': 4.45.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -2259,13 +2321,13 @@ snapshots: signal-exit@4.1.0: {} - smol-toml@1.4.0: {} + smol-toml@1.4.1: {} source-map-js@1.2.1: {} stackback@0.0.2: {} - statuses@2.0.1: {} + statuses@2.0.2: {} std-env@3.9.0: {} @@ -2313,8 +2375,8 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.5(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 tinypool@1.1.1: {} @@ -2355,13 +2417,13 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - vite-node@3.2.4(@types/node@22.15.34)(jiti@2.4.2): + vite-node@3.2.4(@types/node@22.16.5)(jiti@2.4.2): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.34)(jiti@2.4.2) + vite: 7.0.4(@types/node@22.16.5)(jiti@2.4.2) transitivePeerDependencies: - '@types/node' - jiti @@ -2376,46 +2438,46 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@22.15.34)(jiti@2.4.2): + vite@7.0.4(@types/node@22.16.5)(jiti@2.4.2): dependencies: - esbuild: 0.25.5 - fdir: 6.4.5(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.4 - rollup: 4.41.1 + esbuild: 0.25.6 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.45.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 22.16.5 fsevents: 2.3.3 jiti: 2.4.2 - vitest@3.2.4(@types/node@22.15.34)(jiti@2.4.2)(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3)): + vitest@3.2.4(@types/node@22.16.5)(jiti@2.4.2)(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3)): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.10.2(@types/node@22.15.34)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.34)(jiti@2.4.2)) + '@vitest/mocker': 3.2.4(msw@2.10.4(@types/node@22.16.5)(typescript@5.8.3))(vite@7.0.4(@types/node@22.16.5)(jiti@2.4.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.0 + chai: 5.2.1 debug: 4.4.1 - expect-type: 1.2.1 + expect-type: 1.2.2 magic-string: 0.30.17 pathe: 2.0.3 - picomatch: 4.0.2 + picomatch: 4.0.3 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.34)(jiti@2.4.2) - vite-node: 3.2.4(@types/node@22.15.34)(jiti@2.4.2) + vite: 7.0.4(@types/node@22.16.5)(jiti@2.4.2) + vite-node: 3.2.4(@types/node@22.16.5)(jiti@2.4.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.15.34 + '@types/node': 22.16.5 transitivePeerDependencies: - jiti - less @@ -2479,8 +2541,8 @@ snapshots: yoctocolors-cjs@2.1.2: {} - zod-validation-error@3.5.2(zod@3.25.67): + zod-validation-error@3.5.3(zod@3.25.76): dependencies: - zod: 3.25.67 + zod: 3.25.76 - zod@3.25.67: {} + zod@3.25.76: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4fde764..615a9e0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,7 +4,4 @@ packages: onlyBuiltDependencies: - esbuild - msw - - unrs-resolver - -overrides: - brace-expansion: ^2.0.2 \ No newline at end of file + - oxc-resolver diff --git a/src/Api.ts b/src/core/Api.ts similarity index 88% rename from src/Api.ts rename to src/core/Api.ts index 776fc5d..8b693a7 100644 --- a/src/Api.ts +++ b/src/core/Api.ts @@ -1,6 +1,6 @@ -import { assignSealed } from "./utils/assignSealed.js"; import type { Resource } from "./Resource.js"; import type { Nullable } from "./types.js"; +import { assignSealed } from "./utils/index.js"; export interface ApiOptions extends Nullable<{ diff --git a/src/Field.ts b/src/core/Field.ts similarity index 88% rename from src/Field.ts rename to src/core/Field.ts index d951cf8..b28c927 100644 --- a/src/Field.ts +++ b/src/core/Field.ts @@ -1,6 +1,6 @@ -import { assignSealed } from "./utils/assignSealed.js"; import type { Resource } from "./Resource.js"; import type { Nullable } from "./types.js"; +import { assignSealed } from "./utils/index.js"; export type FieldType = | "string" @@ -28,7 +28,8 @@ export type FieldType = | "url" | "uuid" | "password" - | string; + // oxlint-disable-next-line ban-types + | ({} & string); // Allow any other string type export interface FieldOptions extends Nullable<{ diff --git a/src/Operation.ts b/src/core/Operation.ts similarity index 91% rename from src/Operation.ts rename to src/core/Operation.ts index 42ca87e..456b0da 100644 --- a/src/Operation.ts +++ b/src/core/Operation.ts @@ -1,5 +1,5 @@ -import { assignSealed } from "./utils/assignSealed.js"; import type { Nullable } from "./types.js"; +import { assignSealed } from "./utils/index.js"; export type OperationType = "show" | "edit" | "delete" | "list" | "create"; diff --git a/src/Parameter.ts b/src/core/Parameter.ts similarity index 100% rename from src/Parameter.ts rename to src/core/Parameter.ts diff --git a/src/Resource.ts b/src/core/Resource.ts similarity index 93% rename from src/Resource.ts rename to src/core/Resource.ts index a074c27..84addfd 100644 --- a/src/Resource.ts +++ b/src/core/Resource.ts @@ -1,8 +1,8 @@ -import { assignSealed } from "./utils/assignSealed.js"; import type { Field } from "./Field.js"; import type { Operation } from "./Operation.js"; import type { Parameter } from "./Parameter.js"; import type { Nullable } from "./types.js"; +import { assignSealed } from "./utils/index.js"; export interface ResourceOptions extends Nullable<{ diff --git a/src/core/index.ts b/src/core/index.ts new file mode 100644 index 0000000..2145921 --- /dev/null +++ b/src/core/index.ts @@ -0,0 +1,5 @@ +export * from "./Api.js"; +export * from "./Field.js"; +export * from "./Operation.js"; +export * from "./Parameter.js"; +export * from "./Resource.js"; diff --git a/src/types.ts b/src/core/types.ts similarity index 100% rename from src/types.ts rename to src/core/types.ts diff --git a/src/utils/assignSealed.ts b/src/core/utils/assignSealed.ts similarity index 100% rename from src/utils/assignSealed.ts rename to src/core/utils/assignSealed.ts diff --git a/src/core/utils/buildEnumObject.ts b/src/core/utils/buildEnumObject.ts new file mode 100644 index 0000000..ce422f4 --- /dev/null +++ b/src/core/utils/buildEnumObject.ts @@ -0,0 +1,25 @@ +import { humanize } from "inflection"; + +/** + * Builds an object from an array of enum values. + * The keys of the object are the humanized versions of the enum values, + * and the values are the original enum values. + * + * @param enumArray - An array of enum values. + * @returns An object mapping humanized enum names to their original values, or null if the input is empty. + */ +export function buildEnumObject( + enumArray: any[] | undefined, +): Record | null { + if (!enumArray || enumArray.length === 0) { + return null; + } + + return Object.fromEntries( + // Object.values is used because the array is annotated: it contains the __meta symbol used by jsonref. + Object.values(enumArray).map((enumValue: string | number) => [ + typeof enumValue === "string" ? humanize(enumValue) : enumValue, + enumValue, + ]), + ); +} diff --git a/src/utils/getResources.ts b/src/core/utils/getResourcePaths.ts similarity index 87% rename from src/utils/getResources.ts rename to src/core/utils/getResourcePaths.ts index 6eb2be8..b3c37a0 100644 --- a/src/utils/getResources.ts +++ b/src/core/utils/getResourcePaths.ts @@ -1,6 +1,6 @@ import type { OpenAPIV2, OpenAPIV3 } from "openapi-types"; -export default function getResources( +export function getResourcePaths( paths: OpenAPIV2.PathsObject | OpenAPIV3.PathsObject, ): string[] { return [ diff --git a/src/utils/getResources.test.ts b/src/core/utils/getResources.test.ts similarity index 85% rename from src/utils/getResources.test.ts rename to src/core/utils/getResources.test.ts index ccba18a..ede1a51 100644 --- a/src/utils/getResources.test.ts +++ b/src/core/utils/getResources.test.ts @@ -1,5 +1,5 @@ import { expect, test } from "vitest"; -import getResourcePaths from "./getResources.js"; +import { getResourcePaths } from "./index.js"; test("should get resource paths", () => { const paths = { diff --git a/src/core/utils/getType.ts b/src/core/utils/getType.ts new file mode 100644 index 0000000..e573d0d --- /dev/null +++ b/src/core/utils/getType.ts @@ -0,0 +1,26 @@ +import { camelize } from "inflection"; +import type { FieldType } from "../Field.js"; + +/** + * Returns the corresponding FieldType for a given OpenAPI type and optional format. + * + * If a format is provided, it will map certain formats (e.g., "int32", "int64") to "integer". + * Otherwise, it will camelize the format string. If no format is provided, it returns the OpenAPI type. + * + * @param openApiType - The OpenAPI type string. + * @param format - An optional format string. + * @returns The mapped FieldType. + */ +export function getType(openApiType: string, format?: string): FieldType { + if (format) { + switch (format) { + case "int32": + case "int64": + return "integer"; + default: + return camelize(format.replace("-", "_"), true); + } + } + + return openApiType; +} diff --git a/src/core/utils/index.ts b/src/core/utils/index.ts new file mode 100644 index 0000000..2cdc456 --- /dev/null +++ b/src/core/utils/index.ts @@ -0,0 +1,6 @@ +export { assignSealed } from "./assignSealed.js"; +export { buildEnumObject } from "./buildEnumObject.js"; +export { getResourcePaths } from "./getResourcePaths.js"; +export { getType } from "./getType.js"; +export { parsedJsonReplacer } from "./parsedJsonReplacer.js"; +export { removeTrailingSlash } from "./removeTrailingSlash.js"; diff --git a/src/utils/parsedJsonReplacer.ts b/src/core/utils/parsedJsonReplacer.ts similarity index 89% rename from src/utils/parsedJsonReplacer.ts rename to src/core/utils/parsedJsonReplacer.ts index b7199a1..1d5afeb 100644 --- a/src/utils/parsedJsonReplacer.ts +++ b/src/core/utils/parsedJsonReplacer.ts @@ -5,7 +5,7 @@ interface ResourceValue { type ParsedJsonReplacerResult = ResourceValue | string | null; -export default function parsedJsonReplacer( +export function parsedJsonReplacer( key: string, value: null | ResourceValue, ): ParsedJsonReplacerResult { diff --git a/src/core/utils/removeTrailingSlash.ts b/src/core/utils/removeTrailingSlash.ts new file mode 100644 index 0000000..9130d31 --- /dev/null +++ b/src/core/utils/removeTrailingSlash.ts @@ -0,0 +1,7 @@ +export function removeTrailingSlash(url: string): string { + if (url.endsWith("/")) { + return url.slice(0, -1); + } + + return url; +} diff --git a/src/graphql/parseGraphQl.ts b/src/graphql/parseGraphQl.ts index 575840d..6385f6c 100644 --- a/src/graphql/parseGraphQl.ts +++ b/src/graphql/parseGraphQl.ts @@ -1,13 +1,11 @@ -import { getIntrospectionQuery } from "graphql/utilities/index.js"; -import fetchQuery from "./fetchQuery.js"; -import { Api } from "../Api.js"; -import { Field } from "../Field.js"; -import { Resource } from "../Resource.js"; import type { IntrospectionObjectType, IntrospectionOutputTypeRef, IntrospectionQuery, } from "graphql/utilities"; +import { getIntrospectionQuery } from "graphql/utilities/index.js"; +import { Api, Field, Resource } from "../core/index.js"; +import fetchQuery from "./fetchQuery.js"; function getRangeFromGraphQlType(type: IntrospectionOutputTypeRef): string { if (type.kind === "NON_NULL") { diff --git a/src/hydra/fetchJsonLd.test.ts b/src/hydra/fetchJsonLd.test.ts index 6c39cef..962aed4 100644 --- a/src/hydra/fetchJsonLd.test.ts +++ b/src/hydra/fetchJsonLd.test.ts @@ -1,4 +1,4 @@ -import { http, HttpResponse } from "msw"; +import { http } from "msw/core/http"; import { assert, expect, test } from "vitest"; import { server } from "../../vitest.setup.js"; import fetchJsonLd from "./fetchJsonLd.js"; @@ -14,7 +14,7 @@ const httpResponse = { test("fetch a JSON-LD document", async () => { server.use( http.get("http://localhost/foo.jsonld", () => - HttpResponse.json(httpResponse, { + Response.json(httpResponse, { headers: { "Content-Type": "application/ld+json" }, status: 200, statusText: "OK", @@ -36,7 +36,7 @@ test("fetch a non JSON-LD document", async () => { http.get( "http://localhost/foo.jsonld", () => - new HttpResponse(`Hello`, { + new Response(`Hello`, { headers: { "Content-Type": "text/html" }, status: 200, statusText: "OK", @@ -53,7 +53,7 @@ test("fetch a non JSON-LD document", async () => { test("fetch an error with Content-Type application/ld+json", async () => { server.use( http.get("http://localhost/foo.jsonld", () => - HttpResponse.json(httpResponse, { + Response.json(httpResponse, { status: 500, statusText: "Internal Server Error", headers: { "Content-Type": "application/ld+json" }, @@ -75,7 +75,7 @@ test("fetch an error with Content-Type application/ld+json", async () => { test("fetch an error with Content-Type application/error+json", async () => { server.use( http.get("http://localhost/foo.jsonld", () => - HttpResponse.json(httpResponse, { + Response.json(httpResponse, { status: 400, statusText: "Bad Request", headers: { "Content-Type": "application/error+json" }, @@ -99,7 +99,7 @@ test("fetch an empty document", async () => { http.get( "http://localhost/foo.jsonld", () => - new HttpResponse(``, { + new Response(null, { status: 204, statusText: "No Content", headers: { "Content-Type": "text/html" }, diff --git a/src/hydra/fetchJsonLd.ts b/src/hydra/fetchJsonLd.ts index 4df5c39..0419f86 100644 --- a/src/hydra/fetchJsonLd.ts +++ b/src/hydra/fetchJsonLd.ts @@ -1,5 +1,5 @@ import type { Document, JsonLd, RemoteDocument } from "jsonld/jsonld-spec.js"; -import type { RequestInitExtended } from "../types.js"; +import type { RequestInitExtended } from "../core/types.js"; const jsonLdMimeType = "application/ld+json"; const jsonProblemMimeType = "application/problem+json"; diff --git a/src/hydra/fetchResource.ts b/src/hydra/fetchResource.ts index edf0d8c..2c19927 100644 --- a/src/hydra/fetchResource.ts +++ b/src/hydra/fetchResource.ts @@ -1,6 +1,6 @@ +import type { RequestInitExtended } from "../core/types.js"; import fetchJsonLd from "./fetchJsonLd.js"; import type { IriTemplateMapping } from "./types.js"; -import type { RequestInitExtended } from "../types.js"; export default async function fetchResource( resourceUrl: string, diff --git a/src/hydra/getParameters.ts b/src/hydra/getParameters.ts index eee599c..54b8818 100644 --- a/src/hydra/getParameters.ts +++ b/src/hydra/getParameters.ts @@ -1,7 +1,7 @@ -import { Parameter } from "../Parameter.js"; +import type { Resource } from "../core/index.js"; +import { Parameter } from "../core/index.js"; +import type { RequestInitExtended } from "../core/types.js"; import fetchResource from "./fetchResource.js"; -import type { Resource } from "../Resource.js"; -import type { RequestInitExtended } from "../types.js"; export default async function getParameters( resource: Resource, diff --git a/src/hydra/getType.ts b/src/hydra/getType.ts index 9486dea..a7b1fb9 100644 --- a/src/hydra/getType.ts +++ b/src/hydra/getType.ts @@ -1,4 +1,4 @@ -import type { FieldType } from "../Field.js"; +import type { FieldType } from "../core/index.js"; function getType(id: string, range: string): FieldType { switch (id) { diff --git a/src/hydra/parseHydraDocumentation.test.ts b/src/hydra/parseHydraDocumentation.test.ts index 3a6627b..0ae257d 100644 --- a/src/hydra/parseHydraDocumentation.test.ts +++ b/src/hydra/parseHydraDocumentation.test.ts @@ -1,8 +1,8 @@ -import parseHydraDocumentation from "./parseHydraDocumentation.js"; -import parsedJsonReplacer from "../utils/parsedJsonReplacer.js"; -import { server } from "../../vitest.setup.js"; -import { http, HttpResponse } from "msw"; +import { http } from "msw/core/http"; import { assert, expect, test, vi } from "vitest"; +import { server } from "../../vitest.setup.js"; +import { parsedJsonReplacer } from "../core/utils/index.js"; +import parseHydraDocumentation from "./parseHydraDocumentation.js"; const entrypoint = { "@context": { @@ -1299,10 +1299,8 @@ const init = { test("parse a Hydra documentation", async () => { server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); const fetchSpy = vi.spyOn(globalThis, "fetch"); @@ -1332,10 +1330,8 @@ function getHeaders(): Headers { test("parse a Hydra documentation using dynamic headers", async () => { server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); const fetchSpy = vi.spyOn(globalThis, "fetch"); @@ -1362,10 +1358,8 @@ test("parse a Hydra documentation using dynamic headers", async () => { test("parse a Hydra documentation (http://localhost/)", async () => { server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); const data = await parseHydraDocumentation("http://localhost/"); @@ -1393,9 +1387,7 @@ test("parse a Hydra documentation without authorization", async () => { }; server.use( - http.get("http://localhost", () => - HttpResponse.json(expectedResponse, init), - ), + http.get("http://localhost", () => Response.json(expectedResponse, init)), ); const promise = parseHydraDocumentation("http://localhost"); await expect(promise).rejects.toMatchObject({ @@ -1434,10 +1426,8 @@ test('Parse entrypoint without "@type" key', async () => { }; server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( @@ -1482,10 +1472,8 @@ test('Parse entrypoint class without "supportedClass" key', async () => { }; server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( @@ -1546,10 +1534,8 @@ test('Parse entrypoint class without "supportedProperty" key', async () => { 'The entrypoint definition has no "http://www.w3.org/ns/hydra/core#supportedProperty" key or it is not an array.'; server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), ); await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( @@ -1561,11 +1547,8 @@ test("Invalid docs JSON", async () => { const docs = `{foo,}`; server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get( - "http://localhost/docs.jsonld", - () => new HttpResponse(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => new Response(docs, init)), ); const promise = parseHydraDocumentation("http://localhost/"); @@ -1578,7 +1561,7 @@ test("Invalid docs JSON", async () => { test("Invalid entrypoint JSON", async () => { const entrypoint = `{foo,}`; server.use( - http.get("http://localhost", () => new HttpResponse(entrypoint, init)), + http.get("http://localhost", () => new Response(entrypoint, init)), ); const promise = parseHydraDocumentation("http://localhost/"); @@ -1591,12 +1574,10 @@ test("Invalid entrypoint JSON", async () => { test("Resource parameters can be retrieved", async () => { const fetchSpy = vi.spyOn(globalThis, "fetch"); server.use( - http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), - http.get("http://localhost/docs.jsonld", () => - HttpResponse.json(docs, init), - ), + http.get("http://localhost", () => Response.json(entrypoint, init)), + http.get("http://localhost/docs.jsonld", () => Response.json(docs, init)), http.get("http://localhost/books", () => - HttpResponse.json(resourceCollectionWithParameters, init), + Response.json(resourceCollectionWithParameters, init), ), ); diff --git a/src/hydra/parseHydraDocumentation.ts b/src/hydra/parseHydraDocumentation.ts index 321097d..0b5508c 100644 --- a/src/hydra/parseHydraDocumentation.ts +++ b/src/hydra/parseHydraDocumentation.ts @@ -1,21 +1,18 @@ -import jsonld from "jsonld"; -import { Api } from "../Api.js"; -import { Field } from "../Field.js"; -import { Resource } from "../Resource.js"; -import { Operation } from "../Operation.js"; +import { expand as jsonldExpand } from "jsonld"; +import type { OperationType, Parameter } from "../core/index.js"; +import { Api, Field, Operation, Resource } from "../core/index.js"; +import type { RequestInitExtended } from "../core/types.js"; +import { removeTrailingSlash } from "../core/utils/index.js"; import fetchJsonLd from "./fetchJsonLd.js"; import getParameters from "./getParameters.js"; import getType from "./getType.js"; -import type { OperationType } from "../Operation.js"; -import type { Parameter } from "../Parameter.js"; import type { + Entrypoint, ExpandedClass, ExpandedDoc, - Entrypoint, ExpandedOperation, ExpandedRdfProperty, } from "./types.js"; -import type { RequestInitExtended } from "../types.js"; /** * Extracts the short name of a resource. @@ -128,11 +125,11 @@ async function fetchEntrypointAndDocs( const docsJsonLd = docsResponse.body; const [docs, entrypoint] = (await Promise.all([ - jsonld.expand(docsJsonLd, { + jsonldExpand(docsJsonLd, { base: docsUrl, documentLoader, }), - jsonld.expand(entrypointJsonLd, { + jsonldExpand(entrypointJsonLd, { base: entrypointUrl, documentLoader, }), @@ -157,14 +154,6 @@ async function fetchEntrypointAndDocs( } } -function removeTrailingSlash(url: string): string { - if (url.endsWith("/")) { - url = url.slice(0, -1); - } - - return url; -} - function findRelatedClass( docs: ExpandedDoc[], property: ExpandedRdfProperty, diff --git a/src/index.ts b/src/index.ts index 04161db..f4f1a66 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,4 @@ -export * from "./Api.js"; -export * from "./Field.js"; -export * from "./Operation.js"; -export * from "./Parameter.js"; -export * from "./Resource.js"; +export * from "./core/index.js"; export * from "./graphql/index.js"; export * from "./hydra/index.js"; export * from "./openapi3/index.js"; diff --git a/src/openapi3/getType.ts b/src/openapi3/getType.ts deleted file mode 100644 index 52ac48e..0000000 --- a/src/openapi3/getType.ts +++ /dev/null @@ -1,19 +0,0 @@ -import inflection from "inflection"; -import type { FieldType } from "../Field.js"; - -export default function getType( - openApiType: string, - format?: string, -): FieldType { - if (format) { - switch (format) { - case "int32": - case "int64": - return "integer"; - default: - return inflection.camelize(format.replace("-", "_"), true); - } - } - - return openApiType; -} diff --git a/src/openapi3/handleJson.test.ts b/src/openapi3/handleJson.test.ts index d53918b..25cf654 100644 --- a/src/openapi3/handleJson.test.ts +++ b/src/openapi3/handleJson.test.ts @@ -1,7 +1,7 @@ -import handleJson from "./handleJson.js"; -import parsedJsonReplacer from "../utils/parsedJsonReplacer.js"; import type { OpenAPIV3 } from "openapi-types"; import { expect, test } from "vitest"; +import { parsedJsonReplacer } from "../core/utils/index.js"; +import handleJson from "./handleJson.js"; const openApi3Definition: OpenAPIV3.Document = { openapi: "3.0.2", diff --git a/src/openapi3/handleJson.ts b/src/openapi3/handleJson.ts index 388f45b..1ed60df 100644 --- a/src/openapi3/handleJson.ts +++ b/src/openapi3/handleJson.ts @@ -1,25 +1,48 @@ -import inflection from "inflection"; +import { camelize, classify, pluralize } from "inflection"; import type { ParseOptions } from "jsonref"; import { parse } from "jsonref"; import type { OpenAPIV3 } from "openapi-types"; -import { Field } from "../Field.js"; -import type { OperationType } from "../Operation.js"; -import { Operation } from "../Operation.js"; -import { Parameter } from "../Parameter.js"; -import { Resource } from "../Resource.js"; -import getResourcePaths from "../utils/getResources.js"; +import type { OperationType } from "../core/index.js"; +import { Field, Operation, Parameter, Resource } from "../core/index.js"; +import { + buildEnumObject, + getResourcePaths, + getType, + removeTrailingSlash, +} from "../core/utils/index.js"; import type { OpenAPIV3DocumentDereferenced, OperationObjectDereferenced, SchemaObjectDereferenced, } from "./dereferencedOpenApiv3.js"; -import getType from "./getType.js"; -export function removeTrailingSlash(url: string): string { - if (url.endsWith("/")) { - return url.slice(0, -1); +/** + * Assigns relationships between resources based on their fields. + * Sets the field's `embedded` or `reference` property depending on its type. + * + * @param resources - Array of Resource objects to process. + * @returns The same array of resources with relationships assigned. + */ +function assignResourceRelationships(resources: Resource[]) { + for (const resource of resources) { + for (const field of resource.fields ?? []) { + const name = camelize(field.name).replace(/Ids?$/, ""); + + const guessedResource = resources.find( + (res) => res.title === classify(name), + ); + if (!guessedResource) { + continue; + } + field.maxCardinality = field.type === "array" ? null : 1; + if (field.type === "object" || field.arrayType === "object") { + field.embedded = guessedResource; + } else { + field.reference = guessedResource; + } + } } - return url; + return resources; } function mergeResources(resourceA: Resource, resourceB: Resource) { @@ -46,21 +69,6 @@ function mergeResources(resourceA: Resource, resourceB: Resource) { return resourceA; } -function buildEnumObject(enumArray: SchemaObjectDereferenced["enum"]) { - if (!enumArray) { - return null; - } - return Object.fromEntries( - // Object.values is used because the array is annotated: it contains the __meta symbol used by jsonref. - Object.values(enumArray).map((enumValue) => [ - typeof enumValue === "string" - ? inflection.humanize(enumValue) - : enumValue, - enumValue, - ]), - ); -} - function getArrayType(property: SchemaObjectDereferenced) { if (property.type !== "array") { return null; @@ -166,17 +174,23 @@ export default async function handleJson( throw new Error("Invalid path: " + path); } - const name = inflection.pluralize(baseName); + const name = pluralize(baseName); const url = `${removeTrailingSlash(serverUrl)}/${name}`; const pathItem = document.paths[path]; if (!pathItem) { throw new Error(); } - const title = inflection.classify(baseName); + const title = classify(baseName); - const showOperation = pathItem.get; - const editOperation = pathItem.put || pathItem.patch; + const { + get: showOperation, + put: putOperation, + patch: patchOperation, + delete: deleteOperation, + } = pathItem; + + const editOperation = putOperation || patchOperation; if (!showOperation && !editOperation) { continue; } @@ -205,12 +219,9 @@ export default async function handleJson( resource = mergeResources(showResource, editResource); } - const putOperation = pathItem.put; - const patchOperation = pathItem.patch; - const deleteOperation = pathItem.delete; const pathCollection = document.paths[`/${name}`]; - const listOperation = pathCollection && pathCollection.get; - const createOperation = pathCollection && pathCollection.post; + const { get: listOperation, post: createOperation } = pathCollection ?? {}; + resource.operations = [ ...(showOperation ? [buildOperationFromPathItem("get", "show", showOperation)] @@ -232,7 +243,7 @@ export default async function handleJson( : []), ]; - if (listOperation && listOperation.parameters) { + if (listOperation?.parameters) { resource.parameters = listOperation.parameters.map( (parameter) => new Parameter( @@ -248,25 +259,5 @@ export default async function handleJson( resources.push(resource); } - // Guess embeddeds and references from property names - for (const resource of resources) { - for (const field of resource.fields ?? []) { - const name = inflection.camelize(field.name).replace(/Ids?$/, ""); - - const guessedResource = resources.find( - (res) => res.title === inflection.classify(name), - ); - if (!guessedResource) { - continue; - } - field.maxCardinality = field.type === "array" ? null : 1; - if (field.type === "object" || field.arrayType === "object") { - field.embedded = guessedResource; - } else { - field.reference = guessedResource; - } - } - } - - return resources; + return assignResourceRelationships(resources); } diff --git a/src/openapi3/parseOpenApi3Documentation.ts b/src/openapi3/parseOpenApi3Documentation.ts index 1311ce7..42a71c4 100644 --- a/src/openapi3/parseOpenApi3Documentation.ts +++ b/src/openapi3/parseOpenApi3Documentation.ts @@ -1,8 +1,9 @@ // oxlint-disable prefer-await-to-then -import { Api } from "../Api.js"; -import handleJson, { removeTrailingSlash } from "./handleJson.js"; import type { OpenAPIV3 } from "openapi-types"; -import type { RequestInitExtended } from "../types.js"; +import { Api } from "../core/index.js"; +import type { RequestInitExtended } from "../core/types.js"; +import { removeTrailingSlash } from "../core/utils/index.js"; +import handleJson from "./handleJson.js"; export interface ParsedOpenApi3Documentation { api: Api; @@ -15,10 +16,12 @@ export default function parseOpenApi3Documentation( options: RequestInitExtended = {}, ): Promise { entrypointUrl = removeTrailingSlash(entrypointUrl); - let headers: HeadersInit | undefined = + const headersObject = typeof options.headers === "function" ? options.headers() : options.headers; - headers = new Headers(headers); - headers.append("Accept", "application/vnd.openapi+json"); + const headers = new Headers(headersObject); + if (!headers.get("Accept")?.includes("application/vnd.openapi+json")) { + headers.append("Accept", "application/vnd.openapi+json"); + } return fetch(entrypointUrl, { ...options, headers: headers }) .then((res) => Promise.all([res, res.json()])) diff --git a/src/swagger/handleJson.ts b/src/swagger/handleJson.ts index ed4fce0..4ddac7d 100644 --- a/src/swagger/handleJson.ts +++ b/src/swagger/handleJson.ts @@ -1,16 +1,12 @@ -import inflection from "inflection"; +import { classify, pluralize } from "inflection"; import type { OpenAPIV2 } from "openapi-types"; -import { Field } from "../Field.js"; -import getType from "../openapi3/getType.js"; -import { Resource } from "../Resource.js"; -import getResourcePaths from "../utils/getResources.js"; - -export function removeTrailingSlash(url: string): string { - if (url.endsWith("/")) { - return url.slice(0, -1); - } - return url; -} +import { Field, Resource } from "../core/index.js"; +import { + buildEnumObject, + getResourcePaths, + getType, + removeTrailingSlash, +} from "../core/utils/index.js"; export default function handleJson( response: OpenAPIV2.Document, @@ -25,10 +21,10 @@ export default function handleJson( throw new Error("Invalid path: " + path); } - const name = inflection.pluralize(baseName); + const name = pluralize(baseName); const url = `${removeTrailingSlash(entrypointUrl)}/${name}`; - const title = inflection.classify(baseName); + const title = classify(baseName); if (!response.definitions) { throw new Error(); // @TODO @@ -57,16 +53,7 @@ export default function handleJson( typeof property?.type === "string" ? property.type : "", property?.["format"] ?? "", ), - enum: property.enum - ? Object.fromEntries( - property.enum.map((enumValue: string | number) => [ - typeof enumValue === "string" - ? inflection.humanize(enumValue) - : enumValue, - enumValue, - ]), - ) - : null, + enum: buildEnumObject(property.enum), reference: null, embedded: null, required: requiredFields.some((value) => value === fieldName), diff --git a/src/swagger/parseSwaggerDocumentation.ts b/src/swagger/parseSwaggerDocumentation.ts index 8a994da..336c404 100644 --- a/src/swagger/parseSwaggerDocumentation.ts +++ b/src/swagger/parseSwaggerDocumentation.ts @@ -1,7 +1,8 @@ // oxlint-disable prefer-await-to-then -import { Api } from "../Api.js"; -import handleJson, { removeTrailingSlash } from "./handleJson.js"; import type { OpenAPIV2 } from "openapi-types"; +import { Api } from "../core/Api.js"; +import { removeTrailingSlash } from "../core/utils/index.js"; +import handleJson from "./handleJson.js"; export interface ParsedSwaggerDocumentation { api: Api; diff --git a/vitest.setup.ts b/vitest.setup.ts index 8eae4f2..f39e6a0 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -1,6 +1,6 @@ -import { setupServer } from "msw/node"; import type { SetupServerApi } from "msw/node"; -import { beforeAll, afterEach, afterAll } from "vitest"; +import { setupServer } from "msw/node"; +import { afterAll, afterEach, beforeAll } from "vitest"; export const server: SetupServerApi = setupServer();