From 4757b6da64caab094e1f97765e881633ee99c275 Mon Sep 17 00:00:00 2001 From: AmauryD Date: Thu, 9 Nov 2023 15:19:08 +0100 Subject: [PATCH 1/3] continue --- .eslintrc.json | 14 +- config/env/development.env | 6 +- config/env/test.env | 8 +- docker-compose.yml | 6 +- package.json | 102 +- pnpm-lock.yaml | 2667 +++++++++-------- src/api/controllers/auth.controller.ts | 6 +- src/api/controllers/documents.controller.ts | 56 +- src/api/controllers/users.controller.ts | 58 +- src/api/decorators/validated-params.ts | 1 - .../error-handler/default.error-handler.ts | 7 +- src/api/guards/authorize.guard.ts | 1 - src/api/middlewares/log.middleware.ts | 3 +- src/api/middlewares/rate-limit.middleware.ts | 4 +- src/api/resources/base/controller.ts | 35 +- src/api/resources/documents/deserializer.ts | 3 +- src/api/resources/documents/schema.ts | 5 +- src/api/resources/documents/serializer.ts | 8 +- src/api/resources/user/deserializer.ts | 3 +- src/api/resources/user/schema.ts | 3 +- src/api/resources/user/serializer.ts | 10 +- src/api/services/auth.service.ts | 4 +- src/api/services/logger.service.ts | 4 +- src/api/services/user.service.ts | 6 +- src/api/utils/offset-from-page.ts | 1 - src/application.ts | 3 +- src/database/connection.ts | 4 +- .../migrations/Migration20230413134822.ts | 37 - .../migrations/Migration20231109141206.ts | 19 + src/database/models/document.model.ts | 10 +- src/database/models/refresh-token.model.ts | 3 +- src/database/models/user.model.ts | 37 +- tests/mocks/serializer.ts | 2 +- .../__snapshots__/users.test.ts.snap | 34 - .../__snapshots__/documents.test.ts.snap | 24 +- .../controllers/documents/documents.test.ts | 4 +- .../users/__snapshots__/users.test.ts.snap | 12 +- .../controllers/users/users.test.ts | 4 +- tests/src/unit/controllers/documents.test.ts | 8 +- tests/src/unit/controllers/users.test.ts | 10 +- .../unit/resources/base/authorizer.test.ts | 32 - .../unit/resources/base/controller.test.ts | 146 - tests/utils/create-file-with-relation.ts | 6 +- tsconfig.json | 11 +- vitest.workspace.ts | 4 +- 45 files changed, 1694 insertions(+), 1737 deletions(-) delete mode 100644 src/database/migrations/Migration20230413134822.ts create mode 100644 src/database/migrations/Migration20231109141206.ts delete mode 100644 tests/src/acceptance/controllers/__snapshots__/users.test.ts.snap delete mode 100644 tests/src/unit/resources/base/authorizer.test.ts delete mode 100644 tests/src/unit/resources/base/controller.test.ts diff --git a/.eslintrc.json b/.eslintrc.json index 41baf7bd..fa77b79d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,17 +20,9 @@ "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/no-redeclare": "error", "@typescript-eslint/no-useless-constructor": "error", - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "warn", - { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - } - ], - "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-import-type-side-effects": "error", + "import/consistent-type-specifier-style": "error", + "import/no-duplicates": "error", "@typescript-eslint/member-delimiter-style": [ "error", { diff --git a/config/env/development.env b/config/env/development.env index 309bcf67..c3e5b543 100644 --- a/config/env/development.env +++ b/config/env/development.env @@ -4,11 +4,11 @@ JWT_SECRET="h8566MNQ18oo5cMmHROVh8566MNQ18oo5cMmHROVh8566MNQ18oo5cMmHROVh8566MNQ JWT_EXPIRES=15 JWT_ISS=localhost JWT_AUDIENCE=localhost -DATABASE_PORT=3306 +DATABASE_PORT=5432 DATABASE_PASSWORD=test123* DATABASE_HOST=localhost DATABASE_NAME=nfw -DATABASE_USER=root -DATABASE_TYPE=mysql +DATABASE_USER=postgres +DATABASE_TYPE=postgresql DEBUG=false CORS=* \ No newline at end of file diff --git a/config/env/test.env b/config/env/test.env index f8910f63..6e5c1ddd 100644 --- a/config/env/test.env +++ b/config/env/test.env @@ -4,13 +4,13 @@ JWT_SECRET="h8566MNQ18oo5cMmHROVh8566MNQ18oo5cMmHROVh8566MNQ18oo5cMmHROVh8566MNQ JWT_EXPIRES=15 JWT_ISS=localhost JWT_AUDIENCE=localhost -DATABASE_PORT=3306 +DATABASE_PORT=5432 DATABASE_PASSWORD=test123* DATABASE_HOST=localhost DATABASE_NAME=nfw_test -DATABASE_USER=root -DATABASE_TYPE=mysql +DATABASE_USER=postgres +DATABASE_TYPE=postgresql DATABASE_MODELS=src/database/models DEBUG=false -LOGGING=false +LOGGING=true CORS=* \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a7cb5743..d3bd1c43 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,10 +2,10 @@ version: '3.6' services: db: - image: mysql + image: postgres volumes: - ./database:/docker-entrypoint-initdb.d ports: - - 3306:3306 + - 5432:5432 environment: - MYSQL_ROOT_PASSWORD: test123* \ No newline at end of file + POSTGRES_PASSWORD: test123* \ No newline at end of file diff --git a/package.json b/package.json index 325ab243..87b8c9cc 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "test:acceptance": "vitest -c config/vitest/acceptance.vitest.config.ts", "test:unit": "vitest -c config/vitest/unit.vitest.config.ts", "test:integration": "vitest -c config/vitest/integration.vitest.config.ts", - "lint": "eslint {tests,src} --ext .ts", - "lint:fix": "eslint {tests,src} --ext .ts --fix", + "lint": "eslint . --ext .ts", + "lint:fix": "eslint . --ext .ts --fix", "lint:duplication": "jscpd -c config/jscpd.json --exitCode 1", "mikro-orm:cli": "MIKRO_ORM_CLI_USE_TS_NODE=1 MIKRO_ORM_DYNAMIC_IMPORTS=1 node --experimental-specifier-resolution=node --loader ts-node/esm ./node_modules/@mikro-orm/cli/cli.js", "start:dev": "node start.js", @@ -32,76 +32,76 @@ "url": "https://github.com/TRIPTYK/nfw/issues" }, "dependencies": { - "@faker-js/faker": "~7.6.0", + "@faker-js/faker": "~8.2.0", "@koa/cors": "~4.0.0", - "@mikro-orm/cli": "~5.7.5", - "@mikro-orm/core": "~5.7.5", - "@mikro-orm/migrations": "~5.7.5", - "@mikro-orm/mysql": "~5.7.5", - "@mikro-orm/seeder": "~5.7.5", - "@triptyk/nfw-core": "~5.0.0-alpha.1", - "@triptyk/nfw-http": "~5.0.0-alpha.1", - "@triptyk/nfw-mikro-orm": "~5.0.0-alpha.1", - "@triptyk/nfw-resources": "~5.0.0-alpha.1", - "bcrypt": "~5.1.0", - "jsonwebtoken": "~9.0.0", + "@mikro-orm/cli": "~5.9.3", + "@mikro-orm/core": "~5.9.3", + "@mikro-orm/migrations": "~5.9.3", + "@mikro-orm/postgresql": "~5.9.3", + "@mikro-orm/seeder": "~5.9.3", + "@triptyk/nfw-core": "~5.0.0", + "@triptyk/nfw-http": "~5.0.0", + "@triptyk/nfw-mikro-orm": "~5.0.0", + "@triptyk/nfw-resources": "~5.0.0", + "bcrypt": "~5.1.1", + "jsonwebtoken": "~9.0.2", "koa": "~2.14.2", "koa-body": "~6.0.1", "koa-helmet": "~7.0.2", "koa-qs": "~3.0.0", "koa-ratelimit": "~5.0.1", - "param-case": "~3.0.4", + "param-case": "~4.0.0", "pluralize": "~8.0.0", "reflect-metadata": "~0.1.13", - "tracer": "~1.1.6", + "tracer": "~1.3.0", "ts-dotenv": "~0.9.1", - "typescript": "~4.9.5", - "uuid": "~9.0.0", - "yup": "~1.1.1" + "typescript": "~5.2.2", + "uuid": "~9.0.1", + "yup": "~1.3.2" }, "homepage": "https://github.com/TRIPTYK/nfw#readme", "devDependencies": { - "fetch-blob": "^3.2.0", "@casl/ability": "~6.5.0", - "@types/bcrypt": "~5.0.0", - "@types/formidable": "~2.0.6", - "@types/json-api-serializer": "~2.6.3", - "@types/jsonwebtoken": "~9.0.2", - "@types/koa": "~2.13.6", - "@types/koa-qs": "~2.0.0", - "@types/koa-ratelimit": "~5.0.0", - "@types/koa__cors": "~4.0.0", - "@types/koa__router": "~12.0.0", - "@types/node": "~18.16.3", - "@types/pluralize": "~0.0.29", - "@types/uuid": "~9.0.1", - "@typescript-eslint/eslint-plugin": "~5.59.5", - "@typescript-eslint/parser": "~5.59.5", - "@vitest/coverage-c8": "^0.31.0", - "@vitest/ui": "~0.31.0", - "concurrently": "~8.0.1", - "eslint": "~8.40.0", - "eslint-config-standard": "~17.0.0", - "eslint-plugin-import": "~2.27.5", - "eslint-plugin-n": "~15.7.0", + "@types/bcrypt": "~5.0.2", + "@types/formidable": "~3.4.5", + "@types/json-api-serializer": "~2.6.6", + "@types/jsonwebtoken": "~9.0.5", + "@types/koa": "~2.13.11", + "@types/koa-qs": "~2.0.3", + "@types/koa-ratelimit": "~5.0.4", + "@types/koa__cors": "~4.0.3", + "@types/koa__router": "~12.0.4", + "@types/node": "~20.9.0", + "@types/pluralize": "~0.0.33", + "@types/uuid": "~9.0.7", + "@typescript-eslint/eslint-plugin": "~6.10.0", + "@typescript-eslint/parser": "~6.10.0", + "@vitest/coverage-v8": "~0.34.6", + "@vitest/ui": "~0.34.6", + "concurrently": "~8.2.2", + "eslint": "~8.53.0", + "eslint-config-standard": "~17.1.0", + "eslint-plugin-import": "~2.29.0", + "eslint-plugin-n": "~16.3.0", "eslint-plugin-node": "~11.1.0", "eslint-plugin-promise": "~6.1.1", - "eslint-plugin-unused-imports": "~2.0.0", + "eslint-plugin-unused-imports": "~3.0.0", + "fetch-blob": "^4.0.0", "formdata-polyfill": "^4.0.10", - "jscpd": "~3.5.9", - "node-fetch": "~3.3.1", - "nodemon": "~2.0.22", - "prettier-eslint": "~15.0.1", + "jscpd": "~3.5.10", + "node-fetch": "~3.3.2", + "nodemon": "~3.0.1", + "prettier-eslint": "~16.1.2", "ts-node": "~10.9.1", "ts-node-dev": "~2.0.0", "tsconfig-paths": "^4.2.0", - "type-fest": "~3.10.0", - "vite": "~4.3.5", - "vite-tsconfig-paths": "^4.2.0", - "vitest": "~0.31.0" + "type-fest": "~4.7.1", + "vite": "~4.5.0", + "vite-tsconfig-paths": "^4.2.1", + "vitest": "~0.34.6" }, "volta": { - "node": "18.16.0" + "node": "20.9.0" }, "packageManager": "pnpm@8.4.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e36c4ee7..6fe50a32 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,45 +1,49 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: '@faker-js/faker': - specifier: ~7.6.0 - version: 7.6.0 + specifier: ~8.2.0 + version: 8.2.0 '@koa/cors': specifier: ~4.0.0 version: 4.0.0 '@mikro-orm/cli': - specifier: ~5.7.5 - version: 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) + specifier: ~5.9.3 + version: 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3)(pg@8.11.3) '@mikro-orm/core': - specifier: ~5.7.5 - version: 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) + specifier: ~5.9.3 + version: 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) '@mikro-orm/migrations': - specifier: ~5.7.5 - version: 5.7.5(@mikro-orm/core@5.7.5) - '@mikro-orm/mysql': - specifier: ~5.7.5 - version: 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(@mikro-orm/seeder@5.7.5) + specifier: ~5.9.3 + version: 5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2) + '@mikro-orm/postgresql': + specifier: ~5.9.3 + version: 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(@mikro-orm/seeder@5.9.3) '@mikro-orm/seeder': - specifier: ~5.7.5 - version: 5.7.5(@mikro-orm/core@5.7.5) + specifier: ~5.9.3 + version: 5.9.3(@mikro-orm/core@5.9.3) '@triptyk/nfw-core': - specifier: ~5.0.0-alpha.1 - version: 5.0.0-alpha.1 + specifier: ~5.0.0 + version: 5.0.1 '@triptyk/nfw-http': - specifier: ~5.0.0-alpha.1 - version: 5.0.0-alpha.1(@triptyk/nfw-core@5.0.0-alpha.1) + specifier: ~5.0.0 + version: 5.0.1(@triptyk/nfw-core@5.0.1) '@triptyk/nfw-mikro-orm': - specifier: ~5.0.0-alpha.1 - version: 5.0.0-alpha.1(@mikro-orm/core@5.7.5)(@triptyk/nfw-core@5.0.0-alpha.1) + specifier: ~5.0.0 + version: 5.0.1(@mikro-orm/core@5.9.3)(@triptyk/nfw-core@5.0.1) '@triptyk/nfw-resources': - specifier: ~5.0.0-alpha.1 - version: 5.0.0-alpha.1(@triptyk/nfw-core@5.0.0-alpha.1)(@triptyk/nfw-http@5.0.0-alpha.1) + specifier: ~5.0.0 + version: 5.0.1(@triptyk/nfw-core@5.0.1)(@triptyk/nfw-http@5.0.1) bcrypt: - specifier: ~5.1.0 - version: 5.1.0 + specifier: ~5.1.1 + version: 5.1.1 jsonwebtoken: - specifier: ~9.0.0 - version: 9.0.0 + specifier: ~9.0.2 + version: 9.0.2 koa: specifier: ~2.14.2 version: 2.14.2 @@ -56,8 +60,8 @@ dependencies: specifier: ~5.0.1 version: 5.0.1 param-case: - specifier: ~3.0.4 - version: 3.0.4 + specifier: ~4.0.0 + version: 4.0.0 pluralize: specifier: ~8.0.0 version: 8.0.0 @@ -65,178 +69,183 @@ dependencies: specifier: ~0.1.13 version: 0.1.13 tracer: - specifier: ~1.1.6 - version: 1.1.6 + specifier: ~1.3.0 + version: 1.3.0 ts-dotenv: specifier: ~0.9.1 version: 0.9.1 typescript: - specifier: ~4.9.5 - version: 4.9.5 + specifier: ~5.2.2 + version: 5.2.2 uuid: - specifier: ~9.0.0 - version: 9.0.0 + specifier: ~9.0.1 + version: 9.0.1 yup: - specifier: ~1.1.1 - version: 1.1.1 + specifier: ~1.3.2 + version: 1.3.2 devDependencies: '@casl/ability': specifier: ~6.5.0 version: 6.5.0 '@types/bcrypt': - specifier: ~5.0.0 - version: 5.0.0 + specifier: ~5.0.2 + version: 5.0.2 '@types/formidable': - specifier: ~2.0.6 - version: 2.0.6 + specifier: ~3.4.5 + version: 3.4.5 '@types/json-api-serializer': - specifier: ~2.6.3 - version: 2.6.3 + specifier: ~2.6.6 + version: 2.6.6 '@types/jsonwebtoken': - specifier: ~9.0.2 - version: 9.0.2 + specifier: ~9.0.5 + version: 9.0.5 '@types/koa': - specifier: ~2.13.6 - version: 2.13.6 + specifier: ~2.13.11 + version: 2.13.11 '@types/koa-qs': - specifier: ~2.0.0 - version: 2.0.0 + specifier: ~2.0.3 + version: 2.0.3 '@types/koa-ratelimit': - specifier: ~5.0.0 - version: 5.0.0 + specifier: ~5.0.4 + version: 5.0.4 '@types/koa__cors': - specifier: ~4.0.0 - version: 4.0.0 + specifier: ~4.0.3 + version: 4.0.3 '@types/koa__router': - specifier: ~12.0.0 - version: 12.0.0 + specifier: ~12.0.4 + version: 12.0.4 '@types/node': - specifier: ~18.16.3 - version: 18.16.3 + specifier: ~20.9.0 + version: 20.9.0 '@types/pluralize': - specifier: ~0.0.29 - version: 0.0.29 + specifier: ~0.0.33 + version: 0.0.33 '@types/uuid': - specifier: ~9.0.1 - version: 9.0.1 + specifier: ~9.0.7 + version: 9.0.7 '@typescript-eslint/eslint-plugin': - specifier: ~5.59.5 - version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@4.9.5) + specifier: ~6.10.0 + version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ~5.59.5 - version: 5.59.5(eslint@8.40.0)(typescript@4.9.5) - '@vitest/coverage-c8': - specifier: ^0.31.0 - version: 0.31.0(vitest@0.31.0) + specifier: ~6.10.0 + version: 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@vitest/coverage-v8': + specifier: ~0.34.6 + version: 0.34.6(vitest@0.34.6) '@vitest/ui': - specifier: ~0.31.0 - version: 0.31.0(vitest@0.31.0) + specifier: ~0.34.6 + version: 0.34.6(vitest@0.34.6) concurrently: - specifier: ~8.0.1 - version: 8.0.1 + specifier: ~8.2.2 + version: 8.2.2 eslint: - specifier: ~8.40.0 - version: 8.40.0 + specifier: ~8.53.0 + version: 8.53.0 eslint-config-standard: - specifier: ~17.0.0 - version: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.40.0) + specifier: ~17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.0)(eslint-plugin-promise@6.1.1)(eslint@8.53.0) eslint-plugin-import: - specifier: ~2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0) + specifier: ~2.29.0 + version: 2.29.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0) eslint-plugin-n: - specifier: ~15.7.0 - version: 15.7.0(eslint@8.40.0) + specifier: ~16.3.0 + version: 16.3.0(eslint@8.53.0) eslint-plugin-node: specifier: ~11.1.0 - version: 11.1.0(eslint@8.40.0) + version: 11.1.0(eslint@8.53.0) eslint-plugin-promise: specifier: ~6.1.1 - version: 6.1.1(eslint@8.40.0) + version: 6.1.1(eslint@8.53.0) eslint-plugin-unused-imports: - specifier: ~2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@5.59.5)(eslint@8.40.0) + specifier: ~3.0.0 + version: 3.0.0(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.53.0) fetch-blob: - specifier: ^3.2.0 - version: 3.2.0 + specifier: ^4.0.0 + version: 4.0.0 formdata-polyfill: specifier: ^4.0.10 version: 4.0.10 jscpd: - specifier: ~3.5.9 - version: 3.5.9 + specifier: ~3.5.10 + version: 3.5.10 node-fetch: - specifier: ~3.3.1 - version: 3.3.1 + specifier: ~3.3.2 + version: 3.3.2 nodemon: - specifier: ~2.0.22 - version: 2.0.22 + specifier: ~3.0.1 + version: 3.0.1 prettier-eslint: - specifier: ~15.0.1 - version: 15.0.1 + specifier: ~16.1.2 + version: 16.1.2 ts-node: specifier: ~10.9.1 - version: 10.9.1(@types/node@18.16.3)(typescript@4.9.5) + version: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) ts-node-dev: specifier: ~2.0.0 - version: 2.0.0(@types/node@18.16.3)(typescript@4.9.5) + version: 2.0.0(@types/node@20.9.0)(typescript@5.2.2) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 type-fest: - specifier: ~3.10.0 - version: 3.10.0(typescript@4.9.5) + specifier: ~4.7.1 + version: 4.7.1 vite: - specifier: ~4.3.5 - version: 4.3.5(@types/node@18.16.3) + specifier: ~4.5.0 + version: 4.5.0(@types/node@20.9.0) vite-tsconfig-paths: - specifier: ^4.2.0 - version: 4.2.0(typescript@4.9.5)(vite@4.3.5) + specifier: ^4.2.1 + version: 4.2.1(typescript@5.2.2)(vite@4.5.0) vitest: - specifier: ~0.31.0 - version: 0.31.0(@vitest/ui@0.31.0) + specifier: ~0.34.6 + version: 0.34.6(@vitest/ui@0.34.6) packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 dev: true - /@babel/helper-string-parser@7.21.5: - resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + /@babel/parser@7.23.3: + resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 dev: true - /@babel/runtime@7.21.5: - resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==} + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 dev: true - /@babel/types@7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + /@babel/types@7.23.3: + resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true @@ -264,8 +273,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm64@0.17.18: - resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -273,8 +282,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.18: - resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -282,8 +291,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.18: - resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -291,8 +300,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.18: - resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -300,8 +309,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.18: - resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -309,8 +318,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.18: - resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -318,8 +327,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.18: - resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -327,8 +336,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.18: - resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -336,8 +345,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.18: - resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -345,8 +354,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.18: - resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -354,8 +363,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.18: - resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -363,8 +372,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.18: - resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -372,8 +381,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.18: - resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -381,8 +390,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.18: - resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -390,8 +399,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.18: - resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -399,8 +408,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.18: - resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -408,8 +417,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.18: - resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -417,8 +426,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.18: - resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -426,8 +435,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.18: - resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -435,8 +444,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.18: - resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -444,8 +453,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.18: - resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -453,8 +462,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.18: - resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -462,29 +471,29 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.40.0 - eslint-visitor-keys: 3.4.1 + eslint: 8.53.0 + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.5.2 - globals: 13.20.0 + espree: 9.6.1 + globals: 13.23.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -494,8 +503,8 @@ packages: - supports-color dev: true - /@eslint/js@8.40.0: - resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -504,11 +513,16 @@ packages: engines: {node: '>=14.0.0', npm: '>=6.0.0'} dev: false - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@faker-js/faker@8.2.0: + resolution: {integrity: sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} + dev: false + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -520,8 +534,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@ioredis/commands@1.2.0: @@ -537,22 +551,24 @@ packages: resolution: {integrity: sha512-zBp2myVvBHp1UaJsNTyS6q4UDKT7eRiqTS4oNTS6VQMd6mpxYOdbeK4pY279cDCdakGy6hG0J3ejoXZVsPwHqw==} dependencies: chalk: 4.1.2 - figlet: 1.6.0 + figlet: 1.7.0 parent-require: 1.0.0 dev: false + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@jridgewell/trace-mapping': 0.3.20 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -565,19 +581,15 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@jridgewell/trace-mapping@0.3.9: @@ -593,25 +605,25 @@ packages: eventemitter3: 4.0.7 dev: true - /@jscpd/finder@3.5.5: - resolution: {integrity: sha512-RAaSnqZWe66JnYsUABvXBPfS9Z8U4GmLLa/IQkxZIOWxlt7g4ohs3FxJNv61bQdBbD0NQ6Xxvd4jntac8FKftg==} + /@jscpd/finder@3.5.10: + resolution: {integrity: sha512-zyafUsTB2xDySho3wKMSoZuiMw2XvkdYW72kI7bLdz9M+ERyTMRfUnX1RgoGldXyylyZPF1FSflmfsppkV4Wuw==} dependencies: '@jscpd/core': 3.5.4 '@jscpd/tokenizer': 3.5.4 - blamer: 1.0.3 + blamer: 1.0.6 bytes: 3.1.2 cli-table3: 0.6.3 colors: 1.4.0 - fast-glob: 3.2.12 + fast-glob: 3.3.2 fs-extra: 9.1.0 markdown-table: 2.0.0 pug: 3.0.2 dev: true - /@jscpd/html-reporter@3.5.9: - resolution: {integrity: sha512-Q2hu3B2/lCgzQvVHvdZUl2IrmXRKP08zH9xvsaDERPWjaYkWQi6FWNqOnkryMD0cl/hrXBKpx050IUUO7FmACw==} + /@jscpd/html-reporter@3.5.10: + resolution: {integrity: sha512-EPee/YSy/12UboUOoOD+vFvU8/Bi/CAKnjTDnAdPnJlSh68jog/BNhHKrXiiJKZS2CLn1WzjUaefJrn8VcWo+A==} dependencies: - '@jscpd/finder': 3.5.5 + '@jscpd/finder': 3.5.10 colors: 1.4.0 fs-extra: 9.1.0 pug: 3.0.2 @@ -635,6 +647,7 @@ packages: /@koa/router@12.0.0: resolution: {integrity: sha512-cnnxeKHXlt7XARJptflGURdJaO+ITpNkOHmQu7NHmCoRinPbyvFzce/EG/E8Zy81yQ1W9MoSdtklc3nyaDReUw==} engines: {node: '>= 12'} + deprecated: '**IMPORTANT 10x+ PERFORMANCE UPGRADE**: Please upgrade to v12.0.1+ as we have fixed an issue with debuglog causing 10x slower router benchmark performance, see https://github.com/koajs/router/pull/173' dependencies: http-errors: 2.0.0 koa-compose: 4.1.0 @@ -642,26 +655,26 @@ packages: path-to-regexp: 6.2.1 dev: false - /@mapbox/node-pre-gyp@1.0.10: - resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true dependencies: - detect-libc: 2.0.1 + detect-libc: 2.0.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.6.9 + node-fetch: 2.7.0 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.0 - tar: 6.1.14 + semver: 7.5.4 + tar: 6.2.0 transitivePeerDependencies: - encoding - supports-color dev: false - /@mikro-orm/cli@5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5): - resolution: {integrity: sha512-SZ1Xrw8Q79nq2uvSHEzC5cYkpjxIzVfTwbTh/P8tBBD5e38jkWezpN9r2Ap6kqUS7KQGmK9T9H86FLLk9pa4Ag==} + /@mikro-orm/cli@5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3)(pg@8.11.3): + resolution: {integrity: sha512-acwn5bH/IdOlGi8i/e1Td2cy2X1zmVRolM9gQGrY0RQJ07k2yg9cJlN579s95T39nFpz1Bi2wuVyLgLyCkpDlA==} engines: {node: '>= 14.0.0'} hasBin: true peerDependencies: @@ -698,11 +711,11 @@ packages: optional: true dependencies: '@jercle/yargonaut': 1.1.5 - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/knex': 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(mysql2@3.3.0) - '@mikro-orm/migrations': 5.7.5(@mikro-orm/core@5.7.5) - '@mikro-orm/mysql': 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/seeder': 5.7.5(@mikro-orm/core@5.7.5) + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/knex': 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(pg@8.11.3) + '@mikro-orm/migrations': 5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2) + '@mikro-orm/postgresql': 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/seeder': 5.9.3(@mikro-orm/core@5.9.3) fs-extra: 11.1.1 tsconfig-paths: 4.2.0 yargs: 17.7.2 @@ -718,8 +731,8 @@ packages: - tedious dev: false - /@mikro-orm/core@5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5): - resolution: {integrity: sha512-Jakjz7qScsoHBHkFG7/A73M0TVTsNylPD/eDNQ+yoq73GwQ1NcJmhzQhMQQuF+5YpKdvnL2gUbNSzQ1MJ3OEcQ==} + /@mikro-orm/core@5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3): + resolution: {integrity: sha512-SYcRa4Rmi6GSPAvaXIsrBrhHLCieZtnFHYXtcUVMRpJRBxUbqv8RfhUedhYZGty8eTd44nNY9+zn6auv1x8IoA==} engines: {node: '>= 14.0.0'} peerDependencies: '@mikro-orm/better-sqlite': ^5.0.0 @@ -754,31 +767,31 @@ packages: '@mikro-orm/sqlite': optional: true dependencies: - '@mikro-orm/migrations': 5.7.5(@mikro-orm/core@5.7.5) - '@mikro-orm/mysql': 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/seeder': 5.7.5(@mikro-orm/core@5.7.5) + '@mikro-orm/migrations': 5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2) + '@mikro-orm/postgresql': 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/seeder': 5.9.3(@mikro-orm/core@5.9.3) acorn-loose: 8.3.0 acorn-walk: 8.2.0 - dotenv: 16.0.3 + dotenv: 16.3.1 fs-extra: 11.1.1 globby: 11.1.0 - mikro-orm: 5.7.5 + mikro-orm: 5.9.3 reflect-metadata: 0.1.13 dev: false - /@mikro-orm/knex@5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(mysql2@3.3.0): - resolution: {integrity: sha512-Y9/sCi7ffojgt/gq0oeANqehqPmsEzpttbJVTmp73T6WUbWYmKVxnu9nSEjSrHkKaCwKw7N0olhf2Y8Mn7+Ykg==} + /@mikro-orm/knex@5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(pg@8.11.3): + resolution: {integrity: sha512-4M+4XniLaCD3q9fFxNmVgMtQXs3jzLOCqnOzKC3R5QGwlYA14HEopkbcXX0ljv1HXg4LrlMkE2kPi/eVpX5UqQ==} engines: {node: '>= 14.0.0'} peerDependencies: '@mikro-orm/core': ^5.0.0 '@mikro-orm/entity-generator': ^5.0.0 '@mikro-orm/migrations': ^5.0.0 - better-sqlite3: ^8.0.0 - mssql: ^7.0.0 - mysql: ^2.18.1 - mysql2: ^2.1.0 - pg: ^8.0.3 - sqlite3: ^5.0.0 + better-sqlite3: '*' + mssql: '*' + mysql: '*' + mysql2: '*' + pg: '*' + sqlite3: '*' peerDependenciesMeta: '@mikro-orm/entity-generator': optional: true @@ -797,11 +810,11 @@ packages: sqlite3: optional: true dependencies: - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/migrations': 5.7.5(@mikro-orm/core@5.7.5) + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/migrations': 5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2) fs-extra: 11.1.1 - knex: 2.4.2(mysql2@3.3.0) - mysql2: 3.3.0 + knex: 2.5.1(pg@8.11.3) + pg: 8.11.3 sqlstring: 2.3.3 transitivePeerDependencies: - pg-native @@ -809,17 +822,17 @@ packages: - tedious dev: false - /@mikro-orm/migrations@5.7.5(@mikro-orm/core@5.7.5): - resolution: {integrity: sha512-Hazx1ffxzFn6LloxS4rRGfZOn//XwkrbrG/zTvuDYEB8OB9zyBXjydvA71wKHcZ11XMyE1/u2faC0FlhI5JXYA==} + /@mikro-orm/migrations@5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2): + resolution: {integrity: sha512-hbnyyWYjEdJxq0KMMVjUVpKPI8nUIIw9XiMdPWyewXRpR9djFqgovXLhIs53ZszhmnUAcJCJVIUpYiswPynVDg==} engines: {node: '>= 14.0.0'} peerDependencies: '@mikro-orm/core': ^5.0.0 dependencies: - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/knex': 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(mysql2@3.3.0) + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/knex': 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(pg@8.11.3) fs-extra: 11.1.1 - knex: 2.4.2(mysql2@3.3.0) - umzug: 3.2.1 + knex: 2.5.1(pg@8.11.3) + umzug: 3.3.1(typescript@5.2.2) transitivePeerDependencies: - '@mikro-orm/entity-generator' - better-sqlite3 @@ -831,10 +844,11 @@ packages: - sqlite3 - supports-color - tedious + - typescript dev: false - /@mikro-orm/mysql@5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(@mikro-orm/seeder@5.7.5): - resolution: {integrity: sha512-euqZGh5sWPuewKNj0sFTR4T2XS9pTL2ddKkOcSylLL1hAZZ3+eHPXuDpm4aDXOlwY9KfNIvvo/IZaGyOYS9lUA==} + /@mikro-orm/postgresql@5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(@mikro-orm/seeder@5.9.3): + resolution: {integrity: sha512-iXdHd4xe7u3JRy/g1FkfYxDoAWunme7iDEyk7eniVtzA7UQ1EphHbYJcaXCbvU5a5bSNk8JEplEHo4Cy/Dg3dQ==} engines: {node: '>= 14.0.0'} peerDependencies: '@mikro-orm/core': ^5.0.0 @@ -849,30 +863,30 @@ packages: '@mikro-orm/seeder': optional: true dependencies: - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) - '@mikro-orm/knex': 5.7.5(@mikro-orm/core@5.7.5)(@mikro-orm/migrations@5.7.5)(mysql2@3.3.0) - '@mikro-orm/migrations': 5.7.5(@mikro-orm/core@5.7.5) - '@mikro-orm/seeder': 5.7.5(@mikro-orm/core@5.7.5) - mysql2: 3.3.0 + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) + '@mikro-orm/knex': 5.9.3(@mikro-orm/core@5.9.3)(@mikro-orm/migrations@5.9.3)(pg@8.11.3) + '@mikro-orm/migrations': 5.9.3(@mikro-orm/core@5.9.3)(pg@8.11.3)(typescript@5.2.2) + '@mikro-orm/seeder': 5.9.3(@mikro-orm/core@5.9.3) + pg: 8.11.3 transitivePeerDependencies: - better-sqlite3 - mssql - mysql - - pg + - mysql2 - pg-native - sqlite3 - supports-color - tedious dev: false - /@mikro-orm/seeder@5.7.5(@mikro-orm/core@5.7.5): - resolution: {integrity: sha512-jFdPMqt+zYtHegmbtE0DZfzlg9NajEDyr/lz8WKiBxMBsYgsx6yr/HT3zWTt4xevDtNWhFxewNTq8xqM3j5ZmA==} + /@mikro-orm/seeder@5.9.3(@mikro-orm/core@5.9.3): + resolution: {integrity: sha512-JwduMai0cKhsYWRuX8R1MCL9rX40TaDSUHBuZnyJUyvgrHReFkaFQNSw0MT6IlDYphb86qZHhI4DzaQA92uA7g==} engines: {node: '>= 14.0.0'} peerDependencies: '@mikro-orm/core': ^5.0.0 dependencies: '@faker-js/faker': 7.6.0 - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) fs-extra: 11.1.1 globby: 11.1.0 dev: false @@ -895,12 +909,12 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + /@polka/url@1.0.0-next.23: + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: true - /@rushstack/ts-command-line@4.13.2: - resolution: {integrity: sha512-bCU8qoL9HyWiciltfzg7GqdfODUeda/JpI0602kbN5YH22rzTxyqYvv7aRLENCM7XCQ1VRs7nMkEqgJUOU8Sag==} + /@rushstack/ts-command-line@4.17.1: + resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} dependencies: '@types/argparse': 1.0.38 argparse: 1.0.10 @@ -908,6 +922,10 @@ packages: string-argv: 0.3.2 dev: false + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@triptyk/json-api-query-parser@0.0.0: resolution: {integrity: sha512-YaYKoA/zgcTUvkjTbPe3RyoWW7jI+CuXXiuVOid13mZOQar2sMGI1ZhRlskccGF60Ask9xNT3Nl2p/BGhNRx0w==} engines: {node: '>= 18.12 <19'} @@ -917,45 +935,45 @@ packages: type-fest: 3.6.1 dev: false - /@triptyk/nfw-core@5.0.0-alpha.1: - resolution: {integrity: sha512-wKMeHXB8qSGBqObNBb6QDoE2ZS0cwBPZhy0nsXrSRruJ/MFkcOxHsbVbaTgXjI8pLgqhnH3Rqq2+ebrY1CKi7w==} + /@triptyk/nfw-core@5.0.1: + resolution: {integrity: sha512-naQNzpvtZOYAKgmU66nSfHg2tRvLytGGD4t+dx028+78QVaeDgwDriSzlVgwz2PSbVE61ONdAvZhGitCD3kldw==} engines: {node: '>=16.3.1'} dependencies: - tsyringe: 4.7.0 + tsyringe: 4.8.0 dev: false - /@triptyk/nfw-http@5.0.0-alpha.1(@triptyk/nfw-core@5.0.0-alpha.1): - resolution: {integrity: sha512-Sj8cMsCw0DlnU86KzyGXt3L2vmVbxd1/mQqTr5+EBQJOCD9FUi27NAEGeGAT0Igsi6US6syWQ+BwSOBgha3+Eg==} - engines: {node: '>=16.3.1'} + /@triptyk/nfw-http@5.0.1(@triptyk/nfw-core@5.0.1): + resolution: {integrity: sha512-jBlbTBSR4O6/Kp3htE8bmp9lACsaIZs+QMOYWoX+SgutKsoTcU4P918iM5WRHYtJQfUgMEy+WKzZg7RkpkCiVQ==} + engines: {node: '>=18.3.1'} peerDependencies: - '@triptyk/nfw-core': workspace:* + '@triptyk/nfw-core': 5.0.1 dependencies: '@koa/router': 12.0.0 - '@triptyk/nfw-core': 5.0.0-alpha.1 + '@triptyk/nfw-core': 5.0.1 is-class: 0.0.9 dev: false - /@triptyk/nfw-mikro-orm@5.0.0-alpha.1(@mikro-orm/core@5.7.5)(@triptyk/nfw-core@5.0.0-alpha.1): - resolution: {integrity: sha512-Juv76PG4/UKu/2mMthvXUR9hY/wGSnv9p2yaaItwmE+C3ltEeNTrGimP9akW+Y3zud5xaTsOp91oSTzlase41w==} + /@triptyk/nfw-mikro-orm@5.0.1(@mikro-orm/core@5.9.3)(@triptyk/nfw-core@5.0.1): + resolution: {integrity: sha512-ej62VotwZjnlybC9lb2GmPQXgecRiTHI+7kz381INxEKdHzHsfAjNp/Y0gigANmLI03cvGkwpo3sTrQVWiRPDw==} engines: {node: '>=16.3.1'} peerDependencies: '@mikro-orm/core': ~5.7.3 - '@triptyk/nfw-core': workspace:* + '@triptyk/nfw-core': 5.0.1 dependencies: - '@mikro-orm/core': 5.7.5(@mikro-orm/migrations@5.7.5)(@mikro-orm/mysql@5.7.5)(@mikro-orm/seeder@5.7.5) - '@triptyk/nfw-core': 5.0.0-alpha.1 + '@mikro-orm/core': 5.9.3(@mikro-orm/migrations@5.9.3)(@mikro-orm/postgresql@5.9.3)(@mikro-orm/seeder@5.9.3) + '@triptyk/nfw-core': 5.0.1 dev: false - /@triptyk/nfw-resources@5.0.0-alpha.1(@triptyk/nfw-core@5.0.0-alpha.1)(@triptyk/nfw-http@5.0.0-alpha.1): - resolution: {integrity: sha512-t45IMetZAR9ckXFIeS8okyvCrFWKVxeYwMwqPn+SalY4Hz38kfs+W9HC+MQmmBYcyadEiiwC29YN9MWfFl4lNg==} + /@triptyk/nfw-resources@5.0.1(@triptyk/nfw-core@5.0.1)(@triptyk/nfw-http@5.0.1): + resolution: {integrity: sha512-dnq85DU5taRAwYVQvhin2eT7683wEGUloE2OMdUIuAAxQNqrdQi6Y+HjwxDKMP7XkqbC/4v5+B9UTwxogn3pMQ==} engines: {node: '>=16.3.1'} peerDependencies: - '@triptyk/nfw-core': workspace:* - '@triptyk/nfw-http': workspace:* + '@triptyk/nfw-core': 5.0.1 + '@triptyk/nfw-http': 5.0.1 dependencies: '@triptyk/json-api-query-parser': 0.0.0 - '@triptyk/nfw-core': 5.0.0-alpha.1 - '@triptyk/nfw-http': 5.0.0-alpha.1(@triptyk/nfw-core@5.0.0-alpha.1) + '@triptyk/nfw-core': 5.0.1 + '@triptyk/nfw-http': 5.0.1(@triptyk/nfw-core@5.0.1) json-api-serializer: 2.6.6 pluralize: 8.0.0 dev: false @@ -976,205 +994,205 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts@1.3.5: - resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} + /@types/accepts@1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.9.0 /@types/argparse@1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} dev: false - /@types/bcrypt@5.0.0: - resolution: {integrity: sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==} + /@types/bcrypt@5.0.2: + resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.9.0 dev: true - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.16.3 + '@types/connect': 3.4.38 + '@types/node': 20.9.0 - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + /@types/chai-subset@1.3.5: + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} dependencies: - '@types/chai': 4.3.5 + '@types/chai': 4.3.10 dev: true - /@types/chai@4.3.5: - resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + /@types/chai@4.3.10: + resolution: {integrity: sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==} dev: true /@types/co-body@6.1.0: resolution: {integrity: sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.9.0 '@types/qs': 6.9.7 dev: false - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 18.16.3 - - /@types/content-disposition@0.5.5: - resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} + '@types/node': 20.9.0 - /@types/cookies@0.7.7: - resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} - dependencies: - '@types/connect': 3.4.35 - '@types/express': 4.17.17 - '@types/keygrip': 1.0.2 - '@types/node': 18.16.3 + /@types/content-disposition@0.5.8: + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + /@types/cookies@0.7.10: + resolution: {integrity: sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==} dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.11 - dev: true - - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true + '@types/connect': 3.4.38 + '@types/express': 4.17.21 + '@types/keygrip': 1.0.5 + '@types/node': 20.9.0 - /@types/express-serve-static-core@4.17.34: - resolution: {integrity: sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w==} + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 18.16.3 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - '@types/send': 0.17.1 + '@types/node': 20.9.0 + '@types/qs': 6.9.10 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.34 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.10 + '@types/serve-static': 1.15.5 /@types/formidable@2.0.6: resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.9.0 + dev: false + + /@types/formidable@3.4.5: + resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} + dependencies: + '@types/node': 20.9.0 + dev: true - /@types/http-assert@1.5.3: - resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} + /@types/http-assert@1.5.5: + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} - /@types/http-errors@2.0.1: - resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/json-api-serializer@2.6.3: - resolution: {integrity: sha512-u+lY4YjPQ4BbwXH+W5rWopjkKESOElbnSZXaRFTfYOyw4QPOE8dX/9PeWQ8CScC8tBgCRb18hVb8vewaHwXa1A==} + /@types/json-api-serializer@2.6.6: + resolution: {integrity: sha512-8XVIVyMNoFMz3pfR3tPHnJ9YlgUQDEWvTxajVakmOjSxWekJvmi2GRFbtaREQiOGtffnHImD0jbR80NQtpib9g==} dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/jsonwebtoken@9.0.2: - resolution: {integrity: sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==} + /@types/jsonwebtoken@9.0.5: + resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 18.16.3 + '@types/node': 20.9.0 dev: true - /@types/keygrip@1.0.2: - resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} + /@types/keygrip@1.0.5: + resolution: {integrity: sha512-M+BUYYOXgiYoab5L98VpOY1PzmDwWcTkqqu4mdluez5qOTDV0MVPChxhRIPeIFxQgSi3+6qjg1PnGFaGlW373g==} - /@types/koa-compose@3.2.5: - resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} + /@types/koa-compose@3.2.8: + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} dependencies: - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 - /@types/koa-qs@2.0.0: - resolution: {integrity: sha512-cBfbUvW70JsU2FCgUCFOoretdvayGzRJ2vEyNQbnZ7vb2pZ/QA+gcNzE6nVxxCcrcnRtGB7tXIRHqHPXS51utA==} + /@types/koa-qs@2.0.3: + resolution: {integrity: sha512-HS4oAQaUKUZJPHggg3DeHiuUwSSotieNRuS2ZlUZO14216Fhf7QDNx8mjR/ZwXaSBr/R46KFtE0OAvsF3yP44A==} dependencies: - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 dev: true - /@types/koa-ratelimit@5.0.0: - resolution: {integrity: sha512-eaWWUu/mTDgjGvisSSYSr7Go7ryVw2jIcNz7iuNKbXXEQJqsGMWTJ3oBbeX0mACmPxZbp8/9DKAMWPzyTrNlcw==} + /@types/koa-ratelimit@5.0.4: + resolution: {integrity: sha512-6a+W2pmpFpvPUR2o4bZnlXLlNft9YjO3EGH8fIN1Te8V4sAoSyqwY8dcPVbSl6P8jeCN93Uax5tVSpx/nWVHKw==} dependencies: - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 + '@types/node': 20.9.0 ioredis: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@types/koa@2.13.6: - resolution: {integrity: sha512-diYUfp/GqfWBAiwxHtYJ/FQYIXhlEhlyaU7lB/bWQrx4Il9lCET5UwpFy3StOAohfsxxvEQ11qIJgT1j2tfBvw==} + /@types/koa@2.13.11: + resolution: {integrity: sha512-0HZSGNdmLlLRvSxv0ngLSp09Hw98c+2XL3ZRYmkE6y8grqTweKEyyaj7LgxkyPUv0gQ5pNS/a7kHXo2Iwha1rA==} dependencies: - '@types/accepts': 1.3.5 - '@types/content-disposition': 0.5.5 - '@types/cookies': 0.7.7 - '@types/http-assert': 1.5.3 - '@types/http-errors': 2.0.1 - '@types/keygrip': 1.0.2 - '@types/koa-compose': 3.2.5 - '@types/node': 18.16.3 + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.7.10 + '@types/http-assert': 1.5.5 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.5 + '@types/koa-compose': 3.2.8 + '@types/node': 20.9.0 - /@types/koa__cors@4.0.0: - resolution: {integrity: sha512-qpwswNgQ2GxiDGNnKbDSBY5XmQTVJ6fspNvInLsAJ+jSwINxihvVzblj5anujNBg2BtL0xpUrcIt3UYwGzu05A==} + /@types/koa__cors@4.0.3: + resolution: {integrity: sha512-zj+1sQO/6GGRGINRXlMmoiFwHibKVcjNGdh+p2SpqHDMLyvC+ce0LMHX6UBi1rdpnPZ/+osUwWdGKF945ffrzA==} dependencies: - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 dev: true - /@types/koa__router@12.0.0: - resolution: {integrity: sha512-S6eHyZyoWCZLNHyy8j0sMW85cPrpByCbGGU2/BO4IzGiI87aHJ92lZh4E9xfsM9DcbCT469/OIqyC0sSJXSIBQ==} + /@types/koa__router@12.0.4: + resolution: {integrity: sha512-Y7YBbSmfXZpa/m5UGGzb7XadJIRBRnwNY9cdAojZGp65Cpe5MAP3mOZE7e3bImt8dfKS4UFcR16SLH8L/z7PBw==} dependencies: - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 dev: true - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - /@types/node@18.16.3: - resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} + /@types/node@20.9.0: + resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} + dependencies: + undici-types: 5.26.5 - /@types/pluralize@0.0.29: - resolution: {integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==} + /@types/pluralize@0.0.33: + resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} dev: true - /@types/prettier@2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} - dev: true + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: false - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.5: + resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} dev: true - /@types/send@0.17.1: - resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: - '@types/mime': 1.3.2 - '@types/node': 18.16.3 + '@types/mime': 1.3.5 + '@types/node': 20.9.0 - /@types/serve-static@1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: - '@types/mime': 3.0.1 - '@types/node': 18.16.3 + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.9.0 /@types/strip-bom@3.0.0: resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} @@ -1184,138 +1202,139 @@ packages: resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} dev: true - /@types/uuid@9.0.1: - resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==} + /@types/uuid@9.0.7: + resolution: {integrity: sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==} dev: true - /@typescript-eslint/eslint-plugin@5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@4.9.5): - resolution: {integrity: sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.59.5 - '@typescript-eslint/type-utils': 5.59.5(eslint@8.40.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.5(eslint@8.40.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/type-utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 - eslint: 8.40.0 - grapheme-splitter: 1.0.4 + eslint: 8.53.0 + graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.5(eslint@8.40.0)(typescript@4.9.5): - resolution: {integrity: sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.5 - '@typescript-eslint/types': 5.59.5 - '@typescript-eslint/typescript-estree': 5.59.5(typescript@4.9.5) + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 - eslint: 8.40.0 - typescript: 4.9.5 + eslint: 8.53.0 + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.5: - resolution: {integrity: sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.10.0: + resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.5 - '@typescript-eslint/visitor-keys': 5.59.5 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/visitor-keys': 6.10.0 dev: true - /@typescript-eslint/type-utils@5.59.5(eslint@8.40.0)(typescript@4.9.5): - resolution: {integrity: sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.5(typescript@4.9.5) - '@typescript-eslint/utils': 5.59.5(eslint@8.40.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.40.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + eslint: 8.53.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.59.5: - resolution: {integrity: sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.10.0: + resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.5(typescript@4.9.5): - resolution: {integrity: sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2): + resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.5 - '@typescript-eslint/visitor-keys': 5.59.5 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.0 - tsutils: 3.21.0(typescript@4.9.5) - typescript: 4.9.5 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.5(eslint@8.40.0)(typescript@4.9.5): - resolution: {integrity: sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.5 - '@typescript-eslint/types': 5.59.5 - '@typescript-eslint/typescript-estree': 5.59.5(typescript@4.9.5) - eslint: 8.40.0 - eslint-scope: 5.1.1 - semver: 7.5.0 + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.10.0 + '@typescript-eslint/types': 6.10.0 + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2) + eslint: 8.53.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.5: - resolution: {integrity: sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@6.10.0: + resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.59.5 - eslint-visitor-keys: 3.4.1 + '@typescript-eslint/types': 6.10.0 + eslint-visitor-keys: 3.4.3 dev: true /@ucast/core@1.10.2: @@ -1342,71 +1361,82 @@ packages: '@ucast/core': 1.10.2 dev: true - /@vitest/coverage-c8@0.31.0(vitest@0.31.0): - resolution: {integrity: sha512-h72qN1D962AO7UefQVulm9JFP5ACS7OfhCdBHioXU8f7ohH/+NTZCgAqmgcfRNHHO/8wLFxx+93YVxhodkEJVA==} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vitest/coverage-v8@0.34.6(vitest@0.34.6): + resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} peerDependencies: - vitest: '>=0.30.0 <1' + vitest: '>=0.32.0 <1' dependencies: '@ampproject/remapping': 2.2.1 - c8: 7.13.0 - magic-string: 0.30.0 + '@bcoe/v8-coverage': 0.2.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.5 picocolors: 1.0.0 - std-env: 3.3.3 - vitest: 0.31.0(@vitest/ui@0.31.0) + std-env: 3.4.3 + test-exclude: 6.0.0 + v8-to-istanbul: 9.1.3 + vitest: 0.34.6(@vitest/ui@0.34.6) + transitivePeerDependencies: + - supports-color dev: true - /@vitest/expect@0.31.0: - resolution: {integrity: sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==} + /@vitest/expect@0.34.6: + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} dependencies: - '@vitest/spy': 0.31.0 - '@vitest/utils': 0.31.0 - chai: 4.3.7 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 dev: true - /@vitest/runner@0.31.0: - resolution: {integrity: sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==} + /@vitest/runner@0.34.6: + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} dependencies: - '@vitest/utils': 0.31.0 - concordance: 5.0.4 + '@vitest/utils': 0.34.6 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 dev: true - /@vitest/snapshot@0.31.0: - resolution: {integrity: sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==} + /@vitest/snapshot@0.34.6: + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} dependencies: - magic-string: 0.30.0 - pathe: 1.1.0 - pretty-format: 27.5.1 + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 dev: true - /@vitest/spy@0.31.0: - resolution: {integrity: sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==} + /@vitest/spy@0.34.6: + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} dependencies: - tinyspy: 2.1.0 + tinyspy: 2.2.0 dev: true - /@vitest/ui@0.31.0(vitest@0.31.0): - resolution: {integrity: sha512-Dy86l6r3/dbJposgm7w+oqb/15UWJ0lDBbEQaS1ived3+0CTaMbT8OMkUf9vNBkSL47kvBHEBnZLa5fw5i9gUQ==} + /@vitest/ui@0.34.6(vitest@0.34.6): + resolution: {integrity: sha512-/fxnCwGC0Txmr3tF3BwAbo3v6U2SkBTGR9UB8zo0Ztlx0BTOXHucE0gDHY7SjwEktCOHatiGmli9kZD6gYSoWQ==} peerDependencies: vitest: '>=0.30.1 <1' dependencies: - '@vitest/utils': 0.31.0 - fast-glob: 3.2.12 - fflate: 0.7.4 - flatted: 3.2.7 - pathe: 1.1.0 + '@vitest/utils': 0.34.6 + fast-glob: 3.3.2 + fflate: 0.8.1 + flatted: 3.2.9 + pathe: 1.1.1 picocolors: 1.0.0 sirv: 2.0.3 - vitest: 0.31.0(@vitest/ui@0.31.0) + vitest: 0.34.6(@vitest/ui@0.34.6) dev: true - /@vitest/utils@0.31.0: - resolution: {integrity: sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==} + /@vitest/utils@0.34.6: + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} dependencies: - concordance: 5.0.4 - loupe: 2.3.6 - pretty-format: 27.5.1 + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 dev: true /abbrev@1.1.1: @@ -1420,35 +1450,46 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.11.2 dev: true /acorn-loose@8.3.0: resolution: {integrity: sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==} engines: {node: '>=0.4.0'} dependencies: - acorn: 8.8.2 + acorn: 8.11.2 dev: false /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} + /acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -1473,11 +1514,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true - /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1487,13 +1523,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1542,18 +1571,18 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 dev: true - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 dev: true @@ -1561,24 +1590,48 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 dev: true - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true /asap@2.0.6: @@ -1611,18 +1664,18 @@ packages: resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} engines: {node: '>= 10.0.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /bcrypt@5.1.0: - resolution: {integrity: sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==} + /bcrypt@5.1.1: + resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} engines: {node: '>= 10.0.0'} requiresBuild: true dependencies: - '@mapbox/node-pre-gyp': 1.0.10 + '@mapbox/node-pre-gyp': 1.0.11 node-addon-api: 5.1.0 transitivePeerDependencies: - encoding @@ -1634,18 +1687,14 @@ packages: engines: {node: '>=8'} dev: true - /blamer@1.0.3: - resolution: {integrity: sha512-JalDFXndGCrTkKakC7C0H5I09ognGQrl3xJZ6wPwtiuX+9h/qcH1PbTnW+MD6mJku1ISmOAwzeWaXT79D3kg3g==} + /blamer@1.0.6: + resolution: {integrity: sha512-fv7QToPS87oD1m1bDDTf29zC/bVKJxj2Nqh1r/v4NhMtbnzDIbWOHBYIfxCjlmkVGu3FGOjKgdNG3SFm7TkvBQ==} engines: {node: '>=8.9'} dependencies: execa: 4.1.0 which: 2.0.2 dev: true - /blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1665,42 +1714,28 @@ packages: fill-range: 7.0.1 /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} dev: false /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /buffer-writer@2.0.0: + resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} + engines: {node: '>=4'} + dev: false + /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.0 + semver: 7.5.4 dev: true /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - /c8@7.13.0: - resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} - engines: {node: '>=10.12.0'} - hasBin: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@istanbuljs/schema': 0.1.3 - find-up: 5.0.0 - foreground-child: 2.0.0 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 - rimraf: 3.0.2 - test-exclude: 6.0.0 - v8-to-istanbul: 9.1.0 - yargs: 16.2.0 - yargs-parser: 20.2.9 - dev: true - /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1720,20 +1755,28 @@ packages: function-bind: 1.1.1 get-intrinsic: 1.2.0 + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /chai@4.3.7: - resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 + get-func-name: 2.0.2 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -1762,8 +1805,10 @@ packages: is-regex: 1.1.4 dev: true - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 dev: true /chokidar@3.5.3: @@ -1778,7 +1823,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /chownr@2.0.0: @@ -1795,14 +1840,6 @@ packages: '@colors/colors': 1.5.0 dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1830,22 +1867,12 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: false - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1867,16 +1894,16 @@ packages: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: false + /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} dev: true - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false - /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -1885,22 +1912,8 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - /concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} - dependencies: - date-time: 3.1.0 - esutils: 2.0.3 - fast-diff: 1.2.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - md5-hex: 3.0.1 - semver: 7.5.0 - well-known-symbols: 2.0.0 - dev: true - - /concurrently@8.0.1: - resolution: {integrity: sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA==} + /concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} engines: {node: ^14.13.0 || >=16.0.0} hasBin: true dependencies: @@ -1909,7 +1922,7 @@ packages: lodash: 4.17.21 rxjs: 7.8.1 shell-quote: 1.8.1 - spawn-command: 0.0.2-1 + spawn-command: 0.0.2 supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.7.2 @@ -1922,8 +1935,8 @@ packages: /constantinople@4.0.1: resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.23.3 + '@babel/types': 7.23.3 dev: true /content-disposition@0.5.4: @@ -1938,8 +1951,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true /cookies@0.8.0: @@ -1972,14 +1985,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.21.5 - dev: true - - /date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} - dependencies: - time-zone: 1.0.0 + '@babel/runtime': 7.23.2 dev: true /dateformat@4.5.1: @@ -2029,11 +2035,21 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -2044,6 +2060,7 @@ packages: /denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} + dev: true /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -2060,8 +2077,8 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false - /detect-libc@2.0.1: - resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} dev: false @@ -2072,6 +2089,11 @@ packages: wrappy: 1.0.2 dev: false + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -2105,15 +2127,8 @@ packages: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.5.0 - dev: false - - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: false @@ -2133,8 +2148,8 @@ packages: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: false - /emittery@0.12.1: - resolution: {integrity: sha512-pYyW59MIZo0HxPFf+Vb3+gacUu0gxVS3TZwB2ClwkEZywgF9f9OJDoVmNLojTn0vKX3tO9LC+pdQEcLP4Oz/bQ==} + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: false @@ -2152,59 +2167,64 @@ packages: once: 1.4.0 dev: true - /es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 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-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 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-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 + which-typed-array: 1.1.13 dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 + hasown: 2.0.0 dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 dev: true /es-to-primitive@1.2.1: @@ -2216,34 +2236,34 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.17.18: - resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.18 - '@esbuild/android-arm64': 0.17.18 - '@esbuild/android-x64': 0.17.18 - '@esbuild/darwin-arm64': 0.17.18 - '@esbuild/darwin-x64': 0.17.18 - '@esbuild/freebsd-arm64': 0.17.18 - '@esbuild/freebsd-x64': 0.17.18 - '@esbuild/linux-arm': 0.17.18 - '@esbuild/linux-arm64': 0.17.18 - '@esbuild/linux-ia32': 0.17.18 - '@esbuild/linux-loong64': 0.17.18 - '@esbuild/linux-mips64el': 0.17.18 - '@esbuild/linux-ppc64': 0.17.18 - '@esbuild/linux-riscv64': 0.17.18 - '@esbuild/linux-s390x': 0.17.18 - '@esbuild/linux-x64': 0.17.18 - '@esbuild/netbsd-x64': 0.17.18 - '@esbuild/openbsd-x64': 0.17.18 - '@esbuild/sunos-x64': 0.17.18 - '@esbuild/win32-arm64': 0.17.18 - '@esbuild/win32-ia32': 0.17.18 - '@esbuild/win32-x64': 0.17.18 + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 dev: true /escalade@3.1.1: @@ -2264,31 +2284,32 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.40.0): - resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.0)(eslint-plugin-promise@6.1.1)(eslint@8.53.0): + resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} + engines: {node: '>=12.0.0'} peerDependencies: eslint: ^8.0.1 eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.40.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0) - eslint-plugin-n: 15.7.0(eslint@8.40.0) - eslint-plugin-promise: 6.1.1(eslint@8.40.0) + eslint: 8.53.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0) + eslint-plugin-n: 16.3.0(eslint@8.53.0) + eslint-plugin-promise: 6.1.1(eslint@8.53.0) dev: true - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7(supports-color@5.5.0) - is-core-module: 2.12.0 - resolve: 1.22.2 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.5)(eslint-import-resolver-node@0.3.7)(eslint@8.40.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2309,38 +2330,38 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) debug: 3.2.7(supports-color@5.5.0) - eslint: 8.40.0 - eslint-import-resolver-node: 0.3.7 + eslint: 8.53.0 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es@3.0.1(eslint@8.40.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} + /eslint-plugin-es-x@7.3.0(eslint@8.53.0): + resolution: {integrity: sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=4.19.1' + eslint: '>=8' dependencies: - eslint: 8.40.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.53.0 dev: true - /eslint-plugin-es@4.1.0(eslint@8.40.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} + /eslint-plugin-es@3.0.1(eslint@8.53.0): + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.40.0 + eslint: 8.53.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2349,22 +2370,24 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7(supports-color@5.5.0) doctrine: 2.1.0 - eslint: 8.40.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.5)(eslint-import-resolver-node@0.3.7)(eslint@8.40.0) - has: 1.0.3 - is-core-module: 2.12.0 + eslint: 8.53.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) + hasown: 2.0.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.2 - semver: 6.3.0 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -2372,31 +2395,32 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.7.0(eslint@8.40.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} + /eslint-plugin-n@16.3.0(eslint@8.53.0): + resolution: {integrity: sha512-/XZLH5CUXGK3laz3xYFNza8ZxLCq8ZNW6MsVw5z3d5hc2AwZzi0fPiySFZHQTdVDOHGs2cGv91aqzWmgBdq2gQ==} + engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) builtins: 5.0.1 - eslint: 8.40.0 - eslint-plugin-es: 4.1.0(eslint@8.40.0) - eslint-utils: 3.0.0(eslint@8.40.0) + eslint: 8.53.0 + eslint-plugin-es-x: 7.3.0(eslint@8.53.0) + get-tsconfig: 4.7.2 ignore: 5.2.4 - is-core-module: 2.12.0 + is-core-module: 2.13.1 minimatch: 3.1.2 - resolve: 1.22.2 - semver: 7.5.0 + resolve: 1.22.8 + semver: 7.5.4 dev: true - /eslint-plugin-node@11.1.0(eslint@8.40.0): + /eslint-plugin-node@11.1.0(eslint@8.53.0): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.40.0 - eslint-plugin-es: 3.0.1(eslint@8.40.0) + eslint: 8.53.0 + eslint-plugin-es: 3.0.1(eslint@8.53.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 @@ -2404,27 +2428,27 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.40.0): + /eslint-plugin-promise@6.1.1(eslint@8.53.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.40.0 + eslint: 8.53.0 dev: true - /eslint-plugin-unused-imports@2.0.0(@typescript-eslint/eslint-plugin@5.59.5)(eslint@8.40.0): - resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.53.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/eslint-plugin': ^6.0.0 eslint: ^8.0.0 peerDependenciesMeta: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@4.9.5) - eslint: 8.40.0 + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2) + eslint: 8.53.0 eslint-rule-composer: 0.3.0 dev: true @@ -2433,16 +2457,8 @@ packages: engines: {node: '>=4.0.0'} dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 @@ -2456,75 +2472,58 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.40.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.40.0 - eslint-visitor-keys: 2.1.0 - dev: true - /eslint-visitor-keys@1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.40.0: - resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==} + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) - '@eslint-community/regexpp': 4.5.1 - '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.40.0 - '@humanwhocodes/config-array': 0.11.8 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.20.0 - grapheme-splitter: 1.0.4 + globals: 13.23.0 + graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -2535,13 +2534,13 @@ packages: engines: {node: '>=6'} dev: false - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.1 + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 dev: true /esquery@1.5.0: @@ -2558,11 +2557,6 @@ packages: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2596,12 +2590,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2631,12 +2621,19 @@ packages: web-streams-polyfill: 3.2.1 dev: true - /fflate@0.7.4: - resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + /fetch-blob@4.0.0: + resolution: {integrity: sha512-nPmnhRmpNMjYWnp9EBMGs6z5lq9RXed5W1vuZcECrsDVQInM8AMQSooVb3X183Aole60adzjWbH9qlRFWzDDTA==} + engines: {node: '>=16.7'} + dependencies: + node-domexception: 1.0.0 + dev: true + + /fflate@0.8.1: + resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==} dev: true - /figlet@1.6.0: - resolution: {integrity: sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==} + /figlet@1.7.0: + resolution: {integrity: sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==} engines: {node: '>= 0.4.0'} hasBin: true dev: false @@ -2645,7 +2642,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.1.1 dev: true /fill-range@7.0.1: @@ -2667,16 +2664,17 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: @@ -2685,14 +2683,6 @@ packages: is-callable: 1.2.7 dev: true - /foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 3.0.7 - dev: true - /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -2720,7 +2710,7 @@ packages: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false /fs-extra@9.1.0: @@ -2730,16 +2720,9 @@ packages: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true - /fs-jetpack@4.3.1: - resolution: {integrity: sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==} - dependencies: - minimatch: 3.1.2 - rimraf: 2.7.1 - dev: false - /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -2750,8 +2733,8 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -2761,13 +2744,16 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true @@ -2790,18 +2776,12 @@ packages: wide-align: 1.1.5 dev: false - /generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - dependencies: - is-property: 1.0.2 - dev: false - /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /get-intrinsic@1.2.0: @@ -2811,6 +2791,15 @@ packages: has: 1.0.3 has-symbols: 1.0.3 + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -2827,8 +2816,14 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 dev: true /getopts@2.3.0: @@ -2874,8 +2869,8 @@ packages: once: 1.4.0 dev: false - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -2885,7 +2880,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 dev: true /globby@11.1.0: @@ -2894,7 +2889,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -2906,14 +2901,14 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.2 dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true /has-ansi@2.0.0: @@ -2936,10 +2931,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.2 dev: true /has-proto@1.0.1: @@ -2967,6 +2962,12 @@ packages: dependencies: function-bind: 1.1.1 + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + /helmet@6.2.0: resolution: {integrity: sha512-DWlwuXLLqbrIOltR6tFQXShj/+7Cyp0gLi6uAb8qMdFh/YBBFbKSgQ6nbXmScYd8emMctuthmgIa7tUfo9Rtyg==} engines: {node: '>=14.0.0'} @@ -3033,13 +3034,6 @@ packages: safer-buffer: 2.1.2 dev: false - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - /ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} dev: true @@ -3080,12 +3074,12 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 dev: true @@ -3114,9 +3108,9 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-typed-array: 1.1.10 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 dev: true /is-bigint@1.0.4: @@ -3136,7 +3130,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true @@ -3153,6 +3147,12 @@ packages: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -3214,22 +3214,18 @@ packages: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} dev: true - /is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - dev: false - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true /is-stream@2.0.1: @@ -3251,56 +3247,58 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} 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 + which-typed-array: 1.1.13 dev: true /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - - /js-sdsl@4.4.0: - resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color dev: true - /js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 dev: true /js-stringify@1.0.2: @@ -3314,13 +3312,13 @@ packages: argparse: 2.0.1 dev: true - /jscpd@3.5.9: - resolution: {integrity: sha512-8JJUHVBlnxdU/Hp+ZgctlUaMkAU4yqJ0Cfb+SYMSUihR96idyLg17tJDP6STFpkFVfU4/HLB1LHfeSGp38zVuA==} + /jscpd@3.5.10: + resolution: {integrity: sha512-lsFBSqtmGocMtF8NuCh867VRhjeSvPlGit7FYA9a9bX3GFoV65djHnWMbIWfHLb/6wCCwllmXaHuMgeMuhqo3Q==} hasBin: true dependencies: '@jscpd/core': 3.5.4 - '@jscpd/finder': 3.5.5 - '@jscpd/html-reporter': 3.5.9 + '@jscpd/finder': 3.5.10 + '@jscpd/html-reporter': 3.5.10 '@jscpd/tokenizer': 3.5.4 colors: 1.4.0 commander: 5.1.0 @@ -3335,6 +3333,10 @@ packages: setimmediate: 1.0.5 dev: false + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -3362,18 +3364,24 @@ packages: /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - /jsonwebtoken@9.0.0: - resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 - lodash: 4.17.21 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.0 + semver: 7.5.4 dev: false /jstransformer@1.0.0: @@ -3405,8 +3413,14 @@ packages: tsscmp: 1.0.6 dev: false - /knex@2.4.2(mysql2@3.3.0): - resolution: {integrity: sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /knex@2.5.1(pg@8.11.3): + resolution: {integrity: sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -3434,7 +3448,7 @@ packages: optional: true dependencies: colorette: 2.0.19 - commander: 9.5.0 + commander: 10.0.1 debug: 4.3.4 escalade: 3.1.1 esm: 3.2.25 @@ -3442,8 +3456,8 @@ packages: getopts: 2.3.0 interpret: 2.2.0 lodash: 4.17.21 - mysql2: 3.3.0 - pg-connection-string: 2.5.0 + pg: 8.11.3 + pg-connection-string: 2.6.1 rechoir: 0.8.0 resolve-from: 5.0.0 tarn: 3.0.2 @@ -3457,7 +3471,7 @@ packages: dependencies: '@types/co-body': 6.1.0 '@types/formidable': 2.0.6 - '@types/koa': 2.13.6 + '@types/koa': 2.13.11 co-body: 6.1.0 formidable: 2.1.1 zod: 3.21.4 @@ -3556,14 +3570,42 @@ packages: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} dev: true + /lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: false + /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} dev: true + /lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: false + + /lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: false + + /lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: false + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3579,40 +3621,20 @@ packages: engines: {node: '>= 0.6.0'} dev: true - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false - - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: - get-func-name: 2.0.0 + get-func-name: 2.0.2 dev: true - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.5.0 - dev: false - /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: false - - /lru-cache@8.0.5: - resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} - engines: {node: '>=16.14'} - dev: false - - /magic-string@0.30.0: - resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -3622,7 +3644,15 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 + dev: false + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -3634,13 +3664,6 @@ packages: repeat-string: 1.6.1 dev: true - /md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} - dependencies: - blueimp-md5: 2.19.0 - dev: true - /media-typer@0.3.0: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} @@ -3670,8 +3693,8 @@ packages: braces: 3.0.2 picomatch: 2.3.1 - /mikro-orm@5.7.5: - resolution: {integrity: sha512-nx+hKgjK4+VgCiESmcVDvuBfVtSIrYodEjFHlVG85whEOwjYYi3ntBE1HloRVOVj0CAp1/KUEybo28ki8v0VNA==} + /mikro-orm@5.9.3: + resolution: {integrity: sha512-lLBWENtV7yUE5KraqJEMaaKDPotnab6i/uf+wOyjILxYPjaXivH+oq7g9U3WS7K1fLUpQlR+bdQTOExHLy1FtQ==} engines: {node: '>= 14.0.0'} dev: false @@ -3732,13 +3755,13 @@ packages: engines: {node: '>=10'} hasBin: true - /mlly@1.2.0: - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - acorn: 8.8.2 - pathe: 1.1.0 + acorn: 8.11.2 + pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.1.2 + ufo: 1.3.1 dev: true /mrmime@1.0.1: @@ -3752,37 +3775,12 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /mysql2@3.3.0: - resolution: {integrity: sha512-/+LGlWgXxppcomT1NqkUnaDchcS9tebsXsj5eZQhnAB/onlSLgqMA5W9ZRHcZPKyqg3XROJDgomB4eCkn6Ca2g==} - engines: {node: '>= 8.0'} - dependencies: - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.6.3 - long: 5.2.3 - lru-cache: 8.0.5 - named-placeholders: 1.1.3 - seq-queue: 0.0.5 - sqlstring: 2.3.3 - dev: false - - /named-placeholders@1.1.3: - resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} - engines: {node: '>=12.0.0'} - dependencies: - lru-cache: 7.18.3 - dev: false - - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -3792,11 +3790,9 @@ packages: engines: {node: '>= 0.6'} dev: false - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.5.0 + /no-case@4.0.0: + resolution: {integrity: sha512-WmS3EUGw+vXHlTgiUPi3NzbZNwH6+uGX0QLGgqG+aFSJ5rkX/Ee0nuwHBJfZTfQwwR8lGO819NEIwQ7CGhkdEQ==} + deprecated: Use `change-case` dev: false /node-addon-api@5.1.0: @@ -3808,8 +3804,8 @@ packages: engines: {node: '>=10.5.0'} dev: true - /node-fetch@2.6.9: - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -3820,8 +3816,8 @@ packages: whatwg-url: 5.0.0 dev: false - /node-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: data-uri-to-buffer: 4.0.1 @@ -3829,9 +3825,9 @@ packages: formdata-polyfill: 4.0.10 dev: true - /nodemon@2.0.22: - resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} - engines: {node: '>=8.10.0'} + /nodemon@3.0.1: + resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} + engines: {node: '>=10'} hasBin: true dependencies: chokidar: 3.5.3 @@ -3839,8 +3835,8 @@ packages: ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 5.7.1 - simple-update-notifier: 1.1.0 + semver: 7.5.4 + simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.0 undefsafe: 2.0.5 @@ -3889,6 +3885,10 @@ packages: /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -3898,19 +3898,37 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true /on-finished@2.4.1: @@ -3936,16 +3954,16 @@ packages: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: false - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 dev: true /p-limit@3.1.0: @@ -3969,11 +3987,15 @@ packages: p-limit: 3.1.0 dev: true - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + /packet-reader@1.0.0: + resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + dev: false + + /param-case@4.0.0: + resolution: {integrity: sha512-+kVIBemYVaPPzBX6Z9FcBvaY0YSIBxD1fyShn6P3HkWOIbsOkT8OmEgLrQSaAHRDyYKdu7YH5RRiACiJLSJ2pw==} + deprecated: Use `change-case` dependencies: - dot-case: 3.0.4 - tslib: 2.5.0 + no-case: 4.0.0 dev: false /parent-module@1.0.1: @@ -4018,16 +4040,80 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pathe@1.1.0: - resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pg-connection-string@2.5.0: - resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==} + /pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + requiresBuild: true + dev: false + optional: true + + /pg-connection-string@2.6.1: + resolution: {integrity: sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==} + dev: false + + /pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + dev: false + + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-pool@3.6.1(pg@8.11.3): + resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + peerDependencies: + pg: '>=8.0' + dependencies: + pg: 8.11.3 + dev: false + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + dev: false + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + + /pg@8.11.3: + resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 2.6.2 + pg-pool: 3.6.1(pg@8.11.3) + pg-protocol: 1.6.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + dev: false + + /pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + dependencies: + split2: 4.2.0 dev: false /picocolors@1.0.0: @@ -4042,8 +4128,8 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.4.2 + pathe: 1.1.1 dev: true /pluralize@8.0.0: @@ -4056,62 +4142,75 @@ packages: engines: {node: '>=12.0.0'} dev: false - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-eslint@15.0.1: - resolution: {integrity: sha512-mGOWVHixSvpZWARqSDXbdtTL54mMBxc5oQYQ6RAqy8jecuNJBgN3t9E5a81G66F8x8fsKNiR1HWaBV66MJDOpg==} - engines: {node: '>=10.0.0'} + /prettier-eslint@16.1.2: + resolution: {integrity: sha512-mGFGZQbAh11FSnwW3H1zngzQYR2QMmHO8vdfgnAuzOFhnDeUZHYtwpqQvOMOMT0k818Dr1X+J4a/sVE0r34RKQ==} + engines: {node: '>=16.10.0'} dependencies: - '@types/eslint': 8.37.0 - '@types/prettier': 2.7.2 - '@typescript-eslint/parser': 5.59.5(eslint@8.40.0)(typescript@4.9.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2) common-tags: 1.8.2 dlv: 1.1.3 - eslint: 8.40.0 + eslint: 8.53.0 indent-string: 4.0.0 lodash.merge: 4.6.2 loglevel-colored-level-prefix: 1.0.0 - prettier: 2.8.8 - pretty-format: 23.6.0 + prettier: 3.0.3 + pretty-format: 29.7.0 require-relative: 0.8.7 - typescript: 4.9.5 - vue-eslint-parser: 8.3.0(eslint@8.40.0) + typescript: 5.2.2 + vue-eslint-parser: 9.3.2(eslint@8.53.0) transitivePeerDependencies: - supports-color dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} hasBin: true dev: true - /pretty-format@23.6.0: - resolution: {integrity: sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==} - dependencies: - ansi-regex: 3.0.1 - ansi-styles: 3.2.1 - dev: true - - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - ansi-regex: 5.0.1 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 17.0.2 + react-is: 18.2.0 dev: true /promise@7.3.1: @@ -4120,8 +4219,8 @@ packages: asap: 2.0.6 dev: true - /property-expr@2.0.5: - resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==} + /property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} dev: false /pstree.remy@1.1.8: @@ -4160,7 +4259,7 @@ packages: jstransformer: 1.0.0 pug-error: 2.0.0 pug-walk: 2.0.0 - resolve: 1.22.2 + resolve: 1.22.8 dev: true /pug-lexer@5.0.1: @@ -4226,8 +4325,8 @@ packages: once: 1.4.0 dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true @@ -4260,8 +4359,8 @@ packages: unpipe: 1.0.0 dev: false - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true /readable-stream@3.6.2: @@ -4284,7 +4383,7 @@ packages: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} dependencies: - resolve: 1.22.2 + resolve: 1.22.8 dev: false /redis-errors@1.2.0: @@ -4303,17 +4402,17 @@ packages: resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} dev: false - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} dev: true - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 dev: true /regexpp@3.2.0: @@ -4348,6 +4447,10 @@ packages: engines: {node: '>=8'} dev: false + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -4355,6 +4458,15 @@ packages: is-core-module: 2.12.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -4365,6 +4477,7 @@ packages: hasBin: true dependencies: glob: 7.2.3 + dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -4372,12 +4485,12 @@ packages: dependencies: glob: 7.2.3 - /rollup@3.21.5: - resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /run-parallel@1.2.0: @@ -4388,7 +4501,17 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 + dev: true + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 dev: true /safe-buffer@5.2.1: @@ -4398,8 +4521,8 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true @@ -4407,35 +4530,45 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: false - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + dev: true - /semver@7.0.0: - resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - dev: true - /semver@7.5.0: - resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - /seq-queue@0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - dev: false - /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -4474,18 +4607,18 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-update-notifier@1.1.0: - resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} - engines: {node: '>=8.10.0'} + /simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} dependencies: - semver: 7.0.0 + semver: 7.5.4 dev: true /sirv@2.0.3: resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.21 + '@polka/url': 1.0.0-next.23 mrmime: 1.0.1 totalist: 3.0.1 dev: true @@ -4515,8 +4648,8 @@ packages: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} dev: true - /spawn-command@0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: true /split-on-first@3.0.0: @@ -4524,6 +4657,11 @@ packages: engines: {node: '>=12'} dev: false + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false @@ -4551,8 +4689,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /std-env@3.3.3: - resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + /std-env@3.4.3: + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} dev: true /string-argv@0.3.2: @@ -4568,29 +4706,29 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true /string_decoder@1.3.0: @@ -4631,10 +4769,10 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal@1.0.1: - resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.8.2 + acorn: 8.11.2 dev: true /supports-color@2.0.0: @@ -4666,8 +4804,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /tar@6.1.14: - resolution: {integrity: sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw==} + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -4701,26 +4839,21 @@ packages: engines: {node: '>=8'} dev: false - /time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} - dev: true - /tiny-case@1.0.3: resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} dev: false - /tinybench@2.5.0: - resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} dev: true - /tinypool@0.5.0: - resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.1.0: - resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} engines: {node: '>=14.0.0'} dev: true @@ -4769,9 +4902,9 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false - /tracer@1.1.6: - resolution: {integrity: sha512-VKEIQRNgzSgti18whs+8l7e2y/gWcklw+C/xZtFH/AGvaN6GDlvhkQTFEsy448Gxb5MtbNbzJiG0L1TJEQnqcA==} - engines: {node: '>= 0.10.0'} + /tracer@1.3.0: + resolution: {integrity: sha512-8G2okIuUNThM1W8HU9YUCsQgxROw9VpewE2f8Tsw3B90b0acvBiATqnUIvv07qG/aBTs7ALDr7tLVUVD86kPPA==} + engines: {node: '>= 16.20.1'} dependencies: colors: 1.4.0 dateformat: 4.5.1 @@ -4784,11 +4917,20 @@ packages: hasBin: true dev: true + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true + /ts-dotenv@0.9.1: resolution: {integrity: sha512-oTTXmjSMkCIK8d+uKbQnHh7JS9zEYGn3pq7nE0qHVERq+6Mx9wZKcXVAT+7X0qhOWpRz10dqrJCFFcKwunYz5w==} dev: false - /ts-node-dev@2.0.0(@types/node@18.16.3)(typescript@4.9.5): + /ts-node-dev@2.0.0(@types/node@20.9.0)(typescript@5.2.2): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} hasBin: true @@ -4807,16 +4949,16 @@ packages: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.1(@types/node@18.16.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@20.9.0)(typescript@5.2.2) tsconfig: 7.0.0 - typescript: 4.9.5 + typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' dev: true - /ts-node@10.9.1(@types/node@18.16.3)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@20.9.0)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4835,20 +4977,20 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.16.3 + '@types/node': 20.9.0 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 5.2.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true - /tsconfck@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-ZPCkJBKASZBmBUNqGHmRhdhM8pJYDdOXp4nRgj/O0JwUwsMq50lCDRQP/M5GBNAA0elPrq4gAeu4dkaVCuKWww==} + /tsconfck@2.1.2(typescript@5.2.2): + resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} engines: {node: ^14.13.1 || ^16 || >=18} hasBin: true peerDependencies: @@ -4857,7 +4999,7 @@ packages: typescript: optional: true dependencies: - typescript: 4.9.5 + typescript: 5.2.2 dev: true /tsconfig-paths@3.14.2: @@ -4888,31 +5030,23 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} dev: false - /tsutils@3.21.0(typescript@4.9.5): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - dev: true - - /tsyringe@4.7.0: - resolution: {integrity: sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==} + /tsyringe@4.8.0: + resolution: {integrity: sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA==} engines: {node: '>= 6.0.0'} dependencies: tslib: 1.14.1 @@ -4940,20 +5074,25 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@3.10.0(typescript@4.9.5): + /type-fest@3.10.0(typescript@5.2.2): resolution: {integrity: sha512-hmAPf1datm+gt3c2mvu0sJyhFy6lTkIGf0GzyaZWxRLnabQfPUqg6tF95RPg6sLxKI7nFLGdFxBcf2/7+GXI+A==} engines: {node: '>=14.16'} peerDependencies: typescript: '>=4.7.0' dependencies: - typescript: 4.9.5 - dev: true + typescript: 5.2.2 + dev: false /type-fest@3.6.1: resolution: {integrity: sha512-htXWckxlT6U4+ilVgweNliPqlsVSSucbxVexRYllyMVJDtf5rTjv6kF/s+qAd4QSL1BZcnJPEJavYBPQiWuZDA==} engines: {node: '>=14.16'} dev: false + /type-fest@4.7.1: + resolution: {integrity: sha512-iWr8RUmzAJRfhZugX9O7nZE6pCxDU8CZ3QxsLuTnGcBLJpCaP2ll3s4eMTBoFnU/CeXY/5rfQSuAEsTGJO4y8A==} + engines: {node: '>=16'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -4962,39 +5101,70 @@ packages: mime-types: 2.1.35 dev: false + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} hasBin: true - /ufo@1.1.2: - resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + /ufo@1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} dev: true - /umzug@3.2.1: - resolution: {integrity: sha512-XyWQowvP9CKZycKc/Zg9SYWrAWX/gJCE799AUTFqk8yC3tp44K1xWr3LoFF0MNEjClKOo1suCr5ASnoy+KltdA==} + /umzug@3.3.1(typescript@5.2.2): + resolution: {integrity: sha512-jG3C35jti1YnCuH/k3fJEfHbnIG9c3Q9ITZ0B9eWwnXngh/AUd0mRHv8OdpE2Q9VoK7tB6xL990JrMCr0LtfNA==} engines: {node: '>=12'} dependencies: - '@rushstack/ts-command-line': 4.13.2 - emittery: 0.12.1 - fs-jetpack: 4.3.1 + '@rushstack/ts-command-line': 4.17.1 + emittery: 0.13.1 glob: 8.1.0 pony-cause: 2.1.10 - type-fest: 2.19.0 + type-fest: 3.10.0(typescript@5.2.2) + transitivePeerDependencies: + - typescript dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -5004,8 +5174,11 @@ packages: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} /unpipe@1.0.0: @@ -5016,15 +5189,15 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: false @@ -5032,13 +5205,13 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + /v8-to-istanbul@9.1.3: + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.18 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 dev: true /vary@1.1.2: @@ -5046,20 +5219,21 @@ packages: engines: {node: '>= 0.8'} dev: false - /vite-node@0.31.0(@types/node@18.16.3): - resolution: {integrity: sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==} + /vite-node@0.34.6(@types/node@20.9.0): + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.2.0 - pathe: 1.1.0 + mlly: 1.4.2 + pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.3.5(@types/node@18.16.3) + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - '@types/node' - less + - lightningcss - sass - stylus - sugarss @@ -5067,8 +5241,8 @@ packages: - terser dev: true - /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.3.5): - resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} + /vite-tsconfig-paths@4.2.1(typescript@5.2.2)(vite@4.5.0): + resolution: {integrity: sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -5077,20 +5251,21 @@ packages: dependencies: debug: 4.3.4 globrex: 0.1.2 - tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.3.5(@types/node@18.16.3) + tsconfck: 2.1.2(typescript@5.2.2) + vite: 4.5.0(@types/node@20.9.0) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@4.3.5(@types/node@18.16.3): - resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} + /vite@4.5.0(@types/node@20.9.0): + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' less: '*' + lightningcss: ^1.21.0 sass: '*' stylus: '*' sugarss: '*' @@ -5100,6 +5275,8 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true stylus: @@ -5109,16 +5286,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.3 - esbuild: 0.17.18 - postcss: 8.4.23 - rollup: 3.21.5 + '@types/node': 20.9.0 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /vitest@0.31.0(@vitest/ui@0.31.0): - resolution: {integrity: sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==} + /vitest@0.34.6(@vitest/ui@0.34.6): + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -5148,34 +5325,34 @@ packages: webdriverio: optional: true dependencies: - '@types/chai': 4.3.5 - '@types/chai-subset': 1.3.3 - '@types/node': 18.16.3 - '@vitest/expect': 0.31.0 - '@vitest/runner': 0.31.0 - '@vitest/snapshot': 0.31.0 - '@vitest/spy': 0.31.0 - '@vitest/ui': 0.31.0(vitest@0.31.0) - '@vitest/utils': 0.31.0 - acorn: 8.8.2 - acorn-walk: 8.2.0 + '@types/chai': 4.3.10 + '@types/chai-subset': 1.3.5 + '@types/node': 20.9.0 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/ui': 0.34.6(vitest@0.34.6) + '@vitest/utils': 0.34.6 + acorn: 8.11.2 + acorn-walk: 8.3.0 cac: 6.7.14 - chai: 4.3.7 - concordance: 5.0.4 + chai: 4.3.10 debug: 4.3.4 local-pkg: 0.4.3 - magic-string: 0.30.0 - pathe: 1.1.0 + magic-string: 0.30.5 + pathe: 1.1.1 picocolors: 1.0.0 - std-env: 3.3.3 - strip-literal: 1.0.1 - tinybench: 2.5.0 - tinypool: 0.5.0 - vite: 4.3.5(@types/node@18.16.3) - vite-node: 0.31.0(@types/node@18.16.3) + std-env: 3.4.3 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.5.0(@types/node@20.9.0) + vite-node: 0.34.6(@types/node@20.9.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less + - lightningcss - sass - stylus - sugarss @@ -5188,20 +5365,20 @@ packages: engines: {node: '>=0.10.0'} dev: true - /vue-eslint-parser@8.3.0(eslint@8.40.0): - resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /vue-eslint-parser@9.3.2(eslint@8.53.0): + resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.40.0 - eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.1 - espree: 9.5.2 + eslint: 8.53.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 lodash: 4.17.21 - semver: 7.5.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -5215,11 +5392,6 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - /well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -5237,16 +5409,15 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 dev: true /which@2.0.2: @@ -5276,17 +5447,12 @@ packages: resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} engines: {node: '>= 10.0.0'} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/parser': 7.23.3 + '@babel/types': 7.23.3 assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5301,7 +5467,6 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -5310,28 +5475,10 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -5364,10 +5511,10 @@ packages: engines: {node: '>=12.20'} dev: true - /yup@1.1.1: - resolution: {integrity: sha512-KfCGHdAErqFZWA5tZf7upSUnGKuTOnsI3hUsLr7fgVtx+DK04NPV01A68/FslI4t3s/ZWpvXJmgXhd7q6ICnag==} + /yup@1.3.2: + resolution: {integrity: sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==} dependencies: - property-expr: 2.0.5 + property-expr: 2.0.6 tiny-case: 1.0.3 toposort: 2.0.2 type-fest: 2.19.0 diff --git a/src/api/controllers/auth.controller.ts b/src/api/controllers/auth.controller.ts index d439f59c..9c7fa6b9 100644 --- a/src/api/controllers/auth.controller.ts +++ b/src/api/controllers/auth.controller.ts @@ -4,15 +4,15 @@ import { RefreshTokenModel } from '../../database/models/refresh-token.model.js' import { RefreshTokenRepository } from '../../database/repositories/refresh-token.repository.js'; import { ValidatedBody } from '../decorators/validated-body.js'; import { Roles } from '../enums/roles.enum.js'; -import { RouterContext } from '@koa/router'; +import type { RouterContext } from '@koa/router'; import { injectRepository } from '@triptyk/nfw-mikro-orm'; import { Controller, Ctx, POST, UseMiddleware } from '@triptyk/nfw-http'; import { AuthService } from '../services/auth.service.js'; -import { EntityRepository } from '@mikro-orm/mysql'; +import { EntityRepository } from '@mikro-orm/postgresql'; import { InvalidUserNameOrPasswordError } from '../errors/web/invalid-username-or-password.js'; import { InvalidRefreshTokenError } from '../errors/web/invalid-refresh-token.js'; import { loginBodySchema, refreshBodySchema, registeredUserBodySchema } from '../validators/auth.validator.js'; -import { InferType } from 'yup'; +import type { InferType } from 'yup'; import { createRateLimitMiddleware } from '../middlewares/rate-limit.middleware.js'; @Controller({ diff --git a/src/api/controllers/documents.controller.ts b/src/api/controllers/documents.controller.ts index ba03f533..cc14e84e 100644 --- a/src/api/controllers/documents.controller.ts +++ b/src/api/controllers/documents.controller.ts @@ -1,20 +1,22 @@ import { inject, injectable } from '@triptyk/nfw-core'; -import { JsonApiQuery, JsonApiDelete, JsonApiFindAll, JsonApiGet, ResourceSerializer } from '@triptyk/nfw-resources'; -import { InferType } from 'yup'; +import { JsonApiDelete, JsonApiFindAll, JsonApiGet } from '@triptyk/nfw-resources'; +import type { JsonApiQuery, ResourceSerializer } from '@triptyk/nfw-resources'; import { Controller, Param, POST, PUT, UseMiddleware } from '@triptyk/nfw-http'; import { JsonApiQueryDecorator } from '../decorators/json-api-query.js'; import { CurrentUser } from '../decorators/current-user.decorator.js'; import { UserModel } from '../../database/models/user.model.js'; -import { DocumentResourceService, DocumentResourceServiceImpl } from '../resources/documents/service.js'; +import { DocumentResourceServiceImpl } from '../resources/documents/service.js'; +import type { DocumentResourceService } from '../resources/documents/service.js'; import { DocumentResourceAuthorizerImpl } from '../resources/documents/authorizer.js'; import { validatedDocumentSchema } from '../validators/document.validator.js'; +import { serializeDocument } from '../../database/models/document.model.js'; import type { DocumentModel } from '../../database/models/document.model.js'; -import { ResourceAuthorizer } from '../resources/base/authorizer.js'; import { createFileUploadMiddleware } from '../middlewares/file-upload.middleware.js'; import { ValidatedFileBody } from '../decorators/validated-file-body.js'; -import { jsonApiCreateFunction, jsonApiDeleteFunction, jsonApiFindAllFunction, jsonApiGetFunction, jsonApiUpdateFunction } from '../resources/base/controller.js'; import { DocumentSerializer } from '../resources/documents/serializer.js'; -import type { DocumentResource } from '../resources/documents/schema.js'; +import type { InferType } from 'yup'; +import type { ResourceAuthorizer } from '../resources/base/authorizer.js'; +import { canOrFail } from '../utils/can-or-fail.js'; const RESOURCE_NAME = 'documents'; @@ -25,34 +27,60 @@ const RESOURCE_NAME = 'documents'; export class DocumentsController { public constructor ( @inject(DocumentResourceServiceImpl) public service: DocumentResourceService, - @inject(DocumentSerializer) public serializer: ResourceSerializer, + @inject(DocumentSerializer) public serializer: ResourceSerializer, @inject(DocumentResourceAuthorizerImpl) public authorizer: ResourceAuthorizer, ) {} @JsonApiGet() async get (@Param('id') id: string, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { - return jsonApiGetFunction.call(this, id, query, currentUser); + const resourceModel = await this.service.getOneOrFail(id, query); + await canOrFail(this.authorizer, currentUser, 'read', resourceModel); + return this.serializer.serializeOne(serializeDocument(resourceModel), query, { + endpointURL: `documents/${id}` + }); } @JsonApiFindAll() async findAll (@JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { - return jsonApiFindAllFunction.call(this, query, currentUser); + const [resourcesModel, count] = await this.service.getAll(query); + await canOrFail(this.authorizer, currentUser, 'read', resourcesModel); + return this.serializer.serializeMany(resourcesModel.map(serializeDocument), query, { + pagination: query.page + ? { + total: count, + size: query.page.size, + number: query.page.number, + } + : undefined, + endpointURL: 'documents' + }); } @POST('/') @UseMiddleware(createFileUploadMiddleware('./dist/uploads/')) - async create (@ValidatedFileBody(RESOURCE_NAME, validatedDocumentSchema) body: InferType, @CurrentUser() currentUser: UserModel) { - return jsonApiCreateFunction.call(this, currentUser, body); + async create (@ValidatedFileBody(RESOURCE_NAME, validatedDocumentSchema) body: InferType, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { + await canOrFail(this.authorizer, currentUser, 'create', body); + const document = await this.service.create(body); + return this.serializer.serializeOne(serializeDocument(document), {}, { + endpointURL: `documents/${document.id}` + }); } @PUT('/:id') @UseMiddleware(createFileUploadMiddleware('./dist/uploads/')) - async update (@Param('id') id: string, @ValidatedFileBody(RESOURCE_NAME, validatedDocumentSchema) body: InferType, @CurrentUser() currentUser: UserModel) { - return jsonApiUpdateFunction.call(this, currentUser, body, id); + async update (@Param('id') id: string, @ValidatedFileBody(RESOURCE_NAME, validatedDocumentSchema) body: InferType, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { + await canOrFail(this.authorizer, currentUser, 'update', body); + const user = await this.service.update(id, body); + return this.serializer.serializeOne(serializeDocument(user), query, { + endpointURL: `documents/${user.id}` + }); } @JsonApiDelete() async delete (@Param('id') id: string, @CurrentUser() currentUser: UserModel) { - return jsonApiDeleteFunction.call(this, id, currentUser); + const document = await this.service.getOneOrFail(id, {}); + await canOrFail(this.authorizer, currentUser, 'delete', document); + await this.service.delete(id); + return null; } } diff --git a/src/api/controllers/users.controller.ts b/src/api/controllers/users.controller.ts index 4bd56cb9..dcecedf5 100644 --- a/src/api/controllers/users.controller.ts +++ b/src/api/controllers/users.controller.ts @@ -1,17 +1,19 @@ import { inject } from '@triptyk/nfw-core'; -import { JsonApiCreate, JsonApiDelete, JsonApiFindAll, JsonApiGet, JsonApiQuery, JsonApiUpdate, ResourceSerializer } from '@triptyk/nfw-resources'; -import { UserResourceServiceImpl, UserResourceService } from '../resources/user/service.js'; -import { UserResourceAuthorizer, UserResourceAuthorizerImpl } from '../resources/user/authorizer.js'; -import { InferType } from 'yup'; +import { JsonApiCreate, JsonApiDelete, JsonApiFindAll, JsonApiGet, JsonApiUpdate } from '@triptyk/nfw-resources'; +import type { JsonApiQuery, ResourceSerializer } from '@triptyk/nfw-resources'; +import { UserResourceServiceImpl } from '../resources/user/service.js'; +import type { UserResourceService } from '../resources/user/service.js'; +import { UserResourceAuthorizerImpl } from '../resources/user/authorizer.js'; +import type { UserResourceAuthorizer } from '../resources/user/authorizer.js'; +import type { InferType } from 'yup'; import { createUserValidationSchema, updateUserValidationSchema } from '../validators/user.validator.js'; import { Controller, Param } from '@triptyk/nfw-http'; import { JsonApiQueryDecorator } from '../decorators/json-api-query.js'; import { CurrentUser } from '../decorators/current-user.decorator.js'; -import { UserModel } from '../../database/models/user.model.js'; +import { UserModel, serializeUser } from '../../database/models/user.model.js'; import { JsonApiBody } from '../decorators/json-api-body.js'; -import { jsonApiCreateFunction, jsonApiDeleteFunction, jsonApiFindAllFunction, jsonApiGetFunction, jsonApiUpdateFunction } from '../resources/base/controller.js'; import { UsersSerializer } from '../resources/user/serializer.js'; -import type { UserResource } from '../resources/user/schema.js'; +import { canOrFail } from '../utils/can-or-fail.js'; const RESOURCE_NAME = 'users'; @@ -22,31 +24,57 @@ export class UsersController { public constructor ( @inject(UserResourceServiceImpl) public service: UserResourceService, @inject(UserResourceAuthorizerImpl) public authorizer: UserResourceAuthorizer, - @inject(UsersSerializer) public serializer: ResourceSerializer + @inject(UsersSerializer) public serializer: ResourceSerializer ) {} @JsonApiGet() async get (@Param('id') id: string, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { - return jsonApiGetFunction.call(this, id, query, currentUser); + const resourceModel = await this.service.getOneOrFail(id, query); + await canOrFail(this.authorizer, currentUser, 'read', resourceModel); + return this.serializer.serializeOne(serializeUser(resourceModel), query, { + endpointURL: `users/${id}` + }); } @JsonApiFindAll() async findAll (@JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery, @CurrentUser() currentUser: UserModel) { - return jsonApiFindAllFunction.call(this, query, currentUser); + const [resourcesModel, count] = await this.service.getAll(query); + await canOrFail(this.authorizer, currentUser, 'read', resourcesModel); + return this.serializer.serializeMany(resourcesModel.map(serializeUser), query, { + pagination: query.page + ? { + total: count, + size: query.page.size, + number: query.page.number, + } + : undefined, + endpointURL: 'users' + }); } @JsonApiCreate() - async create (@JsonApiBody(RESOURCE_NAME, createUserValidationSchema) body: InferType, @CurrentUser() currentUser: UserModel) { - return jsonApiCreateFunction.call(this, currentUser, body); + async create (@JsonApiBody(RESOURCE_NAME, createUserValidationSchema) body: InferType, @CurrentUser() currentUser: UserModel, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery) { + await canOrFail(this.authorizer, currentUser, 'create', body); + const user = await this.service.create(body); + return this.serializer.serializeOne(serializeUser(user), query, { + endpointURL: `users/${user.id}` + }); } @JsonApiUpdate() - async update (@JsonApiBody(RESOURCE_NAME, updateUserValidationSchema) body: InferType, @Param('id') id: string, @CurrentUser() currentUser: UserModel) { - return jsonApiUpdateFunction.call(this, currentUser, body, id); + async update (@JsonApiBody(RESOURCE_NAME, updateUserValidationSchema) body: InferType, @Param('id') id: string, @CurrentUser() currentUser: UserModel, @JsonApiQueryDecorator(RESOURCE_NAME) query: JsonApiQuery) { + await canOrFail(this.authorizer, currentUser, 'update', body); + const user = await this.service.update(id, body); + return this.serializer.serializeOne(serializeUser(user), query, { + endpointURL: `users/${user.id}` + }); } @JsonApiDelete() async delete (@Param('id') id: string, @CurrentUser() currentUser: UserModel) { - return jsonApiDeleteFunction.call(this, id, currentUser); + const user = await this.service.getOneOrFail(id, {}); + await canOrFail(this.authorizer, currentUser, 'delete', user); + await this.service.delete(id); + return null; } } diff --git a/src/api/decorators/validated-params.ts b/src/api/decorators/validated-params.ts index b9c85f34..d5828daf 100644 --- a/src/api/decorators/validated-params.ts +++ b/src/api/decorators/validated-params.ts @@ -1,4 +1,3 @@ - import type { ControllerParamsContext } from '@triptyk/nfw-http'; import { createCustomDecorator } from '@triptyk/nfw-http'; import type { Schema } from 'yup'; diff --git a/src/api/error-handler/default.error-handler.ts b/src/api/error-handler/default.error-handler.ts index 6f75f256..417cf044 100644 --- a/src/api/error-handler/default.error-handler.ts +++ b/src/api/error-handler/default.error-handler.ts @@ -5,9 +5,10 @@ import type { Next } from 'koa'; import { ValidationError } from 'yup'; import { NotFoundError } from '../errors/web/not-found.js'; import { WebError } from '../errors/web/web-error.js'; -import type { Env } from '../services/configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from '../services/configuration.service.js'; -import { LoggerService, LoggerServiceImpl } from '../services/logger.service.js'; +import type { ConfigurationService, Env } from '../services/configuration.service.js'; +import { ConfigurationServiceImpl } from '../services/configuration.service.js'; +import { LoggerServiceImpl } from '../services/logger.service.js'; +import type { LoggerService } from '../services/logger.service.js'; @injectable() export class DefaultErrorHandler implements MiddlewareInterface { diff --git a/src/api/guards/authorize.guard.ts b/src/api/guards/authorize.guard.ts index efedfdfb..5788053e 100644 --- a/src/api/guards/authorize.guard.ts +++ b/src/api/guards/authorize.guard.ts @@ -1,4 +1,3 @@ - import { injectable } from '@triptyk/nfw-core'; import type { GuardInterface } from '@triptyk/nfw-http'; import { Args } from '@triptyk/nfw-http'; diff --git a/src/api/middlewares/log.middleware.ts b/src/api/middlewares/log.middleware.ts index 405ad270..3a6aa2e2 100644 --- a/src/api/middlewares/log.middleware.ts +++ b/src/api/middlewares/log.middleware.ts @@ -1,6 +1,7 @@ import type { RouterContext } from '@koa/router'; import { inject, injectable } from '@triptyk/nfw-core'; -import { LoggerService, LoggerServiceImpl } from '../services/logger.service.js'; +import { LoggerServiceImpl } from '../services/logger.service.js'; +import type { LoggerService } from '../services/logger.service.js'; import type { Next } from 'koa'; import type { UserModel } from '../../database/models/user.model.js'; import type { MiddlewareInterface } from '@triptyk/nfw-http'; diff --git a/src/api/middlewares/rate-limit.middleware.ts b/src/api/middlewares/rate-limit.middleware.ts index 8193b74d..2cdb30bc 100644 --- a/src/api/middlewares/rate-limit.middleware.ts +++ b/src/api/middlewares/rate-limit.middleware.ts @@ -4,8 +4,8 @@ import type { MiddlewareInterface } from '@triptyk/nfw-http'; import type { Middleware, Next } from 'koa'; import KoaRatelimit from 'koa-ratelimit'; import { TooManyRequestsError } from '../errors/web/too-many-requests.js'; -import type { Env } from '../services/configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from '../services/configuration.service.js'; +import type { ConfigurationService, Env } from '../services/configuration.service.js'; +import { ConfigurationServiceImpl } from '../services/configuration.service.js'; export function createRateLimitMiddleware (duration: number, max: number, message?: string) { @injectable() diff --git a/src/api/resources/base/controller.ts b/src/api/resources/base/controller.ts index f276119c..57c4c7d8 100644 --- a/src/api/resources/base/controller.ts +++ b/src/api/resources/base/controller.ts @@ -1,7 +1,5 @@ import type { EntityData, RequiredEntityData } from '@mikro-orm/core'; -import { wrap } from '@mikro-orm/core'; import type { JsonApiQuery, ResourceSerializer } from '@triptyk/nfw-resources'; -import { canOrFail } from '../../utils/can-or-fail.js'; import type { UserModel } from '../../../database/models/user.model.js'; import type { ResourceAuthorizer } from './authorizer.js'; import type { ResourceService } from './service.js'; @@ -9,36 +7,5 @@ import type { ResourceService } from './service.js'; export interface JsonApiContext, T> { service: ResourceService, authorizer: ResourceAuthorizer, - serializer: ResourceSerializer, -} - -export async function jsonApiGetFunction> (this: JsonApiContext, id: string, query: JsonApiQuery, currentUser: UserModel) { - const resourceModel = await this.service.getOneOrFail(id, query); - await canOrFail(this.authorizer, currentUser, 'read', resourceModel); - return this.serializer.serializeOne(wrap(resourceModel).toJSON() as never, query); -} - -export async function jsonApiFindAllFunction > (this: JsonApiContext, query: JsonApiQuery, currentUser: UserModel) { - const [resourcesModel, count] = await this.service.getAll(query); - await canOrFail(this.authorizer, currentUser, 'read', resourcesModel); - return this.serializer.serializeMany(resourcesModel.map((d) => wrap(d).toJSON()) as never, query, query.page ? { ...query.page, total: count } : undefined); -} - -export async function jsonApiCreateFunction> (this: JsonApiContext, currentUser: UserModel, body: RequiredEntityData) { - await canOrFail(this.authorizer, currentUser, 'create', body); - const user = await this.service.create(body); - return this.serializer.serializeOne(user as never, {}); -} - -export async function jsonApiUpdateFunction> (this: JsonApiContext, currentUser: UserModel, body: EntityData, id: string) { - await canOrFail(this.authorizer, currentUser, 'update', body); - const user = await this.service.update(id, body); - return this.serializer.serializeOne(user as never, {}); -} - -export async function jsonApiDeleteFunction> (this: JsonApiContext, id: string, currentUser: UserModel) { - const user = await this.service.getOneOrFail(id, {}); - await canOrFail(this.authorizer, currentUser, 'delete', user); - await this.service.delete(id); - return null; + serializer: ResourceSerializer, } diff --git a/src/api/resources/documents/deserializer.ts b/src/api/resources/documents/deserializer.ts index a0703a9b..fe52b166 100644 --- a/src/api/resources/documents/deserializer.ts +++ b/src/api/resources/documents/deserializer.ts @@ -1,5 +1,6 @@ import { inject, singleton } from '@triptyk/nfw-core'; -import { ResourcesRegistry, JsonApiResourceDeserializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import { JsonApiResourceDeserializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import type { ResourcesRegistry } from '@triptyk/nfw-resources'; import type { DocumentResource } from './schema.js'; @singleton() diff --git a/src/api/resources/documents/schema.ts b/src/api/resources/documents/schema.ts index c96c617a..40c6da58 100644 --- a/src/api/resources/documents/schema.ts +++ b/src/api/resources/documents/schema.ts @@ -1,6 +1,6 @@ import type { ResourceSchema } from '@triptyk/nfw-resources'; -import type { MimeTypes } from '../../enums/mime-type.enum'; import type { UserResource } from '../user/schema.js'; +import type { MimeTypes } from 'app/api/enums/mime-type.enum.js'; export type DocumentResource = { filename: string, @@ -9,10 +9,11 @@ export type DocumentResource = { size: number, mimetype: MimeTypes, users?: UserResource[], + resourceType: 'documents', } export const documentSchema = { - type: 'documents', + resourceType: 'documents', attributes: { filename: { deserialize: true, diff --git a/src/api/resources/documents/serializer.ts b/src/api/resources/documents/serializer.ts index bb9d6d2e..576ccc2d 100644 --- a/src/api/resources/documents/serializer.ts +++ b/src/api/resources/documents/serializer.ts @@ -1,12 +1,12 @@ import { inject, singleton } from '@triptyk/nfw-core'; -import { ResourcesRegistry, JsonApiResourceSerializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; -import type { DocumentResource } from './schema.js'; +import { JsonApiResourceSerializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import type { ResourcesRegistry } from '@triptyk/nfw-resources'; @singleton() -export class DocumentSerializer extends JsonApiResourceSerializer { +export class DocumentSerializer extends JsonApiResourceSerializer { public constructor ( @inject(ResourcesRegistryImpl) registry: ResourcesRegistry, ) { - super('documents', registry); + super(registry); } } diff --git a/src/api/resources/user/deserializer.ts b/src/api/resources/user/deserializer.ts index 463f46c7..95556ffa 100644 --- a/src/api/resources/user/deserializer.ts +++ b/src/api/resources/user/deserializer.ts @@ -1,5 +1,6 @@ import { inject, singleton } from '@triptyk/nfw-core'; -import { ResourcesRegistry, JsonApiResourceDeserializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import { JsonApiResourceDeserializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import type { ResourcesRegistry } from '@triptyk/nfw-resources'; import type { UserResource } from './schema.js'; @singleton() diff --git a/src/api/resources/user/schema.ts b/src/api/resources/user/schema.ts index 5abad3cb..54fb261e 100644 --- a/src/api/resources/user/schema.ts +++ b/src/api/resources/user/schema.ts @@ -5,10 +5,11 @@ export type UserResource = { lastName: string, email: string, password?: string, + resourceType: 'users', } export const userSchema = { - type: 'users', + resourceType: 'users', attributes: { firstName: { deserialize: true, diff --git a/src/api/resources/user/serializer.ts b/src/api/resources/user/serializer.ts index cc75c8a1..f7096386 100644 --- a/src/api/resources/user/serializer.ts +++ b/src/api/resources/user/serializer.ts @@ -1,12 +1,12 @@ import { inject, singleton } from '@triptyk/nfw-core'; -import { ResourcesRegistry, JsonApiResourceSerializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; -import type { UserResource } from './schema.js'; +import { JsonApiResourceSerializer, ResourcesRegistryImpl } from '@triptyk/nfw-resources'; +import type { ResourcesRegistry } from '@triptyk/nfw-resources'; @singleton() -export class UsersSerializer extends JsonApiResourceSerializer { +export class UsersSerializer extends JsonApiResourceSerializer { public constructor ( - @inject(ResourcesRegistryImpl) registry: ResourcesRegistry + @inject(ResourcesRegistryImpl) registry: ResourcesRegistry ) { - super('users', registry); + super(registry); } } diff --git a/src/api/services/auth.service.ts b/src/api/services/auth.service.ts index e90da27f..51c0417b 100644 --- a/src/api/services/auth.service.ts +++ b/src/api/services/auth.service.ts @@ -6,8 +6,8 @@ import { injectRepository } from '@triptyk/nfw-mikro-orm'; import { RefreshTokenModel } from '../../database/models/refresh-token.model.js'; import type { UserModel } from '../../database/models/user.model.js'; import { RefreshTokenRepository } from '../../database/repositories/refresh-token.repository.js'; -import type { Env } from './configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from './configuration.service.js'; +import type { ConfigurationService, Env } from './configuration.service.js'; +import { ConfigurationServiceImpl } from './configuration.service.js'; @singleton() @injectable() diff --git a/src/api/services/logger.service.ts b/src/api/services/logger.service.ts index a80c5263..486a8646 100644 --- a/src/api/services/logger.service.ts +++ b/src/api/services/logger.service.ts @@ -1,7 +1,7 @@ import { inject, injectable, singleton } from '@triptyk/nfw-core'; import Tracer from 'tracer'; -import type { Env } from './configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from './configuration.service.js'; +import type { Env, ConfigurationService } from './configuration.service.js'; +import { ConfigurationServiceImpl } from './configuration.service.js'; export interface LoggerService { info(...args: unknown[]): void, diff --git a/src/api/services/user.service.ts b/src/api/services/user.service.ts index d19c3a0b..02648f9e 100644 --- a/src/api/services/user.service.ts +++ b/src/api/services/user.service.ts @@ -3,9 +3,9 @@ import { injectRepository } from '@triptyk/nfw-mikro-orm'; import { UserModel } from '../../database/models/user.model.js'; import * as JWT from 'jsonwebtoken'; import { InvalidBearerTokenError } from '../errors/web/invalid-bearer-token.js'; -import { EntityRepository } from '@mikro-orm/mysql'; -import type { Env } from './configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from './configuration.service.js'; +import { EntityRepository } from '@mikro-orm/postgresql'; +import { ConfigurationServiceImpl } from './configuration.service.js'; +import type { Env, ConfigurationService } from './configuration.service.js'; @singleton() export class UserService { diff --git a/src/api/utils/offset-from-page.ts b/src/api/utils/offset-from-page.ts index 35059872..ca09d520 100644 --- a/src/api/utils/offset-from-page.ts +++ b/src/api/utils/offset-from-page.ts @@ -1,4 +1,3 @@ - export function offsetFromPageAndSize (page: number, size: number) { return (page - 1) * size; } diff --git a/src/application.ts b/src/application.ts index 61bd14c0..57e456b7 100644 --- a/src/application.ts +++ b/src/application.ts @@ -11,7 +11,8 @@ import { koaBody } from 'koa-body'; import { requestContext } from '@triptyk/nfw-mikro-orm'; import { createApplication, resolveMiddlewareInstance } from '@triptyk/nfw-http'; import type { Server } from 'http'; -import { LoggerService, LoggerServiceImpl } from './api/services/logger.service.js'; +import { LoggerServiceImpl } from './api/services/logger.service.js'; +import type { LoggerService } from './api/services/logger.service.js'; import { DatabaseConnectionImpl } from './database/connection.js'; import { LogMiddleware } from './api/middlewares/log.middleware.js'; import { DefaultErrorHandler } from './api/error-handler/default.error-handler.js'; diff --git a/src/database/connection.ts b/src/database/connection.ts index d4946709..83a36b5f 100644 --- a/src/database/connection.ts +++ b/src/database/connection.ts @@ -4,8 +4,8 @@ import { inject, singleton } from '@triptyk/nfw-core'; import { init } from '@triptyk/nfw-mikro-orm'; import type { Promisable } from 'type-fest'; import { NotFoundError } from '../api/errors/web/not-found.js'; -import type { Env } from '../api/services/configuration.service.js'; -import { ConfigurationServiceImpl, ConfigurationService } from '../api/services/configuration.service.js'; +import type { ConfigurationService, Env } from '../api/services/configuration.service.js'; +import { ConfigurationServiceImpl } from '../api/services/configuration.service.js'; import { getConfiguration } from './configuration.js'; export interface DatabaseConnection { diff --git a/src/database/migrations/Migration20230413134822.ts b/src/database/migrations/Migration20230413134822.ts deleted file mode 100644 index b61aa417..00000000 --- a/src/database/migrations/Migration20230413134822.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Migration } from '@mikro-orm/migrations'; - -export class Migration20230413134822 extends Migration { - async up (): Promise { - this.addSql('create table `documents` (`id` varchar(255) not null, `filename` varchar(255) not null, `original_name` varchar(255) not null, `path` varchar(255) not null, `mimetype` enum(\'applcation/vnd.ms-excel\', \'application/msword\', \'application/zip\', \'application/pdf\', \'image/bmp\', \'image/gif\', \'image/jpeg\', \'image/png\', \'text/csv\', \'text/plain\') not null, `size` int not null, primary key (`id`)) default character set utf8mb4 engine = InnoDB;'); - - this.addSql('create table `users` (`id` varchar(255) not null, `first_name` varchar(255) not null, `last_name` varchar(255) not null, `email` varchar(255) not null, `password` varchar(255) null, `role` enum(\'admin\', \'user\') not null, primary key (`id`)) default character set utf8mb4 engine = InnoDB;'); - - this.addSql('create table `refresh-token` (`id` varchar(255) not null, `token` varchar(255) not null, `expires` datetime not null, `user_id` varchar(255) not null, primary key (`id`)) default character set utf8mb4 engine = InnoDB;'); - this.addSql('alter table `refresh-token` add unique `refresh-token_user_id_unique`(`user_id`);'); - - this.addSql('create table `users_documents` (`user_model_id` varchar(255) not null, `document_model_id` varchar(255) not null, primary key (`user_model_id`, `document_model_id`)) default character set utf8mb4 engine = InnoDB;'); - this.addSql('alter table `users_documents` add index `users_documents_user_model_id_index`(`user_model_id`);'); - this.addSql('alter table `users_documents` add index `users_documents_document_model_id_index`(`document_model_id`);'); - - this.addSql('alter table `refresh-token` add constraint `refresh-token_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on update cascade;'); - - this.addSql('alter table `users_documents` add constraint `users_documents_user_model_id_foreign` foreign key (`user_model_id`) references `users` (`id`) on update cascade on delete cascade;'); - this.addSql('alter table `users_documents` add constraint `users_documents_document_model_id_foreign` foreign key (`document_model_id`) references `documents` (`id`) on update cascade on delete cascade;'); - } - - async down (): Promise { - this.addSql('alter table `users_documents` drop foreign key `users_documents_document_model_id_foreign`;'); - - this.addSql('alter table `refresh-token` drop foreign key `refresh-token_user_id_foreign`;'); - - this.addSql('alter table `users_documents` drop foreign key `users_documents_user_model_id_foreign`;'); - - this.addSql('drop table if exists `documents`;'); - - this.addSql('drop table if exists `users`;'); - - this.addSql('drop table if exists `refresh-token`;'); - - this.addSql('drop table if exists `users_documents`;'); - } -} diff --git a/src/database/migrations/Migration20231109141206.ts b/src/database/migrations/Migration20231109141206.ts new file mode 100644 index 00000000..3da39ebd --- /dev/null +++ b/src/database/migrations/Migration20231109141206.ts @@ -0,0 +1,19 @@ +import { Migration } from '@mikro-orm/migrations'; + +export class Migration20231109141206 extends Migration { + async up (): Promise { + this.addSql('create table "documents" ("id" varchar(255) not null, "filename" varchar(255) not null, "original_name" varchar(255) not null, "path" varchar(255) not null, "mimetype" text check ("mimetype" in (\'applcation/vnd.ms-excel\', \'application/msword\', \'application/zip\', \'application/pdf\', \'image/bmp\', \'image/gif\', \'image/jpeg\', \'image/png\', \'text/csv\', \'text/plain\')) not null, "size" int not null, constraint "documents_pkey" primary key ("id"));'); + + this.addSql('create table "users" ("id" varchar(255) not null, "first_name" varchar(255) not null, "last_name" varchar(255) not null, "email" varchar(255) not null, "password" varchar(255) null, "role" text check ("role" in (\'admin\', \'user\')) not null default \'user\', constraint "users_pkey" primary key ("id"));'); + + this.addSql('create table "refresh-token" ("id" varchar(255) not null, "token" varchar(255) not null, "expires" timestamptz(0) not null, "user_id" varchar(255) not null, constraint "refresh-token_pkey" primary key ("id"));'); + this.addSql('alter table "refresh-token" add constraint "refresh-token_user_id_unique" unique ("user_id");'); + + this.addSql('create table "users_documents" ("user_model_id" varchar(255) not null, "document_model_id" varchar(255) not null, constraint "users_documents_pkey" primary key ("user_model_id", "document_model_id"));'); + + this.addSql('alter table "refresh-token" add constraint "refresh-token_user_id_foreign" foreign key ("user_id") references "users" ("id") on update cascade;'); + + this.addSql('alter table "users_documents" add constraint "users_documents_user_model_id_foreign" foreign key ("user_model_id") references "users" ("id") on update cascade on delete cascade;'); + this.addSql('alter table "users_documents" add constraint "users_documents_document_model_id_foreign" foreign key ("document_model_id") references "documents" ("id") on update cascade on delete cascade;'); + } +} diff --git a/src/database/models/document.model.ts b/src/database/models/document.model.ts index 47b8aa7d..365c650a 100644 --- a/src/database/models/document.model.ts +++ b/src/database/models/document.model.ts @@ -5,7 +5,8 @@ import { BeforeDelete, ManyToMany, Collection, - types + types, + wrap } from '@mikro-orm/core'; import { MimeTypes } from '../../api/enums/mime-type.enum.js'; import * as Fs from 'fs/promises'; @@ -53,3 +54,10 @@ export class DocumentModel extends BaseModel { return Fs.unlink(this.path); } } + +export function serializeDocument (document: DocumentModel) { + return { + ...wrap(document).toJSON(), + resourceType: 'documents' + } +} diff --git a/src/database/models/refresh-token.model.ts b/src/database/models/refresh-token.model.ts index 023267bf..8a11a602 100644 --- a/src/database/models/refresh-token.model.ts +++ b/src/database/models/refresh-token.model.ts @@ -1,4 +1,5 @@ -import { Ref, types, Entity, Property, OneToOne } from '@mikro-orm/core'; +import { types, Entity, Property, OneToOne } from '@mikro-orm/core'; +import type { Ref } from '@mikro-orm/core'; import { RefreshTokenRepository } from '../repositories/refresh-token.repository.js'; import { BaseModel } from './base.model.js'; import type { UserModel } from './user.model.js'; diff --git a/src/database/models/user.model.ts b/src/database/models/user.model.ts index a2026094..4add0165 100644 --- a/src/database/models/user.model.ts +++ b/src/database/models/user.model.ts @@ -1,6 +1,7 @@ +import type { + Loaded, Ref +} from '@mikro-orm/core'; import { - Ref - , Entity, Property, OneToOne, @@ -8,7 +9,8 @@ import { Collection, ManyToMany, types, - Filter + Filter, + wrap } from '@mikro-orm/core'; import { Roles } from '../../api/enums/roles.enum.js'; import type { RefreshTokenModel } from './refresh-token.model.js'; @@ -57,17 +59,24 @@ export class UserModel extends BaseModel { }) declare refreshToken?: Ref; - @ManyToMany({ - entity: 'DocumentModel', - mappedBy: 'users', - owner: true - }) - documents = new Collection(this); + @ManyToMany({ + entity: 'DocumentModel', + mappedBy: 'users', + owner: true + }) + documents = new Collection(this); - public async passwordMatches (password: string): Promise { - if (!this.password) { - return false; - } - return bcrypt.compare(password, this.password); + public async passwordMatches (password: string): Promise { + if (!this.password) { + return false; } + return bcrypt.compare(password, this.password); + } +} + +export function serializeUser (user: Loaded) { + return { + ...wrap(user).toJSON(), + resourceType: 'users' + } } diff --git a/tests/mocks/serializer.ts b/tests/mocks/serializer.ts index 02df24a3..4b755aa8 100644 --- a/tests/mocks/serializer.ts +++ b/tests/mocks/serializer.ts @@ -5,4 +5,4 @@ import { vi } from 'vitest'; export const mockedSerializer = { serializeMany: vi.fn() as Mock, serializeOne: vi.fn() -} satisfies ResourceSerializer; +} satisfies ResourceSerializer; diff --git a/tests/src/acceptance/controllers/__snapshots__/users.test.ts.snap b/tests/src/acceptance/controllers/__snapshots__/users.test.ts.snap deleted file mode 100644 index aacdce96..00000000 --- a/tests/src/acceptance/controllers/__snapshots__/users.test.ts.snap +++ /dev/null @@ -1,34 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`GET / returns list of users 1`] = ` -{ - "data": [ - { - "attributes": { - "firstName": "amaury", - }, - "id": "12345678910abcdef", - "links": { - "self": "/api/v1/users/12345678910abcdef", - }, - "type": "users", - }, - { - "attributes": { - "firstName": "sebastien", - }, - "id": "9876543210", - "links": { - "self": "/api/v1/users/9876543210", - }, - "type": "users", - }, - ], - "jsonapi": { - "version": "1.0", - }, - "links": { - "self": "/api/v1/users", - }, -} -`; diff --git a/tests/src/integration/controllers/documents/__snapshots__/documents.test.ts.snap b/tests/src/integration/controllers/documents/__snapshots__/documents.test.ts.snap index 054ca532..4df6390d 100644 --- a/tests/src/integration/controllers/documents/__snapshots__/documents.test.ts.snap +++ b/tests/src/integration/controllers/documents/__snapshots__/documents.test.ts.snap @@ -5,15 +5,15 @@ exports[`GetAll 1`] = ` "data": [ { "attributes": { - "filename": "delete-filename.bmp", + "filename": "filename.bmp", "mimetype": "image/bmp", - "originalName": "delete-original-name.bmp", - "path": "./delete-filename.bmp", - "size": 1337, + "originalName": "originalName.bmp", + "path": "filename.bmp", + "size": 8001, }, - "id": "delete-document", + "id": "document", "links": { - "self": "/api/v1/documents/delete-document", + "self": "/api/v1/documents/document", }, "meta": undefined, "relationships": undefined, @@ -21,15 +21,15 @@ exports[`GetAll 1`] = ` }, { "attributes": { - "filename": "filename.bmp", + "filename": "delete-filename.bmp", "mimetype": "image/bmp", - "originalName": "originalName.bmp", - "path": "filename.bmp", - "size": 8001, + "originalName": "delete-original-name.bmp", + "path": "./delete-filename.bmp", + "size": 1337, }, - "id": "document", + "id": "delete-document", "links": { - "self": "/api/v1/documents/document", + "self": "/api/v1/documents/delete-document", }, "meta": undefined, "relationships": undefined, diff --git a/tests/src/integration/controllers/documents/documents.test.ts b/tests/src/integration/controllers/documents/documents.test.ts index 1a6c6ffc..7c39abd7 100644 --- a/tests/src/integration/controllers/documents/documents.test.ts +++ b/tests/src/integration/controllers/documents/documents.test.ts @@ -45,7 +45,7 @@ testCtx('CreateOne', () => container.resolve(MikroORM), async () => { users: [] }; - const constrollerResponse = await documentsController.create(document, createAdminUser()); + const constrollerResponse = await documentsController.create(document, {}, createAdminUser()); expect(constrollerResponse).toMatchObject({ data: { @@ -69,7 +69,7 @@ testCtx('Update', () => container.resolve(MikroORM), async () => { users: [], filename: 'update-filename', }; - const user = await documentsController.update('document', updatedDummyDocument, createAdminUser()); + const user = await documentsController.update('document', updatedDummyDocument, {}, createAdminUser()); expect(user).toMatchSnapshot(); }); diff --git a/tests/src/integration/controllers/users/__snapshots__/users.test.ts.snap b/tests/src/integration/controllers/users/__snapshots__/users.test.ts.snap index 79a01011..39c4fd2d 100644 --- a/tests/src/integration/controllers/users/__snapshots__/users.test.ts.snap +++ b/tests/src/integration/controllers/users/__snapshots__/users.test.ts.snap @@ -9,9 +9,9 @@ exports[`GetAll 1`] = ` "firstName": "amaury", "lastName": "localhost", }, - "id": "admin-user", + "id": "user-user", "links": { - "self": "/api/v1/users/admin-user", + "self": "/api/v1/users/user-user", }, "meta": undefined, "relationships": undefined, @@ -23,9 +23,9 @@ exports[`GetAll 1`] = ` "firstName": "amaury", "lastName": "localhost", }, - "id": "delete-user", + "id": "admin-user", "links": { - "self": "/api/v1/users/delete-user", + "self": "/api/v1/users/admin-user", }, "meta": undefined, "relationships": undefined, @@ -37,9 +37,9 @@ exports[`GetAll 1`] = ` "firstName": "amaury", "lastName": "localhost", }, - "id": "user-user", + "id": "delete-user", "links": { - "self": "/api/v1/users/user-user", + "self": "/api/v1/users/delete-user", }, "meta": undefined, "relationships": undefined, diff --git a/tests/src/integration/controllers/users/users.test.ts b/tests/src/integration/controllers/users/users.test.ts index a60d5dc2..85a39803 100644 --- a/tests/src/integration/controllers/users/users.test.ts +++ b/tests/src/integration/controllers/users/users.test.ts @@ -39,7 +39,7 @@ testCtx('CreateOne', () => container.resolve(MikroORM), async () => { lastName: 'deflorenne', role: Roles.USER, email: 'amaury@localhost.com' - }, createAdminUser()); + }, createAdminUser(), {}); expect(user).toMatchObject({ jsonapi: { version: '1.0' }, @@ -57,7 +57,7 @@ testCtx('CreateOne', () => container.resolve(MikroORM), async () => { testCtx('Update', () => container.resolve(MikroORM), async () => { const user = await usersController.update({ role: Roles.USER - }, 'user-user', createAdminUser()); + }, 'user-user', createAdminUser(), {}); expect(user).toMatchSnapshot(); }); diff --git a/tests/src/unit/controllers/documents.test.ts b/tests/src/unit/controllers/documents.test.ts index 68dbffa9..d6ac09c8 100644 --- a/tests/src/unit/controllers/documents.test.ts +++ b/tests/src/unit/controllers/documents.test.ts @@ -101,7 +101,7 @@ describe('Create', () => { authorizer.can.mockReturnValue(true); service.create.mockReturnValue(document as never); serializer.serializeOne.mockReturnValue(serializer); - await controller.create(createBody as never, currentUser); + await controller.create(createBody as never, {}, currentUser); expect(service.create).toBeCalledWith(createBody); expect(serializer.serializeOne).toBeCalledWith(document, {}); }); @@ -109,7 +109,7 @@ describe('Create', () => { test('Throws when cannot create an element', async () => { authorizer.can.mockReturnValue(false); service.create.mockReturnValue(document as never); - await expect(controller.create(createBody as never, currentUser)).rejects.toThrowError(ForbiddenError); + await expect(controller.create(createBody as never, {}, currentUser)).rejects.toThrowError(ForbiddenError); expect(authorizer.can).toBeCalledWith(currentUser, 'create', createBody); }); }); @@ -123,7 +123,7 @@ describe('Update', () => { authorizer.can.mockReturnValue(true); service.update.mockReturnValue(document as never); serializer.serializeOne.mockReturnValue(serializer); - await controller.update(id, updateBody, currentUser); + await controller.update(id, updateBody, {}, currentUser); expect(serializer.serializeOne).toBeCalledWith(document, {}); expect(service.update).toBeCalledWith(id, updateBody); }); @@ -131,7 +131,7 @@ describe('Update', () => { test('Throws when cannot update an element', async () => { authorizer.can.mockReturnValue(false); service.update.mockReturnValue(document as never); - await expect(controller.update(id, updateBody, currentUser)).rejects.toThrowError(ForbiddenError); + await expect(controller.update(id, updateBody, {}, currentUser)).rejects.toThrowError(ForbiddenError); expect(authorizer.can).toBeCalledWith(currentUser, 'update', updateBody); }); }); diff --git a/tests/src/unit/controllers/users.test.ts b/tests/src/unit/controllers/users.test.ts index 9d73877f..c5cf3ccb 100644 --- a/tests/src/unit/controllers/users.test.ts +++ b/tests/src/unit/controllers/users.test.ts @@ -97,7 +97,9 @@ describe('Create', () => { authorizer.can.mockReturnValue(true); usersService.create.mockReturnValue(user as never); serializer.serializeOne.mockReturnValue(serializer); - await controller.create(createBody as never, currentUser); + await controller.create(createBody as never, currentUser, { + fields: {} + }); expect(usersService.create).toBeCalledWith(createBody); expect(serializer.serializeOne).toBeCalledWith(user, {}); }); @@ -105,7 +107,7 @@ describe('Create', () => { test('Throws when cannot create an element', async () => { authorizer.can.mockReturnValue(false); usersService.create.mockReturnValue(user as never); - await expect(controller.create(createBody as never, currentUser)).rejects.toThrowError(ForbiddenError); + await expect(controller.create(createBody as never, currentUser, {})).rejects.toThrowError(ForbiddenError); expect(authorizer.can).toBeCalledWith(currentUser, 'create', createBody); }); }); @@ -119,7 +121,7 @@ describe('Update', () => { authorizer.can.mockReturnValue(true); usersService.update.mockReturnValue(user as never); serializer.serializeOne.mockReturnValue(serializer); - await controller.update(updateBody, id, currentUser); + await controller.update(updateBody, id, currentUser, {}); expect(serializer.serializeOne).toBeCalledWith(user, {}); expect(usersService.update).toBeCalledWith(id, updateBody); }); @@ -127,7 +129,7 @@ describe('Update', () => { test('Throws when cannot update an element', async () => { authorizer.can.mockReturnValue(false); usersService.update.mockReturnValue(user as never); - await expect(controller.update(updateBody, id, currentUser)).rejects.toThrowError(ForbiddenError); + await expect(controller.update(updateBody, id, currentUser, {})).rejects.toThrowError(ForbiddenError); expect(authorizer.can).toBeCalledWith(currentUser, 'update', updateBody); }); }); diff --git a/tests/src/unit/resources/base/authorizer.test.ts b/tests/src/unit/resources/base/authorizer.test.ts deleted file mode 100644 index 8fdc165d..00000000 --- a/tests/src/unit/resources/base/authorizer.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { mockedAuthorizer } from 'tests/mocks/authorizer.js'; -import { beforeEach, expect, test, vi } from 'vitest'; -import { ForbiddenError } from '../../../../../src/api/errors/web/forbidden.js'; -import { canOrFail } from '../../../../../src/api/utils/can-or-fail.js'; - -const actor = Symbol('actor'); -const action = Symbol('action'); -const target = Symbol('target'); - -beforeEach(() => { - vi.restoreAllMocks(); -}); - -test('Can or fail calls authorizer.can with correct arguments', async () => { - mockedAuthorizer.can.mockReturnValue(true); - await canOrFail(mockedAuthorizer, actor as never, action as never, target as never); - expect(mockedAuthorizer.can).toBeCalledWith(actor, action, target) -}); - -test('Can or fail calls authorizer.can for each target', async () => { - const target2 = Symbol('target2'); - mockedAuthorizer.can.mockReturnValue(true); - await canOrFail(mockedAuthorizer, actor as never, action as never, [target, target2] as never); - expect(mockedAuthorizer.can).toBeCalledWith(actor, action, target); - expect(mockedAuthorizer.can).toBeCalledTimes(2); -}); - -test('Can or fail rejects ForbiddenError when authorizer returns false', async () => { - mockedAuthorizer.can.mockReturnValue(false); - await expect(() => canOrFail(mockedAuthorizer, actor as never, action as never, target as never)).rejects.toThrowError(ForbiddenError); - expect(mockedAuthorizer.can).toBeCalledWith(actor, action, target) -}); diff --git a/tests/src/unit/resources/base/controller.test.ts b/tests/src/unit/resources/base/controller.test.ts deleted file mode 100644 index 6529e38c..00000000 --- a/tests/src/unit/resources/base/controller.test.ts +++ /dev/null @@ -1,146 +0,0 @@ -import 'reflect-metadata'; -import { mockedORMImport } from 'tests/mocks/orm-core.js'; -import { ForbiddenError } from 'app/api/errors/web/forbidden.js'; -import type { JsonApiContext } from 'app/api/resources/base/controller.js'; -import { jsonApiGetFunction, jsonApiDeleteFunction, jsonApiUpdateFunction, jsonApiCreateFunction, jsonApiFindAllFunction } from 'app/api/resources/base/controller.js'; -import { mockedAuthorizer } from 'tests/mocks/authorizer.js'; -import { mockedResourceService } from 'tests/mocks/resource-service.js'; -import { mockedSerializer } from 'tests/mocks/serializer.js'; -import { afterEach, describe, expect, test, vi } from 'vitest'; -import { NotFoundError } from 'app/api/errors/web/not-found.js'; - -const thisContext: JsonApiContext<{}, {}> = { - service: mockedResourceService, - authorizer: mockedAuthorizer, - serializer: mockedSerializer -} - -const currentUser = {} as never; -const existingEntity = {} as never; -const jsonApiQuery = {} as never; - -vi.mock('@mikro-orm/core', async () => await mockedORMImport()); - -afterEach(() => { - vi.resetAllMocks(); -}); - -describe('Get', () => { - const id = '123'; - - test('Get unexisting user throws error', async () => { - mockedResourceService.getOne.mockReturnValue(null); - - await expect(() => jsonApiGetFunction.bind(thisContext)(id, jsonApiQuery, currentUser)).rejects.toThrowError(); - }); - - test('happy path', async () => { - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.getOneOrFail.mockReturnValue(existingEntity); - - mockedSerializer.serializeOne.mockReturnValue({}); - - await jsonApiGetFunction.bind(thisContext)(id, jsonApiQuery, currentUser); - - expect(mockedResourceService.getOneOrFail).toBeCalledWith(id, jsonApiQuery); - expect(mockedSerializer.serializeOne).toBeCalledWith(existingEntity, {}); - }); - - test('It throws a forbiddenError when not allowed to read user', async () => { - mockedResourceService.getOneOrFail.mockReturnValue(existingEntity); - mockedAuthorizer.can.mockReturnValue(false); - - await expect(jsonApiGetFunction.bind(thisContext)(id, jsonApiQuery, currentUser)).rejects.toThrowError(ForbiddenError); - expect(mockedAuthorizer.can).toBeCalledWith(currentUser, 'read', existingEntity); - }); -}); - -describe('FindAll', () => { - test('happy path', async () => { - const documents = [existingEntity]; - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.getAll.mockReturnValue([documents, 1]); - mockedSerializer.serializeMany.mockReturnValue({}); - - await jsonApiFindAllFunction.bind(thisContext)({}, currentUser) - expect(mockedSerializer.serializeMany).toBeCalledWith(documents, {}, undefined); - expect(mockedResourceService.getAll).toBeCalledWith(jsonApiQuery); - }); - - test('Throws when cannot read an element', async () => { - mockedAuthorizer.can.mockReturnValue(false); - mockedResourceService.getAll.mockReturnValue([[existingEntity], 1]); - await expect(jsonApiFindAllFunction.bind(thisContext)({}, currentUser)).rejects.toThrowError(ForbiddenError); - expect(mockedAuthorizer.can).toBeCalledWith(currentUser, 'read', existingEntity); - }); -}); - -describe('Create', () => { - const createBody = {}; - - test('happy path', async () => { - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.create.mockReturnValue(existingEntity); - mockedSerializer.serializeOne.mockReturnValue({}); - await jsonApiCreateFunction.bind(thisContext)(currentUser, createBody); - expect(mockedResourceService.create).toBeCalledWith(createBody); - expect(mockedSerializer.serializeOne).toBeCalledWith(existingEntity, {}); - }); - - test('Throws when cannot create an element', async () => { - mockedAuthorizer.can.mockReturnValue(false); - mockedResourceService.create.mockReturnValue(existingEntity); - await expect(jsonApiCreateFunction.bind(thisContext)(currentUser, createBody)).rejects.toThrowError(ForbiddenError); - expect(mockedAuthorizer.can).toBeCalledWith(currentUser, 'create', createBody); - }); -}); - -describe('Update', () => { - const updateBody = {} as never - const id = '1'; - - test('happy path', async () => { - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.update.mockReturnValue(existingEntity); - mockedSerializer.serializeOne.mockReturnValue({}); - await jsonApiUpdateFunction.bind(thisContext)(currentUser, updateBody, id); - expect(mockedSerializer.serializeOne).toBeCalledWith(existingEntity, {}); - expect(mockedResourceService.update).toBeCalledWith(id, updateBody); - }); - - test('Throws when cannot update an element', async () => { - mockedAuthorizer.can.mockReturnValue(false); - mockedResourceService.update.mockReturnValue(existingEntity); - await expect(jsonApiUpdateFunction.bind(thisContext)(currentUser, updateBody, id)).rejects.toThrowError(ForbiddenError); - expect(mockedAuthorizer.can).toBeCalledWith(currentUser, 'update', updateBody); - }); -}); - -describe('Delete', () => { - const id = '1'; - - test('happy path', async () => { - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.getOne.mockReturnValue(existingEntity); - mockedResourceService.delete.mockReturnValue(); - mockedSerializer.serializeOne.mockReturnValue({}); - await jsonApiDeleteFunction.bind(thisContext)(id, currentUser); - expect(mockedResourceService.delete).toBeCalledWith(id); - }); - - test('Throws when user does not exists', async () => { - mockedAuthorizer.can.mockReturnValue(true); - mockedResourceService.getOneOrFail.mockImplementation( - () => { - throw new NotFoundError('Not found') - }, - ); - await expect(() => jsonApiDeleteFunction.bind(thisContext)(id, currentUser)).rejects.toThrowError(new NotFoundError('Not found')); - }); - - test('Throws when cannot delete an element', async () => { - mockedAuthorizer.can.mockReturnValue(false); - mockedResourceService.getOne.mockReturnValue(existingEntity); - await expect(jsonApiDeleteFunction.bind(thisContext)(id, currentUser)).rejects.toThrowError(ForbiddenError); - }); -}); diff --git a/tests/utils/create-file-with-relation.ts b/tests/utils/create-file-with-relation.ts index c2e60844..9ae4969a 100644 --- a/tests/utils/create-file-with-relation.ts +++ b/tests/utils/create-file-with-relation.ts @@ -1,9 +1,9 @@ -import File from 'fetch-blob/file.js'; -import { FormData } from 'formdata-polyfill/esm.min'; +import { File } from 'fetch-blob/file.js'; +import { FormData } from 'formdata-polyfill/esm.min.js'; export const validFile = new File(['abc'], 'hello-world.txt', { type: 'text/plain' -}) +}); export function createFile () { const formData = new FormData(); diff --git a/tsconfig.json b/tsconfig.json index 8e404348..b7932407 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,17 @@ { "compilerOptions": { - "lib": ["ES2022"], + "lib": ["ESNEXT"], "baseUrl": ".", "strict": true, - "target": "ES2022", - "moduleResolution": "node", - "module": "ES2022", + "target": "ESNext", + "moduleResolution": "NodeNext", + "module": "NodeNext", "allowSyntheticDefaultImports": true, "emitDecoratorMetadata": true, "esModuleInterop": true, "skipLibCheck": true, "experimentalDecorators": true, + "verbatimModuleSyntax": true, "declaration": true, "outDir": "./dist", "forceConsistentCasingInFileNames": true, @@ -19,5 +20,5 @@ "app/*": ["src/*"] } }, - "include": ["src/**/*", "tests/**/*"] + "include": ["src/**/*", "tests/**/*", "vitest.workspace.ts"] } diff --git a/vitest.workspace.ts b/vitest.workspace.ts index e4e8d19e..847c837a 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,5 +1,5 @@ import tsconfigPaths from 'vite-tsconfig-paths'; -import { defineWorkspace } from "vitest/dist/config.js"; +import { defineWorkspace } from 'vitest/dist/config.js'; // Cannot split integration and acceptance https://github.com/vitest-dev/vitest/issues/3255 export default defineWorkspace([ @@ -21,4 +21,4 @@ export default defineWorkspace([ logHeapUsage: true } } -]); \ No newline at end of file +]); From 60dd2178406d23006ac2f0c82d568a3a5122ff44 Mon Sep 17 00:00:00 2001 From: AmauryD Date: Thu, 9 Nov 2023 16:11:16 +0100 Subject: [PATCH 2/3] fix tests --- .../src/acceptance/controllers/users.test.ts | 2 +- tests/src/unit/controllers/documents.test.ts | 32 +++++++++++++++---- tests/src/unit/controllers/users.test.ts | 26 ++++++++++++--- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/tests/src/acceptance/controllers/users.test.ts b/tests/src/acceptance/controllers/users.test.ts index bab87e87..c408ce50 100644 --- a/tests/src/acceptance/controllers/users.test.ts +++ b/tests/src/acceptance/controllers/users.test.ts @@ -35,7 +35,7 @@ test('GET id returns status code 200', async () => { }); test('POST returns status code 200', async () => { - const users = await fetchApi('users/12345678910abcdef', { + const users = await fetchApi('users', { body: JSON.stringify({ data: { attributes: { diff --git a/tests/src/unit/controllers/documents.test.ts b/tests/src/unit/controllers/documents.test.ts index d6ac09c8..468499c6 100644 --- a/tests/src/unit/controllers/documents.test.ts +++ b/tests/src/unit/controllers/documents.test.ts @@ -37,6 +37,8 @@ describe('Get', () => { const id = '123'; const jsonApiQuery = {}; + document.id = id; + test('Get unexisting document throws error', async () => { service.getOneOrFail.mockImplementation(() => { throw new NotFoundError('Not found') @@ -53,12 +55,15 @@ describe('Get', () => { authorizer.can.mockReturnValue(true); service.getOneOrFail.mockReturnValue(document as never); - serializer.serializeOne.mockReturnValue(serializer); - await controller.get(id, jsonApiQuery, currentUser); expect(service.getOneOrFail).toBeCalledWith(id, jsonApiQuery); - expect(serializer.serializeOne).toBeCalledWith(document, {}); + expect(serializer.serializeOne).toBeCalledWith({ + resourceType: 'documents', + ...document + }, {}, { + endpointURL: `documents/${id}`, + }); }); test('It throws a forbiddenError when not allowed to read user', async () => { @@ -81,7 +86,10 @@ describe('FindAll', () => { serializer.serializeMany.mockReturnValue(serializer); await controller.findAll(jsonApiQuery, currentUser); - expect(serializer.serializeMany).toBeCalledWith(documents, {}, undefined); + expect(serializer.serializeMany).toBeCalledWith(documents.map((a) => ({ ...a, resourceType: 'documents' })), {}, { + endpointURL: 'documents', + pagination: undefined + }); expect(service.getAll).toBeCalledWith(jsonApiQuery); }); @@ -95,6 +103,7 @@ describe('FindAll', () => { describe('Create', () => { const document = new DocumentModel(); + document.id = '123'; const createBody = {}; test('happy path', async () => { @@ -103,7 +112,12 @@ describe('Create', () => { serializer.serializeOne.mockReturnValue(serializer); await controller.create(createBody as never, {}, currentUser); expect(service.create).toBeCalledWith(createBody); - expect(serializer.serializeOne).toBeCalledWith(document, {}); + expect(serializer.serializeOne).toBeCalledWith({ + resourceType: 'documents', + ...document + }, {}, { + endpointURL: 'documents/123' + }); }); test('Throws when cannot create an element', async () => { @@ -118,13 +132,19 @@ describe('Update', () => { const document = new DocumentModel(); const updateBody = {} as never const id = '1'; + document.id = id; test('happy path', async () => { authorizer.can.mockReturnValue(true); service.update.mockReturnValue(document as never); serializer.serializeOne.mockReturnValue(serializer); await controller.update(id, updateBody, {}, currentUser); - expect(serializer.serializeOne).toBeCalledWith(document, {}); + expect(serializer.serializeOne).toBeCalledWith({ + resourceType: 'documents', + ...document + }, {}, { + endpointURL: 'documents/1' + }); expect(service.update).toBeCalledWith(id, updateBody); }); diff --git a/tests/src/unit/controllers/users.test.ts b/tests/src/unit/controllers/users.test.ts index c5cf3ccb..71777e07 100644 --- a/tests/src/unit/controllers/users.test.ts +++ b/tests/src/unit/controllers/users.test.ts @@ -33,6 +33,7 @@ const currentUser = new UserModel(); describe('Get', () => { const user = new UserModel(); const id = '123'; + user.id = id; const jsonApiQuery = {}; test('Get unexisting user throws error', async () => { @@ -54,7 +55,9 @@ describe('Get', () => { await controller.get(id, jsonApiQuery, currentUser); expect(usersService.getOneOrFail).toBeCalledWith(id, jsonApiQuery); - expect(serializer.serializeOne).toBeCalledWith(user, {}); + expect(serializer.serializeOne).toBeCalledWith({ ...user, resourceType: 'users' }, {}, { + endpointURL: `users/${id}` + }); }); test('It throws a forbiddenError when not allowed to read user', async () => { @@ -68,6 +71,7 @@ describe('Get', () => { describe('FindAll', () => { const user = new UserModel(); + user.id = '123'; const jsonApiQuery = {}; test('happy path', async () => { @@ -77,7 +81,13 @@ describe('FindAll', () => { serializer.serializeMany.mockReturnValue(serializer); await controller.findAll(jsonApiQuery, currentUser); - expect(serializer.serializeMany).toBeCalledWith(users, jsonApiQuery, undefined); + expect(serializer.serializeMany).toBeCalledWith(users.map((u) => ({ + ...u, + resourceType: 'users' + })), jsonApiQuery, { + endpointURL: 'users', + pagination: undefined + }); expect(usersService.getAll).toBeCalledWith(jsonApiQuery); }); @@ -91,6 +101,7 @@ describe('FindAll', () => { describe('Create', () => { const user = new UserModel(); + user.id = '123'; const createBody = {}; test('happy path', async () => { @@ -101,7 +112,11 @@ describe('Create', () => { fields: {} }); expect(usersService.create).toBeCalledWith(createBody); - expect(serializer.serializeOne).toBeCalledWith(user, {}); + expect(serializer.serializeOne).toBeCalledWith({ ...user, resourceType: 'users' }, { + fields: {} + }, { + endpointURL: `users/${user.id}` + }); }); test('Throws when cannot create an element', async () => { @@ -116,13 +131,16 @@ describe('Update', () => { const user = new UserModel(); const updateBody = {}; const id = '1'; + user.id = id; test('happy path', async () => { authorizer.can.mockReturnValue(true); usersService.update.mockReturnValue(user as never); serializer.serializeOne.mockReturnValue(serializer); await controller.update(updateBody, id, currentUser, {}); - expect(serializer.serializeOne).toBeCalledWith(user, {}); + expect(serializer.serializeOne).toBeCalledWith({ ...user, resourceType: 'users' }, {}, { + endpointURL: `users/${id}` + }); expect(usersService.update).toBeCalledWith(id, updateBody); }); From f8c7e1a2a2a6d43aa7f40d84e5a55008c83d465f Mon Sep 17 00:00:00 2001 From: AmauryD Date: Thu, 9 Nov 2023 16:38:01 +0100 Subject: [PATCH 3/3] up --- .github/workflows/test.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 259a1141..2d38db78 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,14 +20,8 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: - uses: actions/checkout@v3 - - name: Setup MySQL - uses: mirromutth/mysql-action@v1.1 - with: - mysql root password: "test123*" - mysql database: "nfw_test" - mysql user: "nfw" - mysql password: "test123*" - mysql version: "8" + - name: Run docker + run: docker compose up -d - uses: pnpm/action-setup@v2 name: Install pnpm id: pnpm-install