From 12ecde91bef352c94b7a27ca262951f85c1c513f Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Tue, 21 Jan 2025 20:30:03 +0100 Subject: [PATCH 1/4] manually update various tooling-related dependencies (#12286) --- .../api-report-link_persisted-queries.api.md | 4 +- .eslintrc | 105 -- .size-limits.json | 2 +- eslint-local-rules/testSetup.ts | 11 +- eslint.config.mjs | 175 +++ package-lock.json | 1295 +++++++++-------- package.json | 48 +- patches/eslint-plugin-react-hooks+4.6.2.patch | 28 - ...eslint-plugin-testing-library+7.1.1.patch} | 2 +- renovate.json | 2 + scripts/memory/package.json | 2 +- src/cache/index.ts | 2 +- src/core/index.ts | 4 +- src/errors/index.ts | 2 +- src/link/core/index.ts | 2 +- .../__tests__/client/Mutation.test.tsx | 7 - src/react/components/index.ts | 2 +- src/react/hoc/index.ts | 2 +- .../hooks/__tests__/useSuspenseQuery.test.tsx | 1 - src/react/hooks/internal/useDeepMemo.ts | 1 + src/react/hooks/useBackgroundQuery.ts | 5 +- src/react/hooks/useFragment.ts | 5 +- src/react/hooks/useMutation.ts | 1 + src/react/hooks/useQuery.ts | 6 +- src/react/hooks/useQueryRefHandlers.ts | 4 +- src/react/hooks/useReadQuery.ts | 4 +- src/react/hooks/useSubscription.ts | 1 + src/react/hooks/useSuspenseQuery.ts | 6 +- src/react/index.ts | 2 +- .../__tests__/invariantWrappers.test.ts | 2 +- src/utilities/index.ts | 2 +- 31 files changed, 903 insertions(+), 832 deletions(-) delete mode 100644 .eslintrc create mode 100644 eslint.config.mjs delete mode 100644 patches/eslint-plugin-react-hooks+4.6.2.patch rename patches/{eslint-plugin-testing-library+6.3.0.patch => eslint-plugin-testing-library+7.1.1.patch} (96%) diff --git a/.api-reports/api-report-link_persisted-queries.api.md b/.api-reports/api-report-link_persisted-queries.api.md index 0e4fa0e4639..d6da2bba7b1 100644 --- a/.api-reports/api-report-link_persisted-queries.api.md +++ b/.api-reports/api-report-link_persisted-queries.api.md @@ -63,7 +63,7 @@ interface BaseOptions { // Warning: (ae-forgotten-export) The symbol "ApolloLink" needs to be exported by the entry point index.d.ts // // @public (undocumented) -export const createPersistedQueryLink: (options: PersistedQueryLink.Options) => ApolloLink & { +export const createPersistedQueryLink: (options: PersistedQueryLink.Options) => ApolloLink & ({ resetHashCache: () => void; } & ({ getMemoryInternals(): { @@ -73,7 +73,7 @@ export const createPersistedQueryLink: (options: PersistedQueryLink.Options) => }; } | { getMemoryInternals?: undefined; -}); +})); // @public (undocumented) interface DefaultContext extends Record { diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 2cc564c03e1..00000000000 --- a/.eslintrc +++ /dev/null @@ -1,105 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "import", "local-rules"], - "env": { - "browser": true, - "node": true, - "es2021": true - }, - "parserOptions": { - "ecmaVersion": "latest" - }, - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true - } - } - }, - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "excludedFiles": ["**/__tests__/**/*.*", "*.d.ts"], - "extends": ["plugin:react-hooks/recommended"], - "parserOptions": { - "project": [ - "./tsconfig.json", - "./scripts/codemods/data-masking/tsconfig.json" - ] - }, - "plugins": ["eslint-plugin-react-compiler"], - "rules": { - "react-compiler/react-compiler": "error", - "@typescript-eslint/consistent-type-imports": [ - "error", - { - "prefer": "type-imports", - "disallowTypeAnnotations": false, - "fixStyle": "separate-type-imports" - } - ], - "@typescript-eslint/consistent-type-exports": ["error"], - "@typescript-eslint/no-import-type-side-effects": "error", - "@typescript-eslint/ban-types": [ - "error", - { - "types": { - "GraphQLError": { - "message": "Use GraphQLFormattedError instead", - "fixWith": "GraphQLFormattedError" - }, - "ExecutionResult": { - "message": "Use FormattedExecutionResult instead", - "fixWith": "FormattedExecutionResult" - } - }, - "extendDefaults": false - } - ], - "no-restricted-syntax": [ - "error", - { - "selector": "ImportDeclaration[source.value='react'][importKind!='type'] :matches(ImportSpecifier, ImportDefaultSpecifier)", - "message": "Please only use the namespace import syntax (`import * as React from 'react'`) for React imports!" - } - ], - "import/consistent-type-specifier-style": ["error", "prefer-top-level"], - "import/extensions": [ - "error", - "always", - { - "ignorePackages": true, - "checkTypeImports": true - } - ], - "local-rules/require-using-disposable": "error" - } - }, - { - "files": [ - "**/__tests__/**/*.[jt]s", - "**/__tests__/**/*.[jt]sx", - "**/?(*.)+(test).[jt]s", - "**/?(*.)+(test).[jt]sx" - ], - "extends": ["plugin:testing-library/react"], - "parserOptions": { - "project": "./tsconfig.tests.json" - }, - "rules": { - "testing-library/prefer-user-event": "error", - "testing-library/no-wait-for-multiple-assertions": "off", - "local-rules/require-using-disposable": "error", - "local-rules/require-disable-act-environment": "error", - "local-rules/forbid-act-in-disabled-act-environment": "error", - "@typescript-eslint/no-floating-promises": "warn" - } - } - ], - "rules": { - "import/no-unresolved": "error" - } -} diff --git a/.size-limits.json b/.size-limits.json index 54621796c0c..9d779295ef1 100644 --- a/.size-limits.json +++ b/.size-limits.json @@ -1,4 +1,4 @@ { "dist/apollo-client.min.cjs": 41639, - "import { ApolloClient, InMemoryCache, HttpLink } from \"dist/index.js\" (production)": 34381 + "import { ApolloClient, InMemoryCache, HttpLink } from \"dist/index.js\" (production)": 34382 } diff --git a/eslint-local-rules/testSetup.ts b/eslint-local-rules/testSetup.ts index 27443e815c5..54252de0138 100644 --- a/eslint-local-rules/testSetup.ts +++ b/eslint-local-rules/testSetup.ts @@ -1,4 +1,5 @@ import { RuleTester } from "@typescript-eslint/rule-tester"; +import tsParser from "@typescript-eslint/parser"; import nodeTest from "node:test"; RuleTester.it = nodeTest.it; @@ -7,9 +8,11 @@ RuleTester.describe = nodeTest.describe; RuleTester.afterAll = nodeTest.after; export const ruleTester = new RuleTester({ - parser: "@typescript-eslint/parser", - parserOptions: { - project: "./tsconfig.json", - tsconfigRootDir: __dirname + "/fixtures", + languageOptions: { + parser: tsParser, + parserOptions: { + project: "./tsconfig.json", + tsconfigRootDir: __dirname + "/fixtures", + }, }, }); diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000000..d0efef9560a --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,175 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import _import from "eslint-plugin-import"; +import localRules from "eslint-plugin-local-rules"; +import { fixupPluginRules, fixupConfigRules } from "@eslint/compat"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import reactCompiler from "eslint-plugin-react-compiler"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default [ + { + plugins: { + "@typescript-eslint": typescriptEslint, + import: fixupPluginRules(_import), + "local-rules": localRules, + }, + + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + }, + + parser: tsParser, + ecmaVersion: "latest", + sourceType: "commonjs", + }, + + settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"], + }, + + "import/resolver": { + typescript: { + alwaysTryTypes: true, + }, + }, + }, + + rules: { + "import/no-unresolved": "error", + }, + }, + ...fixupConfigRules(compat.extends("plugin:react-hooks/recommended")).map( + (config) => ({ + ...config, + files: ["**/*.ts", "**/*.tsx"], + ignores: ["**/__tests__/**/*.*", "**/*.d.ts"], + }) + ), + { + files: ["**/*.ts", "**/*.tsx"], + ignores: ["**/__tests__/**/*.*", "**/*.d.ts"], + + plugins: { + "react-compiler": reactCompiler, + }, + + languageOptions: { + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: [ + "./tsconfig.json", + "./scripts/codemods/data-masking/tsconfig.json", + ], + }, + }, + + rules: { + "react-compiler/react-compiler": "error", + + "@typescript-eslint/consistent-type-imports": [ + "error", + { + prefer: "type-imports", + disallowTypeAnnotations: false, + fixStyle: "separate-type-imports", + }, + ], + + "@typescript-eslint/consistent-type-exports": ["error"], + "@typescript-eslint/no-import-type-side-effects": "error", + + "@typescript-eslint/no-restricted-types": [ + "error", + { + types: { + GraphQLError: { + message: "Use GraphQLFormattedError instead", + fixWith: "GraphQLFormattedError", + }, + + ExecutionResult: { + message: "Use FormattedExecutionResult instead", + fixWith: "FormattedExecutionResult", + }, + }, + }, + ], + + "no-restricted-syntax": [ + "error", + { + selector: + "ImportDeclaration[source.value='react'][importKind!='type'] :matches(ImportSpecifier, ImportDefaultSpecifier)", + message: + "Please only use the namespace import syntax (`import * as React from 'react'`) for React imports!", + }, + ], + + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], + + "import/extensions": [ + "error", + "always", + { + ignorePackages: true, + checkTypeImports: true, + }, + ], + + "local-rules/require-using-disposable": "error", + }, + }, + ...compat.extends("plugin:testing-library/react").map((config) => ({ + ...config, + + files: [ + "**/__tests__/**/*.[jt]s", + "**/__tests__/**/*.[jt]sx", + "**/?(*.)+(test).[jt]s", + "**/?(*.)+(test).[jt]sx", + ], + })), + { + files: [ + "**/__tests__/**/*.[jt]s", + "**/__tests__/**/*.[jt]sx", + "**/?(*.)+(test).[jt]s", + "**/?(*.)+(test).[jt]sx", + ], + + languageOptions: { + ecmaVersion: 5, + sourceType: "script", + + parserOptions: { + project: "./tsconfig.tests.json", + }, + }, + + rules: { + "testing-library/prefer-user-event": "error", + "testing-library/no-wait-for-multiple-assertions": "off", + "local-rules/require-using-disposable": "error", + "local-rules/require-disable-act-environment": "error", + "local-rules/forbid-act-in-disabled-act-environment": "error", + "@typescript-eslint/no-floating-promises": "warn", + }, + }, +]; diff --git a/package-lock.json b/package-lock.json index bb622e36c3e..a4a81f70d4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,20 +27,23 @@ }, "devDependencies": { "@arethetypeswrong/cli": "0.15.3", - "@ark/attest": "^0.28.0", + "@ark/attest": "0.28.0", "@babel/parser": "7.25.0", "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.7", + "@eslint/compat": "1.2.5", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.18.0", "@graphql-tools/merge": "9.0.4", "@graphql-tools/schema": "10.0.4", "@graphql-tools/utils": "10.5.0", - "@microsoft/api-extractor": "7.47.9", + "@microsoft/api-extractor": "7.49.1", "@rollup/plugin-node-resolve": "11.2.1", "@size-limit/esbuild-why": "11.1.4", "@size-limit/preset-small-lib": "11.1.4", - "@testing-library/dom": "^10.4.0", + "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "^16.1.0", + "@testing-library/react": "16.1.0", "@testing-library/react-render-stream": "2.0.0", "@testing-library/user-event": "14.5.2", "@tsconfig/node20": "20.1.4", @@ -50,33 +53,34 @@ "@types/hoist-non-react-statics": "3.3.5", "@types/jest": "29.5.12", "@types/lodash": "4.17.7", - "@types/node": "20.16.1", + "@types/node": "22.10.7", "@types/node-fetch": "2.6.11", - "@types/prop-types": "^15.7.14", + "@types/prop-types": "15.7.14", "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "@types/relay-runtime": "14.1.24", "@types/use-sync-external-store": "0.0.6", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/rule-tester": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/eslint-plugin": "8.21.0", + "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/rule-tester": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/utils": "8.21.0", "acorn": "8.12.1", "ajv": "8.17.1", "blob-polyfill": "7.0.20220408", "bytes": "3.1.2", "cross-fetch": "4.0.0", - "eslint": "8.57.0", - "eslint-import-resolver-typescript": "3.6.1", + "eslint": "9.18.0", + "eslint-import-resolver-typescript": "3.7.0", "eslint-plugin-import": "npm:@phryneas/eslint-plugin-import@2.27.5-pr.2813.2817.199971c", - "eslint-plugin-local-rules": "2.0.1", - "eslint-plugin-react-compiler": "0.0.0-experimental-c8b3f72-20240517", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-testing-library": "6.3.0", - "expect-type": "0.19.0", + "eslint-plugin-local-rules": "3.0.2", + "eslint-plugin-react-compiler": "19.0.0-beta-decd7b8-20250118", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-testing-library": "7.1.1", + "expect-type": "1.1.0", "fetch-mock": "9.11.0", "glob": "8.1.0", + "globals": "15.14.0", "graphql": "16.9.0", "graphql-ws": "5.16.0", "jest": "29.7.0", @@ -103,14 +107,14 @@ "size-limit": "11.1.4", "subscriptions-transport-ws": "0.11.0", "terser": "5.31.3", - "ts-api-utils": "1.3.0", + "ts-api-utils": "2.0.0", "ts-jest": "29.2.3", "ts-jest-resolver": "2.0.1", - "ts-morph": "22.0.0", + "ts-morph": "25.0.0", "ts-node": "10.9.2", - "tsx": "^4.19.2", + "tsx": "4.19.2", "typedoc": "0.25.0", - "typescript": "5.5.3", + "typescript": "5.7.3", "wait-for-observables": "1.0.3", "web-streams-polyfill": "4.0.0", "whatwg-fetch": "3.6.20" @@ -968,6 +972,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", @@ -1929,24 +1943,72 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.5.tgz", + "integrity": "sha512-5iuG/StT+7OfvhoBHPlmxkPA9om6aDUFgmD4+mWKAGsYt4vCe8rypneG03AuseyRHBmcCLXQtIH5S26tIoggLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1954,7 +2016,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1965,6 +2027,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1980,18 +2043,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2002,6 +2064,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2013,27 +2076,78 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/plugin-kit/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.8.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/@graphql-tools/merge": { @@ -2099,18 +2213,42 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2126,11 +2264,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2738,38 +2884,40 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.47.9", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.47.9.tgz", - "integrity": "sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==", + "version": "7.49.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.49.1.tgz", + "integrity": "sha512-jRTR/XbQF2kb+dYn8hfYSicOGA99+Fo00GrsdMwdfE3eIgLtKdH6Qa2M3wZV9S2XmbgCaGX1OdPtYctbfu5jQg==", "dev": true, + "license": "MIT", "dependencies": { - "@microsoft/api-extractor-model": "7.29.8", - "@microsoft/tsdoc": "~0.15.0", - "@microsoft/tsdoc-config": "~0.17.0", - "@rushstack/node-core-library": "5.9.0", + "@microsoft/api-extractor-model": "7.30.2", + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.10.2", "@rushstack/rig-package": "0.5.3", - "@rushstack/terminal": "0.14.2", - "@rushstack/ts-command-line": "4.22.8", + "@rushstack/terminal": "0.14.5", + "@rushstack/ts-command-line": "4.23.3", "lodash": "~4.17.15", "minimatch": "~3.0.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", - "typescript": "5.4.2" + "typescript": "5.7.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.29.8.tgz", - "integrity": "sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==", + "version": "7.30.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.30.2.tgz", + "integrity": "sha512-3/t2F+WhkJgBzSNwlkTIL0tBgUoBqDqL66pT+nh2mPbM0NIDGVGtpqbGWPgHIzn/mn7kGS/Ep8D8po58e8UUIw==", "dev": true, + "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "~0.15.0", - "@microsoft/tsdoc-config": "~0.17.0", - "@rushstack/node-core-library": "5.9.0" + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.10.2" } }, "node_modules/@microsoft/api-extractor/node_modules/minimatch": { @@ -2802,9 +2950,9 @@ } }, "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2816,18 +2964,20 @@ } }, "node_modules/@microsoft/tsdoc": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", - "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==", - "dev": true + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "dev": true, + "license": "MIT" }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", - "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz", + "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==", "dev": true, + "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.15.0", + "@microsoft/tsdoc": "0.15.1", "ajv": "~8.12.0", "jju": "~1.4.0", "resolve": "~1.22.2" @@ -2838,6 +2988,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -2884,6 +3035,16 @@ "node": ">= 8" } }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@octokit/action": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@octokit/action/-/action-6.1.0.tgz", @@ -3226,10 +3387,11 @@ "dev": true }, "node_modules/@rushstack/node-core-library": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.9.0.tgz", - "integrity": "sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.10.2.tgz", + "integrity": "sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "~8.13.0", "ajv-draft-04": "~1.0.0", @@ -3254,6 +3416,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -3270,6 +3433,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3291,12 +3455,13 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.2.tgz", - "integrity": "sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.5.tgz", + "integrity": "sha512-TEOpNwwmsZVrkp0omnuTUTGZRJKTr6n6m4OITiNjkqzLAkcazVpwR1SOtBg6uzpkIBLgrcNHETqI8rbw3uiUfw==", "dev": true, + "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.9.0", + "@rushstack/node-core-library": "5.10.2", "supports-color": "~8.1.1" }, "peerDependencies": { @@ -3313,6 +3478,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3324,12 +3490,13 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.22.8", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.22.8.tgz", - "integrity": "sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.3.tgz", + "integrity": "sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==", "dev": true, + "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.14.2", + "@rushstack/terminal": "0.14.5", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -3886,14 +4053,14 @@ } }, "node_modules/@ts-morph/common": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.23.0.tgz", - "integrity": "sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.26.0.tgz", + "integrity": "sha512-/RmKAtctStXqM5nECMQ46duT74Hoig/DBzhWXGHcodlDNrgRbsbwwHqSKFNbca6z9Xt/CUWMeXOsC9QEN1+rqw==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.3.2", - "minimatch": "^9.0.3", - "mkdirp": "^3.0.1", + "minimatch": "^9.0.4", "path-browserify": "^1.0.1" } }, @@ -3902,15 +4069,17 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3921,21 +4090,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -3970,7 +4124,8 @@ "version": "1.0.38", "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/aria-query": { "version": "5.0.4", @@ -4025,6 +4180,13 @@ "integrity": "sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==", "dev": true }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/fetch-mock": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/@types/fetch-mock/-/fetch-mock-7.3.8.tgz", @@ -4131,13 +4293,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", - "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "version": "22.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz", + "integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.20.0" } }, "node_modules/@types/node-fetch": { @@ -4230,92 +4392,83 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz", + "integrity": "sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/type-utils": "8.21.0", + "@typescript-eslint/utils": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.21.0.tgz", + "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/typescript-estree": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/rule-tester": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/rule-tester/-/rule-tester-7.18.0.tgz", - "integrity": "sha512-ClrFQlwen9pJcYPIBLuarzBpONQAwjmJ0+YUjAo1TGzoZFJPyUK/A7bb4Mps0u+SMJJnFXbfMN8I9feQDf0O5A==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/rule-tester/-/rule-tester-8.21.0.tgz", + "integrity": "sha512-jIxshsOXmCQyL675Zd49/XwGMdUthRMcNyQSdxUN0K3EBCIh2XTMowUymfhjfs6Mm46vT2D4PjFb3u3ylgNxVg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.21.0", + "@typescript-eslint/utils": "8.21.0", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.6.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@eslint/eslintrc": ">=2", - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/rule-tester/node_modules/ajv": { @@ -4356,17 +4509,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz", + "integrity": "sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4374,41 +4527,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz", + "integrity": "sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/typescript-estree": "8.21.0", + "@typescript-eslint/utils": "8.21.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.21.0.tgz", + "integrity": "sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==", "dev": true, "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4416,32 +4565,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz", + "integrity": "sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/visitor-keys": "8.21.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -4484,46 +4631,60 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.21.0.tgz", + "integrity": "sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@typescript-eslint/scope-manager": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/typescript-estree": "8.21.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz", + "integrity": "sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.21.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript/analyze-trace": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@typescript/analyze-trace/-/analyze-trace-0.10.1.tgz", @@ -4616,12 +4777,6 @@ "typescript": "*" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@wry/caches": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.0.tgz", @@ -4718,6 +4873,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4765,6 +4921,7 @@ "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^8.5.0" }, @@ -4779,6 +4936,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -5573,10 +5731,11 @@ } }, "node_modules/code-block-writer": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.1.tgz", - "integrity": "sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==", - "dev": true + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "dev": true, + "license": "MIT" }, "node_modules/collect-v8-coverage": { "version": "1.0.2", @@ -5697,10 +5856,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5801,12 +5961,13 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -6010,18 +6171,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -6402,58 +6551,63 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { @@ -6477,18 +6631,20 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", "dev": true, + "license": "ISC", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.7", + "enhanced-resolve": "^5.15.0", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6498,7 +6654,16 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { @@ -6576,218 +6741,81 @@ "dependencies": { "esutils": "^2.0.2" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-local-rules": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-2.0.1.tgz", - "integrity": "sha512-AJhGd+GcI5r2dbjiGPixM8jnBl0XFxqoVbqzwKbYz+nTk+Cj5dNE3+OlhC176bl5r25KsGsIthLi1VqIW5Ga+A==", - "dev": true - }, - "node_modules/eslint-plugin-react-compiler": { - "version": "0.0.0-experimental-c8b3f72-20240517", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-0.0.0-experimental-c8b3f72-20240517.tgz", - "integrity": "sha512-cxUTFNMEKiLX6uFaRfrr2GHnB7KUHDMYLjEGzDec82ka6WyBCHg906nGSf3JvVnQKHaBDfUk7Mmv/JMvdgQB8Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "hermes-parser": "^0.20.1", - "zod": "^3.22.4", - "zod-validation-error": "^3.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" - }, - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.3.0.tgz", - "integrity": "sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/eslint-plugin-local-rules": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-3.0.2.tgz", + "integrity": "sha512-IWME7GIYHXogTkFsToLdBCQVJ0U4kbSuVyDT+nKoR4UgtnVrrVeNWuAZkdEu1nxkvi9nsPccGehEEF6dgA28IQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-react-compiler": { + "version": "19.0.0-beta-decd7b8-20250118", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-19.0.0-beta-decd7b8-20250118.tgz", + "integrity": "sha512-qfs+Xo+VcYPbbVLI2tCP+KBGwm0oksAhjFJO1GwOvP+4b18LLcPZu7xopRhUTOaNd+nn1vOp9EQLZC1wMNxSrQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "hermes-parser": "^0.25.1", + "zod": "^3.22.4", + "zod-validation-error": "^3.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": ">=7" } }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-testing-library/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-plugin-testing-library": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-7.1.1.tgz", + "integrity": "sha512-nszC833aZPwB6tik1nMkbFqmtgIXTT0sfJEYs0zMBKMlkQ4to2079yUV96SvmLh00ovSBJI4pgcBC1TiIP8mXg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/scope-manager": "^8.15.0", + "@typescript-eslint/utils": "^8.15.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0", + "pnpm": "^9.14.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6821,12 +6849,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -6839,6 +6861,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6867,33 +6902,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6996,30 +7004,45 @@ "node": ">= 0.8.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/espree/node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7055,6 +7078,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -7141,10 +7165,11 @@ } }, "node_modules/expect-type": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-0.19.0.tgz", - "integrity": "sha512-piv9wz3IrAG4Wnk2A+n2VRCHieAyOSxrRLU872Xo6nyn39kYXKDALk4OcqnvLRnFvkz659CnWC8MWZLuuQnoqg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -7295,15 +7320,16 @@ "dev": true }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { @@ -7397,58 +7423,25 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", @@ -7718,12 +7711,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -7918,18 +7915,20 @@ } }, "node_modules/hermes-estree": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz", - "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg==", - "dev": true + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" }, "node_modules/hermes-parser": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz", - "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, + "license": "MIT", "dependencies": { - "hermes-estree": "0.20.1" + "hermes-estree": "0.25.1" } }, "node_modules/hoist-non-react-statics": { @@ -8026,6 +8025,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8042,6 +8042,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -8051,6 +8052,7 @@ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8182,6 +8184,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -8350,15 +8375,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -9364,7 +9380,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-cleanup": { "version": "1.2.0", @@ -9511,6 +9528,13 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -9610,6 +9634,16 @@ "node": ">=10" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -10029,10 +10063,11 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "5.0.7", @@ -10412,6 +10447,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10573,7 +10609,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", @@ -11982,6 +12019,13 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", @@ -12326,12 +12370,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -12478,15 +12516,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-expose-internals-conditionally": { @@ -12578,13 +12617,14 @@ } }, "node_modules/ts-morph": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-22.0.0.tgz", - "integrity": "sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==", + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-25.0.0.tgz", + "integrity": "sha512-ERPTUVO5qF8cEGJgAejGOsCVlbk8d0SDyiJsucKQT5XgqoZslv0Qml+gnui6Yy6o+uQqw5SestyW2HvlVtT/Sg==", "dev": true, + "license": "MIT", "dependencies": { - "@ts-morph/common": "~0.23.0", - "code-block-writer": "^13.0.1" + "@ts-morph/common": "~0.26.0", + "code-block-writer": "^13.0.3" } }, "node_modules/ts-node": { @@ -12680,27 +12720,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/tsx": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", @@ -13296,9 +13315,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -13342,9 +13361,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index c4652499024..9e335e82256 100644 --- a/package.json +++ b/package.json @@ -110,20 +110,23 @@ }, "devDependencies": { "@arethetypeswrong/cli": "0.15.3", - "@ark/attest": "^0.28.0", + "@ark/attest": "0.28.0", "@babel/parser": "7.25.0", "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.7", + "@eslint/compat": "1.2.5", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.18.0", "@graphql-tools/merge": "9.0.4", "@graphql-tools/schema": "10.0.4", "@graphql-tools/utils": "10.5.0", - "@microsoft/api-extractor": "7.47.9", + "@microsoft/api-extractor": "7.49.1", "@rollup/plugin-node-resolve": "11.2.1", "@size-limit/esbuild-why": "11.1.4", "@size-limit/preset-small-lib": "11.1.4", - "@testing-library/dom": "^10.4.0", + "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "^16.1.0", + "@testing-library/react": "16.1.0", "@testing-library/react-render-stream": "2.0.0", "@testing-library/user-event": "14.5.2", "@tsconfig/node20": "20.1.4", @@ -133,33 +136,34 @@ "@types/hoist-non-react-statics": "3.3.5", "@types/jest": "29.5.12", "@types/lodash": "4.17.7", - "@types/node": "20.16.1", + "@types/node": "22.10.7", "@types/node-fetch": "2.6.11", - "@types/prop-types": "^15.7.14", + "@types/prop-types": "15.7.14", "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "@types/relay-runtime": "14.1.24", "@types/use-sync-external-store": "0.0.6", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/rule-tester": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/eslint-plugin": "8.21.0", + "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/rule-tester": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/utils": "8.21.0", "acorn": "8.12.1", "ajv": "8.17.1", "blob-polyfill": "7.0.20220408", "bytes": "3.1.2", "cross-fetch": "4.0.0", - "eslint": "8.57.0", - "eslint-import-resolver-typescript": "3.6.1", + "eslint": "9.18.0", + "eslint-import-resolver-typescript": "3.7.0", "eslint-plugin-import": "npm:@phryneas/eslint-plugin-import@2.27.5-pr.2813.2817.199971c", - "eslint-plugin-local-rules": "2.0.1", - "eslint-plugin-react-compiler": "0.0.0-experimental-c8b3f72-20240517", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-testing-library": "6.3.0", - "expect-type": "0.19.0", + "eslint-plugin-local-rules": "3.0.2", + "eslint-plugin-react-compiler": "19.0.0-beta-decd7b8-20250118", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-testing-library": "7.1.1", + "expect-type": "1.1.0", "fetch-mock": "9.11.0", "glob": "8.1.0", + "globals": "15.14.0", "graphql": "16.9.0", "graphql-ws": "5.16.0", "jest": "29.7.0", @@ -186,14 +190,14 @@ "size-limit": "11.1.4", "subscriptions-transport-ws": "0.11.0", "terser": "5.31.3", - "ts-api-utils": "1.3.0", + "ts-api-utils": "2.0.0", "ts-jest": "29.2.3", "ts-jest-resolver": "2.0.1", - "ts-morph": "22.0.0", + "ts-morph": "25.0.0", "ts-node": "10.9.2", - "tsx": "^4.19.2", + "tsx": "4.19.2", "typedoc": "0.25.0", - "typescript": "5.5.3", + "typescript": "5.7.3", "wait-for-observables": "1.0.3", "web-streams-polyfill": "4.0.0", "whatwg-fetch": "3.6.20" diff --git a/patches/eslint-plugin-react-hooks+4.6.2.patch b/patches/eslint-plugin-react-hooks+4.6.2.patch deleted file mode 100644 index a8356f0f3df..00000000000 --- a/patches/eslint-plugin-react-hooks+4.6.2.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js b/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js -index 441442f..d1ec5dc 100644 ---- a/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js -+++ b/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js -@@ -905,7 +905,7 @@ var ExhaustiveDeps = { - var _callee = callee, - name = _callee.name; - -- if (name === 'useRef' && id.type === 'Identifier') { -+ if ((name === 'useRef' || name === "useLazyRef") && id.type === 'Identifier') { - // useRef() return value is stable. - return true; - } else if (name === 'useState' || name === 'useReducer') { -diff --git a/node_modules/eslint-plugin-react-hooks/index.js b/node_modules/eslint-plugin-react-hooks/index.js -index 0e91baf..7e86d46 100644 ---- a/node_modules/eslint-plugin-react-hooks/index.js -+++ b/node_modules/eslint-plugin-react-hooks/index.js -@@ -1,9 +1,3 @@ - 'use strict'; - --// TODO: this doesn't make sense for an ESLint rule. --// We need to fix our build process to not create bundles for "raw" packages like this. --if (process.env.NODE_ENV === 'production') { -- module.exports = require('./cjs/eslint-plugin-react-hooks.production.min.js'); --} else { -- module.exports = require('./cjs/eslint-plugin-react-hooks.development.js'); --} -+module.exports = require('./cjs/eslint-plugin-react-hooks.development.js'); diff --git a/patches/eslint-plugin-testing-library+6.3.0.patch b/patches/eslint-plugin-testing-library+7.1.1.patch similarity index 96% rename from patches/eslint-plugin-testing-library+6.3.0.patch rename to patches/eslint-plugin-testing-library+7.1.1.patch index f148d2d82f0..8fd64b10a52 100644 --- a/patches/eslint-plugin-testing-library+6.3.0.patch +++ b/patches/eslint-plugin-testing-library+7.1.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/eslint-plugin-testing-library/dist/rules/render-result-naming-convention.js b/node_modules/eslint-plugin-testing-library/dist/rules/render-result-naming-convention.js -index d1bf177..b72688f 100644 +index dd77b02..d1a581d 100644 --- a/node_modules/eslint-plugin-testing-library/dist/rules/render-result-naming-convention.js +++ b/node_modules/eslint-plugin-testing-library/dist/rules/render-result-naming-convention.js @@ -5,7 +5,7 @@ const utils_1 = require("@typescript-eslint/utils"); diff --git a/renovate.json b/renovate.json index f77e8520d88..92571c951a1 100644 --- a/renovate.json +++ b/renovate.json @@ -31,6 +31,8 @@ "typedoc", "react-17", "react-dom-17", + "react-18", + "react-dom-18", "@testing-library/react-12", "@rollup/plugin-node-resolve", "rollup", diff --git a/scripts/memory/package.json b/scripts/memory/package.json index ae42055f952..1672c0abc81 100644 --- a/scripts/memory/package.json +++ b/scripts/memory/package.json @@ -9,6 +9,6 @@ "graphql": "^16.0.0" }, "devDependencies": { - "mocha": "10.7.0" + "mocha": "11.0.1" } } diff --git a/src/cache/index.ts b/src/cache/index.ts index 1f55d8c16df..5d050c63b41 100644 --- a/src/cache/index.ts +++ b/src/cache/index.ts @@ -49,4 +49,4 @@ export { Policies } from "./inmemory/policies.js"; export type { FragmentRegistryAPI } from "./inmemory/fragmentRegistry.js"; export { createFragmentRegistry } from "./inmemory/fragmentRegistry.js"; -export * from "./inmemory/types.js"; +export type * from "./inmemory/types.js"; diff --git a/src/core/index.ts b/src/core/index.ts index 60f0c063694..3b0143ae6c1 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -21,7 +21,7 @@ export type { SubscribeToMoreOptions, } from "./watchQueryOptions.js"; export { NetworkStatus, isNetworkRequestSettled } from "./networkStatus.js"; -export * from "./types.js"; +export type * from "./types.js"; export type { Resolver, FragmentMatcher } from "./LocalState.js"; export { isApolloError, ApolloError } from "../errors/index.js"; /* Cache */ @@ -52,7 +52,7 @@ export { makeVar, } from "../cache/index.js"; -export * from "../cache/inmemory/types.js"; +export type * from "../cache/inmemory/types.js"; /* Link */ diff --git a/src/errors/index.ts b/src/errors/index.ts index 11a14007734..736c2e464ca 100644 --- a/src/errors/index.ts +++ b/src/errors/index.ts @@ -77,7 +77,7 @@ const generateErrorMessage = (err: ApolloError) => { * * Use `ReadonlyArray` instead. */ -// eslint-disable-next-line @typescript-eslint/ban-types +// eslint-disable-next-line @typescript-eslint/no-restricted-types export type GraphQLErrors = ReadonlyArray; export type NetworkError = Error | ServerParseError | ServerError | null; diff --git a/src/link/core/index.ts b/src/link/core/index.ts index 4128dae4edd..79bcfb82178 100644 --- a/src/link/core/index.ts +++ b/src/link/core/index.ts @@ -7,4 +7,4 @@ export { concat } from "./concat.js"; export { execute } from "./execute.js"; export { ApolloLink } from "./ApolloLink.js"; -export * from "./types.js"; +export type * from "./types.js"; diff --git a/src/react/components/__tests__/client/Mutation.test.tsx b/src/react/components/__tests__/client/Mutation.test.tsx index 7a88e64b5ae..1665bb41e72 100644 --- a/src/react/components/__tests__/client/Mutation.test.tsx +++ b/src/react/components/__tests__/client/Mutation.test.tsx @@ -1526,7 +1526,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => didError)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(didError).toBe(true); }); @@ -1617,7 +1616,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => didError)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(didError).toBe(true); }); console.log = errorLogger; @@ -1657,7 +1655,6 @@ describe("General Mutation testing", () => { finished = true; }); expect(onCompletedFn).toHaveBeenCalledWith; - // eslint-disable-next-line testing-library/await-async-utils this.setState({ called: true }, checker); }); return null; @@ -1681,7 +1678,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => finished)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(finished).toBe(true); }, { interval: 1 } @@ -1693,7 +1689,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => success)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(success).toBe(true); }, { interval: 1 } @@ -1744,7 +1739,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => onErrorCalled)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(onErrorCalled).toBe(true); }, { interval: 1 } @@ -1756,7 +1750,6 @@ describe("General Mutation testing", () => { // expect(waitFor(() => finished)).resolves.toBe(true); // // ...however it also causes the test to fail against React 17. - // eslint-disable-next-line testing-library/await-async-utils expect(finished).toBe(true); }, { interval: 1 } diff --git a/src/react/components/index.ts b/src/react/components/index.ts index 5aa7ebb8a2e..aa581c53c4c 100644 --- a/src/react/components/index.ts +++ b/src/react/components/index.ts @@ -2,4 +2,4 @@ export { Query } from "./Query.js"; export { Mutation } from "./Mutation.js"; export { Subscription } from "./Subscription.js"; -export * from "./types.js"; +export type * from "./types.js"; diff --git a/src/react/hoc/index.ts b/src/react/hoc/index.ts index 477bc234122..5778681bee0 100644 --- a/src/react/hoc/index.ts +++ b/src/react/hoc/index.ts @@ -7,4 +7,4 @@ export { withMutation } from "./mutation-hoc.js"; export { withSubscription } from "./subscription-hoc.js"; export { withApollo } from "./withApollo.js"; -export * from "./types.js"; +export type * from "./types.js"; diff --git a/src/react/hooks/__tests__/useSuspenseQuery.test.tsx b/src/react/hooks/__tests__/useSuspenseQuery.test.tsx index ca644a4ea2f..b7ba7bc04f1 100644 --- a/src/react/hooks/__tests__/useSuspenseQuery.test.tsx +++ b/src/react/hooks/__tests__/useSuspenseQuery.test.tsx @@ -1,4 +1,3 @@ -/* eslint-disable testing-library/render-result-naming-convention */ import React, { Fragment, StrictMode, Suspense, useTransition } from "react"; import { act, diff --git a/src/react/hooks/internal/useDeepMemo.ts b/src/react/hooks/internal/useDeepMemo.ts index 7faf0c6d43d..8967cf4db71 100644 --- a/src/react/hooks/internal/useDeepMemo.ts +++ b/src/react/hooks/internal/useDeepMemo.ts @@ -9,6 +9,7 @@ export function useDeepMemo( const ref = React.useRef<{ deps: DependencyList; value: TValue }>(void 0); if (!ref.current || !equal(ref.current.deps, deps)) { + // eslint-disable-next-line react-compiler/react-compiler ref.current = { value: memoFn(), deps }; } diff --git a/src/react/hooks/useBackgroundQuery.ts b/src/react/hooks/useBackgroundQuery.ts index ba8dc1e71fd..40480fa0a02 100644 --- a/src/react/hooks/useBackgroundQuery.ts +++ b/src/react/hooks/useBackgroundQuery.ts @@ -190,12 +190,13 @@ export function useBackgroundQuery< ] { return wrapHook( "useBackgroundQuery", - _useBackgroundQuery, + // eslint-disable-next-line react-compiler/react-compiler + useBackgroundQuery_, useApolloClient(typeof options === "object" ? options.client : undefined) )(query, options); } -function _useBackgroundQuery< +function useBackgroundQuery_< TData = unknown, TVariables extends OperationVariables = OperationVariables, >( diff --git a/src/react/hooks/useFragment.ts b/src/react/hooks/useFragment.ts index dd96c0f6f52..98cdfa6b274 100644 --- a/src/react/hooks/useFragment.ts +++ b/src/react/hooks/useFragment.ts @@ -56,12 +56,13 @@ export function useFragment( ): UseFragmentResult { return wrapHook( "useFragment", - _useFragment, + // eslint-disable-next-line react-compiler/react-compiler + useFragment_, useApolloClient(options.client) )(options); } -function _useFragment( +function useFragment_( options: UseFragmentOptions ): UseFragmentResult { const client = useApolloClient(options.client); diff --git a/src/react/hooks/useMutation.ts b/src/react/hooks/useMutation.ts index ea0f47ddc6c..3c082ed0796 100644 --- a/src/react/hooks/useMutation.ts +++ b/src/react/hooks/useMutation.ts @@ -232,6 +232,7 @@ export function useMutation< React.useEffect(() => { const current = ref.current; + // eslint-disable-next-line react-compiler/react-compiler current.isMounted = true; return () => { diff --git a/src/react/hooks/useQuery.ts b/src/react/hooks/useQuery.ts index a1b83c3c68c..b608c4b8b6b 100644 --- a/src/react/hooks/useQuery.ts +++ b/src/react/hooks/useQuery.ts @@ -148,12 +148,13 @@ export function useQuery< ): QueryResult { return wrapHook( "useQuery", - _useQuery, + // eslint-disable-next-line react-compiler/react-compiler + useQuery_, useApolloClient(options && options.client) )(query, options); } -function _useQuery< +function useQuery_< TData = any, TVariables extends OperationVariables = OperationVariables, >( @@ -344,6 +345,7 @@ function useObservableSubscriptionResult< // Like the forceUpdate method, the versions of these methods inherited from // InternalState.prototype are empty no-ops, but we can override them on the // base state object (without modifying the prototype). + // eslint-disable-next-line react-compiler/react-compiler callbackRef.current = callbacks; }); diff --git a/src/react/hooks/useQueryRefHandlers.ts b/src/react/hooks/useQueryRefHandlers.ts index a621d579691..8204e3e5df7 100644 --- a/src/react/hooks/useQueryRefHandlers.ts +++ b/src/react/hooks/useQueryRefHandlers.ts @@ -58,7 +58,7 @@ export function useQueryRefHandlers< return wrapHook( "useQueryRefHandlers", - _useQueryRefHandlers, + useQueryRefHandlers_, unwrapped ? unwrapped["observable"] // in the case of a "transported" queryRef object, we need to use the @@ -73,7 +73,7 @@ export function useQueryRefHandlers< )(queryRef); } -function _useQueryRefHandlers< +function useQueryRefHandlers_< TData = unknown, TVariables extends OperationVariables = OperationVariables, >( diff --git a/src/react/hooks/useReadQuery.ts b/src/react/hooks/useReadQuery.ts index c43f0ac0cd0..5c444e0eb7c 100644 --- a/src/react/hooks/useReadQuery.ts +++ b/src/react/hooks/useReadQuery.ts @@ -46,7 +46,7 @@ export function useReadQuery( return wrapHook( "useReadQuery", - _useReadQuery, + useReadQuery_, unwrapped ? unwrapped["observable"] // in the case of a "transported" queryRef object, we need to use the @@ -61,7 +61,7 @@ export function useReadQuery( )(queryRef); } -function _useReadQuery( +function useReadQuery_( queryRef: QueryRef ): UseReadQueryResult { assertWrappedQueryRef(queryRef); diff --git a/src/react/hooks/useSubscription.ts b/src/react/hooks/useSubscription.ts index b86a8f78b9e..67f49d36f2a 100644 --- a/src/react/hooks/useSubscription.ts +++ b/src/react/hooks/useSubscription.ts @@ -122,6 +122,7 @@ export function useSubscription< verifyDocumentType(subscription, DocumentType.Subscription); if (!hasIssuedDeprecationWarningRef.current) { + // eslint-disable-next-line react-compiler/react-compiler hasIssuedDeprecationWarningRef.current = true; if (options.onSubscriptionData) { diff --git a/src/react/hooks/useSuspenseQuery.ts b/src/react/hooks/useSuspenseQuery.ts index b38b199dc07..faa0f44df6c 100644 --- a/src/react/hooks/useSuspenseQuery.ts +++ b/src/react/hooks/useSuspenseQuery.ts @@ -178,12 +178,13 @@ export function useSuspenseQuery< ): UseSuspenseQueryResult { return wrapHook( "useSuspenseQuery", - _useSuspenseQuery, + // eslint-disable-next-line react-compiler/react-compiler + useSuspenseQuery_, useApolloClient(typeof options === "object" ? options.client : undefined) )(query, options); } -function _useSuspenseQuery< +function useSuspenseQuery_< TData = unknown, TVariables extends OperationVariables = OperationVariables, >( @@ -218,6 +219,7 @@ function _useSuspenseQuery< // This saves us a re-execution of the render function when a variable changed. if (current[0] !== queryRef.key) { + // eslint-disable-next-line react-compiler/react-compiler current[0] = queryRef.key; current[1] = queryRef.promise; } diff --git a/src/react/index.ts b/src/react/index.ts index 13f1103e41f..16fd78623a2 100644 --- a/src/react/index.ts +++ b/src/react/index.ts @@ -20,4 +20,4 @@ export type { } from "./query-preloader/createQueryPreloader.js"; export { createQueryPreloader } from "./query-preloader/createQueryPreloader.js"; -export * from "./types/types.js"; +export type * from "./types/types.js"; diff --git a/src/utilities/globals/__tests__/invariantWrappers.test.ts b/src/utilities/globals/__tests__/invariantWrappers.test.ts index 5dfc03a1362..8cf0627fb26 100644 --- a/src/utilities/globals/__tests__/invariantWrappers.test.ts +++ b/src/utilities/globals/__tests__/invariantWrappers.test.ts @@ -5,7 +5,7 @@ import { invariant, } from "../invariantWrappers"; -function withDev() { +function withDev(): typeof import("../../../dev") & AsyncDisposable { const originalErrorMessageHandler = window[ApolloErrorMessageHandler]; window[ApolloErrorMessageHandler] = undefined; let dev: typeof import("../../../dev"); diff --git a/src/utilities/index.ts b/src/utilities/index.ts index cf2bfc5f07e..db22c7d49b7 100644 --- a/src/utilities/index.ts +++ b/src/utilities/index.ts @@ -132,7 +132,7 @@ export { canonicalStringify } from "./common/canonicalStringify.js"; export { omitDeep } from "./common/omitDeep.js"; export { stripTypename } from "./common/stripTypename.js"; -export * from "./types/IsStrictlyAny.js"; +export type * from "./types/IsStrictlyAny.js"; export type { DeepOmit } from "./types/DeepOmit.js"; export type { DeepPartial } from "./types/DeepPartial.js"; export type { OnlyRequiredProperties } from "./types/OnlyRequiredProperties.js"; From 7b5c73fd5cad3787d20181976013497bcab941b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 15:33:20 -0700 Subject: [PATCH 2/4] Bump undici from 6.19.8 to 6.21.1 (#12288) Bumps [undici](https://github.com/nodejs/undici) from 6.19.8 to 6.21.1. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v6.19.8...v6.21.1) --- updated-dependencies: - dependency-name: undici dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4a81f70d4e..5f48dcce505 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13351,9 +13351,9 @@ } }, "node_modules/undici": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", - "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", + "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", "dev": true, "license": "MIT", "engines": { From d638ec317b7d21c2246251ef1b9d773588277b39 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Tue, 21 Jan 2025 19:23:03 -0700 Subject: [PATCH 3/4] Make protocol errors available in the error link (#12281) Co-authored-by: Lenz Weber-Tronic --- .api-reports/api-report-core.api.md | 4 +- .api-reports/api-report-link_core.api.md | 8 +- .api-reports/api-report-link_error.api.md | 8 +- .api-reports/api-report-utilities.api.md | 4 +- .api-reports/api-report.api.md | 4 +- .changeset/giant-peas-lie.md | 13 ++ .changeset/mighty-shoes-clap.md | 5 + docs/source/api/link/apollo-link-error.md | 27 ++- package-lock.json | 12 ++ package.json | 1 + src/link/core/types.ts | 7 +- src/link/error/__tests__/index.ts | 242 ++++++++++++++++++++++ src/link/error/index.ts | 50 ++++- src/testing/internal/incremental.ts | 183 ++++++++++++++++ src/testing/internal/index.ts | 5 + 15 files changed, 547 insertions(+), 26 deletions(-) create mode 100644 .changeset/giant-peas-lie.md create mode 100644 .changeset/mighty-shoes-clap.md create mode 100644 src/testing/internal/incremental.ts diff --git a/.api-reports/api-report-core.api.md b/.api-reports/api-report-core.api.md index 75937521116..4bc22faf6ef 100644 --- a/.api-reports/api-report-core.api.md +++ b/.api-reports/api-report-core.api.md @@ -259,9 +259,9 @@ export class ApolloLink { // @public (undocumented) export interface ApolloPayloadResult, TExtensions = Record> { // (undocumented) - errors?: ReadonlyArray; + errors?: ReadonlyArray; // (undocumented) - payload: SingleExecutionResult | ExecutionPatchResult | null; + payload: SingleExecutionResult | ExecutionPatchResult | null; } // @public (undocumented) diff --git a/.api-reports/api-report-link_core.api.md b/.api-reports/api-report-link_core.api.md index 32f6e56f608..173736f0ee9 100644 --- a/.api-reports/api-report-link_core.api.md +++ b/.api-reports/api-report-link_core.api.md @@ -43,9 +43,11 @@ export class ApolloLink { // @public (undocumented) export interface ApolloPayloadResult, TExtensions = Record> { // (undocumented) - errors?: ReadonlyArray; + errors?: ReadonlyArray; + // Warning: (ae-forgotten-export) The symbol "DefaultContext" needs to be exported by the entry point index.d.ts + // // (undocumented) - payload: SingleExecutionResult | ExecutionPatchResult | null; + payload: SingleExecutionResult | ExecutionPatchResult | null; } // @public (undocumented) @@ -106,8 +108,6 @@ export const from: typeof ApolloLink.from; // @public (undocumented) export interface GraphQLRequest> { - // Warning: (ae-forgotten-export) The symbol "DefaultContext" needs to be exported by the entry point index.d.ts - // // (undocumented) context?: DefaultContext; // (undocumented) diff --git a/.api-reports/api-report-link_error.api.md b/.api-reports/api-report-link_error.api.md index 92cbae62eb5..bf6e3185840 100644 --- a/.api-reports/api-report-link_error.api.md +++ b/.api-reports/api-report-link_error.api.md @@ -6,6 +6,7 @@ import type { DocumentNode } from 'graphql'; import type { FormattedExecutionResult } from 'graphql'; +import type { GraphQLErrorExtensions } from 'graphql'; import type { GraphQLFormattedError } from 'graphql'; import { Observable } from 'zen-observable-ts'; import type { Observer } from 'zen-observable-ts'; @@ -80,14 +81,15 @@ export class ErrorLink extends ApolloLink { export interface ErrorResponse { // (undocumented) forward: NextLink; - // (undocumented) graphQLErrors?: ReadonlyArray; // Warning: (ae-forgotten-export) The symbol "NetworkError" needs to be exported by the entry point index.d.ts - // - // (undocumented) networkError?: NetworkError; // (undocumented) operation: Operation; + protocolErrors?: ReadonlyArray<{ + message: string; + extensions?: GraphQLErrorExtensions[]; + }>; // (undocumented) response?: FormattedExecutionResult; } diff --git a/.api-reports/api-report-utilities.api.md b/.api-reports/api-report-utilities.api.md index 6f944d1a205..2040d463195 100644 --- a/.api-reports/api-report-utilities.api.md +++ b/.api-reports/api-report-utilities.api.md @@ -313,12 +313,12 @@ class ApolloLink { // @public (undocumented) interface ApolloPayloadResult, TExtensions = Record> { // (undocumented) - errors?: ReadonlyArray; + errors?: ReadonlyArray; // Warning: (ae-forgotten-export) The symbol "SingleExecutionResult" needs to be exported by the entry point index.d.ts // Warning: (ae-forgotten-export) The symbol "ExecutionPatchResult" needs to be exported by the entry point index.d.ts // // (undocumented) - payload: SingleExecutionResult | ExecutionPatchResult | null; + payload: SingleExecutionResult | ExecutionPatchResult | null; } // @public (undocumented) diff --git a/.api-reports/api-report.api.md b/.api-reports/api-report.api.md index f56f037b9df..5d15453120a 100644 --- a/.api-reports/api-report.api.md +++ b/.api-reports/api-report.api.md @@ -282,9 +282,9 @@ export class ApolloLink { // @public (undocumented) export interface ApolloPayloadResult, TExtensions = Record> { // (undocumented) - errors?: ReadonlyArray; + errors?: ReadonlyArray; // (undocumented) - payload: SingleExecutionResult | ExecutionPatchResult | null; + payload: SingleExecutionResult | ExecutionPatchResult | null; } // Warning: (ae-forgotten-export) The symbol "ApolloProviderProps" needs to be exported by the entry point index.d.ts diff --git a/.changeset/giant-peas-lie.md b/.changeset/giant-peas-lie.md new file mode 100644 index 00000000000..27e4096c99c --- /dev/null +++ b/.changeset/giant-peas-lie.md @@ -0,0 +1,13 @@ +--- +"@apollo/client": patch +--- + +Make fatal [tranport-level errors](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) from multipart subscriptions available to the error link with the `protocolErrors` property. + +```js +const errorLink = onError(({ protocolErrors }) => { + if (protocolErrors) { + console.log(protocolErrors); + } +}); +``` diff --git a/.changeset/mighty-shoes-clap.md b/.changeset/mighty-shoes-clap.md new file mode 100644 index 00000000000..da087271edb --- /dev/null +++ b/.changeset/mighty-shoes-clap.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Fix the array type for the `errors` field on the `ApolloPayloadResult` type. This type was always in the shape of the GraphQL error format, per the [multipart subscriptions protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) and never a plain string or a JavaScript error object. diff --git a/docs/source/api/link/apollo-link-error.md b/docs/source/api/link/apollo-link-error.md index 4b1052d8a85..138c9eaf1f5 100644 --- a/docs/source/api/link/apollo-link-error.md +++ b/docs/source/api/link/apollo-link-error.md @@ -10,14 +10,23 @@ Use the `onError` link to perform custom logic when a [GraphQL or network error] ```js import { onError } from "@apollo/client/link/error"; -// Log any GraphQL errors or network error that occurred -const errorLink = onError(({ graphQLErrors, networkError }) => { +// Log any GraphQL errors, protocol errors, or network error that occurred +const errorLink = onError(({ graphQLErrors, networkError, protocolErrors }) => { if (graphQLErrors) graphQLErrors.forEach(({ message, locations, path }) => console.log( `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}` ) ); + + if (protocolErrors) { + protocolErrors.forEach(({ message, extensions }) => { + console.log( + `[Protocol error]: Message: ${message}, Extensions: ${JSON.stringify(extensions)}` + ); + }); + } + if (networkError) console.log(`[Network error]: ${networkError}`); }); ``` @@ -100,6 +109,20 @@ A network error that occurred while attempting to execute the operation, if any. + + + +###### `protocolErrors` + +`ReadonlyArray<{ message: string; extensions?: GraphQLErrorExtensions[]; }>` + + + +Fatal transport-level errors from multipart subscriptions. See the [multipart subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) for more information. + + + + diff --git a/package-lock.json b/package-lock.json index 5f48dcce505..bceaa0a8f36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,6 +82,7 @@ "glob": "8.1.0", "globals": "15.14.0", "graphql": "16.9.0", + "graphql-17-alpha2": "npm:graphql@17.0.0-alpha.2", "graphql-ws": "5.16.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", @@ -7792,6 +7793,17 @@ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, + "node_modules/graphql-17-alpha2": { + "name": "graphql", + "version": "17.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-17.0.0-alpha.2.tgz", + "integrity": "sha512-aRAd/BQ5hSO0+l7x+sHBfJVUp2JUOjPTE/iwJ3BhtYNH/MC7n4gjlZbKvnBVFZZAczyMS3vezS4teEZivoqIzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.19.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/graphql-tag": { "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", diff --git a/package.json b/package.json index 9e335e82256..c76c26acf98 100644 --- a/package.json +++ b/package.json @@ -165,6 +165,7 @@ "glob": "8.1.0", "globals": "15.14.0", "graphql": "16.9.0", + "graphql-17-alpha2": "npm:graphql@17.0.0-alpha.2", "graphql-ws": "5.16.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", diff --git a/src/link/core/types.ts b/src/link/core/types.ts index c596ecac0c2..22a83844a46 100644 --- a/src/link/core/types.ts +++ b/src/link/core/types.ts @@ -50,10 +50,13 @@ export interface ApolloPayloadResult< TData = Record, TExtensions = Record, > { - payload: SingleExecutionResult | ExecutionPatchResult | null; + payload: + | SingleExecutionResult + | ExecutionPatchResult + | null; // Transport layer errors (as distinct from GraphQL or NetworkErrors), // these are fatal errors that will include done: true. - errors?: ReadonlyArray; + errors?: ReadonlyArray; } export type ExecutionPatchResult< diff --git a/src/link/error/__tests__/index.ts b/src/link/error/__tests__/index.ts index 0a3bf2bbfb8..9fe9cf257af 100644 --- a/src/link/error/__tests__/index.ts +++ b/src/link/error/__tests__/index.ts @@ -6,6 +6,11 @@ import { ServerError, throwServerError } from "../../utils/throwServerError"; import { Observable } from "../../../utilities/observables/Observable"; import { onError, ErrorLink } from "../"; import { ObservableStream } from "../../../testing/internal"; +import { PROTOCOL_ERRORS_SYMBOL } from "../../../errors"; +import { + mockDeferStream, + mockMultipartSubscriptionStream, +} from "../../../testing/internal/incremental"; describe("error handling", () => { it("has an easy way to handle GraphQL errors", async () => { @@ -71,6 +76,130 @@ describe("error handling", () => { expect(called).toBe(true); }); + it.failing("handles protocol errors (@defer)", async () => { + // TODO: this test doesn't execute the `errorHandler` yet. Should be 4, is 2. + fail(); + expect.assertions(4); + const query = gql` + query Foo { + foo { + ... @defer { + bar + } + } + } + `; + + const errorLink = onError(({ operation, protocolErrors }) => { + expect(operation.operationName).toBe("Foo"); + expect(protocolErrors).toEqual([ + { + message: "could not read data", + extensions: { + code: "INCREMENTAL_ERROR", + }, + }, + ]); + }); + + const { httpLink, enqueueInitialChunk, enqueueErrorChunk } = + mockDeferStream(); + const link = errorLink.concat(httpLink); + const stream = new ObservableStream(execute(link, { query })); + + enqueueInitialChunk({ + hasNext: true, + data: {}, + }); + + enqueueErrorChunk([ + { + message: "could not read data", + extensions: { + code: "INCREMENTAL_ERROR", + }, + }, + ]); + await expect(stream).toEmitValue({ + data: {}, + hasNext: true, + }); + + await expect(stream).toEmitValue({ + hasNext: true, + incremental: [ + { + errors: [ + { + message: "could not read data", + extensions: { + code: "INCREMENTAL_ERROR", + }, + }, + ], + }, + ], + }); + }); + + it("handles protocol errors (multipart subscription)", async () => { + expect.assertions(4); + const sampleSubscription = gql` + subscription MySubscription { + aNewDieWasCreated { + die { + roll + sides + color + } + } + } + `; + + const errorLink = onError((args) => { + const { operation, protocolErrors } = args; + expect(operation.operationName).toBe("MySubscription"); + expect(protocolErrors).toEqual([ + { + message: "Error field", + extensions: { code: "INTERNAL_SERVER_ERROR" }, + }, + ]); + }); + + const { httpLink, enqueuePayloadResult, enqueueProtocolErrors } = + mockMultipartSubscriptionStream(); + const link = errorLink.concat(httpLink); + const stream = new ObservableStream( + execute(link, { query: sampleSubscription }) + ); + + enqueuePayloadResult({ + data: { aNewDieWasCreated: { die: { color: "red", roll: 1, sides: 4 } } }, + }); + + enqueueProtocolErrors([ + { message: "Error field", extensions: { code: "INTERNAL_SERVER_ERROR" } }, + ]); + + await expect(stream).toEmitValue({ + data: { aNewDieWasCreated: { die: { color: "red", roll: 1, sides: 4 } } }, + }); + + await expect(stream).toEmitValue({ + extensions: { + [PROTOCOL_ERRORS_SYMBOL]: [ + { + extensions: { + code: "INTERNAL_SERVER_ERROR", + }, + message: "Error field", + }, + ], + }, + }); + }); + it("captures errors within links", async () => { const query = gql` query Foo { @@ -356,6 +485,62 @@ describe("error handling with class", () => { expect(called).toBe(true); }); + it("handles protocol errors (multipart subscription)", async () => { + expect.assertions(4); + const subscription = gql` + subscription MySubscription { + aNewDieWasCreated { + die { + roll + sides + color + } + } + } + `; + + const { httpLink, enqueuePayloadResult, enqueueProtocolErrors } = + mockMultipartSubscriptionStream(); + + const errorLink = new ErrorLink(({ operation, protocolErrors }) => { + expect(operation.operationName).toBe("MySubscription"); + expect(protocolErrors).toEqual([ + { + message: "Error field", + extensions: { code: "INTERNAL_SERVER_ERROR" }, + }, + ]); + }); + + const link = errorLink.concat(httpLink); + const stream = new ObservableStream(execute(link, { query: subscription })); + + enqueuePayloadResult({ + data: { aNewDieWasCreated: { die: { color: "red", roll: 1, sides: 4 } } }, + }); + + enqueueProtocolErrors([ + { message: "Error field", extensions: { code: "INTERNAL_SERVER_ERROR" } }, + ]); + + await expect(stream).toEmitValue({ + data: { aNewDieWasCreated: { die: { color: "red", roll: 1, sides: 4 } } }, + }); + + await expect(stream).toEmitValue({ + extensions: { + [PROTOCOL_ERRORS_SYMBOL]: [ + { + extensions: { + code: "INTERNAL_SERVER_ERROR", + }, + message: "Error field", + }, + ], + }, + }); + }); + it("captures errors within links", async () => { const query = gql` { @@ -550,6 +735,63 @@ describe("support for request retrying", () => { await expect(stream).toComplete(); }); + it("supports retrying when the initial request had protocol errors", async () => { + let errorHandlerCalled = false; + + const { httpLink, enqueuePayloadResult, enqueueProtocolErrors } = + mockMultipartSubscriptionStream(); + + const errorLink = new ErrorLink( + ({ protocolErrors, operation, forward }) => { + if (protocolErrors) { + errorHandlerCalled = true; + expect(protocolErrors).toEqual([ + { + message: "cannot read message from websocket", + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, + }, + ]); + return forward(operation); + } + } + ); + + const link = errorLink.concat(httpLink); + const stream = new ObservableStream( + execute(link, { + query: gql` + subscription Foo { + foo { + bar + } + } + `, + }) + ); + + enqueuePayloadResult({ data: { foo: { bar: true } } }); + + await expect(stream).toEmitValue({ data: { foo: { bar: true } } }); + + enqueueProtocolErrors([ + { + message: "cannot read message from websocket", + extensions: { + code: "WEBSOCKET_MESSAGE_ERROR", + }, + }, + ]); + + enqueuePayloadResult({ data: { foo: { bar: true } } }, false); + + // Ensure the error result is not emitted but rather the retried result + await expect(stream).toEmitValue({ data: { foo: { bar: true } } }); + expect(errorHandlerCalled).toBe(true); + await expect(stream).toComplete(); + }); + it("returns errors from retried requests", async () => { let errorHandlerCalled = false; diff --git a/src/link/error/index.ts b/src/link/error/index.ts index bf9494c5dfa..e77e7b27f8d 100644 --- a/src/link/error/index.ts +++ b/src/link/error/index.ts @@ -1,13 +1,37 @@ -import type { FormattedExecutionResult, GraphQLFormattedError } from "graphql"; +import type { + FormattedExecutionResult, + GraphQLErrorExtensions, + GraphQLFormattedError, +} from "graphql"; +import { + graphQLResultHasProtocolErrors, + PROTOCOL_ERRORS_SYMBOL, +} from "../../errors/index.js"; import type { NetworkError } from "../../errors/index.js"; import { Observable } from "../../utilities/index.js"; import type { Operation, FetchResult, NextLink } from "../core/index.js"; import { ApolloLink } from "../core/index.js"; export interface ErrorResponse { + /** + * Errors returned in the `errors` property of the GraphQL response. + */ graphQLErrors?: ReadonlyArray; + /** + * Errors thrown during a network request. This is usually an error thrown + * during a `fetch` call or an error while parsing the response from the + * network. + */ networkError?: NetworkError; + /** + * Fatal transport-level errors from multipart subscriptions. + * See the [multipart subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) for more information. + */ + protocolErrors?: ReadonlyArray<{ + message: string; + extensions?: GraphQLErrorExtensions[]; + }>; response?: FormattedExecutionResult; operation: Operation; forward: NextLink; @@ -42,16 +66,24 @@ export function onError(errorHandler: ErrorHandler): ApolloLink { operation, forward, }); + } else if (graphQLResultHasProtocolErrors(result)) { + retriedResult = errorHandler({ + protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL], + response: result, + operation, + forward, + }); + } - if (retriedResult) { - retriedSub = retriedResult.subscribe({ - next: observer.next.bind(observer), - error: observer.error.bind(observer), - complete: observer.complete.bind(observer), - }); - return; - } + if (retriedResult) { + retriedSub = retriedResult.subscribe({ + next: observer.next.bind(observer), + error: observer.error.bind(observer), + complete: observer.complete.bind(observer), + }); + return; } + observer.next(result); }, error: (networkError) => { diff --git a/src/testing/internal/incremental.ts b/src/testing/internal/incremental.ts new file mode 100644 index 00000000000..b03aebe7bfa --- /dev/null +++ b/src/testing/internal/incremental.ts @@ -0,0 +1,183 @@ +import { HttpLink } from "../../link/http/index.js"; +import type { + GraphQLFormattedError, + InitialIncrementalExecutionResult, + SubsequentIncrementalExecutionResult, +} from "graphql-17-alpha2"; +import type { GraphQLError } from "graphql"; +import { + ReadableStream as NodeReadableStream, + TextEncoderStream, + TransformStream, +} from "node:stream/web"; +import type { ApolloPayloadResult } from "../../core/index.js"; + +const hasNextSymbol = Symbol("hasNext"); + +export function mockIncrementalStream({ + responseHeaders, +}: { + responseHeaders: Headers; +}) { + type Payload = Chunks & { [hasNextSymbol]: boolean }; + const CLOSE = Symbol(); + let streamController: ReadableStreamDefaultController | null = null; + let sentInitialChunk = false; + + const queue: Array = []; + + function processQueue() { + if (!streamController) { + throw new Error("Cannot process queue without stream controller"); + } + + let chunk; + while ((chunk = queue.shift())) { + if (chunk === CLOSE) { + streamController.close(); + } else { + streamController.enqueue(chunk); + } + } + } + + function createStream() { + return new NodeReadableStream({ + start(c) { + streamController = c; + processQueue(); + }, + }) + .pipeThrough( + new TransformStream({ + transform: (chunk, controller) => { + controller.enqueue( + (!sentInitialChunk ? "\r\n---\r\n" : "") + + "content-type: application/json; charset=utf-8\r\n\r\n" + + JSON.stringify(chunk) + + (chunk[hasNextSymbol] ? "\r\n---\r\n" : "\r\n-----\r\n") + ); + sentInitialChunk = true; + }, + }) + ) + .pipeThrough(new TextEncoderStream()); + } + + const httpLink = new HttpLink({ + fetch(input, init) { + return Promise.resolve( + new Response( + createStream() satisfies NodeReadableStream as ReadableStream, + { + status: 200, + headers: responseHeaders, + } + ) + ); + }, + }); + + function queueNext(event: Payload | typeof CLOSE) { + queue.push(event); + + if (streamController) { + processQueue(); + } + } + + function close() { + queueNext(CLOSE); + + streamController = null; + sentInitialChunk = false; + } + + function enqueue(chunk: Chunks, hasNext: boolean) { + queueNext({ ...chunk, [hasNextSymbol]: hasNext }); + + if (!hasNext) { + close(); + } + } + + return { + httpLink, + enqueue, + close, + }; +} + +export function mockDeferStream< + TData = Record, + TExtensions = Record, +>() { + const { httpLink, enqueue } = mockIncrementalStream< + | InitialIncrementalExecutionResult + | SubsequentIncrementalExecutionResult + >({ + responseHeaders: new Headers({ + "Content-Type": 'multipart/mixed; boundary="-"; deferSpec=20220824', + }), + }); + return { + httpLink, + enqueueInitialChunk( + chunk: InitialIncrementalExecutionResult + ) { + enqueue(chunk, chunk.hasNext); + }, + enqueueSubsequentChunk( + chunk: SubsequentIncrementalExecutionResult + ) { + enqueue(chunk, chunk.hasNext); + }, + enqueueErrorChunk(errors: GraphQLFormattedError[]) { + enqueue( + { + hasNext: true, + incremental: [ + { + // eslint-disable-next-line @typescript-eslint/no-restricted-types + errors: errors as GraphQLError[], + }, + ], + } satisfies SubsequentIncrementalExecutionResult, + true + ); + }, + }; +} + +export function mockMultipartSubscriptionStream< + TData = Record, + TExtensions = Record, +>() { + const { httpLink, enqueue } = mockIncrementalStream< + ApolloPayloadResult + >({ + responseHeaders: new Headers({ + "Content-Type": "multipart/mixed", + }), + }); + + enqueueHeartbeat(); + + function enqueueHeartbeat() { + enqueue({} as any, true); + } + + return { + httpLink, + enqueueHeartbeat, + enqueuePayloadResult( + payload: ApolloPayloadResult["payload"], + hasNext = true + ) { + enqueue({ payload }, hasNext); + }, + enqueueProtocolErrors(errors: ApolloPayloadResult["errors"]) { + enqueue({ payload: null, errors }, false); + }, + }; +} diff --git a/src/testing/internal/index.ts b/src/testing/internal/index.ts index cf38a14db79..2d422f519a9 100644 --- a/src/testing/internal/index.ts +++ b/src/testing/internal/index.ts @@ -28,3 +28,8 @@ export { export { actAsync } from "./rtl/actAsync.js"; export { renderAsync } from "./rtl/renderAsync.js"; export { renderHookAsync } from "./rtl/renderHookAsync.js"; +export { + mockIncrementalStream, + mockDeferStream, + mockMultipartSubscriptionStream, +} from "./incremental.js"; From de8196eb72498e4e45438697ec17198e5b88bc44 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 19:28:53 -0700 Subject: [PATCH 4/4] Version Packages (#12289) Co-authored-by: github-actions[bot] --- .changeset/giant-peas-lie.md | 13 ------------- .changeset/mighty-shoes-clap.md | 5 ----- CHANGELOG.md | 16 ++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 .changeset/giant-peas-lie.md delete mode 100644 .changeset/mighty-shoes-clap.md diff --git a/.changeset/giant-peas-lie.md b/.changeset/giant-peas-lie.md deleted file mode 100644 index 27e4096c99c..00000000000 --- a/.changeset/giant-peas-lie.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@apollo/client": patch ---- - -Make fatal [tranport-level errors](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) from multipart subscriptions available to the error link with the `protocolErrors` property. - -```js -const errorLink = onError(({ protocolErrors }) => { - if (protocolErrors) { - console.log(protocolErrors); - } -}); -``` diff --git a/.changeset/mighty-shoes-clap.md b/.changeset/mighty-shoes-clap.md deleted file mode 100644 index da087271edb..00000000000 --- a/.changeset/mighty-shoes-clap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@apollo/client": patch ---- - -Fix the array type for the `errors` field on the `ApolloPayloadResult` type. This type was always in the shape of the GraphQL error format, per the [multipart subscriptions protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) and never a plain string or a JavaScript error object. diff --git a/CHANGELOG.md b/CHANGELOG.md index 971e53bdf72..33b1eb2f84c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # @apollo/client +## 3.12.7 + +### Patch Changes + +- [#12281](https://github.com/apollographql/apollo-client/pull/12281) [`d638ec3`](https://github.com/apollographql/apollo-client/commit/d638ec317b7d21c2246251ef1b9d773588277b39) Thanks [@jerelmiller](https://github.com/jerelmiller)! - Make fatal [tranport-level errors](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) from multipart subscriptions available to the error link with the `protocolErrors` property. + + ```js + const errorLink = onError(({ protocolErrors }) => { + if (protocolErrors) { + console.log(protocolErrors); + } + }); + ``` + +- [#12281](https://github.com/apollographql/apollo-client/pull/12281) [`d638ec3`](https://github.com/apollographql/apollo-client/commit/d638ec317b7d21c2246251ef1b9d773588277b39) Thanks [@jerelmiller](https://github.com/jerelmiller)! - Fix the array type for the `errors` field on the `ApolloPayloadResult` type. This type was always in the shape of the GraphQL error format, per the [multipart subscriptions protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) and never a plain string or a JavaScript error object. + ## 3.12.6 ### Patch Changes diff --git a/package-lock.json b/package-lock.json index bceaa0a8f36..6edb833d9ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@apollo/client", - "version": "3.12.6", + "version": "3.12.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@apollo/client", - "version": "3.12.6", + "version": "3.12.7", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c76c26acf98..6bcc3690bf6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@apollo/client", - "version": "3.12.6", + "version": "3.12.7", "description": "A fully-featured caching GraphQL client.", "private": true, "keywords": [