From 0fb2835aeec36a59a27703af5d104ba3a958527b Mon Sep 17 00:00:00 2001 From: Ludovic Date: Sat, 6 May 2023 16:38:11 +0200 Subject: [PATCH 1/8] feat: extra tests + update address --- api/__tests__/mock/address.ts | 11 +- api/__tests__/routes/address.test.ts | 235 ++++++++++++++++++++++++++- api/__tests__/utilities/constants.ts | 4 + api/src/routes/address.ts | 7 + 4 files changed, 254 insertions(+), 3 deletions(-) diff --git a/api/__tests__/mock/address.ts b/api/__tests__/mock/address.ts index 91068b87e..71cc0d865 100644 --- a/api/__tests__/mock/address.ts +++ b/api/__tests__/mock/address.ts @@ -28,7 +28,16 @@ export async function initialiseAddress() { longitude: 3.71847, }; + const address4 = { + street: "Krijgslaan", + number: 282, + city: "Ghent", + zip_code: 9000, + latitude: 51.02776, + longitude: 3.71847, + }; + await prisma.address.createMany({ - data: [address1, address2, address3], + data: [address1, address2, address3, address4], }); } diff --git a/api/__tests__/routes/address.test.ts b/api/__tests__/routes/address.test.ts index 292d32304..44ad2d79b 100644 --- a/api/__tests__/routes/address.test.ts +++ b/api/__tests__/routes/address.test.ts @@ -7,6 +7,12 @@ import { initialiseDatabase, restoreTables, } from "../mock/database"; +import { + badRequestResponse, + forbiddenResponse, + methodNotAllowedResponse, + notFoundResponse, +} from "../utilities/constants"; describe("Address tests", () => { let runner: Testrunner; @@ -83,8 +89,233 @@ describe("Address tests", () => { }); }); - afterAll(() => { - app.close(); + test("DELETE /address/:id", async () => { + await runner.delete({ url: "/address/4" }); + //verify that the address is truly deleted (no getAll method) + await runner.get({ + url: "/address/4", + expectedData: [notFoundResponse], + statusCode: 404, + }); + }); + + test("PATCH /address/:id (Student own address)", async () => { + runner.authLevel(AuthenticationLevel.STUDENT); + const expected = { + street: "Wallaby Way", + number: 42, + city: "Gent", + zip_code: 2000, + latitude: -33.865143, + longitude: 151.2099, + id: 1, + }; + + await runner.patch({ + url: "/address/1", + data: { city: "Gent" }, + expectedResponse: expected, + }); + }); + }); + + describe("Unsuccesful requests", () => { + let runner: Testrunner; + beforeAll(async () => { + const server = request(app); + runner = new Testrunner(server); + + await deleteDatabaseData(); + await initialiseDatabase(); + }); + + describe("Must be correctly authorized to use any path", () => { + const newAddress = { + street: "Krijgslaan", + number: 2, + city: "Ghent", + zip_code: 9000, + latitude: 51.02776, + longitude: 3.71847, + }; + + describe("Cannot reach any path without authorisation", () => { + beforeEach(() => { + runner.authLevel(AuthenticationLevel.UNAUTHORIZED); + }); + + test("Cannot reach GET /address", async () => { + await runner.get({ + url: "/address", + expectedData: [forbiddenResponse], + statusCode: 403, + }); + }); + + test("Cannot reach GET /address/:id", async () => { + await runner.get({ + url: "/address/1", + expectedData: [forbiddenResponse], + statusCode: 403, + }); + }); + + test("Cannot reach POST /address", async () => { + await runner.post({ + url: "/address", + data: newAddress, + expectedResponse: forbiddenResponse, + statusCode: 403, + }); + }); + + test("Cannot reach PATCH /address/:id", async () => { + await runner.patch({ + url: "/address/1", + data: newAddress, + expectedResponse: forbiddenResponse, + statusCode: 403, + }); + }); + + test("Cannot reach DELETE /address/:id", async () => { + await runner.delete({ + url: "/address/1", + statusCode: 403, + }); + }); + }); + describe("Cannot reach any path as a student", () => { + beforeEach(() => { + runner.authLevel(AuthenticationLevel.STUDENT); + }); + + test("Cannot reach GET /address", async () => { + await runner.get({ + url: "/address", + expectedData: [forbiddenResponse], + statusCode: 403, + }); + }); + + test("Cannot reach POST /address", async () => { + await runner.post({ + url: "/address", + data: newAddress, + expectedResponse: forbiddenResponse, + statusCode: 403, + }); + }); + + test("PATCH /address/:id (not own address)", async () => { + const expected = { + street: "Wallaby Way", + number: 42, + city: "Gent", + zip_code: 2000, + latitude: -33.865143, + longitude: 151.2099, + id: 1, + }; + + await runner.patch({ + url: "/address/2", + data: { city: "Gent" }, + expectedResponse: forbiddenResponse, + statusCode: 403, + }); + }); + + test("Cannot reach DELETE /address/:id", async () => { + await runner.delete({ + url: "/address/1", + statusCode: 403, + }); + }); + }); + }); + describe("The requested path must exist", () => { + beforeEach(() => { + runner.authLevel(AuthenticationLevel.ADMINISTRATOR); + }); + + test("Find a nonexistent address", async () => { + await runner.get({ + url: "/address/0", + expectedData: [notFoundResponse], + statusCode: 404, + }); + }); + + test("Update a nonexistent address", async () => { + const newAddress = { + street: "Krijgslaan", + number: 2, + }; + await runner.patch({ + url: "/address/0", + data: newAddress, + expectedResponse: notFoundResponse, + statusCode: 404, + }); + }); + test("Delete a nonexistent address", async () => { + await runner.delete({ url: "/address/0", statusCode: 404 }); + }); + }); + describe("The type of address id must be correct", () => { + beforeEach(() => { + runner.authLevel(AuthenticationLevel.ADMINISTRATOR); + }); + + test("GET request", async () => { + await runner.get({ + url: "/address/wrongtype", + expectedData: [badRequestResponse], + statusCode: 400, + }); + }); + + test("PATCH request", async () => { + const newAddress = { + street: "Krijgslaan", + number: 2, + city: "Ghent", + zip_code: 9000, + latitude: 51.02776, + longitude: 3.71847, + }; + + await runner.patch({ + url: "/address/wrongtype", + data: newAddress, + expectedResponse: badRequestResponse, + statusCode: 400, + }); + }); + + test("DELETE request", async () => { + await runner.delete({ + url: "/address/wrongtype", + statusCode: 400, + }); + }); }); + describe("The type of address id must be correct", () => { + beforeEach(() => { + runner.authLevel(AuthenticationLevel.ADMINISTRATOR); + }); + test("Cannot reach GET /address", async () => { + await runner.get({ + url: "/address", + expectedData: [methodNotAllowedResponse], + statusCode: 405, + }); + }); + }); + }); + + afterAll(() => { + app.close(); }); }); diff --git a/api/__tests__/utilities/constants.ts b/api/__tests__/utilities/constants.ts index 5f4bec655..cd32d4915 100644 --- a/api/__tests__/utilities/constants.ts +++ b/api/__tests__/utilities/constants.ts @@ -25,3 +25,7 @@ export const badRequestForeignKey = { message: "Bad Request", detail: "Foreign key constraint failed", }; + +export const methodNotAllowedResponse = { + message: "Method not allowed", +}; diff --git a/api/src/routes/address.ts b/api/src/routes/address.ts index 4e0d9a3e6..0ec4041ff 100644 --- a/api/src/routes/address.ts +++ b/api/src/routes/address.ts @@ -36,6 +36,13 @@ export class AddressRouting extends Routing { async updateOne(req: CustomRequest, res: express.Response) { const addressIdentifier = Parser.number(req.params["id"]); + //check if the address exists + const address = await prisma.address.findFirstOrThrow({ + where: { + id: addressIdentifier, + }, + }); + // Must be a valid identifier. if (!addressIdentifier || Number.isNaN(addressIdentifier)) { throw new APIError(APIErrorCode.BAD_REQUEST); From 286bf3d3d059770540245ccbe9911a815f8eaa4b Mon Sep 17 00:00:00 2001 From: Ludovic Date: Sat, 6 May 2023 16:54:44 +0200 Subject: [PATCH 2/8] chore: lint --- api/src/routes/address.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/routes/address.ts b/api/src/routes/address.ts index 2cd08fb1a..fd697e3f2 100644 --- a/api/src/routes/address.ts +++ b/api/src/routes/address.ts @@ -38,7 +38,6 @@ export class AddressRouting extends Routing { async updateOne(req: CustomRequest, res: express.Response) { const addressIdentifier = Parser.number(req.params["id"]); - //check if the address exists const address = await prisma.address.findFirstOrThrow({ where: { From acc0ecc0d714c48dd240793f6df792dacba9890d Mon Sep 17 00:00:00 2001 From: Ludovic Date: Sat, 6 May 2023 17:17:07 +0200 Subject: [PATCH 3/8] fix: tests --- api/__tests__/routes/address.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/__tests__/routes/address.test.ts b/api/__tests__/routes/address.test.ts index 78fefaf30..8cac9dcb1 100644 --- a/api/__tests__/routes/address.test.ts +++ b/api/__tests__/routes/address.test.ts @@ -241,7 +241,7 @@ describe("Address tests", () => { test("Find a nonexistent address", async () => { await runner.get({ - url: "/address/0", + url: "/address/1000", expectedData: [notFoundResponse], statusCode: 404, }); @@ -253,14 +253,14 @@ describe("Address tests", () => { number: 2, }; await runner.patch({ - url: "/address/0", + url: "/address/1000", data: newAddress, expectedResponse: notFoundResponse, statusCode: 404, }); }); test("Delete a nonexistent address", async () => { - await runner.delete({ url: "/address/0", statusCode: 404 }); + await runner.delete({ url: "/address/1000", statusCode: 404 }); }); }); describe("The type of address id must be correct", () => { From 914aec4ab529d30a534875b53a1507933ae84906 Mon Sep 17 00:00:00 2001 From: Ludovic Date: Sat, 6 May 2023 17:26:48 +0200 Subject: [PATCH 4/8] fix: tests user --- api/__tests__/routes/user.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/__tests__/routes/user.test.ts b/api/__tests__/routes/user.test.ts index 6dfb05f33..c5b5da245 100644 --- a/api/__tests__/routes/user.test.ts +++ b/api/__tests__/routes/user.test.ts @@ -176,13 +176,13 @@ describe("User tests", () => { last_login: "2020-01-01T00:00:00.000Z", date_added: "2020-01-01T00:00:00.000Z", phone: "23457890", - address_id: 4, + address_id: 5, student: false, super_student: true, admin: false, deleted: false, address: { - id: 4, + id: 5, street: "street", number: 1, city: "Gent", From e29af985f305577a7af1e250e3e43e98476a1a49 Mon Sep 17 00:00:00 2001 From: Ludovic Date: Wed, 10 May 2023 10:53:07 +0200 Subject: [PATCH 5/8] feat: auth tests --- api/__tests__/routes/auth.test.ts | 126 +++++++++++++++++++++++++++ api/__tests__/utilities/constants.ts | 4 + 2 files changed, 130 insertions(+) create mode 100644 api/__tests__/routes/auth.test.ts diff --git a/api/__tests__/routes/auth.test.ts b/api/__tests__/routes/auth.test.ts new file mode 100644 index 000000000..baa08994e --- /dev/null +++ b/api/__tests__/routes/auth.test.ts @@ -0,0 +1,126 @@ +import { describe, test } from "@jest/globals"; +import { AuthenticationLevel, Testrunner } from "../utilities/Testrunner"; +import request from "supertest"; +import app from "../../src/main"; +import { + deleteDatabaseData, + initialiseDatabase, + resetDatabase, + restoreTables, +} from "../mock/database"; +import { + badRequestResponse, + forbiddenResponse, + notFoundResponse, + unauthorizedResponse, +} from "../utilities/constants"; + +describe("Auth tests", () => { + let runner: Testrunner; + + beforeAll(async () => { + const server = request(app); + runner = new Testrunner(server); + return resetDatabase(); + }); + + afterEach(async () => { + await restoreTables(); + }); + + describe("Succesful requests", () => { + test("POST /login", async () => { + const newLogin = { + username: "student@trottoir.be", + password: "student", + }; + + await runner.post({ + url: "/auth/login", + data: newLogin, + expectedResponse: {}, + statusCode: 302, + }); + }); + + test("POST /logout", async () => { + runner.authLevel(AuthenticationLevel.SUPER_STUDENT); + await runner.post({ + url: "/auth/logout", + data: {}, + expectedResponse: {}, + statusCode: 302, + }); + }); + + test("GET / get current user", async () => { + runner.authLevel(AuthenticationLevel.SUPER_STUDENT); + + const expected = { + address: { + city: "Ghent", + id: 2, + latitude: 51.04732, + longitude: 3.7282, + number: 25, + street: "Sint-Pietersnieuwstraat", + zip_code: 9000, + }, + address_id: 2, + admin: false, + date_added: "2023-05-04T12:00:00.000Z", + email: "superstudent@trottoir.be", + first_name: "Toon", + id: 2, + last_login: "2023-05-04T12:00:00.000Z", + last_name: "De Superstudent", + phone: "9876543210", + student: false, + super_student: true, + syndicus: [], + }; + await runner.get({ + url: "/auth/", + expectedData: [expected], + statusCode: 200, + }); + }); + }); + + describe("Unsuccesful requests", () => { + let runner: Testrunner; + beforeAll(async () => { + const server = request(app); + runner = new Testrunner(server); + + await deleteDatabaseData(); + await initialiseDatabase(); + }); + + test("POST /login wrong password", async () => { + const newLogin = { + username: "student@trottoir.be", + password: "student22", + }; + + await runner.post({ + url: "/auth/login", + data: newLogin, + expectedResponse: forbiddenResponse, + statusCode: 403, + }); + }); + + test("GET / not logged in", async () => { + await runner.get({ + url: "/auth/", + expectedData: [unauthorizedResponse], + statusCode: 401, + }); + }); + }); + + afterAll(() => { + app.close(); + }); +}); diff --git a/api/__tests__/utilities/constants.ts b/api/__tests__/utilities/constants.ts index 5f4bec655..003125498 100644 --- a/api/__tests__/utilities/constants.ts +++ b/api/__tests__/utilities/constants.ts @@ -6,6 +6,10 @@ export const forbiddenResponse = { message: "Forbidden", }; +export const unauthorizedResponse = { + message: "Unauthorized", +}; + export const internalErrorResponse = { message: "Internal Server Error", detail: "An unknown error occurred", From 6bb4a5657b27fbe2ac1a82819a10c914da248208 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 May 2023 09:09:14 +0000 Subject: [PATCH 6/8] chore(deps-dev): bump prettier from 2.8.7 to 2.8.8 in /api Bumps [prettier](https://github.com/prettier/prettier) from 2.8.7 to 2.8.8. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.8.7...2.8.8) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/package-lock.json | 8 ++++---- api/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/package-lock.json b/api/package-lock.json index 67cf2b835..3d9fea010 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -48,7 +48,7 @@ "eslint": "^8.40.0", "eslint-config-prettier": "^8.6.0", "jest": "^29.5.0", - "prettier": "^2.8.4", + "prettier": "^2.8.8", "supertest": "^6.3.3", "ts-jest": "^29.0.5", "typescript": "^5.0.4" @@ -5382,9 +5382,9 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" diff --git a/api/package.json b/api/package.json index ced5650dd..16336549e 100644 --- a/api/package.json +++ b/api/package.json @@ -53,7 +53,7 @@ "eslint": "^8.40.0", "eslint-config-prettier": "^8.6.0", "jest": "^29.5.0", - "prettier": "^2.8.4", + "prettier": "^2.8.8", "supertest": "^6.3.3", "ts-jest": "^29.0.5", "typescript": "^5.0.4" From fe3a6fdd0aa243b750e393d7e88a5ad05cff8083 Mon Sep 17 00:00:00 2001 From: Ludovic Date: Wed, 10 May 2023 14:38:01 +0200 Subject: [PATCH 7/8] fix: unused code --- api/src/routes/address.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/api/src/routes/address.ts b/api/src/routes/address.ts index fd697e3f2..feff71f51 100644 --- a/api/src/routes/address.ts +++ b/api/src/routes/address.ts @@ -38,13 +38,6 @@ export class AddressRouting extends Routing { async updateOne(req: CustomRequest, res: express.Response) { const addressIdentifier = Parser.number(req.params["id"]); - //check if the address exists - const address = await prisma.address.findFirstOrThrow({ - where: { - id: addressIdentifier, - }, - }); - // Must be a valid identifier. if (!addressIdentifier || Number.isNaN(addressIdentifier)) { throw new APIError(APIErrorCode.BAD_REQUEST); From 9bb554cc76b4c370dabe1e4cfd0b0e8425d903ad Mon Sep 17 00:00:00 2001 From: Arnout Allaert Date: Wed, 10 May 2023 15:05:59 +0200 Subject: [PATCH 8/8] pwa support (#377) * feat: wpa support * feat: pwa support * chore: added dev-dist to gitignore * chore: delete dev-dist --- web/.gitignore | 2 +- web/index.html | 13 +- web/package-lock.json | 1608 ++++++++++++++++++++++--- web/package.json | 1 + web/public/android-chrome-192x192.png | Bin 0 -> 8812 bytes web/public/android-chrome-512x512.png | Bin 0 -> 25543 bytes web/public/apple-touch-icon.png | Bin 0 -> 8037 bytes web/public/favicon-16x16.png | Bin 0 -> 420 bytes web/public/favicon-32x32.png | Bin 0 -> 978 bytes web/public/favicon.ico | Bin 34494 -> 15406 bytes web/public/pwa-192x192.png | Bin 0 -> 8812 bytes web/public/pwa-512x512.png | Bin 0 -> 25543 bytes web/public/robots.txt | 2 + web/public/site.webmanifest | 1 + web/vite.config.ts | 35 +- 15 files changed, 1522 insertions(+), 140 deletions(-) create mode 100644 web/public/android-chrome-192x192.png create mode 100644 web/public/android-chrome-512x512.png create mode 100644 web/public/apple-touch-icon.png create mode 100644 web/public/favicon-16x16.png create mode 100644 web/public/favicon-32x32.png create mode 100644 web/public/pwa-192x192.png create mode 100644 web/public/pwa-512x512.png create mode 100644 web/public/robots.txt create mode 100644 web/public/site.webmanifest diff --git a/web/.gitignore b/web/.gitignore index 5765406e3..0d5cb054b 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,7 +1,7 @@ .DS_Store node_modules /dist - +/dev-dist # local env files .env.local diff --git a/web/index.html b/web/index.html index 26e4b8a33..c7bec66dc 100644 --- a/web/index.html +++ b/web/index.html @@ -1,9 +1,16 @@ - - - + + + + + + + + + + Dr. Trottoir - Beheer diff --git a/web/package-lock.json b/web/package-lock.json index 61f75d433..ddef9c72f 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -40,6 +40,7 @@ "ts-jest": "^29.1.0", "typescript": "^4.0.0", "vite": "^3.0.9", + "vite-plugin-pwa": "^0.14.7", "vite-plugin-vuetify": "^1.0.0-alpha.12", "vue-tsc": "^1.0.9" } @@ -151,7 +152,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "peer": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -164,7 +164,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -221,7 +220,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -244,7 +242,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.3.1" @@ -261,7 +258,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -279,7 +275,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" } @@ -298,7 +293,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "peer": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -336,7 +330,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, - "peer": true, "dependencies": { "@babel/types": "^7.21.0" }, @@ -380,7 +373,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "peer": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -402,7 +394,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -421,7 +412,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.20.7", @@ -451,7 +441,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, - "peer": true, "dependencies": { "@babel/types": "^7.20.0" }, @@ -503,7 +492,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -629,7 +617,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -645,7 +632,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -663,7 +649,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", @@ -682,7 +667,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -699,7 +683,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", @@ -717,7 +700,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -734,7 +716,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -751,7 +732,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -768,7 +748,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -785,7 +764,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -802,7 +780,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -819,7 +796,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, - "peer": true, "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -839,7 +815,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -856,7 +831,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -874,7 +848,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -891,7 +864,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -910,7 +882,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -963,7 +934,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -979,7 +949,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -992,7 +961,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1005,7 +973,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1132,7 +1099,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1178,7 +1144,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1194,7 +1159,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", @@ -1212,7 +1176,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1228,7 +1191,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1244,7 +1206,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", @@ -1268,7 +1229,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -1278,7 +1238,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7" @@ -1295,7 +1254,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1311,7 +1269,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1328,7 +1285,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1344,7 +1300,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1361,7 +1316,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1377,7 +1331,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1395,7 +1348,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1411,7 +1363,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1427,7 +1378,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2" @@ -1444,7 +1394,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", @@ -1462,7 +1411,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.20.11", @@ -1481,7 +1429,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1498,7 +1445,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2" @@ -1515,7 +1461,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1531,7 +1476,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1548,7 +1492,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1564,7 +1507,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1580,7 +1522,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "regenerator-transform": "^0.15.1" @@ -1597,7 +1538,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1613,7 +1553,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1629,7 +1568,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" @@ -1646,7 +1584,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1662,7 +1599,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1678,7 +1614,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1694,7 +1629,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1710,7 +1644,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1727,7 +1660,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "dev": true, - "peer": true, "dependencies": { "@babel/compat-data": "^7.21.4", "@babel/helper-compilation-targets": "^7.21.4", @@ -1817,7 +1749,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" } @@ -1827,7 +1758,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1843,15 +1773,13 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@babel/runtime": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dev": true, - "peer": true, "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2804,7 +2732,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "devOptional": true, - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -2815,7 +2742,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "devOptional": true, - "peer": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2912,6 +2838,162 @@ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a.tgz", "integrity": "sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ==" }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@rollup/plugin-babel/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@selab-2/groep-1-orm": { "version": "1.0.18", "resolved": "https://npm.pkg.github.com/download/@selab-2/groep-1-orm/1.0.18/6887f30bf7609de79e939fec666dae23bf7f15f4", @@ -2955,6 +3037,18 @@ "@sinonjs/commons": "^2.0.0" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, "node_modules/@types/babel__core": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", @@ -3027,8 +3121,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/graceful-fs": { "version": "4.1.6", @@ -3099,6 +3192,15 @@ "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", "integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg==" }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/semver": { "version": "7.3.13", "dev": true, @@ -3122,6 +3224,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, "node_modules/@types/webfontloader": { "version": "1.6.35", "dev": true, @@ -3957,6 +4065,19 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "dev": true, @@ -4013,6 +4134,18 @@ "node": ">= 4.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -4067,7 +4200,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, - "peer": true, "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -4082,7 +4214,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" } @@ -4092,7 +4223,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -4106,7 +4236,6 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -4302,6 +4431,18 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "devOptional": true }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -4616,8 +4757,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "peer": true + "devOptional": true }, "node_modules/common-tags": { "version": "1.8.2", @@ -4649,7 +4789,6 @@ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dev": true, - "peer": true, "dependencies": { "browserslist": "^4.21.5" }, @@ -4677,6 +4816,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/cssesc": { "version": "3.0.0", "dev": true, @@ -4880,6 +5028,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4938,6 +5102,21 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.348", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.348.tgz", @@ -5006,6 +5185,54 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", @@ -5013,12 +5240,43 @@ "dev": true, "peer": true }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/esbuild": { "version": "0.15.18", "devOptional": true, @@ -5586,6 +5844,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.0.1", "license": "MIT", @@ -5644,6 +5932,15 @@ "dev": true, "license": "ISC" }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5736,6 +6033,33 @@ "devOptional": true, "license": "MIT" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5768,6 +6092,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -5792,6 +6122,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -5876,6 +6222,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "dev": true, @@ -5895,6 +6256,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -5917,6 +6290,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "dev": true, @@ -5925,6 +6307,30 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5937,6 +6343,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -5999,6 +6420,12 @@ "node": ">=10.17.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -6105,12 +6532,52 @@ "node": ">=10" } }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "license": "MIT", @@ -6121,6 +6588,34 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -6144,6 +6639,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "license": "MIT", @@ -6195,6 +6705,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "license": "MIT", @@ -6202,6 +6730,30 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "dev": true, @@ -6210,46 +6762,144 @@ "node": ">=8" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { + "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-windows": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isexe": { + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { "version": "2.0.0", "dev": true, "license": "ISC" @@ -6376,6 +7026,24 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", @@ -7718,6 +8386,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -7837,8 +8514,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "peer": true + "dev": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", @@ -7863,6 +8539,12 @@ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -8297,6 +8979,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "dev": true, @@ -8830,7 +9539,6 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -8855,15 +9563,13 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "peer": true + "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "peer": true, "dependencies": { "regenerate": "^1.4.2" }, @@ -8875,19 +9581,34 @@ "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, - "peer": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpp": { "version": "3.2.0", "dev": true, @@ -8904,7 +9625,6 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "peer": true, "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -8922,7 +9642,6 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "peer": true, "dependencies": { "jsesc": "~0.5.0" }, @@ -8935,7 +9654,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, - "peer": true, "bin": { "jsesc": "bin/jsesc" } @@ -8975,7 +9693,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -9100,6 +9817,45 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "dev": true, @@ -9157,6 +9913,20 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9456,6 +10226,84 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -9476,6 +10324,15 @@ "node": ">=8" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -9528,12 +10385,50 @@ "node": ">=6" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { "version": "5.16.8", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", "devOptional": true, - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -9606,7 +10501,6 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "devOptional": true, - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9693,6 +10587,15 @@ "node": ">=0.8" } }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/ts-jest": { "version": "29.1.0", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", @@ -9804,6 +10707,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -9825,12 +10742,26 @@ "node": ">=4.2.0" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -9840,7 +10771,6 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "peer": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -9854,7 +10784,6 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -9864,11 +10793,22 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "peer": true, "engines": { "node": ">=4" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10037,6 +10977,57 @@ } } }, + "node_modules/vite-plugin-pwa": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.7.tgz", + "integrity": "sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==", + "dev": true, + "dependencies": { + "@rollup/plugin-replace": "^5.0.1", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "pretty-bytes": "^6.0.0", + "rollup": "^3.7.2", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + } + }, + "node_modules/vite-plugin-pwa/node_modules/pretty-bytes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-pwa/node_modules/rollup": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.4.tgz", + "integrity": "sha512-N5LxpvDolOm9ueiCp4NfB80omMDqb45ShtsQw2+OT3f11uJ197dv703NZvznYHP6RWR85wfxanXurXKG3ux2GQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/vite-plugin-vuetify": { "version": "1.0.2", "devOptional": true, @@ -10208,6 +11199,12 @@ "version": "1.6.28", "license": "Apache-2.0" }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/webpack": { "version": "5.80.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", @@ -10285,6 +11282,17 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -10299,12 +11307,48 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "dev": true, @@ -10313,6 +11357,300 @@ "node": ">=0.10.0" } }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/web/package.json b/web/package.json index c96552e62..e177c8c71 100644 --- a/web/package.json +++ b/web/package.json @@ -44,6 +44,7 @@ "ts-jest": "^29.1.0", "typescript": "^4.0.0", "vite": "^3.0.9", + "vite-plugin-pwa": "^0.14.7", "vite-plugin-vuetify": "^1.0.0-alpha.12", "vue-tsc": "^1.0.9" } diff --git a/web/public/android-chrome-192x192.png b/web/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4d001ce9d1fa6e5f7c650ab24018d55035b724 GIT binary patch literal 8812 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 zπ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 literal 0 HcmV?d00001 diff --git a/web/public/android-chrome-512x512.png b/web/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..d9475510677e66037066777ac463748ec95159b0 GIT binary patch literal 25543 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,u>sPBg#JB1+XKmQLPkIR&>*e(6; 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 rIWhi6z`v*Q-#hT%)%X8id3NeN literal 0 HcmV?d00001 diff --git a/web/public/apple-touch-icon.png b/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..80019ea69e8dc983bd4b5bd2a490a53c808b56d8 GIT binary patch literal 8037 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 AUjP6A literal 0 HcmV?d00001 diff --git a/web/public/favicon.ico b/web/public/favicon.ico index b17e8763793e3e5b51fc080e0fd3879aad82a0f7..d408c8eee20d23e2cac795c714e91656e276d2b6 100644 GIT binary patch literal 15406 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 literal 34494 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 JB{5_E{vTddtD67- diff --git a/web/public/pwa-192x192.png b/web/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4d001ce9d1fa6e5f7c650ab24018d55035b724 GIT binary patch literal 8812 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 zπ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 literal 0 HcmV?d00001 diff --git a/web/public/pwa-512x512.png b/web/public/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..d9475510677e66037066777ac463748ec95159b0 GIT binary patch literal 25543 zcmeFYX*d+nA1Hig48|5Fdt@7ASF&Us*>`0xJE81kDP)v2W#9L-kX`m{6AB@eP{hze zc9kgGJ=6bx@B2RY!+pQLAMW$$F`09I=bYcZ#+w*v(@}F!0|4lBbu=ylfP^2B08IgZ z{R$cX3x6R3E^40#)o(bz1Hc1xHPp;P?A8k0T9h?2wkP@S6r-p_1aF^nGdX=mke1E2 z7ta{T6iE9}S|t0GyuzJG%NO_?w5MDR92}UA3*IX(Ii@^`9RKZTy{;It4K#AJ4xZKn3WKj0_0U4;v4H3Xc%9 zwPpGDUj_sfxc}cz|M$E9id8C`7lkM!ya3|bnmVV^ zwiDw~b`ySCL8SxSHRAB-hVukkN)Qs@`dK?^RRy=8oTK6*h`b}ngOFPKRq>N=^dv$$ zALZcYh7v-)_lR=V37h+_|BX-T6g=pTUbBKI@)M6k%(j;4pU23*r|=_4`P|+jy>l7d zj8?92$zZQ_yiZu}BJX9QwNpFvj{Bc!re=A=M#tsVK3EB)-wpNIDw)=JWXx zY|s)LMKnLM3X=@nnY%bx5vmC383e&?zwmD8E@ixj;Z2!}-~05Ghi9!ND1BM*ZOQ07 z%BOJzBE&iEEi@W8N0n_}y2Lg8;uZ?QVD#s*`A{v@=*N=wO$A~T_RTtvWHc6ep9Gz$ znd5lm57f<5pb$wM{edk}?u_j{{?MbM1T7{E)uMo5<#QQMq%srOAm40Zk^VKg83^Jj z8`$pTvP4e6;~EN)X<9QfdsUE+ex*IH+I5rs?!NT;Xp)5Unr_gyma+?wyr1Q?e{ zs4EmSa!epl!%vr9bvGks4C_H-ZN|GqhGej$!^aeZ{sIZmFVH+Hu}Zf&5Z!2|hPtVT zLl&3Dn@;f+v*SPZ5#|u9Y73N&&5tNFipe3q#Br8sd?u-QSD^RS=JU!~%w%OF`8n3e zO!)8yl-=-MoG@JVSm({J0Qq>K@!7i^43ROANM~tnhU0NpN#Dg+Zv`L2do}XZ2EDmf z>pKq0gYd;!qz2;38jEa3sk&{!YTnhQc8jGv{^gn2aRS8=mVO<$0zMCq!k>7+8HZ~_#qa^-*9-Ql2#2UaFgYpc%)8%2>1N8Mf1ROcxJz}5DJ+SC-j;w_@KB4V2hAA5T zh%p)He180qZ}c2eoe4a&##55XKl>Urlh8XR-dFrhlP3XUhDDY=9v6(JH3#=J2%13F z``n2W-}CXA(#7BEAsJm9(^AmaV+jOu!Wsyx`Rdu8+8gF z0Fxf4Md$VLD=G5zFWJT$&{)X$I$DBcj7uz$yfpYR54-bt37TsI;A0Y7%2u8x3 zC2}3!wrm3I(-8#4U4<$&r!ss0h`%a+qRI3BTEg}muni;I*$IgF4}Xr~6$L*IRUArS zj3t(gt2K%(AblDaG6EROiXhZR&CMzVXOYfcCrH$5$gxx&I=^~;L6SWDbq0D|3o^EB zgTEMZ7_xsE3YUG@C6y8q61XV_d~_P}EDuaD#^V2g%94OS$Z%$KkAb4coIkwD3zF_W zR#9;DO{gtZ#UF_^6cNaQx7Na!DS0zv)JHxj+blO4MUl}EeU-;SFmiLvs!|P9j?1VI z)RWKZE(q88l@+2JG~pe@e_XRfQNyQO2?1F$hFg)^8B~Z`MLa7a#36laL9Z=U{;HqM zdxps0B$4W~6HmY~!V6hCo$a{-CK3>e65xEe^b9qD-r19Xxjnjag0(CT=LVVMx~vSf z0cwGC2Mp)~Euplnx(F!@V&3;b2dL!!>}*uPqtU&NkGTFfrS*S9h?M~FKCK`a!n=Q! z#Cx|mSbm6KuWh;g25mK@BXbE0U&t3GBaRdxL4V>-kua~I4OYpB%Ah+JY23<5plf6y z+%ahiglt@vRvngrBZEx;ni@YQh6`cdBqF~nCiZ%h@ApTenV>2(;e5(@7gvvpIR%Dl zRjkE#FPjdPOCnefZx+dr)h|n}ZbB*xFEB#Xe&$nUjEGQ*-_aU3WoC3why3uc<$X3fT?nq&<|hz_w%k&7J}Cel zIP5ErKcJ>fQBBdb6JkPZN@x&C2A_k9Z!`c&#sYW)w39=2)2;E*MMy1bd;!>hGRn|; zJbr`ehkzU(5o$T2)+tK9QHjV%8vIY)sN)9~8QC3xj~v&cT}bCJh_qI@+j~I0n?l2Q z>O5pGwAMLB$U0CwQJeD#c>6>*0Y_F zxM61}@j$+yS4I#;7({Sdod+oH(=|+dt*Ci_8O);Qgry8)8OfdTa{p?DdaesEPvN_f zzvNUpy!c19qH|3092s6%8s(^Zl*GgY++x1(ak`p%7V0i|MTZUCN4r4v)2}6@&bTBL zd4&mp3H}--RDb2oZC|Im09{0%il*GH6n5QJG3mG_eBlrfwXof}0P+jzOpm4awde+Q z2VHW4m(IR#{!+=+J>hx^D9)zO6!aa;PxmO|OE%Vbuv-~HTKG%Mk)lu<+_7;40$S`T z2$5^Od2~dJ*z^WP*sUC4B=I-syzE=XN$yZ%P07LRsa>t%APBt)x?_xNY>@)YKvl?6 z(sPIjG^2bYFm48n2pTz7Jx)Cj6?=mQ%fSB!kH3-#snqxc-KdVe$qWO;CJNM0+cVs& z5k?!a{uyMW;ufs)i77D9C`Lmb=41P+f%^OJ5e<@vZ--7r&nS4>k!U1OdX?^e;CYjM zGQ!_z>5d#0G8RFR;4vtsB^RDTXNwYU7X8tJ1C@WwMra+k4;yKcZVRQLyVW&O93=Ne z-e2YvG=#|@4g-WzTVC|i5?H}Zv+r*SY@M}Zk-re~0tuMZ(^Rw=Jp^_N!O(Pi*5N!* z!iEW$^yr{Nk^AKoUH-zz0I03p@g%(I01Yal&bna^p05w1f!zuN7zm}2 ze;0Zj)8+d&xfQJec`r`u@m;=JPE@89;5@&;uFL|C^cOA+o_;-^ph9xH)H9hLqM0C2 zU-F?iOJFzxZ1kKS-hP@X%9yPWpG&5Jq99qSdL$3(w+m*2V=CD!_%g}BU_xX>kzP== zmKp$hk=|4K2E&ER&YEiyauC&D-_+a`LV7@SUcUsQh~ByjLLATeOh{inryA@+U%y8} zOB#YxmL`I75>!V0J&oDB?m2ZTUjW{vHcHn#OT*!0BwT)iZ1)B|IpGSB9eaa+p14AC zv*aBAutp{_vL%BlDuNI6)X(?J3AiO>CDI8;zcYojQ8vu)W{I?cpDdGCHbwCavu-*{ zr{wyc9gk##e>|OT1|z{ZC}EN)9NJ$woUT@b)sC`_4>9`U(J3rrSsMJx2Ssqi{;mlS z>))w`>_Mw|w0r>IhhJJ?315t`D>4kSMi%RSyrz#*fc|>19FlkjbK<%~|EVYe0r-YT z@#f7M4lM8q?uboA%)I{Xz{jsX|xnWD2+iUmu z^Cc&QuT=bE<>r}+le2{*Ac?>3@*tAvf|-<5rubrvf?hYcf9J(#H(Lo0gk4{blWnx_!LR*G$;gT1u2YiNS<5hbOx;JE(+iA`EtSE z;m)eo9KUV)++UC6pHV55yByc4q<~aF83V9%nWK_eFh65@JAtqV|G8Tj03xi;l#WFZFYftNs?K zYTDyTSL}sX6huLDjUuxCyqWnnOVf$3(7|pv-RkG1@DPGt6Z~k{#MfV0n&CXIHa!p#OdB%nihV##}IIy#sIlO2GB>=vW>jBmnJ_{ zsbI8Q8&aO&kxA@qVSdlX0kQtzip_zoI_a_|>HmPRtbdf#1W}Y>A)_@Pwnk}>=n3yw zl0T;RYPwFL2!Fstl8|B-WX#7-DMepNjH%RWW_*Ukn0H8wc^Pu=HE`HeX898Z@D-`@ zJ}R0B)AvpC(%+7O$2!QjS{S=A#I>|Gzp73=(Z$|LOPoDd zAi`)&h9o)ymCmvV8WdqzH(%;EZjPOx8xVFkR50x7niqC zBp%|uu%I@M2fG~jHu2^6NNCV8u}OPY(C)m`X?HdNL&|qUE_kLzNWM^RG<(0nLF)rsv3PVC) zbbq>jk>n*9dt{O0t+zjXdR*6+?}oY6kf6Vfj((h?4IIGKwC-ZMqY!?*e6n|Z{O zXd~488Od|=uj(&(buhz7@H>qp(9X}^yrJ}=RmMka!R?=iR|!>D@e8RC5^Jj$SHLBg z5xe~OVW-eEhy&UlRX%dUFk&Aon@PT1t-nD3ZxeJkXyg86LU!v$9T5yFAEqTcg}zIJ z7d!dU;Yqw(FX~QjUj#Ke@oq++?(0TLGC;@p6k-@Ky%cr}hbEGts8NC%Nbj@a4-lS= zb7?Q3EAUA-NYZ11Vt8AOL_(gjV_n!dJRjVL-P94yiM=T0gTBEb{+PZG+4JX%6`1;M+lPj0h46;jk@-3c ztn0;J9E2gOifMAReV~$7;x3alrOGRf%KNqJS3b{r@zi{MRc+GE>{nioA-SA)RPLSE zKc|RzrJZdSaD}#-Et)*4A`xNqgF-34m(ewQr`4fku(3wOiR)f7#eeyEhUk=pW*y_1Z1EIR+_PJZjb=D6SxG%?1Uwh<4EvLmM*%>LxprD1wx zcCKRV#hEH*e%-@00V(y6qCCZI3!x`n$@0x_D87WsBI=iI*G$3w<%Jtdjwz`L{B zgMAu&slo!4P_6xheL5TU9bkO68?MBR+*s}NRHY}H0ee0_HQu6v>&_PUqj{)%#ve9^-OF!X zd_K9u5lV#*c?9{RlKQ<;LT^(-SdO{9Sd?bd{A7d?)d{+eoZi<9Go0L-UPHAjOEgI? zU09VI&$E35+ECUXJLDKv<{w{!_z_a%jxS8x4^d_nkv*>$>JeeLD_J_k%}-a@kt>rC zR$f`02>r_zbU9QEpOhvYZ1;25{)#BXlgeuI)5!IQrl zsP*8*IF;PPr$^kA3`2G>UvkT$n7wO;JX&;5KVwtfVv+AljUNxr zftlNtotUyJ$nX!v{hVzVYQTcptI06gcsb(=@0g0{tDzt%A(++tr}=!K-E;yn%LYVg zL|Gyn+m>p*tHz>7L?1$T^#+2$Vm3xx-M)^tEi`A|8n-=QZ~N5?TWFp2lV}O=T@B58 z1x99ZOSa_2{Q|b$k4JByPfx9J$%E4Ft4H;itI{0kglUO3)eVr!E z#)vQfrJa5Xi0czUFpQLI46{R5kA;mT@qGv5<=rdKMdRnvm-Ne%5Y+fu(dEy&?W!5( z-Uq9B&DM?6v(MJaM!yVPj!mt;AK)Lb@l3j>4=Bxi#SZU^yEM)ghd{8}{|hX!zs~EH z{#ogfK1(*v&0^!=qbG^TDq6v?pl~sdojH2$(&&$LUe+_p_rPDH5@RT|4O@ZsgH_$WaQdpx4Ik(_DdE z>o1?RT|RpqGY3&NQPCsxSikX--jE{+#3&uKPjvfk815ax2C6+4`=cnC>U&?7=<&rshB2z?$2A#QHKVhpk0Bt7F3}^HZ?AvA&j#mK4C7q zArgNrBBFj-G<$Qs>y5J9w`k5p>e;458F>tlu8aMI=(*>X&07sE$aSd7bh_KN`-uy+6o1p49ig=ErE1FVvp%)ERjxqf z(g@#HCX=^tpa6I-0M4IvWZ_w@o@{lB*@@aPQ)HOpbqW0IkirL5(1rhia!lI2R#(M- zi|ZC0%jS1Ke#@zP@ZVm5F_<&L0P}KKR|_|O`|X1sxNZ#EBYV5vXKdPZxlSo@+EY2) zvEe3PJ2YAldAtuVmF<7qVXga0*T!Y`WMHwHVyV+8g$r@8eqrw)NLI z_EqU_Hvs3vUtCh}9^1AV(Y!Td?{c8E)35EXaLG^~}s z%vtWi=zVA-oxLNJf?Rh`;-|mvp4tM#SA%D?kOci&_B|FNv<>$L8N=Wg=m@O3K`lE;Y$^NUtdUZvWWd8 zn)t5ux6H>+nHp2)!0xOHrrU7iI%t5&(?F+?cxqR~|&-u4qRmaon%!hNGL$xRHK3}I~T>=iC1RJOScl%uIWrgda zf&{sg5IcjHGYS~s(O;nE6l+uXZWRlji-PkmRb3QP>S=CCi}%)gbXJR;vpx6`$@=Tm ziZEYsYu>CyVzuqGI8lFKnI`(~rI|DuHR)n?yc zylz^YZKMZ!O>%9uk%Yb)(TTu_w<3sI*>{g~^uhJZpy96!-nx&5ncNa#%c~0v1okX3m$RH8b;A+9!5DkVj7=t0S9u!uL+Q43 zHtoO&ZKqP&HnHQwu%2|;4T~Utp5$HmIdCnl_7Z&F^-2MIGRU;{AS|_4-J`Ypo4iZ~ zOJ0I&0TjvDFq+i|2z~Th8H,u>sPBg#JB1+XKmQLPkIR&>*e(6; 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 rIWhi6z`v*Q-#hT%)%X8id3NeN literal 0 HcmV?d00001 diff --git a/web/public/robots.txt b/web/public/robots.txt new file mode 100644 index 000000000..eb0536286 --- /dev/null +++ b/web/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/web/public/site.webmanifest b/web/public/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/web/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/web/vite.config.ts b/web/vite.config.ts index c83e6a775..a4da64494 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,6 +1,7 @@ // Plugins import vue from "@vitejs/plugin-vue"; import vuetify, { transformAssetUrls } from "vite-plugin-vuetify"; +import { VitePWA } from 'vite-plugin-pwa' // Utilities import { defineConfig, loadEnv } from "vite"; @@ -19,7 +20,39 @@ export default ({ mode }) => { // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin vuetify({ autoImport: true - }) + }), + VitePWA({ + registerType: 'autoUpdate', + includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'masked-icon.svg'], + manifest: { + name: 'DrTrottoir', + short_name: 'DrTrottoir', + description: 'Website van DrTrottoir', + theme_color: '#ffffff', + start_url: '/', + icons: [ + { + src: 'pwa-192x192.png', + sizes: '192x192', + type: 'image/png', + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable', + }, + ], + }, + devOptions: { + enabled: true + } + }), ], define: { "process.env": env