diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..35a347f --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,108 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "categories": { + "correctness": "error", + "nursery": "error", + "pedantic": "error", + "perf": "error", + "restriction": "error", + "style": "error", + "suspicious": "error" + }, + "env": { + "es2022": true, + "shared-node-browser": true + }, + "plugins": [ + "typescript", + "unicorn", + "vitest", + "import", + "eslint", + "oxc", + "promise" + ], + "rules": { + "@typescript-eslint/no-empty-object-type": [ + "error", + { + "allowInterfaces": "with-single-extends" + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "off", + "eslint/curly": "error", + "eslint/max-depth": "off", + "eslint/max-lines": "off", + "eslint/max-lines-per-function": "off", + "eslint/max-nested-callbacks": "off", + "eslint/no-duplicate-imports": "off", + "func-style": [ + "error", + "declaration", + { + "overrides": { + "namedExports": "declaration" + } + } + ], + "import/exports-last": "off", + "import/group-exports": "off", + "import/max-dependencies": "off", + "import/no-anonymous-default-export": [ + "error", + { + "allowCallExpression": true + } + ], + "import/no-default-export": "off", + "max-params": "off", + "no-async-await": "off", + "no-console": "off", + "no-continue": "off", + "no-magic-numbers": "off", + "no-nested-ternary": "off", + "no-optional-chaining": "off", + "no-ternary": "off", + "no-undefined": "off", + "oxc/no-barrel-file": "off", + "oxc/no-rest-spread-properties": "off", + "promise/catch-or-return": "off", + "sort-imports": "off", + "sort-keys": "off", + "sort-vars": "off", + "typescript/consistent-indexed-object-style": "error", + "typescript/explicit-function-return-type": "off", + "typescript/no-empty-interface": "off", + "unicorn/error-message": "off", + "unicorn/filename-case": [ + "error", + { + "cases": { + "camelCase": true, + "kebabCase": false, + "pascalCase": true, + "snakeCase": false + } + } + ], + "unicorn/no-nested-ternary": "off", + "unicorn/no-null": "off", + "unicorn/number-literal-case": "off", + "vitest/consistent-test-it": [ + "error", + { + "fn": "test", + "withinDescribe": "test" + } + ], + "vitest/max-expects": "off", + "vitest/no-hooks": "off", + "vitest/prefer-lowercase-title": "off", + "vitest/prefer-strict-equal": "off", + "vitest/prefer-to-be-falsy": "off", + "vitest/prefer-to-be-truthy": "off", + "vitest/require-top-level-describe": "off", + "yoda": "error" + } +} diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index e66d437..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,23 +0,0 @@ -import eslint from "@eslint/js"; -import tseslint from "typescript-eslint"; -import eslintConfigPrettier from "eslint-config-prettier"; -import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; - -export default tseslint.config( - eslint.configs.recommended, - tseslint.configs.recommended, - eslintConfigPrettier, - eslintPluginPrettierRecommended, - { - rules: { - "@typescript-eslint/no-unsafe-declaration-merging": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-object-type": [ - "error", - { - allowInterfaces: "with-single-extends", - }, - ], - }, - }, -); diff --git a/package.json b/package.json index 56bbc8c..789991d 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,8 @@ ], "scripts": { "build": "rm -rf lib && tsc --project tsconfig.build.json", - "lint": "eslint src", - "lint:fix": "eslint src --fix", + "lint": "oxlint", + "lint:fix": "oxlint --fix", "test": "vitest", "typecheck": "tsc --noEmit", "test:coverage": "vitest --coverage" @@ -56,26 +56,17 @@ "lodash.get": "^4.4.0" }, "devDependencies": { - "@eslint/compat": "^1.2.5", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "^9.19.0", "@types/inflection": "^1.13.0", "@types/jsonld": "^1.5.0", "@types/lodash.get": "^4.4.0", "@types/node": "^22.0.0", "@vitest/coverage-v8": "3.2.2", - "eslint": "^9.0.0", - "eslint-config-prettier": "^10.0.0", - "eslint-import-resolver-typescript": "^3.5.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^5.0.0", - "eslint-watch": "^8.0.0", "globals": "^15.14.0", "msw": "^2.9.0", "openapi-types": "^12.0.0", + "oxlint": "^1.1.0", "prettier": "^3.0.0", "typescript": "^5.7.0", - "typescript-eslint": "^8.22.0", "vitest": "^3.2.2" }, "packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f64ddf4..0e02052 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,15 +24,6 @@ importers: specifier: ^4.4.0 version: 4.4.2 devDependencies: - '@eslint/compat': - specifier: ^1.2.5 - version: 1.2.9(eslint@9.28.0) - '@eslint/eslintrc': - specifier: ^3.2.0 - version: 3.3.1 - '@eslint/js': - specifier: ^9.19.0 - version: 9.28.0 '@types/inflection': specifier: ^1.13.0 version: 1.13.2 @@ -48,24 +39,6 @@ importers: '@vitest/coverage-v8': specifier: 3.2.2 version: 3.2.2(vitest@3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3))) - eslint: - specifier: ^9.0.0 - version: 9.28.0 - eslint-config-prettier: - specifier: ^10.0.0 - version: 10.1.5(eslint@9.28.0) - eslint-import-resolver-typescript: - specifier: ^3.5.1 - version: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0) - eslint-plugin-import: - specifier: ^2.26.0 - version: 2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0) - eslint-plugin-prettier: - specifier: ^5.0.0 - version: 5.4.1(eslint-config-prettier@10.1.5(eslint@9.28.0))(eslint@9.28.0)(prettier@3.5.3) - eslint-watch: - specifier: ^8.0.0 - version: 8.0.0(eslint@9.28.0) globals: specifier: ^15.14.0 version: 15.15.0 @@ -75,15 +48,15 @@ importers: openapi-types: specifier: ^12.0.0 version: 12.1.3 + oxlint: + specifier: ^1.1.0 + version: 1.1.0 prettier: specifier: ^3.0.0 version: 3.5.3 typescript: specifier: ^5.7.0 version: 5.8.3 - typescript-eslint: - specifier: ^8.22.0 - version: 8.33.0(eslint@9.28.0)(typescript@5.8.3) vitest: specifier: ^3.2.2 version: 3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3)) @@ -128,15 +101,6 @@ 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/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - '@esbuild/aix-ppc64@0.25.5': resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} @@ -287,77 +251,10 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/compat@1.2.9': - resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^9.10.0 - peerDependenciesMeta: - eslint: - optional: true - - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.28.0': - resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - '@inquirer/confirm@5.1.12': resolution: {integrity: sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg==} engines: {node: '>=18'} @@ -419,25 +316,6 @@ packages: resolution: {integrity: sha512-Jkb27iSn7JPdkqlTqKfhncFfnEZsIJVYxsFbUSWEkxdIPdsyngrhoDBk0/BGD2FQcRH99vlRrkHpNTyKqI+0/w==} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@0.2.10': - resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -447,14 +325,50 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@oxlint/darwin-arm64@1.1.0': + resolution: {integrity: sha512-sSnR3SOxIU/QfaqXrcQ0UVUkzJO0bcInQ7dMhHa102gVAgWjp1fBeMVCM0adEY0UNmEXrRkgD/rQtQgn9YAU+w==} + cpu: [arm64] + os: [darwin] + + '@oxlint/darwin-x64@1.1.0': + resolution: {integrity: sha512-Jvd3fHnzY2OYbmsg9NSGPoBkGViDGHSFnBKyJQ9LOIw7lxAyQBG2Quxc3GYPFR/f9OYho9C3p4+dIaAJfKhnsw==} + cpu: [x64] + os: [darwin] + + '@oxlint/linux-arm64-gnu@1.1.0': + resolution: {integrity: sha512-MgW4iskOdXuoR+wDXIJUfbdnTg2eo2FnQRaD6ZqhnDTDa7LnV+06rp/Cg3aGj2X9jSEcKDv/bMbYQuot7WRs6Q==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-arm64-musl@1.1.0': + resolution: {integrity: sha512-a+pkEKmDRdrW+y0gtZ/m68ElVW2VZgATGbMxDgDYFpdiMx9Y0pUPwTMZ2EX/17Aslop4c1BiDSFDK7aEBxKR2g==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-x64-gnu@1.1.0': + resolution: {integrity: sha512-wNBsXCKVZMvUTcFitrV1wTsdhUAv8l+XQxHxciZ2SO6dpNnWEb2YCxSAIOXeyzBLdO4pIODYcSy38CvGue7TwA==} + cpu: [x64] + os: [linux] + + '@oxlint/linux-x64-musl@1.1.0': + resolution: {integrity: sha512-pZD0lt6A5j2Wp70fgIYk4GoPfKTZ8mHWamWIpKFT7aSkFkiOi6nhLWDFvMEIHWRTK3LgkWUNcnWPp4brvin4wQ==} + cpu: [x64] + os: [linux] + + '@oxlint/win32-arm64@1.1.0': + resolution: {integrity: sha512-rT6uXQvE80+B+L04HJf30uF26426FPI9i9DAY2AxBUhrpNwhqkDEhQdd9ilFWVC7SSbpHgAs50lo+ImSAAkHPQ==} + cpu: [arm64] + os: [win32] + + '@oxlint/win32-x64@1.1.0': + resolution: {integrity: sha512-x6r5yvM3wEty93Bx0NuNK+kutUyS/K55itkUrxdExoK6GcmVDboGGuhju9HyU2cM/IWLEWO8RHcXSyaxr9GR5g==} + cpu: [x64] + os: [win32] + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rollup/rollup-android-arm-eabi@4.41.1': resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} cpu: [arm] @@ -555,12 +469,6 @@ packages: cpu: [x64] os: [win32] - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -576,12 +484,6 @@ packages: '@types/inflection@1.13.2': resolution: {integrity: sha512-VxXY8dNLrxn7nDvsud77K60uD3a9RSmKfa0k/N/zvP2G55R5/8DSO5Ferz3mQdlAo8jPnpQLilCx9rABdPHSVg==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/jsonld@1.5.15': resolution: {integrity: sha512-PlAFPZjL+AuGYmwlqwKEL0IMP8M8RexH0NIPGfCVWSQ041H2rR/8OlyZSD7KsCVoN8vCfWdtWDBxX8yBVP+xow==} @@ -600,148 +502,6 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@typescript-eslint/eslint-plugin@8.33.0': - resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.33.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.33.0': - resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.33.0': - resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.33.0': - resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.33.0': - resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.33.0': - resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.33.0': - resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.33.0': - resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.33.0': - resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.33.0': - resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-darwin-arm64@1.7.8': - resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.7.8': - resolution: {integrity: sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.7.8': - resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': - resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': - resolution: {integrity: sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': - resolution: {integrity: sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.7.8': - resolution: {integrity: sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': - resolution: {integrity: sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': - resolution: {integrity: sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': - resolution: {integrity: sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': - resolution: {integrity: sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.7.8': - resolution: {integrity: sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.7.8': - resolution: {integrity: sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.7.8': - resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': - resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': - resolution: {integrity: sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.7.8': - resolution: {integrity: sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==} - cpu: [x64] - os: [win32] - '@vitest/coverage-v8@3.2.2': resolution: {integrity: sha512-RVAi5xnqedSKvaoQyCTWvncMk8eYZcTTOsLK7XmnfOEvdGP/O/upA0/MA8Ss+Qs++mj0GcSRi/whR0S5iBPpTQ==} peerDependencies: @@ -784,19 +544,6 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -817,37 +564,6 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -855,51 +571,16 @@ packages: ast-v8-to-istanbul@0.3.3: resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - canonicalize@1.0.8: resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==} @@ -907,18 +588,10 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -934,9 +607,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -949,26 +619,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -982,25 +632,6 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1010,37 +641,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -1050,160 +653,17 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-prettier@5.4.1: - resolution: {integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-watch@8.0.0: - resolution: {integrity: sha512-piws/uE4gkZdz1pwkaEFx+kSWvoGnVX8IegFRrE1NUvlXjtU0rg7KhT1QDj/NzhAwbiLEfdRHWz5q738R4zDKA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - peerDependencies: - eslint: '>=8 <9.0.0' - - eslint@9.28.0: - resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - expect-type@1.2.1: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.5: resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} peerDependencies: @@ -1216,29 +676,6 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -1252,256 +689,43 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globals@15.15.0: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.11.0: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - inflection@3.0.2: resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==} engines: {node: '>=18.0.0'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1527,23 +751,6 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - jsonld@8.3.3: resolution: {integrity: sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==} engines: {node: '>=14'} @@ -1552,12 +759,6 @@ packages: resolution: {integrity: sha512-ZTL2Q9aus/aycsxw/pB5ffWcbrr/219DTlJ/TTvTOMWMcxkUCCMxdvJ/6zrWGNACVdlO2ySad5EShC8d52IwEA==} engines: {node: '>=16.14.0'} - keypress@0.2.1: - resolution: {integrity: sha512-HjorDJFNhnM4SicvaUXac0X77NiskggxJdesG72+O5zBKpSqKFCrqmndKVqpu3pFqkla0St6uGk8Ju0sCurrmg==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - ky-universal@0.11.0: resolution: {integrity: sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==} engines: {node: '>=14.16'} @@ -1572,37 +773,10 @@ packages: resolution: {integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==} engines: {node: '>=14.16'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. - lodash.isempty@4.4.0: - resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.unionwith@4.6.0: - resolution: {integrity: sha512-Hk8otPCkVM4UxRoft3E5dAREwExyXci6iVPCibHIEiG7neb9KAdWHYS75MYpVTvxDrnpp7WCJNZ84vAk7j7tVA==} - loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} @@ -1623,35 +797,10 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1678,14 +827,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -1695,82 +836,24 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + oxlint@1.1.0: + resolution: {integrity: sha512-OVNpaoaQCUHHhCv5sYMPJ7Ts5k7ziw0QteH1gBSwF3elf/8GAew2Uh/0S7HsU1iGtjhlFy80+A8nwIb3Tq6m1w==} + engines: {node: '>=8.*'} + hasBin: true package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -1788,30 +871,14 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - picomatch@4.0.2: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - postcss@8.5.4: resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} @@ -1827,25 +894,10 @@ packages: querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - rdf-canonize@3.4.0: resolution: {integrity: sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==} engines: {node: '>=12'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -1853,63 +905,16 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.41.1: resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -1921,28 +926,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1951,9 +937,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1964,10 +947,6 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -1979,18 +958,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1999,30 +966,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} - engines: {node: ^14.18.0 || >=16.0.0} - test-exclude@7.0.1: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} @@ -2049,30 +996,10 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -2081,38 +1008,11 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.33.0: - resolution: {integrity: sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -2124,12 +1024,6 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - unrs-resolver@1.7.8: - resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -2210,22 +1104,6 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2236,10 +1114,6 @@ packages: engines: {node: '>=8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -2267,10 +1141,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} @@ -2318,22 +1188,6 @@ snapshots: transitivePeerDependencies: - web-streams-polyfill - '@emnapi/core@1.4.3': - dependencies: - '@emnapi/wasi-threads': 1.0.2 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.0.2': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.25.5': optional: true @@ -2409,69 +1263,8 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)': - dependencies: - eslint: 9.28.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/compat@1.2.9(eslint@9.28.0)': - optionalDependencies: - eslint: 9.28.0 - - '@eslint/config-array@0.20.0': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.2.2': {} - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.1 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.28.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.3.1': - dependencies: - '@eslint/core': 0.14.0 - levn: 0.4.1 - '@fastify/busboy@2.1.1': {} - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.3': {} - '@inquirer/confirm@5.1.12(@types/node@22.15.29)': dependencies: '@inquirer/core': 10.1.13(@types/node@22.15.29) @@ -2535,41 +1328,42 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@0.2.10': + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@oxlint/darwin-arm64@1.1.0': optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@oxlint/darwin-x64@1.1.0': + optional: true - '@nodelib/fs.stat@2.0.5': {} + '@oxlint/linux-arm64-gnu@1.1.0': + optional: true - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + '@oxlint/linux-arm64-musl@1.1.0': + optional: true - '@nolyfill/is-core-module@1.0.39': {} + '@oxlint/linux-x64-gnu@1.1.0': + optional: true - '@open-draft/deferred-promise@2.2.0': {} + '@oxlint/linux-x64-musl@1.1.0': + optional: true - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 + '@oxlint/win32-arm64@1.1.0': + optional: true - '@open-draft/until@2.1.0': {} + '@oxlint/win32-x64@1.1.0': + optional: true '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.4': {} - '@rollup/rollup-android-arm-eabi@4.41.1': optional: true @@ -2630,13 +1424,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.41.1': optional: true - '@rtsao/scc@1.1.0': {} - - '@tybys/wasm-util@0.9.0': - dependencies: - tslib: 2.8.1 - optional: true - '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 @@ -2649,10 +1436,6 @@ snapshots: '@types/inflection@1.13.2': {} - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - '@types/jsonld@1.5.15': {} '@types/lodash.get@4.4.9': @@ -2669,171 +1452,26 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/type-utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.0 - eslint: 9.28.0 - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.33.0 - debug: 4.4.1 - eslint: 9.28.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.33.0(typescript@5.8.3)': + '@vitest/coverage-v8@3.2.2(vitest@3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3)))': dependencies: - '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.33.0 + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.3 debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.9.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3)) transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/scope-manager@8.33.0': - dependencies: - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/visitor-keys': 8.33.0 - - '@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)': - dependencies: - typescript: 5.8.3 - - '@typescript-eslint/type-utils@8.33.0(eslint@9.28.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.28.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.33.0': {} - - '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': - dependencies: - '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3) - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/visitor-keys': 8.33.0 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.33.0(eslint@9.28.0)(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) - '@typescript-eslint/scope-manager': 8.33.0 - '@typescript-eslint/types': 8.33.0 - '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) - eslint: 9.28.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.33.0': - dependencies: - '@typescript-eslint/types': 8.33.0 - eslint-visitor-keys: 4.2.0 - - '@unrs/resolver-binding-darwin-arm64@1.7.8': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.7.8': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.7.8': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.7.8': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.7.8': - dependencies: - '@napi-rs/wasm-runtime': 0.2.10 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.7.8': - optional: true - - '@vitest/coverage-v8@3.2.2(vitest@3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3)))': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.3 - debug: 4.4.1 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.2(@types/node@22.15.29)(msw@2.9.0(@types/node@22.15.29)(typescript@5.8.3)) - transitivePeerDependencies: - - supports-color - - '@vitest/expect@3.2.2': + '@vitest/expect@3.2.2': dependencies: '@types/chai': 5.2.2 '@vitest/spy': 3.2.2 @@ -2879,19 +1517,6 @@ snapshots: dependencies: event-target-shim: 5.0.1 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -2906,61 +1531,6 @@ snapshots: ansi-styles@6.2.1: {} - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@2.0.1: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - assertion-error@2.0.1: {} ast-v8-to-istanbul@0.3.3: @@ -2969,50 +1539,14 @@ snapshots: estree-walker: 3.0.3 js-tokens: 9.0.1 - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - balanced-match@1.0.2: {} - binary-extensions@2.3.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - cac@6.7.14: {} - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - canonicalize@1.0.8: {} chai@5.2.0: @@ -3023,25 +1557,8 @@ snapshots: loupe: 3.1.3 pathval: 2.0.0 - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - check-error@2.1.1: {} - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - cli-width@4.1.0: {} cliui@8.0.1: @@ -3056,8 +1573,6 @@ snapshots: color-name@1.1.4: {} - concat-map@0.0.1: {} - cookie@0.7.2: {} cross-spawn@7.0.6: @@ -3068,148 +1583,20 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.4.1: dependencies: ms: 2.1.3 deep-eql@5.0.2: {} - deep-is@0.1.4: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - eastasianwidth@0.2.0: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -3240,207 +1627,14 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.5(eslint@9.28.0): - dependencies: - eslint: 9.28.0 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.1 - eslint: 9.28.0 - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.14 - unrs-resolver: 1.7.8 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - eslint: 9.28.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.28.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.28.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.28.0) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-prettier@5.4.1(eslint-config-prettier@10.1.5(eslint@9.28.0))(eslint@9.28.0)(prettier@3.5.3): - dependencies: - eslint: 9.28.0 - prettier: 3.5.3 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.8 - optionalDependencies: - eslint-config-prettier: 10.1.5(eslint@9.28.0) - - eslint-scope@8.3.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint-watch@8.0.0(eslint@9.28.0): - dependencies: - chokidar: 3.6.0 - debug: 4.4.1 - eslint: 9.28.0 - execa: 5.1.1 - keypress: 0.2.1 - lodash.debounce: 4.0.8 - lodash.isempty: 4.4.0 - lodash.isequal: 4.5.0 - lodash.kebabcase: 4.1.1 - lodash.unionwith: 4.6.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - eslint@9.28.0: - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.28.0 - '@eslint/plugin-kit': 0.3.1 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.7 - esutils@2.0.3: {} - event-target-shim@5.0.1: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - expect-type@1.2.1: {} - fast-deep-equal@3.1.3: {} - - fast-diff@1.3.0: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - fdir@6.4.5(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -3450,30 +1644,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flatted@3.3.3: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -3486,59 +1656,8 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.10.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -3548,191 +1667,22 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - globals@14.0.0: {} - globals@15.15.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - graphemer@1.4.0: {} - graphql@16.11.0: {} - has-bigints@1.1.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - headers-polyfill@4.0.3: {} html-escaper@2.0.2: {} - human-signals@2.1.0: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - inflection@3.0.2: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - is-node-process@1.2.0: {} - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -3764,20 +1714,6 @@ snapshots: js-tokens@9.0.1: {} - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - jsonld@8.3.3(web-streams-polyfill@3.3.3): dependencies: '@digitalbazaar/http-client': 3.4.1(web-streams-polyfill@3.3.3) @@ -3789,12 +1725,6 @@ snapshots: jsonref@9.0.0: {} - keypress@0.2.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - ky-universal@0.11.0(ky@0.33.3)(web-streams-polyfill@3.3.3): dependencies: abort-controller: 3.0.0 @@ -3805,29 +1735,8 @@ snapshots: ky@0.33.3: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.debounce@4.0.8: {} - lodash.get@4.4.2: {} - lodash.isempty@4.4.0: {} - - lodash.isequal@4.5.0: {} - - lodash.kebabcase@4.1.1: {} - - lodash.merge@4.6.2: {} - - lodash.unionwith@4.6.0: {} - loupe@3.1.3: {} lru-cache@10.4.3: {} @@ -3850,29 +1759,10 @@ snapshots: dependencies: semver: 7.7.2 - math-intrinsics@1.1.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mimic-fn@2.1.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass@7.1.2: {} ms@2.1.3: {} @@ -3906,10 +1796,6 @@ snapshots: nanoid@3.3.11: {} - napi-postinstall@0.2.4: {} - - natural-compare@1.4.0: {} - node-domexception@1.0.0: {} node-fetch@3.3.2: @@ -3918,88 +1804,25 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - openapi-types@12.1.3: {} - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - outvariant@1.4.3: {} - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 + oxlint@1.1.0: + optionalDependencies: + '@oxlint/darwin-arm64': 1.1.0 + '@oxlint/darwin-x64': 1.1.0 + '@oxlint/linux-arm64-gnu': 1.1.0 + '@oxlint/linux-arm64-musl': 1.1.0 + '@oxlint/linux-x64-gnu': 1.1.0 + '@oxlint/linux-x64-musl': 1.1.0 + '@oxlint/win32-arm64': 1.1.0 + '@oxlint/win32-x64': 1.1.0 package-json-from-dist@1.0.1: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - path-key@3.1.1: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -4013,24 +1836,14 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - picomatch@4.0.2: {} - possible-typed-array-names@1.1.0: {} - postcss@8.5.4: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - prettier@3.5.3: {} psl@1.15.0: @@ -4041,52 +1854,14 @@ snapshots: querystringify@2.2.0: {} - queue-microtask@1.2.3: {} - rdf-canonize@3.4.0: dependencies: setimmediate: 1.0.5 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - require-directory@2.1.1: {} requires-port@1.0.0: {} - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.1.0: {} - rollup@4.41.1: dependencies: '@types/estree': 1.0.7 @@ -4113,55 +1888,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.41.1 fsevents: 2.3.3 - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - semver@6.3.1: {} - semver@7.7.2: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} shebang-command@2.0.0: @@ -4170,55 +1898,18 @@ snapshots: shebang-regex@3.0.0: {} - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} source-map-js@1.2.1: {} - stable-hash@0.0.5: {} - stackback@0.0.2: {} statuses@2.0.1: {} std-env@3.9.0: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - strict-event-emitter@0.5.1: {} string-width@4.2.3: @@ -4233,29 +1924,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4264,22 +1932,10 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-json-comments@3.1.1: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.11.8: - dependencies: - '@pkgr/core': 0.2.4 - test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 @@ -4301,10 +1957,6 @@ snapshots: tinyspy@4.0.3: {} - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -4312,80 +1964,12 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - ts-api-utils@2.1.0(typescript@5.8.3): - dependencies: - typescript: 5.8.3 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: - optional: true - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-fest@0.21.3: {} type-fest@4.41.0: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.33.0(eslint@9.28.0)(typescript@5.8.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3) - eslint: 9.28.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - typescript@5.8.3: {} - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - undici-types@6.21.0: {} undici@5.29.0: @@ -4394,32 +1978,6 @@ snapshots: universalify@0.2.0: {} - unrs-resolver@1.7.8: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.8 - '@unrs/resolver-binding-darwin-x64': 1.7.8 - '@unrs/resolver-binding-freebsd-x64': 1.7.8 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.8 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.8 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.8 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.8 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.8 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.8 - '@unrs/resolver-binding-linux-x64-musl': 1.7.8 - '@unrs/resolver-binding-wasm32-wasi': 1.7.8 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.8 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -4501,47 +2059,6 @@ snapshots: web-streams-polyfill@3.3.3: {} - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -4551,8 +2068,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - word-wrap@1.2.5: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -4587,6 +2102,4 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} diff --git a/src/Api.ts b/src/Api.ts index c7c5b73..776fc5d 100644 --- a/src/Api.ts +++ b/src/Api.ts @@ -10,10 +10,9 @@ export interface ApiOptions export interface Api extends ApiOptions {} export class Api { - constructor( - public entrypoint: string, - options: ApiOptions = {}, - ) { + entrypoint: string; + constructor(entrypoint: string, options: ApiOptions = {}) { + this.entrypoint = entrypoint; assignSealed(this, options); } } diff --git a/src/Field.ts b/src/Field.ts index 21e3bcb..d951cf8 100644 --- a/src/Field.ts +++ b/src/Field.ts @@ -48,10 +48,9 @@ export interface FieldOptions export interface Field extends FieldOptions {} export class Field { - constructor( - public name: string, - options: FieldOptions = {}, - ) { + name: string; + constructor(name: string, options: FieldOptions = {}) { + this.name = name; assignSealed(this, options); } } diff --git a/src/Operation.ts b/src/Operation.ts index ed45786..42ca87e 100644 --- a/src/Operation.ts +++ b/src/Operation.ts @@ -14,11 +14,16 @@ export interface OperationOptions export interface Operation extends OperationOptions {} export class Operation { + name: string; + type: OperationType; constructor( - public name: string, - public type: OperationType, + name: string, + type: OperationType, options: OperationOptions = {}, ) { + this.name = name; + this.type = type; + assignSealed(this, options); } } diff --git a/src/Parameter.ts b/src/Parameter.ts index 4e8bdc6..468a959 100644 --- a/src/Parameter.ts +++ b/src/Parameter.ts @@ -1,9 +1,21 @@ export class Parameter { + variable: string; + range: string | null; + required: boolean; + description: string; + deprecated?: boolean | undefined; + constructor( - public variable: string, - public range: string | null, - public required: boolean, - public description: string, - public deprecated?: boolean, - ) {} + variable: string, + range: string | null, + required: boolean, + description: string, + deprecated?: boolean, + ) { + this.variable = variable; + this.range = range; + this.required = required; + this.description = description; + this.deprecated = deprecated; + } } diff --git a/src/Resource.ts b/src/Resource.ts index 51d0539..a074c27 100644 --- a/src/Resource.ts +++ b/src/Resource.ts @@ -20,11 +20,11 @@ export interface ResourceOptions export interface Resource extends ResourceOptions {} export class Resource { - constructor( - public name: string, - public url: string, - options: ResourceOptions = {}, - ) { + name: string; + url: string; + constructor(name: string, url: string, options: ResourceOptions = {}) { + this.name = name; + this.url = url; assignSealed(this, options); } } diff --git a/src/graphql/fetchQuery.ts b/src/graphql/fetchQuery.ts index 3041086..82e6926 100644 --- a/src/graphql/fetchQuery.ts +++ b/src/graphql/fetchQuery.ts @@ -1,6 +1,6 @@ import type { ExecutionResult } from "graphql"; -const setOptions = (query: string, options: RequestInit): RequestInit => { +function setOptions(query: string, options: RequestInit): RequestInit { if (!options.method) { options.method = "POST"; } @@ -9,31 +9,32 @@ const setOptions = (query: string, options: RequestInit): RequestInit => { options.headers = new Headers(options.headers); } - if (null === options.headers.get("Content-Type")) { + if (options.headers.get("Content-Type") === null) { options.headers.set("Content-Type", "application/json"); } - if ("GET" !== options.method && !options.body) { + if (options.method !== "GET" && !options.body) { options.body = JSON.stringify({ query }); } return options; -}; +} -export default async ( +export default async function fetchQuery>( url: string, query: string, options: RequestInit = {}, ): Promise<{ response: Response; body: ExecutionResult; -}> => { +}> { const response = await fetch(url, setOptions(query, options)); const body = (await response.json()) as ExecutionResult; if (body?.errors) { - return Promise.reject({ response, body }); + // oxlint-disable-next-line no-throw-literal + throw { response, body }; } - return Promise.resolve({ response, body }); -}; + return { response, body }; +} diff --git a/src/graphql/parseGraphQl.ts b/src/graphql/parseGraphQl.ts index ea7eef2..575840d 100644 --- a/src/graphql/parseGraphQl.ts +++ b/src/graphql/parseGraphQl.ts @@ -9,7 +9,7 @@ import type { IntrospectionQuery, } from "graphql/utilities"; -const getRangeFromGraphQlType = (type: IntrospectionOutputTypeRef): string => { +function getRangeFromGraphQlType(type: IntrospectionOutputTypeRef): string { if (type.kind === "NON_NULL") { if (type.ofType.kind === "LIST") { return `Array<${getRangeFromGraphQlType(type.ofType.ofType)}>`; @@ -23,25 +23,25 @@ const getRangeFromGraphQlType = (type: IntrospectionOutputTypeRef): string => { } return type.name; -}; +} -const getReferenceFromGraphQlType = ( +function getReferenceFromGraphQlType( type: IntrospectionOutputTypeRef, -): null | string => { +): null | string { if (type.kind === "OBJECT" && type.name.endsWith("Connection")) { return type.name.slice(0, type.name.lastIndexOf("Connection")); } return null; -}; +} -export default async ( +export default async function parseGraphQl( entrypointUrl: string, options: RequestInit = {}, ): Promise<{ api: Api; response: Response; -}> => { +}> { const introspectionQuery = getIntrospectionQuery(); const { @@ -67,31 +67,30 @@ export default async ( type.name !== schema.subscriptionType?.name && !type.name.startsWith("__") && // mutation - !type.name.startsWith(type.name[0].toLowerCase()) && + (!type.name[0] || !type.name.startsWith(type.name[0].toLowerCase())) && !type.name.endsWith("Connection") && - !type.name.endsWith("Edge") && - !type.name.endsWith("PageInfo"), + !type.name.endsWith("Edge"), ) as IntrospectionObjectType[]; const resources: Resource[] = []; - typeResources.forEach((typeResource) => { + for (const typeResource of typeResources) { const fields: Field[] = []; const readableFields: Field[] = []; const writableFields: Field[] = []; - typeResource.fields.forEach((resourceFieldType) => { + for (const resourceFieldType of typeResource.fields) { const field = new Field(resourceFieldType.name, { range: getRangeFromGraphQlType(resourceFieldType.type), reference: getReferenceFromGraphQlType(resourceFieldType.type), required: resourceFieldType.type.kind === "NON_NULL", - description: resourceFieldType.description, + description: resourceFieldType.description || "", deprecated: resourceFieldType.isDeprecated, }); fields.push(field); readableFields.push(field); writableFields.push(field); - }); + } resources.push( new Resource(typeResource.name, "", { @@ -100,23 +99,23 @@ export default async ( writableFields, }), ); - }); + } - resources.forEach((resource) => { - resource.fields?.forEach((field) => { - if (null !== field.reference) { + for (const resource of resources) { + for (const field of resource.fields ?? []) { + if (field.reference !== null) { field.reference = resources.find((resource) => resource.name === field.reference) || null; - } else if (null !== field.range) { + } else if (field.range !== null) { field.reference = resources.find((resource) => resource.name === field.range) || null; } - }); - }); + } + } return { api: new Api(entrypointUrl, { resources }), response, }; -}; +} diff --git a/src/hydra/fetchJsonLd.test.ts b/src/hydra/fetchJsonLd.test.ts index d22e673..31fe999 100644 --- a/src/hydra/fetchJsonLd.test.ts +++ b/src/hydra/fetchJsonLd.test.ts @@ -3,37 +3,32 @@ import { server } from "../../vitest.setup.js"; import fetchJsonLd from "./fetchJsonLd.js"; import { assert, expect, test } from "vitest"; +const httpResponse = { + "@context": "http://json-ld.org/contexts/person.jsonld", + "@id": "http://dbpedia.org/resource/John_Lennon", + name: "John Lennon", + born: "1940-10-09", + spouse: "http://dbpedia.org/resource/Cynthia_Lennon", +}; + test("fetch a JSON-LD document", async () => { server.use( http.get("http://localhost/foo.jsonld", () => - HttpResponse.json( - { - "@context": "http://json-ld.org/contexts/person.jsonld", - "@id": "http://dbpedia.org/resource/John_Lennon", - name: "John Lennon", - born: "1940-10-09", - spouse: "http://dbpedia.org/resource/Cynthia_Lennon", - }, - { - headers: { "Content-Type": "application/ld+json" }, - status: 200, - statusText: "OK", - }, - ), + HttpResponse.json(httpResponse, { + headers: { "Content-Type": "application/ld+json" }, + status: 200, + statusText: "OK", + }), ), ); - try { - const data = await fetchJsonLd("http://localhost/foo.jsonld"); - expect(data.response.ok).toBe(true); - expect(data).toHaveProperty("body"); - assert( - "body" in data && "name" in data.body, - "Response should contain a body with a name property", - ); - expect(data.body["name"]).toBe("John Lennon"); - } catch { - assert.fail("Should not have thrown an error"); - } + + const data = await fetchJsonLd("http://localhost/foo.jsonld"); + expect(data.response.ok).toBe(true); + + assert("body" in data, "Response should have a body property"); + assert(data.body !== null, "Body should not be null"); + assert("name" in data.body, "Body should have a name property"); + expect(data.body["name"]).toBe("John Lennon"); }); test("fetch a non JSON-LD document", async () => { @@ -47,80 +42,54 @@ test("fetch a non JSON-LD document", async () => { }), ); - try { - await fetchJsonLd("http://localhost/foo.jsonld"); - assert.fail("Should have thrown an error"); - } catch (error) { - const data = error as unknown as { response: Response; body: undefined }; - expect(data.response.ok).toBe(true); - expect(typeof data.body).toBe("undefined"); - } + const promise = fetchJsonLd("http://localhost/foo.jsonld"); + + await expect(promise).rejects.toHaveProperty("response.ok", true); + await expect(promise).rejects.not.toHaveProperty("body"); }); -test("fetch an error with Content-Type application/ld+json", () => { +test("fetch an error with Content-Type application/ld+json", async () => { server.use( http.get("http://localhost/foo.jsonld", () => { - return HttpResponse.json( - { - "@context": "http://json-ld.org/contexts/person.jsonld", - "@id": "http://dbpedia.org/resource/John_Lennon", - name: "John Lennon", - born: "1940-10-09", - spouse: "http://dbpedia.org/resource/Cynthia_Lennon", - }, - { - status: 400, - statusText: "Bad Request", - headers: { "Content-Type": "application/ld+json" }, - }, - ); + return HttpResponse.json(httpResponse, { + status: 500, + statusText: "Internal Server Error", + headers: { "Content-Type": "application/ld+json" }, + }); }), ); - return fetchJsonLd("http://localhost/foo.jsonld").catch( - ({ response }: { response: Response }) => { - response - .json() - .then((body: { born: string }) => { - expect(response.ok).toBe(false); - expect(body.born).toBe("1940-10-09"); - }) - .catch(() => { - assert.fail("Response should have been JSON parsable"); - }); - }, + const rejectedResponse = await fetchJsonLd( + "http://localhost/foo.jsonld", + ).catch((error) => error as { response: Response }); + + await expect(rejectedResponse).toHaveProperty("response.ok", false); + await expect(rejectedResponse.response.json()).resolves.toHaveProperty( + "born", + "1940-10-09", ); }); test("fetch an error with Content-Type application/error+json", async () => { server.use( http.get("http://localhost/foo.jsonld", () => { - return HttpResponse.json( - { - "@context": "http://json-ld.org/contexts/person.jsonld", - "@id": "http://dbpedia.org/resource/John_Lennon", - name: "John Lennon", - born: "1940-10-09", - spouse: "http://dbpedia.org/resource/Cynthia_Lennon", - }, - { - status: 400, - statusText: "Bad Request", - headers: { "Content-Type": "application/error+json" }, - }, - ); + return HttpResponse.json(httpResponse, { + status: 400, + statusText: "Bad Request", + headers: { "Content-Type": "application/error+json" }, + }); }), ); - try { - await fetchJsonLd("http://localhost/foo.jsonld"); - assert.fail("Should have thrown an error"); - } catch (error) { - const data = error as unknown as { response: Response }; - const body = await data.response.json(); - expect(data.response.ok).toBe(false); - expect(body.born).toBe("1940-10-09"); - } + const rejectedResponse = await fetchJsonLd( + "http://localhost/foo.jsonld", + ).catch((error) => error as { response: Response }); + + await expect(rejectedResponse).toHaveProperty("response.ok", false); + await expect(rejectedResponse.response.json()).resolves.toHaveProperty( + "born", + "1940-10-09", + ); }); test("fetch an empty document", async () => { @@ -133,11 +102,9 @@ test("fetch an empty document", async () => { }); }), ); - try { - const data = await fetchJsonLd("http://localhost/foo.jsonld"); - expect(data.response.ok).toBe(true); - expect(data).not.toHaveProperty("body"); - } catch { - assert.fail("Should not have thrown an error"); - } + + const dataPromise = fetchJsonLd("http://localhost/foo.jsonld"); + + await expect(dataPromise).resolves.toHaveProperty("response.ok", true); + await expect(dataPromise).resolves.not.toHaveProperty("body"); }); diff --git a/src/hydra/fetchJsonLd.ts b/src/hydra/fetchJsonLd.ts index de5136e..d972dcf 100644 --- a/src/hydra/fetchJsonLd.ts +++ b/src/hydra/fetchJsonLd.ts @@ -4,13 +4,13 @@ import type { RequestInitExtended } from "./types.js"; const jsonLdMimeType = "application/ld+json"; const jsonProblemMimeType = "application/problem+json"; -export type RejectedResponseDocument = { +export interface RejectedResponseDocument { response: Response; -}; +} -export type EmptyResponseDocument = { +export interface EmptyResponseDocument { response: Response; -}; +} export interface ResponseDocument extends RemoteDocument { response: Response; @@ -28,26 +28,28 @@ export default async function fetchJsonLd( const { headers, status } = response; const contentType = headers.get("Content-Type"); - if (204 === status) { - return Promise.resolve({ response }); + if (status === 204) { + return { response }; } if ( - 500 <= status || + status >= 500 || !contentType || (!contentType.includes(jsonLdMimeType) && !contentType.includes(jsonProblemMimeType)) ) { const reason: RejectedResponseDocument = { response }; - return Promise.reject(reason); + // oxlint-disable-next-line no-throw-literal + throw reason; } - return response.json().then((body: JsonLd) => ({ + const body = (await response.json()) as JsonLd; + return { response, body, document: body, documentUrl: url, - })); + }; } function setHeaders(options: RequestInitExtended): RequestInit { @@ -55,21 +57,21 @@ function setHeaders(options: RequestInitExtended): RequestInit { return { ...options, headers: {} }; } - let headers: HeadersInit = + let headers = typeof options.headers === "function" ? options.headers() : options.headers; headers = new Headers(headers); - if (null === headers.get("Accept")) { + if (headers.get("Accept") === null) { headers.set("Accept", jsonLdMimeType); } const result = { ...options, headers }; if ( - "undefined" !== result.body && + result.body !== "undefined" && !(typeof FormData !== "undefined" && result.body instanceof FormData) && - null === result.headers.get("Content-Type") + result.headers.get("Content-Type") === null ) { result.headers.set("Content-Type", jsonLdMimeType); } diff --git a/src/hydra/fetchResource.ts b/src/hydra/fetchResource.ts index 41bf69f..ba23a8c 100644 --- a/src/hydra/fetchResource.ts +++ b/src/hydra/fetchResource.ts @@ -1,23 +1,24 @@ -import type { EmptyResponseDocument, ResponseDocument } from "./fetchJsonLd.js"; import fetchJsonLd from "./fetchJsonLd.js"; import type { IriTemplateMapping, RequestInitExtended } from "./types.js"; -export default ( +export default async function fetchResource( resourceUrl: string, options: RequestInitExtended = {}, -): Promise<{ parameters: IriTemplateMapping[] }> => { - return fetchJsonLd( +): Promise<{ parameters: IriTemplateMapping[] }> { + const response = await fetchJsonLd( resourceUrl, + // oxlint-disable-next-line prefer-object-spread Object.assign({ itemsPerPage: 0 }, options), - ).then((d: ResponseDocument | EmptyResponseDocument) => { - let hasPrefix = true; - if ((d as ResponseDocument).body) { - hasPrefix = "hydra:search" in (d as ResponseDocument).body; - } - return { - parameters: (hasPrefix - ? (d as any)?.body?.["hydra:search"]?.["hydra:mapping"] - : (d as any)?.body?.search?.mapping) as unknown as IriTemplateMapping[], - }; - }); -}; + ); + + let hasPrefix = true; + if ("body" in response) { + hasPrefix = "hydra:search" in response.body; + } + return { + parameters: (hasPrefix + ? (response as any)?.body?.["hydra:search"]?.["hydra:mapping"] + : (response as any)?.body?.search + ?.mapping) as unknown as IriTemplateMapping[], + }; +} diff --git a/src/hydra/getParameters.ts b/src/hydra/getParameters.ts index b980153..35e8d68 100644 --- a/src/hydra/getParameters.ts +++ b/src/hydra/getParameters.ts @@ -3,24 +3,23 @@ import fetchResource from "./fetchResource.js"; import type { Resource } from "../Resource.js"; import type { RequestInitExtended } from "./types.js"; -export default ( +export default async function getParameters( resource: Resource, options: RequestInitExtended = {}, -): Promise => - fetchResource(resource.url, options).then(({ parameters = [] }) => { - const resourceParameters: Parameter[] = []; - parameters.forEach(({ property = null, required, variable }) => { - if (null === property) { - return; - } +): Promise { + const { parameters = [] } = await fetchResource(resource.url, options); + const resourceParameters: Parameter[] = []; + for (const { property = null, required, variable } of parameters) { + if (property === null) { + continue; + } - const { range = null } = resource.fields - ? resource.fields.find(({ name }) => property === name) || {} - : {}; + const { range = null } = + resource.fields?.find(({ name }) => property === name) || {}; - resourceParameters.push(new Parameter(variable, range, required, "")); - }); - resource.parameters = resourceParameters; + resourceParameters.push(new Parameter(variable, range, required, "")); + } + resource.parameters = resourceParameters; - return resourceParameters; - }); + return resourceParameters; +} diff --git a/src/hydra/getType.ts b/src/hydra/getType.ts index 3be0d0d..9486dea 100644 --- a/src/hydra/getType.ts +++ b/src/hydra/getType.ts @@ -1,6 +1,6 @@ import type { FieldType } from "../Field.js"; -const getType = (id: string, range: string): FieldType => { +function getType(id: string, range: string): FieldType { switch (id) { case "http://schema.org/email": case "https://schema.org/email": @@ -67,6 +67,6 @@ const getType = (id: string, range: string): FieldType => { default: return "string"; } -}; +} export default getType; diff --git a/src/hydra/parseHydraDocumentation.test.ts b/src/hydra/parseHydraDocumentation.test.ts index 8939205..3a6627b 100644 --- a/src/hydra/parseHydraDocumentation.test.ts +++ b/src/hydra/parseHydraDocumentation.test.ts @@ -1,6 +1,5 @@ import parseHydraDocumentation from "./parseHydraDocumentation.js"; import parsedJsonReplacer from "../utils/parsedJsonReplacer.js"; -import type { Api } from "../Api.js"; import { server } from "../../vitest.setup.js"; import { http, HttpResponse } from "msw"; import { assert, expect, test, vi } from "vitest"; @@ -1309,32 +1308,28 @@ test("parse a Hydra documentation", async () => { const fetchSpy = vi.spyOn(globalThis, "fetch"); const options = { headers: new Headers({ CustomHeader: "customValue" }) }; - try { - const response = await parseHydraDocumentation("http://localhost", options); - expect(JSON.stringify(response.api, parsedJsonReplacer, 2)).toBe( - JSON.stringify(expectedApi, null, 2), - ); - expect(response.response).toBeDefined(); - expect(response.status).toBe(200); + const response = await parseHydraDocumentation("http://localhost", options); + expect(JSON.stringify(response.api, parsedJsonReplacer, 2)).toBe( + JSON.stringify(expectedApi, null, 2), + ); + expect(response.response).toBeDefined(); + expect(response.status).toBe(200); - expect(fetchSpy).toHaveBeenCalledTimes(2); - expect(fetchSpy).toHaveBeenNthCalledWith( - 2, - "http://localhost/docs.jsonld", - { - headers: new Headers({ - Accept: "application/ld+json", - "Content-Type": "application/ld+json", - CustomHeader: "customValue", - }), - }, - ); - } catch (error) { - assert.fail(`Unexpected error: ${(error as Error).message}`); - } + expect(fetchSpy).toHaveBeenCalledTimes(2); + expect(fetchSpy).toHaveBeenNthCalledWith(2, "http://localhost/docs.jsonld", { + headers: new Headers({ + Accept: "application/ld+json", + "Content-Type": "application/ld+json", + CustomHeader: "customValue", + }), + }); fetchSpy.mockRestore(); }); +function getHeaders(): Headers { + return new Headers({ CustomHeader: "customValue" }); +} + test("parse a Hydra documentation using dynamic headers", async () => { server.use( http.get("http://localhost", () => HttpResponse.json(entrypoint, init)), @@ -1344,34 +1339,24 @@ test("parse a Hydra documentation using dynamic headers", async () => { ); const fetchSpy = vi.spyOn(globalThis, "fetch"); - const getHeaders = (): Headers => - new Headers({ CustomHeader: "customValue" }); - try { - const data = await parseHydraDocumentation("http://localhost", { - headers: getHeaders, - }); - expect(JSON.stringify(data.api, parsedJsonReplacer, 2)).toBe( - JSON.stringify(expectedApi, null, 2), - ); - expect(data.response).toBeDefined(); - expect(data.status).toBe(200); + const data = await parseHydraDocumentation("http://localhost", { + headers: getHeaders, + }); + expect(JSON.stringify(data.api, parsedJsonReplacer, 2)).toBe( + JSON.stringify(expectedApi, null, 2), + ); + expect(data.response).toBeDefined(); + expect(data.status).toBe(200); - expect(fetchSpy).toHaveBeenCalledTimes(2); - expect(fetchSpy).toHaveBeenNthCalledWith( - 2, - "http://localhost/docs.jsonld", - { - headers: new Headers({ - CustomHeader: "customValue", - Accept: "application/ld+json", - "Content-Type": "application/ld+json", - }), - }, - ); - } catch (error) { - assert.fail(`Unexpected error: ${(error as Error).message}`); - } + expect(fetchSpy).toHaveBeenCalledTimes(2); + expect(fetchSpy).toHaveBeenNthCalledWith(2, "http://localhost/docs.jsonld", { + headers: new Headers({ + CustomHeader: "customValue", + Accept: "application/ld+json", + "Content-Type": "application/ld+json", + }), + }); fetchSpy.mockRestore(); }); @@ -1383,16 +1368,12 @@ test("parse a Hydra documentation (http://localhost/)", async () => { ), ); - try { - const data = await parseHydraDocumentation("http://localhost/"); - expect(JSON.stringify(data.api, parsedJsonReplacer, 2)).toBe( - JSON.stringify(expectedApi, null, 2), - ); - expect(data.response).toBeDefined(); - expect(data.status).toBe(200); - } catch (error) { - assert.fail(`Unexpected error: ${(error as Error).message}`); - } + const data = await parseHydraDocumentation("http://localhost/"); + expect(JSON.stringify(data.api, parsedJsonReplacer, 2)).toBe( + JSON.stringify(expectedApi, null, 2), + ); + expect(data.response).toBeDefined(); + expect(data.status).toBe(200); }); test("parse a Hydra documentation without authorization", async () => { @@ -1416,21 +1397,16 @@ test("parse a Hydra documentation without authorization", async () => { HttpResponse.json(expectedResponse, init), ), ); + const promise = parseHydraDocumentation("http://localhost"); + await expect(promise).rejects.toMatchObject({ + status: 401, + api: expectedApi, + response: expect.any(Response), + }); + + const err = await promise.catch((error) => error); - try { - await parseHydraDocumentation("http://localhost"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - const data = error as unknown as { - api: Api; - response: Response; - status: number; - }; - expect(data.api).toEqual(expectedApi); - expect(data.response).toBeDefined(); - await expect(data.response.json()).resolves.toEqual(expectedResponse); - expect(data.status).toBe(401); - } + await expect(err.response.json()).resolves.toEqual(expectedResponse); }); test('Parse entrypoint without "@type" key', async () => { @@ -1464,14 +1440,9 @@ test('Parse entrypoint without "@type" key', async () => { ), ); - try { - await parseHydraDocumentation("http://localhost/"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - expect((error as Error).message).toBe( - 'The API entrypoint has no "@type" key.', - ); - } + await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( + 'The API entrypoint has no "@type" key.', + ); }); test('Parse entrypoint class without "supportedClass" key', async () => { @@ -1517,14 +1488,9 @@ test('Parse entrypoint class without "supportedClass" key', async () => { ), ); - try { - await parseHydraDocumentation("http://localhost/"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - expect((error as Error).message).toBe( - 'The API documentation has no "http://www.w3.org/ns/hydra/core#supportedClass" key or its value is not an array.', - ); - } + await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( + 'The API documentation has no "http://www.w3.org/ns/hydra/core#supportedClass" key or its value is not an array.', + ); }); test('Parse entrypoint class without "supportedProperty" key', async () => { @@ -1576,6 +1542,9 @@ test('Parse entrypoint class without "supportedProperty" key', async () => { ], }; + const expectedErrorMessage = + '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", () => @@ -1583,14 +1552,9 @@ test('Parse entrypoint class without "supportedProperty" key', async () => { ), ); - try { - await parseHydraDocumentation("http://localhost/"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - expect((error as Error).message).toBe( - 'The entrypoint definition has no "http://www.w3.org/ns/hydra/core#supportedProperty" key or it is not an array.', - ); - } + await expect(parseHydraDocumentation("http://localhost/")).rejects.toThrow( + expectedErrorMessage, + ); }); test("Invalid docs JSON", async () => { @@ -1604,14 +1568,11 @@ test("Invalid docs JSON", async () => { ), ); - try { - await parseHydraDocumentation("http://localhost/"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - expect(error).toHaveProperty("api"); - expect(error).toHaveProperty("response"); - expect(error).toHaveProperty("status"); - } + const promise = parseHydraDocumentation("http://localhost/"); + await expect(promise).rejects.toBeDefined(); + await expect(promise).rejects.toHaveProperty("api"); + await expect(promise).rejects.toHaveProperty("response"); + await expect(promise).rejects.toHaveProperty("status"); }); test("Invalid entrypoint JSON", async () => { @@ -1620,14 +1581,11 @@ test("Invalid entrypoint JSON", async () => { http.get("http://localhost", () => new HttpResponse(entrypoint, init)), ); - try { - await parseHydraDocumentation("http://localhost/"); - assert.fail("Expected an error to be thrown."); - } catch (error) { - expect(error).toHaveProperty("api"); - expect(error).toHaveProperty("response"); - expect(error).toHaveProperty("status"); - } + const promise = parseHydraDocumentation("http://localhost/"); + + await expect(promise).rejects.toHaveProperty("api"); + await expect(promise).rejects.toHaveProperty("response"); + await expect(promise).rejects.toHaveProperty("status"); }); test("Resource parameters can be retrieved", async () => { @@ -1644,8 +1602,10 @@ test("Resource parameters can be retrieved", async () => { const data = await parseHydraDocumentation("http://localhost"); const resource = data.api.resources?.[0]; + assert(resource !== undefined); - assert("getParameters" in resource && !!resource.getParameters); + assert("getParameters" in resource); + assert(!!resource.getParameters); const parameters = await resource.getParameters(); expect(fetchSpy).toHaveBeenCalledTimes(3); diff --git a/src/hydra/parseHydraDocumentation.ts b/src/hydra/parseHydraDocumentation.ts index f22606b..c7f4dc3 100644 --- a/src/hydra/parseHydraDocumentation.ts +++ b/src/hydra/parseHydraDocumentation.ts @@ -22,7 +22,7 @@ import type { * Extracts the short name of a resource. */ function guessNameFromUrl(url: string, entrypointUrl: string): string { - return url.substr(entrypointUrl.length + 1); + return url.slice(entrypointUrl.length + 1); } function getTitleOrLabel(obj: ExpandedOperation): string { @@ -50,7 +50,7 @@ function findSupportedClass( '[0]["http://www.w3.org/ns/hydra/core#supportedClass"]', ) as ExpandedClass[] | undefined; if (!Array.isArray(supportedClasses)) { - throw new Error( + throw new TypeError( 'The API documentation has no "http://www.w3.org/ns/hydra/core#supportedClass" key or its value is not an array.', ); } @@ -82,6 +82,12 @@ export function getDocumentationUrlFromHeaders(headers: Headers): string { ); } + if (typeof matches[1] !== "string") { + throw new TypeError( + 'The "Link" HTTP header does not contain a documentation URL.', + ); + } + return matches[1]; } @@ -98,49 +104,60 @@ async function fetchEntrypointAndDocs( entrypoint: Entrypoint[]; docs: ExpandedDoc[]; }> { - const d = await fetchJsonLd(entrypointUrl, options); - if (!("body" in d)) { - throw new Error("An empty response was received for the entrypoint URL."); + async function documentLoader(input: string) { + const response = await fetchJsonLd(input, options); + if (!("body" in response)) { + throw new Error( + "An empty response was received when expanding documentation or entrypoint JSON-LD documents.", + ); + } + return response; } - const entrypointJsonLd = d.body; - const docsUrl = getDocumentationUrlFromHeaders(d.response.headers); - - const documentLoader = (input: string) => - fetchJsonLd(input, options).then((response) => { - if (!("body" in response)) { - throw new Error( - "An empty response was received when expanding documentation or entrypoint JSON-LD documents.", - ); - } - return response; - }); - const docsResponse = await fetchJsonLd(docsUrl, options); - if (!("body" in docsResponse)) { - throw new Error( - "An empty response was received for the documentation URL.", - ); - } - const docsJsonLd = docsResponse.body; - - const [docs, entrypoint] = (await Promise.all([ - jsonld.expand(docsJsonLd, { - base: docsUrl, - documentLoader, - }), - jsonld.expand(entrypointJsonLd, { - base: entrypointUrl, - documentLoader, - }), - ])) as unknown as [ExpandedDoc[], Entrypoint[]]; + try { + const d = await fetchJsonLd(entrypointUrl, options); + if (!("body" in d)) { + throw new Error("An empty response was received for the entrypoint URL."); + } + const entrypointJsonLd = d.body; + const docsUrl = getDocumentationUrlFromHeaders(d.response.headers); + + const docsResponse = await fetchJsonLd(docsUrl, options); + if (!("body" in docsResponse)) { + throw new Error( + "An empty response was received for the documentation URL.", + ); + } + const docsJsonLd = docsResponse.body; - return { - entrypointUrl, - docsUrl, - entrypoint, - response: d.response, - docs, - }; + const [docs, entrypoint] = (await Promise.all([ + jsonld.expand(docsJsonLd, { + base: docsUrl, + documentLoader, + }), + jsonld.expand(entrypointJsonLd, { + base: entrypointUrl, + documentLoader, + }), + ])) as unknown as [ExpandedDoc[], Entrypoint[]]; + + return { + entrypointUrl, + docsUrl, + entrypoint, + response: d.response, + docs, + }; + } catch (error) { + const { response } = error as { response: Response }; + // oxlint-disable-next-line no-throw-literal + throw { + api: new Api(entrypointUrl, { resources: [] }), + error, + response, + status: get(response, "status"), + }; + } } function removeTrailingSlash(url: string): string { @@ -171,7 +188,7 @@ function findRelatedClass( if ( allValuesFrom && - "http://www.w3.org/ns/hydra/core#member" === onProperty + onProperty === "http://www.w3.org/ns/hydra/core#member" ) { return findSupportedClass(docs, allValuesFrom); } @@ -193,8 +210,8 @@ function findRelatedClass( '["http://www.w3.org/ns/hydra/core#returns"][0]["@id"]', ) as string | undefined; if ( - "string" === typeof returns && - 0 !== returns.indexOf("http://www.w3.org/ns/hydra/core") + typeof returns === "string" && + returns.indexOf("http://www.w3.org/ns/hydra/core") !== 0 ) { return findSupportedClass(docs, returns); } @@ -206,7 +223,7 @@ function findRelatedClass( /** * Parses Hydra documentation and converts it to an intermediate representation. */ -export default function parseHydraDocumentation( +export default async function parseHydraDocumentation( entrypointUrl: string, options: RequestInitExtended = {}, ): Promise<{ @@ -216,307 +233,289 @@ export default function parseHydraDocumentation( }> { entrypointUrl = removeTrailingSlash(entrypointUrl); - return fetchEntrypointAndDocs(entrypointUrl, options).then( - ({ entrypoint, docs, response }) => { - const resources = [], - fields = [], - operations = []; - const title = get( - docs, - '[0]["http://www.w3.org/ns/hydra/core#title"][0]["@value"]', - "API Platform", - ) as string; - - const entrypointType = get(entrypoint, '[0]["@type"][0]') as - | string - | undefined; - if (!entrypointType) { - throw new Error('The API entrypoint has no "@type" key.'); - } + const { entrypoint, docs, response } = await fetchEntrypointAndDocs( + entrypointUrl, + options, + ); - const entrypointClass = findSupportedClass(docs, entrypointType); - if ( - !Array.isArray( - entrypointClass["http://www.w3.org/ns/hydra/core#supportedProperty"], - ) - ) { - throw new Error( - 'The entrypoint definition has no "http://www.w3.org/ns/hydra/core#supportedProperty" key or it is not an array.', - ); - } + const resources = [], + fields = [], + operations = []; + const title = get( + docs, + '[0]["http://www.w3.org/ns/hydra/core#title"][0]["@value"]', + "API Platform", + ) as string; + + const entrypointType = get(entrypoint, '[0]["@type"][0]') as + | string + | undefined; + if (!entrypointType) { + throw new Error('The API entrypoint has no "@type" key.'); + } - // Add resources - for (const properties of entrypointClass[ - "http://www.w3.org/ns/hydra/core#supportedProperty" - ]) { - const readableFields = [], - resourceFields = [], - writableFields = [], - resourceOperations = []; + const entrypointClass = findSupportedClass(docs, entrypointType); + if ( + !Array.isArray( + entrypointClass["http://www.w3.org/ns/hydra/core#supportedProperty"], + ) + ) { + throw new TypeError( + 'The entrypoint definition has no "http://www.w3.org/ns/hydra/core#supportedProperty" key or it is not an array.', + ); + } - const property = get( - properties, - '["http://www.w3.org/ns/hydra/core#property"][0]', - ) as ExpandedRdfProperty | undefined; + // Add resources + for (const properties of entrypointClass[ + "http://www.w3.org/ns/hydra/core#supportedProperty" + ]) { + const readableFields = [], + resourceFields = [], + writableFields = [], + resourceOperations = []; + + const property = get( + properties, + '["http://www.w3.org/ns/hydra/core#property"][0]', + ) as ExpandedRdfProperty | undefined; + + if (!property) { + continue; + } - if (!property) { - continue; - } + const url = get(entrypoint, `[0]["${property["@id"]}"][0]["@id"]`) as + | string + | undefined; - const url = get(entrypoint, `[0]["${property["@id"]}"][0]["@id"]`) as - | string - | undefined; + if (!url) { + console.error( + new Error( + `Unable to find the URL for "${property["@id"]}" in the entrypoint, make sure your API resource has at least one GET collection operation declared.`, + ), + ); + continue; + } - if (!url) { - console.error( - new Error( - `Unable to find the URL for "${property["@id"]}" in the entrypoint, make sure your API resource has at least one GET collection operation declared.`, - ), - ); - continue; - } + // Add fields + const relatedClass = findRelatedClass(docs, property); + for (const supportedProperties of relatedClass[ + "http://www.w3.org/ns/hydra/core#supportedProperty" + ]) { + const supportedProperty = get( + supportedProperties, + '["http://www.w3.org/ns/hydra/core#property"][0]', + ) as unknown as ExpandedRdfProperty; + const id = supportedProperty?.["@id"]; + const range = get( + supportedProperty, + '["http://www.w3.org/2000/01/rdf-schema#range"][0]["@id"]', + null, + ) as unknown as string; - // Add fields - const relatedClass = findRelatedClass(docs, property); - for (const supportedProperties of relatedClass[ - "http://www.w3.org/ns/hydra/core#supportedProperty" - ]) { - const supportedProperty = get( + const field = new Field( + supportedProperties?.["http://www.w3.org/ns/hydra/core#title"]?.[0]?.[ + "@value" + ] ?? + supportedProperty?.[ + "http://www.w3.org/2000/01/rdf-schema#label" + ]?.[0]?.["@value"], + { + id, + range, + type: getType(id, range), + reference: + get(supportedProperty, '["@type"][0]') === + "http://www.w3.org/ns/hydra/core#Link" + ? range // Will be updated in a subsequent pass + : null, + embedded: + get(supportedProperty, '["@type"][0]') === + "http://www.w3.org/ns/hydra/core#Link" + ? null + : (range as unknown as Resource), // Will be updated in a subsequent pass + required: get( + supportedProperties, + '["http://www.w3.org/ns/hydra/core#required"][0]["@value"]', + false, + ) as boolean, + description: get( supportedProperties, - '["http://www.w3.org/ns/hydra/core#property"][0]', - ) as unknown as ExpandedRdfProperty; - const id = supportedProperty["@id"]; - const range = get( + '["http://www.w3.org/ns/hydra/core#description"][0]["@value"]', + "", + ) as string, + maxCardinality: get( supportedProperty, - '["http://www.w3.org/2000/01/rdf-schema#range"][0]["@id"]', + '["http://www.w3.org/2002/07/owl#maxCardinality"][0]["@value"]', null, - ) as unknown as string; - - const field = new Field( - supportedProperties["http://www.w3.org/ns/hydra/core#title"][0][ - "@value" - ] ?? - supportedProperty[ - "http://www.w3.org/2000/01/rdf-schema#label" - ][0]["@value"], - { - id, - range, - type: getType(id, range), - reference: - "http://www.w3.org/ns/hydra/core#Link" === - get(supportedProperty, '["@type"][0]') - ? range // Will be updated in a subsequent pass - : null, - embedded: - "http://www.w3.org/ns/hydra/core#Link" !== - get(supportedProperty, '["@type"][0]') - ? (range as unknown as Resource) // Will be updated in a subsequent pass - : null, - required: get( - supportedProperties, - '["http://www.w3.org/ns/hydra/core#required"][0]["@value"]', - false, - ) as boolean, - description: get( - supportedProperties, - '["http://www.w3.org/ns/hydra/core#description"][0]["@value"]', - "", - ) as string, - maxCardinality: get( - supportedProperty, - '["http://www.w3.org/2002/07/owl#maxCardinality"][0]["@value"]', - null, - ) as number | null, - deprecated: get( - supportedProperties, - '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', - false, - ) as boolean, - }, - ); - - fields.push(field); - resourceFields.push(field); - - if ( - get( - supportedProperties, - '["http://www.w3.org/ns/hydra/core#readable"][0]["@value"]', - ) - ) { - readableFields.push(field); - } - - if ( - get( - supportedProperties, - '["http://www.w3.org/ns/hydra/core#writeable"][0]["@value"]', - ) || - get( - supportedProperties, - '["http://www.w3.org/ns/hydra/core#writable"][0]["@value"]', - ) - ) { - writableFields.push(field); - } - } + ) as number | null, + deprecated: get( + supportedProperties, + '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', + false, + ) as boolean, + }, + ); - // parse entrypoint's operations (a.k.a. collection operations) - if (property["http://www.w3.org/ns/hydra/core#supportedOperation"]) { - for (const entrypointOperation of property[ - "http://www.w3.org/ns/hydra/core#supportedOperation" - ]) { - if ( - !entrypointOperation["http://www.w3.org/ns/hydra/core#returns"] - ) { - continue; - } - - const range = - entrypointOperation["http://www.w3.org/ns/hydra/core#returns"][0][ - "@id" - ]; - const method = - entrypointOperation["http://www.w3.org/ns/hydra/core#method"][0][ - "@value" - ]; - let type: OperationType = "list"; - if (method === "POST") { - type = "create"; - } - const operation = new Operation( - getTitleOrLabel(entrypointOperation), - type, - { - method, - expects: - entrypointOperation[ - "http://www.w3.org/ns/hydra/core#expects" - ] && - entrypointOperation[ - "http://www.w3.org/ns/hydra/core#expects" - ][0]["@id"], - returns: range, - types: entrypointOperation["@type"], - deprecated: get( - entrypointOperation, - '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', - false, - ) as boolean, - }, - ); - - resourceOperations.push(operation); - operations.push(operation); - } - } + fields.push(field); + resourceFields.push(field); + + if ( + get( + supportedProperties, + '["http://www.w3.org/ns/hydra/core#readable"][0]["@value"]', + ) + ) { + readableFields.push(field); + } + + if ( + get( + supportedProperties, + '["http://www.w3.org/ns/hydra/core#writeable"][0]["@value"]', + ) || + get( + supportedProperties, + '["http://www.w3.org/ns/hydra/core#writable"][0]["@value"]', + ) + ) { + writableFields.push(field); + } + } - // parse resource operations (a.k.a. item operations) - for (const supportedOperation of relatedClass[ - "http://www.w3.org/ns/hydra/core#supportedOperation" - ] || []) { - if (!supportedOperation["http://www.w3.org/ns/hydra/core#returns"]) { - continue; - } - - const range = - supportedOperation["http://www.w3.org/ns/hydra/core#returns"][0][ - "@id" - ]; - const method = - supportedOperation["http://www.w3.org/ns/hydra/core#method"][0][ - "@value" - ]; - let type: OperationType = "show"; - if (method === "POST") { - type = "create"; - } - if (method === "PUT" || method === "PATCH") { - type = "edit"; - } - if (method === "DELETE") { - type = "delete"; - } - const operation = new Operation( - getTitleOrLabel(supportedOperation), - type, - { - method, - expects: - supportedOperation["http://www.w3.org/ns/hydra/core#expects"] && - supportedOperation[ - "http://www.w3.org/ns/hydra/core#expects" - ][0]["@id"], - returns: range, - types: supportedOperation["@type"], - deprecated: get( - supportedOperation, - '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', - false, - ) as boolean, - }, - ); - - resourceOperations.push(operation); - operations.push(operation); + // parse entrypoint's operations (a.k.a. collection operations) + if (property["http://www.w3.org/ns/hydra/core#supportedOperation"]) { + for (const entrypointOperation of property[ + "http://www.w3.org/ns/hydra/core#supportedOperation" + ]) { + if (!entrypointOperation["http://www.w3.org/ns/hydra/core#returns"]) { + continue; } - const resource = new Resource( - guessNameFromUrl(url, entrypointUrl), - url, + const range = + entrypointOperation["http://www.w3.org/ns/hydra/core#returns"]?.[0]?.[ + "@id" + ]; + const method = + entrypointOperation["http://www.w3.org/ns/hydra/core#method"]?.[0]?.[ + "@value" + ]; + let type: OperationType = "list"; + if (method === "POST") { + type = "create"; + } + const operation = new Operation( + getTitleOrLabel(entrypointOperation), + type, { - id: relatedClass["@id"], - title: get( - relatedClass, - '["http://www.w3.org/ns/hydra/core#title"][0]["@value"]', - "", - ) as string, - fields: resourceFields, - readableFields, - writableFields, - operations: resourceOperations, + method, + expects: + entrypointOperation[ + "http://www.w3.org/ns/hydra/core#expects" + ]?.[0]?.["@id"], + returns: range, + types: entrypointOperation["@type"], deprecated: get( - relatedClass, + entrypointOperation, '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', false, ) as boolean, }, ); - resource.parameters = []; - resource.getParameters = (): Promise => - getParameters(resource, options); + resourceOperations.push(operation); + operations.push(operation); + } + } - resources.push(resource); + // parse resource operations (a.k.a. item operations) + for (const supportedOperation of relatedClass[ + "http://www.w3.org/ns/hydra/core#supportedOperation" + ] || []) { + if (!supportedOperation["http://www.w3.org/ns/hydra/core#returns"]) { + continue; } - // Resolve references and embedded - for (const field of fields) { - if (null !== field.reference) { - field.reference = - resources.find((resource) => resource.id === field.reference) || - null; - } - if (null !== field.embedded) { - field.embedded = - resources.find((resource) => resource.id === field.embedded) || - null; - } + const range = + supportedOperation["http://www.w3.org/ns/hydra/core#returns"]?.[0]?.[ + "@id" + ]; + const method = + supportedOperation["http://www.w3.org/ns/hydra/core#method"]?.[0]?.[ + "@value" + ]; + let type: OperationType = "show"; + if (method === "POST") { + type = "create"; + } + if (method === "PUT" || method === "PATCH") { + type = "edit"; } + if (method === "DELETE") { + type = "delete"; + } + const operation = new Operation( + getTitleOrLabel(supportedOperation), + type, + { + method, + expects: + supportedOperation[ + "http://www.w3.org/ns/hydra/core#expects" + ]?.[0]?.["@id"], + returns: range, + types: supportedOperation["@type"], + deprecated: get( + supportedOperation, + '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', + false, + ) as boolean, + }, + ); + + resourceOperations.push(operation); + operations.push(operation); + } - return { - api: new Api(entrypointUrl, { title, resources }), - response, - status: response.status, - }; - }, - (data: { response: Response }) => - Promise.reject({ - api: new Api(entrypointUrl, { resources: [] }), - error: data, - response: data.response, - status: get(data.response, "status"), - }), - ); + const resource = new Resource(guessNameFromUrl(url, entrypointUrl), url, { + id: relatedClass["@id"], + title: get( + relatedClass, + '["http://www.w3.org/ns/hydra/core#title"][0]["@value"]', + "", + ) as string, + fields: resourceFields, + readableFields, + writableFields, + operations: resourceOperations, + deprecated: get( + relatedClass, + '["http://www.w3.org/2002/07/owl#deprecated"][0]["@value"]', + false, + ) as boolean, + }); + + resource.parameters = []; + resource.getParameters = (): Promise => + getParameters(resource, options); + + resources.push(resource); + } + + // Resolve references and embedded + for (const field of fields) { + if (field.reference !== null) { + field.reference = + resources.find((resource) => resource.id === field.reference) || null; + } + if (field.embedded !== null) { + field.embedded = + resources.find((resource) => resource.id === field.embedded) || null; + } + } + + return { + api: new Api(entrypointUrl, { title, resources }), + response, + status: response.status, + }; } diff --git a/src/hydra/types.ts b/src/hydra/types.ts index e03a911..6bba55f 100644 --- a/src/hydra/types.ts +++ b/src/hydra/types.ts @@ -2,14 +2,14 @@ export interface RequestInitExtended extends Omit { headers?: HeadersInit | (() => HeadersInit); } -export type IriTemplateMapping = { +export interface IriTemplateMapping { "@type": "IriTemplateMapping"; variable: "string"; property: string | null; required: boolean; -}; +} -export type ExpandedOperation = { +export interface ExpandedOperation { "@type": ["http://www.w3.org/ns/hydra/core#Operation"]; "http://www.w3.org/2000/01/rdf-schema#label": [ { @@ -41,9 +41,9 @@ export type ExpandedOperation = { "@value": boolean; }, ]; -}; +} -export type ExpandedRdfProperty = { +export interface ExpandedRdfProperty { "@id": string; "@type": [ | "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" @@ -92,9 +92,9 @@ export type ExpandedRdfProperty = { "@value": number; }, ]; -}; +} -export type ExpandedSupportedProperty = { +export interface ExpandedSupportedProperty { "@type": ["http://www.w3.org/ns/hydra/core#SupportedProperty"]; "http://www.w3.org/ns/hydra/core#title": [ { @@ -116,20 +116,28 @@ export type ExpandedSupportedProperty = { "@value": boolean; }, ]; + /** + * @deprecated + */ "http://www.w3.org/ns/hydra/core#writeable": [ { "@value": boolean; }, ]; + "http://www.w3.org/ns/hydra/core#writable": [ + { + "@value": boolean; + }, + ]; "http://www.w3.org/ns/hydra/core#property": [ExpandedRdfProperty]; "http://www.w3.org/2002/07/owl#deprecated"?: [ { "@value": boolean; }, ]; -}; +} -export type ExpandedClass = { +export interface ExpandedClass { "@id": string; "@type": ["http://www.w3.org/ns/hydra/core#Class"]; "http://www.w3.org/2000/01/rdf-schema#label"?: [ @@ -159,9 +167,9 @@ export type ExpandedClass = { "@value": boolean; }, ]; -}; +} -export type ExpandedDoc = { +export interface ExpandedDoc { "@id": string; "@type": ["http://www.w3.org/ns/hydra/core#ApiDocumentation"]; "http://www.w3.org/ns/hydra/core#title": [ @@ -180,9 +188,9 @@ export type ExpandedDoc = { }, ]; "http://www.w3.org/ns/hydra/core#supportedClass": ExpandedClass[]; -}; +} -export type Entrypoint = { +export interface Entrypoint { "@id": string; "@type": [string]; [key: string]: @@ -193,4 +201,4 @@ export type Entrypoint = { ] | string | [string]; -}; +} diff --git a/src/openapi3/getType.ts b/src/openapi3/getType.ts index 612c298..52ac48e 100644 --- a/src/openapi3/getType.ts +++ b/src/openapi3/getType.ts @@ -1,7 +1,10 @@ import inflection from "inflection"; import type { FieldType } from "../Field.js"; -const getType = (openApiType: string, format?: string): FieldType => { +export default function getType( + openApiType: string, + format?: string, +): FieldType { if (format) { switch (format) { case "int32": @@ -13,6 +16,4 @@ const getType = (openApiType: string, format?: string): FieldType => { } return openApiType; -}; - -export default getType; +} diff --git a/src/openapi3/handleJson.ts b/src/openapi3/handleJson.ts index 3a6d7ff..2dfdcbc 100644 --- a/src/openapi3/handleJson.ts +++ b/src/openapi3/handleJson.ts @@ -10,50 +10,60 @@ import getType from "./getType.js"; import type { OpenAPIV3 } from "openapi-types"; import type { OperationType } from "../Operation.js"; -const isRef = ( - maybeRef: T | OpenAPIV3.ReferenceObject, -): maybeRef is T => !("$ref" in maybeRef); +function isParameter( + maybeParameter: OpenAPIV3.ReferenceObject | OpenAPIV3.ParameterObject, +): maybeParameter is OpenAPIV3.ParameterObject { + return ( + maybeParameter !== undefined && + "name" in maybeParameter && + "in" in maybeParameter + ); +} + +function isSchema( + maybeSchema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, +): maybeSchema is OpenAPIV3.SchemaObject { + return maybeSchema !== undefined && !("$ref" in maybeSchema); +} -export const removeTrailingSlash = (url: string): string => { +export function removeTrailingSlash(url: string): string { if (url.endsWith("/")) { url = url.slice(0, -1); } return url; -}; +} -const mergeResources = (resourceA: Resource, resourceB: Resource) => { - resourceB.fields?.forEach((fieldB) => { +function mergeResources(resourceA: Resource, resourceB: Resource) { + for (const fieldB of resourceB.fields ?? []) { if (!resourceA.fields?.some((fieldA) => fieldA.name === fieldB.name)) { resourceA.fields?.push(fieldB); } - }); - resourceB.readableFields?.forEach((fieldB) => { + } + for (const fieldB of resourceB.readableFields ?? []) { if ( !resourceA.readableFields?.some((fieldA) => fieldA.name === fieldB.name) ) { resourceA.readableFields?.push(fieldB); } - }); - resourceB.writableFields?.forEach((fieldB) => { + } + for (const fieldB of resourceB.writableFields ?? []) { if ( !resourceA.writableFields?.some((fieldA) => fieldA.name === fieldB.name) ) { resourceA.writableFields?.push(fieldB); } - }); + } return resourceA; -}; +} -const buildResourceFromSchema = ( +function buildResourceFromSchema( schema: OpenAPIV3.SchemaObject, name: string, title: string, url: string, -) => { - const description = schema.description; - const properties = schema.properties || {}; - +) { + const { description = "", properties = {} } = schema; const fieldNames = Object.keys(properties); const requiredFields = schema.required || []; @@ -89,7 +99,7 @@ const buildResourceFromSchema = ( reference: null, embedded: null, nullable: property.nullable || false, - required: !!requiredFields.find((value) => value === fieldName), + required: requiredFields.some((value) => value === fieldName), description: property.description || "", }); @@ -111,20 +121,21 @@ const buildResourceFromSchema = ( readableFields, writableFields, parameters: [], + // oxlint-disable-next-line prefer-await-to-then getParameters: () => Promise.resolve([]), }); -}; +} -const buildOperationFromPathItem = ( +function buildOperationFromPathItem( httpMethod: `${OpenAPIV3.HttpMethods}`, operationType: OperationType, pathItem: OpenAPIV3.OperationObject, -): Operation => { +): Operation { return new Operation(pathItem.summary || operationType, operationType, { method: httpMethod.toUpperCase(), deprecated: !!pathItem.deprecated, }); -}; +} /* Assumptions: @@ -136,7 +147,7 @@ const buildOperationFromPathItem = ( probably accepts parameters and would respond with an object. */ -export default async function ( +export default async function handleJson( response: OpenAPIV3.Document, entrypointUrl: string, ): Promise { @@ -146,29 +157,32 @@ export default async function ( const paths = getResourcePaths(document.paths); - let serverUrlOrRelative = "/"; - if (document.servers) { - serverUrlOrRelative = document.servers[0].url; - } - + const serverUrlOrRelative = document.servers?.[0]?.url || "/"; const serverUrl = new URL(serverUrlOrRelative, entrypointUrl).href; const resources: Resource[] = []; - paths.forEach((path) => { + for (const path of paths) { const splittedPath = removeTrailingSlash(path).split("/"); - const name = inflection.pluralize(splittedPath[splittedPath.length - 2]); + const baseName = splittedPath[splittedPath.length - 2]; + if (!baseName) { + throw new Error("Invalid path: " + path); + } + + const name = inflection.pluralize(baseName); const url = `${removeTrailingSlash(serverUrl)}/${name}`; const pathItem = document.paths[path]; if (!pathItem) { throw new Error(); } - const title = inflection.classify(splittedPath[splittedPath.length - 2]); + const title = inflection.classify(baseName); const showOperation = pathItem.get; const editOperation = pathItem.put || pathItem.patch; - if (!showOperation && !editOperation) return; + if (!showOperation && !editOperation) { + continue; + } const showSchema = showOperation ? (get( @@ -184,7 +198,9 @@ export default async function ( ) as unknown as OpenAPIV3.SchemaObject) : null; - if (!showSchema && !editSchema) return; + if (!showSchema && !editSchema) { + continue; + } const showResource = showSchema ? buildResourceFromSchema(showSchema, name, title, url) @@ -193,7 +209,9 @@ export default async function ( ? buildResourceFromSchema(editSchema, name, title, url) : null; let resource = showResource ?? editResource; - if (!resource) return; + if (!resource) { + continue; + } if (showResource && editResource) { resource = mergeResources(showResource, editResource); } @@ -227,15 +245,15 @@ export default async function ( if (listOperation && listOperation.parameters) { resource.parameters = listOperation.parameters - .filter(isRef) + .filter(isParameter) .map( (parameter) => new Parameter( parameter.name, - parameter.schema && isRef(parameter.schema) - ? parameter.schema.type - ? getType(parameter.schema.type) - : null + parameter.schema && + isSchema(parameter.schema) && + parameter.schema.type + ? getType(parameter.schema.type) : null, parameter.required || false, parameter.description || "", @@ -245,18 +263,18 @@ export default async function ( } resources.push(resource); - }); + } // Guess embeddeds and references from property names - resources.forEach((resource) => { - resource.fields?.forEach((field) => { + 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) { - return; + continue; } field.maxCardinality = field.type === "array" ? null : 1; if (field.type === "object" || field.arrayType === "object") { @@ -264,8 +282,8 @@ export default async function ( } else { field.reference = guessedResource; } - }); - }); + } + } return resources; } diff --git a/src/openapi3/parseOpenApi3Documentation.ts b/src/openapi3/parseOpenApi3Documentation.ts index dca307a..c92adca 100644 --- a/src/openapi3/parseOpenApi3Documentation.ts +++ b/src/openapi3/parseOpenApi3Documentation.ts @@ -1,3 +1,4 @@ +// oxlint-disable prefer-await-to-then import { Api } from "../Api.js"; import handleJson, { removeTrailingSlash } from "./handleJson.js"; import type { OpenAPIV3 } from "openapi-types"; @@ -30,11 +31,13 @@ export default function parseOpenApi3Documentation( status: res.status, })); }, - ([res, response]: [res: Response, response: OpenAPIV3.Document]) => - Promise.reject({ + ([res, response]: [res: Response, response: OpenAPIV3.Document]) => { + // oxlint-disable-next-line no-throw-literal + throw { api: new Api(entrypointUrl, { resources: [] }), response, status: res.status, - }), + }; + }, ); } diff --git a/src/swagger/handleJson.test.ts b/src/swagger/handleJson.test.ts index 82e316a..a5465a4 100644 --- a/src/swagger/handleJson.test.ts +++ b/src/swagger/handleJson.test.ts @@ -1235,33 +1235,28 @@ describe(`Parse Swagger Documentation from Json`, () => { ); test(`Properties to be equal`, () => { - expect(toBeParsed[0].name).toBe(parsed[0].name); - expect(toBeParsed[0].url).toBe(parsed[0].url); - expect(toBeParsed[0].id).toBe(parsed[0].id); + expect(toBeParsed[0]).toMatchObject({ + name: parsed[0]?.name, + url: parsed[0]?.url, + id: parsed[0]?.id, + }); - assert( - "fields" in toBeParsed[0], - "Expected 'fields' property in the first resource", - ); + const toBeParsedFields = toBeParsed[0]?.fields; - const toBeParsedFields = toBeParsed[0].fields; assert(!!toBeParsedFields, "Expected 'fields' to be defined"); - expect(toBeParsedFields[0]).toEqual(parsed[0].fields[0]); - expect(toBeParsedFields[1]).toEqual(parsed[0].fields[1]); - expect(toBeParsedFields[2]).toEqual(parsed[0].fields[2]); - expect(toBeParsedFields[3]).toEqual(parsed[0].fields[3]); - expect(toBeParsedFields[4]).toEqual(parsed[0].fields[4]); - expect(toBeParsedFields[5]).toEqual(parsed[0].fields[5]); + expect(toBeParsedFields).toEqual(parsed[0]?.fields); - expect(toBeParsed[1].name).toBe(parsed[1].name); - expect(toBeParsed[1].url).toBe(parsed[1].url); - expect(toBeParsed[1].id).toBe(parsed[1].id); + expect(toBeParsed[1]).toMatchObject({ + name: parsed[1]?.name, + url: parsed[1]?.url, + id: parsed[1]?.id, + }); assert( - "fields" in toBeParsed[1], + !!toBeParsed[1]?.fields, "Expected 'fields' property in the second resource", ); - expect(toBeParsed[1].fields?.[0]).toEqual(parsed[1].fields[0]); + expect(toBeParsed[1].fields?.[0]).toEqual(parsed[1]?.fields[0]); }); }); diff --git a/src/swagger/handleJson.ts b/src/swagger/handleJson.ts index d4be4c8..761219a 100644 --- a/src/swagger/handleJson.ts +++ b/src/swagger/handleJson.ts @@ -6,14 +6,14 @@ import getResourcePaths from "../utils/getResources.js"; import getType from "../openapi3/getType.js"; import type { OpenAPIV2 } from "openapi-types"; -export const removeTrailingSlash = (url: string): string => { +export function removeTrailingSlash(url: string): string { if (url.endsWith("/")) { url = url.slice(0, -1); } return url; -}; +} -export default function ( +export default function handleJson( response: OpenAPIV2.Document, entrypointUrl: string, ): Resource[] { @@ -21,10 +21,15 @@ export default function ( return paths.map((path) => { const splittedPath = removeTrailingSlash(path).split("/"); - const name = inflection.pluralize(splittedPath[splittedPath.length - 2]); + const baseName = splittedPath[splittedPath.length - 2]; + if (!baseName) { + throw new Error("Invalid path: " + path); + } + + const name = inflection.pluralize(baseName); const url = `${removeTrailingSlash(entrypointUrl)}/${name}`; - const title = inflection.classify(splittedPath[splittedPath.length - 2]); + const title = inflection.classify(baseName); if (!response.definitions) { throw new Error(); // @TODO @@ -36,7 +41,7 @@ export default function ( throw new Error(); // @TODO } - const description = definition.description; + const description = definition.description || ""; const properties = definition.properties; if (!properties) { @@ -60,7 +65,7 @@ export default function ( get(property, "type", "") as string, get(property, "format", "") as string, ), - enum: property.enum + enum: property?.enum ? Object.fromEntries( property.enum.map((enumValue: string | number) => [ typeof enumValue === "string" @@ -72,8 +77,8 @@ export default function ( : null, reference: null, embedded: null, - required: !!requiredFields.find((value) => value === fieldName), - description: property.description || "", + required: requiredFields.some((value) => value === fieldName), + description: property?.description || "", }); }); diff --git a/src/swagger/parseSwaggerDocumentation.ts b/src/swagger/parseSwaggerDocumentation.ts index 2702f1a..8a994da 100644 --- a/src/swagger/parseSwaggerDocumentation.ts +++ b/src/swagger/parseSwaggerDocumentation.ts @@ -1,3 +1,4 @@ +// oxlint-disable prefer-await-to-then import { Api } from "../Api.js"; import handleJson, { removeTrailingSlash } from "./handleJson.js"; import type { OpenAPIV2 } from "openapi-types"; @@ -19,17 +20,19 @@ export default function parseSwaggerDocumentation( const title = response.info.title; const resources = handleJson(response, entrypointUrl); - return Promise.resolve({ + return { api: new Api(entrypointUrl, { title, resources }), response, status: res.status, - }); + }; }, - ([res, response]: [res: Response, response: OpenAPIV2.Document]) => - Promise.reject({ + ([res, response]: [res: Response, response: OpenAPIV2.Document]) => { + // oxlint-disable-next-line no-throw-literal + throw { api: new Api(entrypointUrl, { resources: [] }), response, status: res.status, - }), + }; + }, ); } diff --git a/src/utils/assignSealed.ts b/src/utils/assignSealed.ts index e2f22ee..9b52d7e 100644 --- a/src/utils/assignSealed.ts +++ b/src/utils/assignSealed.ts @@ -1,14 +1,13 @@ export function assignSealed< - TSrc extends { [key: string]: any }, + TSrc extends Record, TTarget extends TSrc, >(target: TTarget, src: TSrc): void { - Object.keys(src).forEach((key) => { + for (const key of Object.keys(src)) { Object.defineProperty(target, key, { writable: true, enumerable: true, configurable: false, - value: src[key], }); - }); + } } diff --git a/src/utils/getResources.ts b/src/utils/getResources.ts index d804eb1..a1ee4c1 100644 --- a/src/utils/getResources.ts +++ b/src/utils/getResources.ts @@ -1,14 +1,13 @@ import type { OpenAPIV2, OpenAPIV3 } from "openapi-types"; -const getResources = ( +export default function getResources( paths: OpenAPIV2.PathsObject | OpenAPIV3.PathsObject, -): string[] => - Array.from( - new Set( +): string[] { + return [ + ...new Set( Object.keys(paths).filter((path) => { return new RegExp("^[^{}]+/{[^{}]+}/?$").test(path); }), ), - ); - -export default getResources; + ]; +} diff --git a/src/utils/parsedJsonReplacer.ts b/src/utils/parsedJsonReplacer.ts index 04630bf..b7199a1 100644 --- a/src/utils/parsedJsonReplacer.ts +++ b/src/utils/parsedJsonReplacer.ts @@ -5,10 +5,10 @@ interface ResourceValue { type ParsedJsonReplacerResult = ResourceValue | string | null; -const parsedJsonReplacer = ( +export default function parsedJsonReplacer( key: string, value: null | ResourceValue, -): ParsedJsonReplacerResult => { +): ParsedJsonReplacerResult { if ( ["reference", "embedded"].includes(key) && typeof value === "object" && @@ -18,6 +18,4 @@ const parsedJsonReplacer = ( } return value; -}; - -export default parsedJsonReplacer; +} diff --git a/tsconfig.json b/tsconfig.json index 43bf818..aedd3ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,12 @@ { "compilerOptions": { /* Type checking */ - // "exactOptionalPropertyTypes": true, + "exactOptionalPropertyTypes": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "noImplicitOverride": true, "noImplicitReturns": true, - // "noUncheckedIndexedAccess": true, + "noUncheckedIndexedAccess": true, "noPropertyAccessFromIndexSignature": true, "noUnusedLocals": true, "noUnusedParameters": true, @@ -33,7 +33,7 @@ "sourceMap": true, /* Interop Constraints */ - // "erasableSyntaxOnly": true, + "erasableSyntaxOnly": true, "isolatedDeclarations": true, "verbatimModuleSyntax": true }, diff --git a/vitest.setup.ts b/vitest.setup.ts index b309d7d..8eae4f2 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -1,4 +1,5 @@ -import { setupServer, type SetupServerApi } from "msw/node"; +import { setupServer } from "msw/node"; +import type { SetupServerApi } from "msw/node"; import { beforeAll, afterEach, afterAll } from "vitest"; export const server: SetupServerApi = setupServer();