diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml deleted file mode 100644 index d54beecf4b..0000000000 --- a/.github/workflows/scheduled.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: End-to-end node tests - -on: - schedule: - # Run every fifth minute. - # This is to verify that ESS is running properly. - - cron: "*/5 * * * *" - -env: - CI: true -jobs: - scheduled-e2e-node: - name: "Scheduled E2E Integration tests" - # Running end-to-end tests requires accessing secrets which aren't available to dependabot. - runs-on: ubuntu-latest - environment: - name: ${{ matrix.environment-name }} - strategy: - matrix: - # Note: "Inrupt Production" and "Inrupt 1.1" have been disabled due to the migration - # "Inrupt Dev-Next" is a 2.x environment. - environment-name: ["Inrupt Dev-Next", "NSS"] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: ".nvmrc" - cache: "npm" - - run: npm ci --ignore-scripts - - run: npm run test:e2e:node - env: - E2E_TEST_POD: ${{ secrets.E2E_TEST_POD }} - E2E_TEST_IDP: ${{ secrets.E2E_TEST_IDP }} - E2E_TEST_CLIENT_ID: ${{ secrets.E2E_TEST_CLIENT_ID }} - E2E_TEST_CLIENT_SECRET: ${{ secrets.E2E_TEST_CLIENT_SECRET }} - E2E_TEST_ENVIRONMENT: ${{ matrix.environment-name }} - E2E_TEST_FEATURE_ACP: ${{ secrets.E2E_TEST_FEATURE_ACP }} - E2E_TEST_FEATURE_ACP_V3: ${{ secrets.E2E_TEST_FEATURE_ACP_V3 }} - E2E_TEST_FEATURE_WAC: ${{ secrets.E2E_TEST_FEATURE_WAC }} - - name: Send a notification that the test has failed - if: failure() - run: "curl -X POST -H Content-type: 'application/json' --data \"{\\\"text\\\":\\\"Automated tests against ${{ matrix.environment-name }} failed. View for more details.\\\"}\" $WEBHOOK_E2E_FAILURE" - env: - WEBHOOK_E2E_FAILURE: "${{ secrets.WEBHOOK_E2E_FAILURE }}" - RUN_ID: "${{ github.run_id }}" diff --git a/e2e/node/nss-unauth.test.ts b/e2e/node/nss-unauth.test.ts deleted file mode 100644 index 74ea2c4b03..0000000000 --- a/e2e/node/nss-unauth.test.ts +++ /dev/null @@ -1,286 +0,0 @@ -// -// Copyright Inrupt Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -// Software, and to permit persons to whom the Software is furnished to do so, -// subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -import { describe, expect, it, test } from "@jest/globals"; - -import { foaf, schema } from "rdf-namespaces"; -import { getNodeTestingEnvironment } from "@inrupt/internal-test-env"; -import { - getSolidDataset, - setThing, - getThing, - getStringNoLocale, - setDatetime, - setStringNoLocale, - saveSolidDatasetAt, - isRawData, - getContentType, - getResourceInfoWithAcl, - getSolidDatasetWithAcl, - hasResourceAcl, - getPublicAccess, - getAgentAccess, - getFallbackAcl, - getResourceAcl, - getAgentResourceAccess, - setAgentResourceAccess, - saveAclFor, - hasFallbackAcl, - hasAccessibleAcl, - createAclFromFallbackAcl, - getPublicDefaultAccess, - getPublicResourceAccess, - getFile, - getSourceUrl, - deleteFile, - createContainerAt, - createContainerInContainer, - getBoolean, - setBoolean, -} from "../../src/index"; - -const env = getNodeTestingEnvironment(); -if (env.environment !== "NSS") { - // eslint-disable-next-line jest/no-focused-tests - test.only(`Skipping Unauth NSS tests in ${env.environment}`, () => {}); -} - -// This block of end-to-end tests should be removed once solid-client-authn-node works against NSS, -// and the e2e tests have an NSS environment setup. -describe("End-to-end tests with pre-existing data against resources in an NSS server", () => { - const rootContainer = "https://lit-e2e-test.inrupt.net/public/"; - - it("should be able to read and update data in a Pod", async () => { - const randomNick = `Random nick ${Math.random()}`; - - const dataset = await getSolidDataset(`${rootContainer}lit-pod-test.ttl`); - const existingThing = getThing( - dataset, - `${rootContainer}lit-pod-test.ttl#thing1`, - ); - - if (existingThing === null) { - throw new Error( - `The test data did not look like we expected it to. Check whether [${rootContainer}lit-pod-test.ttl#thing1] exists.`, - ); - } - - expect(getStringNoLocale(existingThing, foaf.name)).toBe( - "Thing for first end-to-end test", - ); - - let updatedThing = setDatetime( - existingThing, - schema.dateModified, - new Date(), - ); - updatedThing = setStringNoLocale(updatedThing, foaf.nick, randomNick); - - const updatedDataset = setThing(dataset, updatedThing); - const savedDataset = await saveSolidDatasetAt( - `${rootContainer}lit-pod-test.ttl`, - updatedDataset, - ); - - const savedThing = getThing( - savedDataset, - `${rootContainer}lit-pod-test.ttl#thing1`, - ); - expect(savedThing).not.toBeNull(); - expect(getStringNoLocale(savedThing!, foaf.name)).toBe( - "Thing for first end-to-end test", - ); - expect(getStringNoLocale(savedThing!, foaf.nick)).toBe(randomNick); - }); - - it("can read and write booleans", async () => { - const dataset = await getSolidDataset(`${rootContainer}lit-pod-test.ttl`); - const existingThing = getThing( - dataset, - `${rootContainer}lit-pod-test.ttl#thing2`, - ); - - if (existingThing === null) { - throw new Error( - `The test data did not look like we expected it to. Check whether [${rootContainer}lit-pod-test.ttl#thing2] exists.`, - ); - } - - const currentValue = getBoolean( - existingThing, - "https://example.com/boolean", - ); - const updatedThing = setBoolean( - existingThing, - "https://example.com/boolean", - !currentValue, - ); - - const updatedDataset = setThing(dataset, updatedThing); - const savedDataset = await saveSolidDatasetAt( - `${rootContainer}lit-pod-test.ttl`, - updatedDataset, - ); - - const savedThing = getThing( - savedDataset, - `${rootContainer}lit-pod-test.ttl#thing2`, - ); - - expect(savedThing).not.toBeNull(); - expect(getBoolean(savedThing!, "https://example.com/boolean")).toBe( - !currentValue, - ); - }); - - it("can differentiate between RDF and non-RDF Resources", async () => { - const rdfResourceInfo = await getResourceInfoWithAcl( - `${rootContainer}lit-pod-resource-info-test/litdataset.ttl`, - ); - const nonRdfResourceInfo = await getResourceInfoWithAcl( - `${rootContainer}lit-pod-resource-info-test/not-a-litdataset.png`, - ); - expect(isRawData(rdfResourceInfo)).toBe(false); - expect(isRawData(nonRdfResourceInfo)).toBe(true); - }); - - it("can create and remove empty Containers", async () => { - const newContainer1 = await createContainerAt( - `${rootContainer}container-test/some-container/`, - ); - const newContainer2 = await createContainerInContainer( - "https://lit-e2e-test.inrupt.net/public/container-test/", - { slugSuggestion: "some-other-container" }, - ); - - expect(getSourceUrl(newContainer1)).toBe( - `${rootContainer}container-test/some-container/`, - ); - - await deleteFile(`${rootContainer}container-test/some-container/`); - await deleteFile(getSourceUrl(newContainer2)); - }); - - it("should be able to read and update ACLs", async () => { - const fakeWebId = `https://example.com/fake-webid#${Date.now().toString()}${Math.random().toString()}`; - - const datasetWithAcl = await getSolidDatasetWithAcl( - `${rootContainer}lit-pod-acl-test/passthrough-container/resource-with-acl.ttl`, - ); - const datasetWithoutAcl = await getSolidDatasetWithAcl( - `${rootContainer}lit-pod-acl-test/passthrough-container/resource-without-acl.ttl`, - ); - - expect(hasResourceAcl(datasetWithAcl)).toBe(true); - expect(hasResourceAcl(datasetWithoutAcl)).toBe(false); - expect(getPublicAccess(datasetWithAcl)).toEqual({ - read: true, - append: true, - write: true, - control: true, - }); - expect( - getAgentAccess( - datasetWithAcl, - "https://vincentt.inrupt.net/profile/card#me", - ), - ).toEqual({ - read: false, - append: true, - write: false, - control: false, - }); - expect( - getAgentAccess( - datasetWithoutAcl, - "https://vincentt.inrupt.net/profile/card#me", - ), - ).toEqual({ - read: true, - append: false, - write: false, - control: false, - }); - const fallbackAclForDatasetWithoutAcl = getFallbackAcl(datasetWithoutAcl); - expect(fallbackAclForDatasetWithoutAcl?.internal_accessTo).toBe( - `${rootContainer}lit-pod-acl-test/`, - ); - - if (!hasResourceAcl(datasetWithAcl)) { - throw new Error( - `The Resource at ${rootContainer}lit-pod-acl-test/passthrough-container/resource-with-acl.ttl does not seem to have an ACL. The end-to-end tests do expect it to have one.`, - ); - } - const acl = getResourceAcl(datasetWithAcl); - const updatedAcl = setAgentResourceAccess(acl, fakeWebId, { - read: true, - append: false, - write: false, - control: false, - }); - const savedAcl = await saveAclFor(datasetWithAcl, updatedAcl); - const fakeWebIdAccess = getAgentResourceAccess(savedAcl, fakeWebId); - expect(fakeWebIdAccess).toEqual({ - read: true, - append: false, - write: false, - control: false, - }); - - // Cleanup - const cleanedAcl = setAgentResourceAccess(savedAcl, fakeWebId, { - read: false, - append: false, - write: false, - control: false, - }); - await saveAclFor(datasetWithAcl, cleanedAcl); - }); - - it("can copy default rules from the fallback ACL as Resource rules to a new ACL", async () => { - const dataset = await getSolidDatasetWithAcl( - `${rootContainer}lit-pod-acl-initialisation-test/resource.ttl`, - ); - if ( - !hasFallbackAcl(dataset) || - !hasAccessibleAcl(dataset) || - hasResourceAcl(dataset) - ) { - throw new Error( - `The Resource at ${rootContainer}lit-pod-acl-initialisation-test/resource.ttl appears to not have an accessible fallback ACL, or it already has an ACL, which the end-to-end tests do not expect.`, - ); - } - const newResourceAcl = createAclFromFallbackAcl(dataset); - const existingFallbackAcl = getFallbackAcl(dataset); - expect(getPublicDefaultAccess(existingFallbackAcl)).toEqual( - getPublicResourceAccess(newResourceAcl), - ); - }); - - it("can fetch a non-RDF file and its metadata", async () => { - const jsonFile = await getFile(`${rootContainer}arbitrary.json`); - - expect(getContentType(jsonFile)).toBe("application/json"); - - const data = JSON.parse(await jsonFile.text()); - expect(data).toEqual({ arbitrary: "json data" }); - }); -}); diff --git a/e2e/node/resource.test.ts b/e2e/node/resource.test.ts index 1e379065ae..735a17c5aa 100644 --- a/e2e/node/resource.test.ts +++ b/e2e/node/resource.test.ts @@ -31,7 +31,6 @@ import { describe, expect, it, - test, } from "@jest/globals"; import type { Session } from "@inrupt/solid-client-authn-node"; @@ -70,11 +69,6 @@ const { blankNode } = DataFactory; const env = getNodeTestingEnvironment(); -if (env.environment === "NSS") { - // eslint-disable-next-line jest/no-focused-tests - test.only(`Skipping Unauth NSS tests in ${env.environment}`, () => {}); -} - const TEST_SLUG = "solid-client-test-e2e-resource"; const nodeVersion = process.versions.node.split("."); diff --git a/package-lock.json b/package-lock.json index 19124218c7..8e424260b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -902,9 +902,9 @@ "dev": true }, "node_modules/@inrupt/base-rollup-config": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/base-rollup-config/-/base-rollup-config-3.2.6.tgz", - "integrity": "sha512-XojbyUaqrjQ6sY0T7UjNiC+3T4qhhBs50jQ/sj5pUkDdL2+4DQk1PYtdbjsYq8cGhvcXh9Aczyrc5pOxvZ41kw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/base-rollup-config/-/base-rollup-config-3.2.7.tgz", + "integrity": "sha512-SPCDKIsKyVaidd8qwus0FeaC0UTc/Sxc3IKmTbkkNEjFYgWG1SmDyyKFUj6doF2gqWFnSATNBMgiQ+L0CjaoMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -912,20 +912,20 @@ } }, "node_modules/@inrupt/eslint-config-base": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-base/-/eslint-config-base-3.2.6.tgz", - "integrity": "sha512-7jVGrUhmrp8396XB/46z4daq9dbbgFheeQs9SuFyrVIkUoZJhE3ZEx1h0z0BdjehGwARBqQDI9clEvob0gg+Fg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-base/-/eslint-config-base-3.2.7.tgz", + "integrity": "sha512-JCmKG8U2KJ5DzIQ0QKvXMczaw3hd/cWV3l9fRuXx5pzaanRtF+WgJef+WaZVIPMHEY3zFRTMmKnGyTbThnb2Ow==", "dev": true, "license": "MIT", "dependencies": { "eslint": ">=8.57.1", "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^10.1.1", + "eslint-config-prettier": "^10.1.2", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", "eslint-plugin-playwright": "^2.2.0", - "eslint-plugin-prettier": "^5.2.3", + "eslint-plugin-prettier": "^5.2.6", "jest": ">=29.7.0", "prettier": ">=3.5.3" }, @@ -937,63 +937,63 @@ } }, "node_modules/@inrupt/eslint-config-lib": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-lib/-/eslint-config-lib-3.2.6.tgz", - "integrity": "sha512-ltQWW0Nxwki4rpqUWdshfQVGmHDcAwInmkZZas/xIPrH4pDMdL87v5QvRVWjAoB0O+Bq2Xf6JvWRQKjW8uniOQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-lib/-/eslint-config-lib-3.2.7.tgz", + "integrity": "sha512-yFkQTq+554+i5RTJ42NHfrcRFymm+QWomkKlFtU0ep1j3S4Hw2XkrTqty44XREwdRtlGrAeYJeSFERP+tVynCg==", "dev": true, "license": "MIT", "dependencies": { - "@inrupt/eslint-config-base": "^3.2.6", - "@typescript-eslint/eslint-plugin": "^8.27.0", - "@typescript-eslint/parser": "^8.26.1", - "typescript": ">=5.8.2" + "@inrupt/eslint-config-base": "^3.2.7", + "@typescript-eslint/eslint-plugin": "^8.31.0", + "@typescript-eslint/parser": "^8.31.0", + "typescript": ">=5.8.3" } }, "node_modules/@inrupt/internal-playwright-helpers": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-helpers/-/internal-playwright-helpers-3.2.6.tgz", - "integrity": "sha512-2/JiA/9emqKdRkFFNuShm9hexrVnEb5PLuISKmj48JCooCp5IsnqVXw+at44QkRXeYVe3jKXZyYvPWKnn+AijQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-helpers/-/internal-playwright-helpers-3.2.7.tgz", + "integrity": "sha512-0P3SmMxPOR0r7mCsSHuyfSykPRK0y/eMBqwB4hkk2LMMOgHeuGDU1h7TjvY1yLtHBIBK9ybEecLTTgltM8izGg==", "dev": true, "license": "MIT", "dependencies": { - "@inrupt/internal-playwright-testids": "3.2.6", - "@inrupt/internal-test-env": "3.2.6" + "@inrupt/internal-playwright-testids": "3.2.7", + "@inrupt/internal-test-env": "3.2.7" }, "peerDependencies": { "@playwright/test": "^1.37.0" } }, "node_modules/@inrupt/internal-playwright-testids": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-testids/-/internal-playwright-testids-3.2.6.tgz", - "integrity": "sha512-6VjK81YqFeMyKjWQibjTJW5jpAe9X5JJTQ3eZDkTZfMwVBrozwU8A4kx6EC+ubiEdCWlhQulU3HjnL+TZaeF5A==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-testids/-/internal-playwright-testids-3.2.7.tgz", + "integrity": "sha512-cB6MXC4QfUMUN/ClaRBI/6tqhyUbt8SG8Ycsoqtp/0fK01Y1vlgqZkBRvFzq07lgHVIALcCGNZwZ8YLwKe7QhA==", "dev": true, "license": "MIT" }, "node_modules/@inrupt/internal-test-env": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-test-env/-/internal-test-env-3.2.6.tgz", - "integrity": "sha512-uFk+wv0yk6SRSuoFe6ne5Vj77QymCRk888ozXJTaQpoxhl64VZ9OG/LBdlVIrw6H/XVFpGcAXxElo3RDZCn6bw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-test-env/-/internal-test-env-3.2.7.tgz", + "integrity": "sha512-xvy/ZwX7Zni7zd/asJPDJuI6QcmSqj3qpusWqMZagpVfL6JIAu/PNtz3dCk13IF4yth+/G3sWl1BybU2v6Rl+A==", "dev": true, "license": "MIT", "dependencies": { "@inrupt/solid-client": "^2.1.2", - "@inrupt/solid-client-authn-node": "^2.3.0", + "@inrupt/solid-client-authn-node": "^2.4.1", "deepmerge-json": "^1.5.0", - "dotenv": "^16.4.7" + "dotenv": "^16.5.0" } }, "node_modules/@inrupt/jest-jsdom-polyfills": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/jest-jsdom-polyfills/-/jest-jsdom-polyfills-3.2.6.tgz", - "integrity": "sha512-PJqWy+arK7hzSSg6bYgriDVd+QxiCOulk9qnHl7KQgonzPZeXiJJMUXCRZ844JCyaLmS/bwjW+Fe0xhUqxSB/g==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/jest-jsdom-polyfills/-/jest-jsdom-polyfills-3.2.7.tgz", + "integrity": "sha512-AonOcUL3Xo7fhSa8mZi5SANZEyDmyYaOq7t0brlhucygxdzhu1dePuizQwZiynqhkkWw67BoyHyYVXjG4jX+fQ==", "dev": true, "license": "MIT", "dependencies": { "@peculiar/webcrypto": "^1.5.0", "@web-std/blob": "^3.0.5", "@web-std/file": "^3.0.3", - "undici": "^7.5.0" + "undici": "^7.8.0" } }, "node_modules/@inrupt/solid-client": { @@ -2385,17 +2385,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz", - "integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz", + "integrity": "sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/type-utils": "8.27.0", - "@typescript-eslint/utils": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/type-utils": "8.31.1", + "@typescript-eslint/utils": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2415,16 +2415,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz", - "integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz", + "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4" }, "engines": { @@ -2440,14 +2440,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz", - "integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz", + "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0" + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2458,14 +2458,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz", - "integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz", + "integrity": "sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/utils": "8.27.0", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/utils": "8.31.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -2482,9 +2482,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz", - "integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz", + "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==", "dev": true, "license": "MIT", "engines": { @@ -2496,14 +2496,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz", - "integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz", + "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2549,16 +2549,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz", - "integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz", + "integrity": "sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0" + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2573,13 +2573,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz", - "integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz", + "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.27.0", + "@typescript-eslint/types": "8.31.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -4027,9 +4027,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -4444,9 +4444,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz", - "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", + "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", "dev": true, "license": "MIT", "bin": { @@ -4706,14 +4706,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.3.1.tgz", + "integrity": "sha512-vad9VWgEm9xaVXRNmb4aeOt0PWDc61IAdzghkbYQ2wavgax148iKoX1rNJcgkBGCipzLzOnHYVgL7xudM9yccQ==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.11.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -4724,7 +4724,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -4736,21 +4736,34 @@ } } }, + "node_modules/eslint-plugin-prettier/node_modules/@pkgr/core": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/eslint-plugin-prettier/node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/eslint-plugin-react": { @@ -9304,10 +9317,11 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -9524,9 +9538,9 @@ } }, "node_modules/undici": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.5.0.tgz", - "integrity": "sha512-NFQG741e8mJ0fLQk90xKxFdaSM7z4+IQpAgsFI36bCDY9Z2+aXXZjVy2uUksMouWfMI9+w5ejOq5zYYTBCQJDQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.8.0.tgz", + "integrity": "sha512-vFv1GA99b7eKO1HG/4RPu2Is3FBTWBrmzqzO0mz+rLxN3yXkE4mqRcb8g8fHxzX4blEysrNZLqg5RbJLqX5buA==", "dev": true, "license": "MIT", "engines": { @@ -10771,23 +10785,23 @@ "dev": true }, "@inrupt/base-rollup-config": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/base-rollup-config/-/base-rollup-config-3.2.6.tgz", - "integrity": "sha512-XojbyUaqrjQ6sY0T7UjNiC+3T4qhhBs50jQ/sj5pUkDdL2+4DQk1PYtdbjsYq8cGhvcXh9Aczyrc5pOxvZ41kw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/base-rollup-config/-/base-rollup-config-3.2.7.tgz", + "integrity": "sha512-SPCDKIsKyVaidd8qwus0FeaC0UTc/Sxc3IKmTbkkNEjFYgWG1SmDyyKFUj6doF2gqWFnSATNBMgiQ+L0CjaoMQ==", "dev": true, "requires": { "@rollup/plugin-typescript": "^12.1.2" } }, "@inrupt/eslint-config-base": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-base/-/eslint-config-base-3.2.6.tgz", - "integrity": "sha512-7jVGrUhmrp8396XB/46z4daq9dbbgFheeQs9SuFyrVIkUoZJhE3ZEx1h0z0BdjehGwARBqQDI9clEvob0gg+Fg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-base/-/eslint-config-base-3.2.7.tgz", + "integrity": "sha512-JCmKG8U2KJ5DzIQ0QKvXMczaw3hd/cWV3l9fRuXx5pzaanRtF+WgJef+WaZVIPMHEY3zFRTMmKnGyTbThnb2Ow==", "dev": true, "requires": { "eslint": ">=8.57.1", "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-prettier": "^10.1.1", + "eslint-config-prettier": "^10.1.2", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", @@ -10798,55 +10812,55 @@ } }, "@inrupt/eslint-config-lib": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-lib/-/eslint-config-lib-3.2.6.tgz", - "integrity": "sha512-ltQWW0Nxwki4rpqUWdshfQVGmHDcAwInmkZZas/xIPrH4pDMdL87v5QvRVWjAoB0O+Bq2Xf6JvWRQKjW8uniOQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/eslint-config-lib/-/eslint-config-lib-3.2.7.tgz", + "integrity": "sha512-yFkQTq+554+i5RTJ42NHfrcRFymm+QWomkKlFtU0ep1j3S4Hw2XkrTqty44XREwdRtlGrAeYJeSFERP+tVynCg==", "dev": true, "requires": { - "@inrupt/eslint-config-base": "^3.2.6", - "@typescript-eslint/eslint-plugin": "^8.27.0", - "@typescript-eslint/parser": "^8.26.1", - "typescript": ">=5.8.2" + "@inrupt/eslint-config-base": "^3.2.7", + "@typescript-eslint/eslint-plugin": "^8.31.0", + "@typescript-eslint/parser": "^8.31.0", + "typescript": ">=5.8.3" } }, "@inrupt/internal-playwright-helpers": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-helpers/-/internal-playwright-helpers-3.2.6.tgz", - "integrity": "sha512-2/JiA/9emqKdRkFFNuShm9hexrVnEb5PLuISKmj48JCooCp5IsnqVXw+at44QkRXeYVe3jKXZyYvPWKnn+AijQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-helpers/-/internal-playwright-helpers-3.2.7.tgz", + "integrity": "sha512-0P3SmMxPOR0r7mCsSHuyfSykPRK0y/eMBqwB4hkk2LMMOgHeuGDU1h7TjvY1yLtHBIBK9ybEecLTTgltM8izGg==", "dev": true, "requires": { - "@inrupt/internal-playwright-testids": "3.2.6", - "@inrupt/internal-test-env": "3.2.6" + "@inrupt/internal-playwright-testids": "3.2.7", + "@inrupt/internal-test-env": "3.2.7" } }, "@inrupt/internal-playwright-testids": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-testids/-/internal-playwright-testids-3.2.6.tgz", - "integrity": "sha512-6VjK81YqFeMyKjWQibjTJW5jpAe9X5JJTQ3eZDkTZfMwVBrozwU8A4kx6EC+ubiEdCWlhQulU3HjnL+TZaeF5A==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-playwright-testids/-/internal-playwright-testids-3.2.7.tgz", + "integrity": "sha512-cB6MXC4QfUMUN/ClaRBI/6tqhyUbt8SG8Ycsoqtp/0fK01Y1vlgqZkBRvFzq07lgHVIALcCGNZwZ8YLwKe7QhA==", "dev": true }, "@inrupt/internal-test-env": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/internal-test-env/-/internal-test-env-3.2.6.tgz", - "integrity": "sha512-uFk+wv0yk6SRSuoFe6ne5Vj77QymCRk888ozXJTaQpoxhl64VZ9OG/LBdlVIrw6H/XVFpGcAXxElo3RDZCn6bw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/internal-test-env/-/internal-test-env-3.2.7.tgz", + "integrity": "sha512-xvy/ZwX7Zni7zd/asJPDJuI6QcmSqj3qpusWqMZagpVfL6JIAu/PNtz3dCk13IF4yth+/G3sWl1BybU2v6Rl+A==", "dev": true, "requires": { "@inrupt/solid-client": "^2.1.2", - "@inrupt/solid-client-authn-node": "^2.3.0", + "@inrupt/solid-client-authn-node": "^2.4.1", "deepmerge-json": "^1.5.0", - "dotenv": "^16.4.7" + "dotenv": "^16.5.0" } }, "@inrupt/jest-jsdom-polyfills": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@inrupt/jest-jsdom-polyfills/-/jest-jsdom-polyfills-3.2.6.tgz", - "integrity": "sha512-PJqWy+arK7hzSSg6bYgriDVd+QxiCOulk9qnHl7KQgonzPZeXiJJMUXCRZ844JCyaLmS/bwjW+Fe0xhUqxSB/g==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@inrupt/jest-jsdom-polyfills/-/jest-jsdom-polyfills-3.2.7.tgz", + "integrity": "sha512-AonOcUL3Xo7fhSa8mZi5SANZEyDmyYaOq7t0brlhucygxdzhu1dePuizQwZiynqhkkWw67BoyHyYVXjG4jX+fQ==", "dev": true, "requires": { "@peculiar/webcrypto": "^1.5.0", "@web-std/blob": "^3.0.5", "@web-std/file": "^3.0.3", - "undici": "^7.5.0" + "undici": "^7.8.0" } }, "@inrupt/solid-client": { @@ -11912,16 +11926,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz", - "integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz", + "integrity": "sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/type-utils": "8.27.0", - "@typescript-eslint/utils": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/type-utils": "8.31.1", + "@typescript-eslint/utils": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -11929,54 +11943,54 @@ } }, "@typescript-eslint/parser": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz", - "integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz", + "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz", - "integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz", + "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0" + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1" } }, "@typescript-eslint/type-utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz", - "integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz", + "integrity": "sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.27.0", - "@typescript-eslint/utils": "8.27.0", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/utils": "8.31.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" } }, "@typescript-eslint/types": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz", - "integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz", + "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz", - "integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz", + "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==", "dev": true, "requires": { - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/visitor-keys": "8.27.0", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -12006,24 +12020,24 @@ } }, "@typescript-eslint/utils": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz", - "integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz", + "integrity": "sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.27.0", - "@typescript-eslint/types": "8.27.0", - "@typescript-eslint/typescript-estree": "8.27.0" + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz", - "integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz", + "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.27.0", + "@typescript-eslint/types": "8.31.1", "eslint-visitor-keys": "^4.2.0" }, "dependencies": { @@ -13091,9 +13105,9 @@ } }, "dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", "dev": true }, "ejs": { @@ -13412,9 +13426,9 @@ } }, "eslint-config-prettier": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz", - "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", + "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", "dev": true, "requires": {} }, @@ -13598,23 +13612,29 @@ } }, "eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.3.1.tgz", + "integrity": "sha512-vad9VWgEm9xaVXRNmb4aeOt0PWDc61IAdzghkbYQ2wavgax148iKoX1rNJcgkBGCipzLzOnHYVgL7xudM9yccQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.11.0" }, "dependencies": { + "@pkgr/core": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "dev": true + }, "synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, "requires": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" } } } @@ -16873,9 +16893,9 @@ } }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "type-check": { @@ -17025,9 +17045,9 @@ } }, "undici": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.5.0.tgz", - "integrity": "sha512-NFQG741e8mJ0fLQk90xKxFdaSM7z4+IQpAgsFI36bCDY9Z2+aXXZjVy2uUksMouWfMI9+w5ejOq5zYYTBCQJDQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.8.0.tgz", + "integrity": "sha512-vFv1GA99b7eKO1HG/4RPu2Is3FBTWBrmzqzO0mz+rLxN3yXkE4mqRcb8g8fHxzX4blEysrNZLqg5RbJLqX5buA==", "dev": true }, "update-browserslist-db": {