From fba9f7397a58c526a814f53ac88c6aba64e76937 Mon Sep 17 00:00:00 2001 From: Muhammadyusuf Kurbonov Date: Wed, 30 Jul 2025 09:45:08 +0500 Subject: [PATCH 1/3] impl: add support for feathers v5 --- dist/adapter.d.ts | 33 + dist/adapter.js | 261 +++++ dist/error-handler.d.ts | 2 +- dist/service.d.ts | 32 +- dist/service.js | 190 +--- dist/types.d.ts | 16 +- dist/utils.d.ts | 2 +- dist/utils.js | 13 +- package-lock.json | 2009 +++++++++++++++++++++++++++++++-------- package.json | 16 +- prisma/tests.db | Bin 32768 -> 32768 bytes src/adapter.ts | 349 +++++++ src/error-handler.ts | 2 +- src/service.ts | 270 +----- src/types.ts | 20 +- src/utils.ts | 16 +- test/index.test.js | 5 +- 17 files changed, 2422 insertions(+), 814 deletions(-) create mode 100644 dist/adapter.d.ts create mode 100644 dist/adapter.js create mode 100644 src/adapter.ts diff --git a/dist/adapter.d.ts b/dist/adapter.d.ts new file mode 100644 index 0000000..29a1d1f --- /dev/null +++ b/dist/adapter.d.ts @@ -0,0 +1,33 @@ +import type { Id, Paginated, PaginationOptions } from '@feathersjs/feathers'; +import { AdapterBase, AdapterParams } from '@feathersjs/adapter-commons'; +import { PrismaClient } from '@prisma/client'; +import { PrismaServiceOptions } from './types'; +export declare class PrismaAdapter = Partial, ServiceParams extends AdapterParams = AdapterParams, PatchData extends Partial = Partial> extends AdapterBase { + Model: any; + client: PrismaClient; + constructor(options: PrismaServiceOptions, client: PrismaClient); + filterQuery(params: ServiceParams): { + filters: { + [key: string]: any; + }; + query: import("@feathersjs/feathers").Query; + paginate: import("./types").Paginate | undefined; + }; + _find(params?: ServiceParams & { + paginate?: PaginationOptions; + }): Promise>; + _find(params?: ServiceParams & { + paginate: false; + }): Promise; + _find(params?: ServiceParams): Promise | Result[]>; + _get(id: Id, params?: ServiceParams): Promise; + _create(data: Data, params?: ServiceParams): Promise; + _create(data: Data[], params?: ServiceParams): Promise; + _create(data: Data | Data[], params?: ServiceParams): Promise; + _update(id: Id, data: Data, params?: ServiceParams): Promise; + private internalUpdate; + _patch(id: null, data: PatchData, params?: ServiceParams): Promise; + _patch(id: Id, data: PatchData, params?: ServiceParams): Promise; + _remove(id: null, params?: ServiceParams): Promise; + _remove(id: Id, params?: ServiceParams): Promise; +} diff --git a/dist/adapter.js b/dist/adapter.js new file mode 100644 index 0000000..5e527c1 --- /dev/null +++ b/dist/adapter.js @@ -0,0 +1,261 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PrismaAdapter = void 0; +const adapter_commons_1 = require("@feathersjs/adapter-commons"); +const errors = require("@feathersjs/errors"); +const utils_1 = require("./utils"); +const constants_1 = require("./constants"); +const error_handler_1 = require("./error-handler"); +class PrismaAdapter extends adapter_commons_1.AdapterBase { + constructor(options, client) { + var _a, _b; + if (!client) { + throw new errors.GeneralError('PrismaClient is required.'); + } + if (options.operators && !Array.isArray(options.operators)) { + throw new errors.GeneralError('The \'operators\' option must be an array. For migration from feathers.js v4 see example: https://github.com/feathersjs-ecosystem/feathers-sequelize/tree/dove#migrate-to-feathers-v5-dove'); + } + super({ + id: options.id || 'id', + paginate: { + default: (_a = options.paginate) === null || _a === void 0 ? void 0 : _a.default, + max: (_b = options.paginate) === null || _b === void 0 ? void 0 : _b.max, + }, + model: options.model, + multi: options.multi || [], + filters: options.filters || {}, + events: options.events || [], + operators: Object.values(constants_1.OPERATORS).concat(options.operators || []), + }); + const { model } = options; + if (!model) { + throw new errors.GeneralError('You must provide a model string.'); + } + if (!client[model]) { + throw new errors.GeneralError(`No model with name ${model} found in prisma client.`); + } + this.client = client; + this.Model = client[model]; + } + filterQuery(params) { + const options = this.getOptions(params); + const { filters, query: _query } = (0, adapter_commons_1.filterQuery)(params.query || {}, options); + if (filters === null || filters === void 0 ? void 0 : filters.$select) { + if (!filters.$select.includes(this.id)) { + filters.$select.push(this.id); + } + filters.$select = filters.$select.map((select) => `${select}`); + } + return { + filters: filters !== null && filters !== void 0 ? filters : {}, + query: _query, + paginate: options.paginate, + }; + } + _find(params = {}) { + return __awaiter(this, void 0, void 0, function* () { + const { query, filters } = this.filterQuery(params !== null && params !== void 0 ? params : {}); + const { operators = [] } = this.options; + const { skip, take, orderBy, where, select, include } = (0, utils_1.buildPrismaQueryParams)({ + query, filters, whitelist: operators.concat(Object.keys(filters)), + }, this.options.id || 'id'); + try { + const findMany = () => { + return this.Model.findMany(Object.assign(Object.assign(Object.assign({}, (typeof take === 'number' ? { skip, take } : { skip })), { orderBy, + where }), (0, utils_1.buildSelectOrInclude)({ select, include }))); + }; + if (!this.options.paginate || !this.options.paginate.default || (typeof take !== 'number' && !take)) { + const data = yield findMany(); + return data; + } + const [data, count] = yield this.client.$transaction([ + findMany(), + this.Model.count({ + where, + }), + ]); + const result = { + total: count, + skip, + limit: take, + data, + }; + return result; + } + catch (e) { + (0, error_handler_1.errorHandler)(e); + } + }); + } + _get(id, params = {}) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + try { + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ + id, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, (_a = this.options.id) !== null && _a !== void 0 ? _a : 'id'); + if (_helper.idQueryIsObject || _helper.queryWhereExists) { + const result = yield this.Model.findFirst(Object.assign({ where: (0, utils_1.buildWhereWithOptionalIdObject)(id, where, this.options.id || 'id') }, (0, utils_1.buildSelectOrInclude)({ select, include }))); + if (!result) + throw new errors.NotFound(`No record found for id '${id}' and query`); + return result; + } + (0, utils_1.checkIdInQuery)({ id, query, idField: this.options.id || 'id' }); + const result = yield this.Model.findUnique(Object.assign({ where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); + if (!result) { + throw new errors.NotFound(`No record found for id '${id}'`); + } + return result; + } + catch (e) { + (0, error_handler_1.errorHandler)(e, 'findUnique'); + } + }); + } + _create(data, params = {}) { + return __awaiter(this, void 0, void 0, function* () { + const { query, filters } = this.filterQuery(params); + console.log('🚀 ~ PrismaAdapter ~ _create ~ query, filters:', query, filters); + const { operators = [] } = this.options; + console.log('🚀 ~ PrismaAdapter ~ _create ~ operators:', operators); + const { select, include } = (0, utils_1.buildPrismaQueryParams)({ + query, + filters, + whitelist: operators.concat(Object.keys(filters)) + }, this.options.id || 'id'); + console.log('🚀 ~ PrismaAdapter ~ _create ~ select, include:', select, include); + try { + if (Array.isArray(data)) { + if (!this.allowsMulti('create', params)) { + throw new errors.MethodNotAllowed(); + } + const result = yield this.client.$transaction(data.map((d) => this.Model.create(Object.assign({ data: d }, (0, utils_1.buildSelectOrInclude)({ select, include }))))); + return result; + } + const result = yield this.Model.create(Object.assign({ data }, (0, utils_1.buildSelectOrInclude)({ select, include }))); + return result; + } + catch (e) { + (0, error_handler_1.errorHandler)(e); + } + }); + } + _update(id, data, params = {}) { + return __awaiter(this, void 0, void 0, function* () { + return this.internalUpdate(id, data, params, true); + }); + } + internalUpdate(id, data, params, returnResult) { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ + id, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, (_a = this.options.id) !== null && _a !== void 0 ? _a : 'id'); + try { + if (_helper.idQueryIsObject) { + const newWhere = (0, utils_1.buildWhereWithOptionalIdObject)(id, where, (_b = this.options.id) !== null && _b !== void 0 ? _b : 'id'); + const [, result] = yield this.client.$transaction([ + this.Model.updateMany(Object.assign({ data, where: newWhere }, (0, utils_1.buildSelectOrInclude)({ select, include }))), + this.Model.findFirst(Object.assign({ where: Object.assign(Object.assign({}, newWhere), data) }, (0, utils_1.buildSelectOrInclude)({ select, include }))), + ]); + if (!result) + throw new errors.NotFound(`No record found for id '${id}'`); + return result; + } + (0, utils_1.checkIdInQuery)({ id, query, idField: (_c = this.options.id) !== null && _c !== void 0 ? _c : 'id' }); + const result = yield this.Model.update(Object.assign({ data, + where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); + if (select || returnResult) { + return result; + } + // @ts-expect-error Type 'Result' is not assignable to type 'any'. + return Object.assign({ [(_d = this.options.id) !== null && _d !== void 0 ? _d : 'id']: result.id }, data); + } + catch (e) { + (0, error_handler_1.errorHandler)(e, 'update'); + } + }); + } + _patch(id, data, params = {}) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + if (!id || Array.isArray(data)) { + if (!this.allowsMulti('patch', params)) { + throw new errors.MethodNotAllowed(); + } + } + if (id && !Array.isArray(data)) { + const result = yield this.internalUpdate(id, data, params, true); + return result; + } + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include } = (0, utils_1.buildPrismaQueryParams)({ + query, + filters, + whitelist: operators.concat(Object.keys(filters)), + }, (_a = this.options.id) !== null && _a !== void 0 ? _a : 'id'); + try { + const [, result] = yield this.client.$transaction([ + this.Model.updateMany(Object.assign({ data, + where }, (0, utils_1.buildSelectOrInclude)({ select, include }))), + this.Model.findMany(Object.assign({ where: Object.assign(Object.assign({}, where), data) }, (0, utils_1.buildSelectOrInclude)({ select, include }))), + ]); + return result; + } + catch (e) { + (0, error_handler_1.errorHandler)(e, 'updateMany'); + } + }); + } + _remove(id, params = {}) { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + if (!id && !this.allowsMulti('remove', params)) { + throw new errors.MethodNotAllowed(); + } + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ + id: id || undefined, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, (_a = this.options.id) !== null && _a !== void 0 ? _a : 'id'); + if (id && !_helper.idQueryIsObject) { + try { + (0, utils_1.checkIdInQuery)({ id, query, allowOneOf: true, idField: (_b = this.options.id) !== null && _b !== void 0 ? _b : 'id' }); + const result = yield this.Model.delete(Object.assign({ where: id ? { [(_c = this.options.id) !== null && _c !== void 0 ? _c : 'id']: id } : where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); + return result; + } + catch (e) { + (0, error_handler_1.errorHandler)(e, 'delete'); + } + } + try { + const query = Object.assign({ where: id ? (0, utils_1.buildWhereWithOptionalIdObject)(id, where, (_d = this.options.id) !== null && _d !== void 0 ? _d : 'id') : where }, (0, utils_1.buildSelectOrInclude)({ select, include })); + const [data] = yield this.client.$transaction([ + id ? this.Model.findFirst(query) : this.Model.findMany(query), + this.Model.deleteMany(query), + ]); + if (id && !data) + throw new errors.NotFound(`No record found for id '${id}'`); + return data; + } + catch (e) { + (0, error_handler_1.errorHandler)(e, 'deleteMany'); + } + }); + } +} +exports.PrismaAdapter = PrismaAdapter; diff --git a/dist/error-handler.d.ts b/dist/error-handler.d.ts index e8dfd94..b653cf0 100644 --- a/dist/error-handler.d.ts +++ b/dist/error-handler.d.ts @@ -1 +1 @@ -export declare function errorHandler(error: any, prismaMethod?: string): void; +export declare function errorHandler(error: any, prismaMethod?: string): never; diff --git a/dist/service.d.ts b/dist/service.d.ts index 7b1151f..ff8d874 100644 --- a/dist/service.d.ts +++ b/dist/service.d.ts @@ -1,17 +1,21 @@ -import type { Params } from '@feathersjs/feathers'; -import { AdapterService } from '@feathersjs/adapter-commons'; +import { Id, Paginated, PaginationOptions, Params, ServiceMethods } from '@feathersjs/feathers'; +import { PrismaAdapter } from './adapter'; +import { PaginatedOrArray, PrismaServiceOptions } from './types'; +import { AdapterParams } from '@feathersjs/adapter-commons'; import { PrismaClient } from '@prisma/client'; -import { IdField, PrismaServiceOptions } from './types'; -export declare class PrismaService> extends AdapterService { - Model: any; - client: PrismaClient; - constructor(options: PrismaServiceOptions, client: PrismaClient); - _find(params?: Params): Promise; - _get(id: IdField, params?: Params): Promise | undefined>; - _create(data: Partial | Partial[], params?: Params): Promise | Partial[] | undefined>; - _update(id: IdField, data: Partial, params?: Params, returnResult?: boolean): Promise; - _patch(id: IdField | null, data: Partial | Partial[], params?: Params): Promise; - _remove(id: IdField | null, params?: Params): Promise; +export declare class PrismaService = Partial, ServiceParams extends Params = AdapterParams, PatchData extends Partial = Partial> extends PrismaAdapter implements ServiceMethods, Data, ServiceParams, PatchData> { + find

(params?: P): Promise>; + get(id: Id, params?: ServiceParams): Promise; + create(data: Data, params?: ServiceParams): Promise; + create(data: Data[], params?: ServiceParams): Promise; + create(data: Data | Data[], params?: ServiceParams): Promise; + update(id: Id, data: Data, params?: ServiceParams): Promise; + patch(id: Id, data: PatchData, params?: ServiceParams): Promise; + patch(id: null, data: PatchData, params?: ServiceParams): Promise; + remove(id: Id, params?: ServiceParams): Promise; + remove(id: null, params?: ServiceParams): Promise; } -export declare function service>(options: PrismaServiceOptions, client: PrismaClient): PrismaService; +export declare function service>(options: PrismaServiceOptions, client: PrismaClient): PrismaService, AdapterParams>, Partial>>; export declare const prismaService: typeof service; diff --git a/dist/service.js b/dist/service.js index 478a132..fbf9927 100644 --- a/dist/service.js +++ b/dist/service.js @@ -10,198 +10,36 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }; Object.defineProperty(exports, "__esModule", { value: true }); exports.prismaService = exports.service = exports.PrismaService = void 0; -const adapter_commons_1 = require("@feathersjs/adapter-commons"); -const errors = require("@feathersjs/errors"); -const utils_1 = require("./utils"); -const constants_1 = require("./constants"); -const error_handler_1 = require("./error-handler"); -class PrismaService extends adapter_commons_1.AdapterService { - constructor(options, client) { - var _a, _b; - super({ - id: options.id || 'id', - paginate: { - default: (_a = options.paginate) === null || _a === void 0 ? void 0 : _a.default, - max: (_b = options.paginate) === null || _b === void 0 ? void 0 : _b.max, - }, - multi: options.multi || [], - filters: options.filters || [], - events: options.events || [], - whitelist: Object.values(constants_1.OPERATORS).concat(options.whitelist || []), - }); - const { model } = options; - if (!model) { - throw new errors.GeneralError('You must provide a model string.'); - } - // @ts-ignore - if (!client[model]) { - throw new errors.GeneralError(`No model with name ${model} found in prisma client.`); - } - this.client = client; - // @ts-ignore - this.Model = client[model]; - } - _find(params = {}) { +const adapter_1 = require("./adapter"); +class PrismaService extends adapter_1.PrismaAdapter { + find(params) { return __awaiter(this, void 0, void 0, function* () { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { skip, take, orderBy, where, select, include } = (0, utils_1.buildPrismaQueryParams)({ - query, filters, whitelist, - }, this.options.id); - try { - const findMany = () => { - return this.Model.findMany(Object.assign(Object.assign(Object.assign({}, (typeof take === 'number' ? { skip, take } : { skip })), { orderBy, - where }), (0, utils_1.buildSelectOrInclude)({ select, include }))); - }; - if (!this.options.paginate.default || (typeof take !== 'number' && !take)) { - const data = yield findMany(); - return data; - } - const [data, count] = yield this.client.$transaction([ - findMany(), - this.Model.count({ - where, - }), - ]); - const result = { - total: count, - skip, - limit: take, - data, - }; - return result; - } - catch (e) { - (0, error_handler_1.errorHandler)(e); - } + return this._find(params); }); } - _get(id, params = {}) { + get(id, params) { return __awaiter(this, void 0, void 0, function* () { - try { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ - id, query, filters, whitelist - }, this.options.id); - if (_helper.idQueryIsObject || _helper.queryWhereExists) { - const result = yield this.Model.findFirst(Object.assign({ where: (0, utils_1.buildWhereWithOptionalIdObject)(id, where, this.options.id) }, (0, utils_1.buildSelectOrInclude)({ select, include }))); - if (!result) - throw new errors.NotFound(`No record found for id '${id}' and query`); - return result; - } - (0, utils_1.checkIdInQuery)({ id, query, idField: this.options.id }); - const result = yield this.Model.findUnique(Object.assign({ where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); - if (!result) - throw new errors.NotFound(`No record found for id '${id}'`); - return result; - } - catch (e) { - (0, error_handler_1.errorHandler)(e, 'findUnique'); - } + return this._get(id, params); }); } - _create(data, params = {}) { + create(data, params) { return __awaiter(this, void 0, void 0, function* () { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { select, include } = (0, utils_1.buildPrismaQueryParams)({ query, filters, whitelist }, this.options.id); - try { - if (Array.isArray(data)) { - const result = yield this.client.$transaction(data.map((d) => this.Model.create(Object.assign({ data: d }, (0, utils_1.buildSelectOrInclude)({ select, include }))))); - return result; - } - const result = yield this.Model.create(Object.assign({ data }, (0, utils_1.buildSelectOrInclude)({ select, include }))); - return result; - } - catch (e) { - (0, error_handler_1.errorHandler)(e); - } + return this._create(data, params); }); } - _update(id, data, params = {}, returnResult = false) { + update(id, data, params) { return __awaiter(this, void 0, void 0, function* () { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ - id, query, filters, whitelist, - }, this.options.id); - try { - if (_helper.idQueryIsObject) { - const newWhere = (0, utils_1.buildWhereWithOptionalIdObject)(id, where, this.options.id); - const [, result] = yield this.client.$transaction([ - this.Model.updateMany(Object.assign({ data, where: newWhere }, (0, utils_1.buildSelectOrInclude)({ select, include }))), - this.Model.findFirst(Object.assign({ where: Object.assign(Object.assign({}, newWhere), data) }, (0, utils_1.buildSelectOrInclude)({ select, include }))), - ]); - if (!result) - throw new errors.NotFound(`No record found for id '${id}'`); - return result; - } - (0, utils_1.checkIdInQuery)({ id, query, idField: this.options.id }); - const result = yield this.Model.update(Object.assign({ data, - where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); - if (select || returnResult) { - return result; - } - return Object.assign({ [this.options.id]: result.id }, data); - } - catch (e) { - (0, error_handler_1.errorHandler)(e, 'update'); - } + return this._update(id, data, params); }); } - _patch(id, data, params = {}) { + patch(id, data, params) { return __awaiter(this, void 0, void 0, function* () { - if (id && !Array.isArray(data)) { - const result = yield this._update(id, data, params, true); - return result; - } - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include } = (0, utils_1.buildPrismaQueryParams)({ query, filters, whitelist }, this.options.id); - try { - const [, result] = yield this.client.$transaction([ - this.Model.updateMany(Object.assign({ data, - where }, (0, utils_1.buildSelectOrInclude)({ select, include }))), - this.Model.findMany(Object.assign({ where: Object.assign(Object.assign({}, where), data) }, (0, utils_1.buildSelectOrInclude)({ select, include }))), - ]); - return result; - } - catch (e) { - (0, error_handler_1.errorHandler)(e, 'updateMany'); - } + return this._patch(id /** fighting overloads */, data, params); }); } - _remove(id, params = {}) { + remove(id, params) { return __awaiter(this, void 0, void 0, function* () { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = (0, utils_1.buildPrismaQueryParams)({ - id: id || undefined, query, filters, whitelist, - }, this.options.id); - if (id && !_helper.idQueryIsObject) { - try { - (0, utils_1.checkIdInQuery)({ id, query, allowOneOf: true, idField: this.options.id }); - const result = yield this.Model.delete(Object.assign({ where: id ? { [this.options.id]: id } : where }, (0, utils_1.buildSelectOrInclude)({ select, include }))); - return result; - } - catch (e) { - (0, error_handler_1.errorHandler)(e, 'delete'); - } - } - try { - const query = Object.assign({ where: id ? (0, utils_1.buildWhereWithOptionalIdObject)(id, where, this.options.id) : where }, (0, utils_1.buildSelectOrInclude)({ select, include })); - const [data] = yield this.client.$transaction([ - id ? this.Model.findFirst(query) : this.Model.findMany(query), - this.Model.deleteMany(query), - ]); - if (id && !data) - throw new errors.NotFound(`No record found for id '${id}'`); - return data; - } - catch (e) { - (0, error_handler_1.errorHandler)(e, 'deleteMany'); - } + return this._remove(id /** fighting overloads */, params); }); } } diff --git a/dist/types.d.ts b/dist/types.d.ts index 1210aa3..0e37044 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -1,17 +1,21 @@ +import { FilterSettings } from '@feathersjs/adapter-commons'; +import { Prisma } from '@prisma/client'; +import type { Paginated, PaginationOptions } from '@feathersjs/feathers'; export declare type PrismaClient = any; export declare type IdField = string | number; export declare type Paginate = { default?: number; max?: number; }; +declare type CamelCase = S extends `${infer F}${infer R}` ? `${Lowercase}${R}` : S; export interface PrismaServiceOptions { - model: string; + model: CamelCase; events?: string[]; multi?: boolean | string[]; id?: string; paginate?: Paginate; - whitelist?: string[]; - filters?: string[]; + operators?: string[]; + filters?: FilterSettings; } export declare type EagerQuery = (string | string[] | string[][])[] | Record; export interface QueryParamRecordFilters { @@ -39,3 +43,9 @@ export declare type QueryParamRecordsOr = Record = P extends { + paginate: false; +} ? R[] : P extends { + paginate: PaginationOptions; +} ? Paginated : Paginated | R[]; +export {}; diff --git a/dist/utils.d.ts b/dist/utils.d.ts index accfa6d..1726fe4 100644 --- a/dist/utils.d.ts +++ b/dist/utils.d.ts @@ -4,7 +4,7 @@ export declare const castToNumberBooleanStringOrNull: (value: string | boolean | export declare const castFeathersQueryToPrismaFilters: (p: QueryParamRecordFilters, whitelist: string[]) => Record; export declare const castEagerQueryToPrismaInclude: (value: EagerQuery, whitelist: string[], idField: string) => Record; export declare const mergeFiltersWithSameKey: (where: Record, key: string, filter: Record | string | number | boolean | null) => Record | string | number | boolean; -export declare const buildWhereAndInclude: (query: QueryParam, whitelist: string[], idField: string) => { +export declare const buildWhereAndInclude: (filters: QueryParam, whitelist: string[], idField: string) => { where: Record; include: Record; }; diff --git a/dist/utils.js b/dist/utils.js index f678fa4..0594c07 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -92,11 +92,14 @@ const mergeFiltersWithSameKey = (where, key, filter) => { return filter; }; exports.mergeFiltersWithSameKey = mergeFiltersWithSameKey; -const buildWhereAndInclude = (query, whitelist, idField) => { +const buildWhereAndInclude = (filters, whitelist, idField) => { const where = {}; let include = {}; - Object.keys(query).forEach((k) => { - const value = query[k]; + Object.keys(filters).forEach((k) => { + const value = filters[k]; + if (['$sort', '$limit', '$skip'].includes(k)) { + return; + } if (k === '$or' && Array.isArray(value)) { where.OR = value.map((v) => (0, exports.buildWhereAndInclude)(v, whitelist, idField).where); } @@ -115,6 +118,7 @@ const buildWhereAndInclude = (query, whitelist, idField) => { where[k] = (0, exports.castToNumberBooleanStringOrNull)(value); } else if (k === '$eager' && whitelist.includes(k)) { + console.log('🚀 ~ buildWhereAndInclude ~ whitelist:', whitelist); const eager = value; include = (0, exports.castEagerQueryToPrismaInclude)(eager, whitelist, idField); } @@ -140,9 +144,10 @@ const buildPagination = ($skip, $limit) => { }; exports.buildPagination = buildPagination; const buildPrismaQueryParams = ({ id, query, filters, whitelist }, idField) => { + console.log('🚀 ~ buildPrismaQueryParams ~ whitelist:', whitelist); let select = (0, exports.buildSelect)(filters.$select || []); const selectExists = Object.keys(select).length > 0; - const { where, include } = (0, exports.buildWhereAndInclude)(id ? Object.assign({ [idField]: id }, query) : query, whitelist, idField); + const { where, include } = (0, exports.buildWhereAndInclude)(Object.assign({}, id ? Object.assign({ [idField]: id }, query) : query, filters), whitelist, idField); const includeExists = Object.keys(include).length > 0; const orderBy = (0, exports.buildOrderBy)(filters.$sort || {}); const { skip, take } = (0, exports.buildPagination)(filters.$skip, filters.$limit); diff --git a/package-lock.json b/package-lock.json index 57fb038..e813f0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "0.7.0", "license": "MIT", "devDependencies": { - "@feathersjs/adapter-commons": "^4.5.17", - "@feathersjs/adapter-tests": "^4.5.16", - "@feathersjs/errors": "^4.5.17", - "@feathersjs/express": "^4.5.18", - "@feathersjs/feathers": "^4.5.17", + "@feathersjs/adapter-commons": "^5.0.34", + "@feathersjs/adapter-tests": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/express": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", "@prisma/client": "^5.9.1", "@types/node": "^17.0.5", "@typescript-eslint/eslint-plugin": "^5.8.1", @@ -33,9 +33,9 @@ "node": ">= 16" }, "peerDependencies": { - "@feathersjs/adapter-commons": "4.*", - "@feathersjs/errors": "4.*", - "@feathersjs/feathers": "4.*", + "@feathersjs/adapter-commons": "5.*", + "@feathersjs/errors": "5.*", + "@feathersjs/feathers": "5.*", "@prisma/client": "5.*" } }, @@ -142,6 +142,16 @@ "node": ">=4" } }, + "node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -172,17 +182,18 @@ } }, "node_modules/@feathersjs/adapter-commons": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.17.tgz", - "integrity": "sha512-Tq39nQApJCq4/q9DMaO+qKqyCNDZ4q2Dde3e3PPzDvpTJgnQLyVgc4lUCNnLGejYZHT34rpCka9/AXxkEfJrQQ==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-5.0.34.tgz", + "integrity": "sha512-wc0HAZ0uov68p1ytBR5npyAePdNbFrRqr1fINSpLvIkrUkKDEcC6I/lOpk1TBpoI8so5IO/seZhkl25pqKM43A==", "dev": true, + "license": "MIT", "dependencies": { - "@feathersjs/commons": "^4.5.16", - "@feathersjs/errors": "^4.5.17", - "@feathersjs/feathers": "^4.5.17" + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34" }, "engines": { - "node": ">= 10" + "node": ">= 12" }, "funding": { "type": "opencollective", @@ -190,59 +201,159 @@ } }, "node_modules/@feathersjs/adapter-tests": { - "version": "4.5.16", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.16.tgz", - "integrity": "sha512-a9xCGCkKC1iTN5bRxtxk8/0P7C202RFahDuAdFa73j2Ex7Zjs64DCFV/4F4oGipVjWmWRldFI4WInkgBjTEelA==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-5.0.34.tgz", + "integrity": "sha512-++BH3fBVAkuBaM2EJyXdfg7pw4UzZvTwVgLs4puZywz7Ve67oBRpwByY6h2QPMYxTKJaeCw2gIkDUG66ToZKXw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 12" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/feathers" } }, - "node_modules/@feathersjs/commons": { - "version": "4.5.16", - "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.16.tgz", - "integrity": "sha512-FXKAcGApcd9w3M42gjLi8+oaPijabS8qbD4ynQK3PM8J7BqpbSdCzURsI7EpReoQxFxdhrR4jix8cQIC/iAeuw==", + "node_modules/@feathersjs/authentication": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-5.0.34.tgz", + "integrity": "sha512-JnOoYJKx60SQDCj/JJAH9wzAL0EFFMaOjBN5Vh8JVTj1L4IrxUfy7uGathBumQc5vB2BqtyCy4BG8+/L49oQbA==", "dev": true, + "license": "MIT", + "dependencies": { + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "@feathersjs/schema": "^5.0.34", + "@feathersjs/transport-commons": "^5.0.34", + "@types/jsonwebtoken": "^9.0.9", + "jsonwebtoken": "^9.0.2", + "lodash": "^4.17.21", + "long-timeout": "^0.1.1", + "uuid": "^11.1.0" + }, "engines": { - "node": ">= 10" + "node": ">= 12" }, "funding": { "type": "github", "url": "https://github.com/sponsors/daffl" } }, - "node_modules/@feathersjs/errors": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.17.tgz", - "integrity": "sha512-HY1YJV/9d5wKd3RPNaWggOhAX4NmOulr5EvBMMm6jaMizJ7UMRUgZmqyRtuHL4h+u2LoLmWv9+wO3V+uCFoULg==", + "node_modules/@feathersjs/authentication/node_modules/@feathersjs/schema": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/schema/-/schema-5.0.34.tgz", + "integrity": "sha512-BpQxp46Vp0tH7l9jW4HIAGQerql7aJBeRXRggCVhBuqK48KoD1UhvYCWBmWwEouaYUnZ77HjQIMn9c1fK+dF2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@feathersjs/adapter-commons": "^5.0.34", + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "@types/json-schema": "^7.0.15", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "json-schema-to-ts": "^3.1.1" + }, + "engines": { + "node": ">= 12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/daffl" + }, + "peerDependencies": { + "typescript": ">=5.8" + } + }, + "node_modules/@feathersjs/authentication/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.3" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@feathersjs/authentication/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@feathersjs/authentication/node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">= 10" + "node": ">=14.17" + } + }, + "node_modules/@feathersjs/commons": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-5.0.34.tgz", + "integrity": "sha512-UfHzq7taVJx++TXxX5pmDSR72xRp+h5nler4xcUlcJWLLykCOYo8YCeW03S7T1p1NuFdy0qBmU+B+G89bjyGmg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/daffl" + } + }, + "node_modules/@feathersjs/errors": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-5.0.34.tgz", + "integrity": "sha512-C0t+pONnMvwlDW6iczcYmxaHzGvaGn3+BLhwlySEVYRciWOURIO8Eo5JVdN7cSM3Z7AxS3Dpk4DEhyFU/D2w6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" } }, "node_modules/@feathersjs/express": { - "version": "4.5.18", - "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.18.tgz", - "integrity": "sha512-MqrVtUcWeMnJjlx+xL5DDbPRxB5wLvlVGwjqKV6csnjOmtY8Jhv0q8Y86oUWPf3Cb/HXV1s6uSQ1Yg/JTY2EcA==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-5.0.34.tgz", + "integrity": "sha512-TNy8vEIYnjB9eEwancP07C5wYnv5i1vXctKH9HhtIfa1xJ7KnGgIDT9LNO4gX0OeURzDcE+zFEB9Xnto6zKh4g==", "dev": true, + "license": "MIT", "dependencies": { - "@feathersjs/commons": "^4.5.16", - "@feathersjs/errors": "^4.5.17", - "@types/express": "^4.17.13", - "debug": "^4.3.3", - "express": "^4.17.2", - "lodash": "^4.17.21", - "uberproto": "^2.0.6" + "@feathersjs/authentication": "^5.0.34", + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/transport-commons": "^5.0.34", + "@types/compression": "^1.7.5", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.19.5", + "compression": "^1.8.0", + "cors": "^2.8.5", + "express": "^4.21.2" }, "engines": { - "node": ">= 10" + "node": ">= 12" }, "funding": { "type": "github", @@ -250,18 +361,49 @@ } }, "node_modules/@feathersjs/feathers": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-4.5.17.tgz", - "integrity": "sha512-m42AViNlMMEaHn1akyPt+JBWXHU4Ncp/u7F/6oAk7cFRTRwxqdXyUgsh3aKv7GFxgkN+VYR/ZD5+YcX2XwLVZA==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-5.0.34.tgz", + "integrity": "sha512-jgeqKq/Uhsfeld42F8uimqzPv/uhtohkenpaWeD+NudJp2YZNYfA6gDZAL5UTpAvrTJFmK3QR1q1CnuL1mJdHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@feathersjs/commons": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "events": "^3.3.0" + }, + "engines": { + "node": ">= 12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/daffl" + } + }, + "node_modules/@feathersjs/hooks": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@feathersjs/hooks/-/hooks-0.9.0.tgz", + "integrity": "sha512-kLfWnuhbC25CPkR1/TDcVs0rSiv0JLNxrpUivLwc7FUnkyeciRi5VOmC1SOzL2SOagcozu3+m4VQiONyzgfY7w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@feathersjs/transport-commons": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-5.0.34.tgz", + "integrity": "sha512-l+oQm1oIvfrxNUlidcqCtKfdWdKn1zHXGhEa13xIKiU5m2LFz1EYeMuq5vh/1pU0iECq3Oi+KdW53YnGl446cw==", "dev": true, + "license": "MIT", "dependencies": { - "@feathersjs/commons": "^4.5.16", - "debug": "^4.3.3", - "events": "^3.3.0", - "uberproto": "^2.0.6" + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "encodeurl": "^2.0.0", + "lodash": "^4.17.21" }, "engines": { - "node": ">= 10" + "node": ">= 12" }, "funding": { "type": "github", @@ -387,52 +529,86 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, + "node_modules/@types/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/node": "*" + } + }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -440,11 +616,30 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, "node_modules/@types/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==", - "dev": true + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "17.0.45", @@ -453,27 +648,42 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "*", + "@types/mime": "^1", "@types/node": "*" } }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", @@ -675,6 +885,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -683,6 +894,16 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -720,6 +941,48 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -791,7 +1054,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.5", @@ -1088,21 +1352,22 @@ } }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1116,6 +1381,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -1124,7 +1390,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1154,11 +1421,19 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1176,6 +1451,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1283,6 +1589,55 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1300,6 +1655,7 @@ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1308,19 +1664,21 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1329,7 +1687,8 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js": { "version": "2.6.12", @@ -1339,6 +1698,20 @@ "dev": true, "hasInstallScript": true }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1442,6 +1815,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1451,6 +1825,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1501,11 +1876,37 @@ "node": ">=6.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -1514,10 +1915,11 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1580,6 +1982,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -1619,7 +2054,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -2213,6 +2649,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2222,42 +2659,44 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -2266,6 +2705,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -2273,6 +2716,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2281,7 +2725,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -2317,6 +2762,23 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -2361,13 +2823,14 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -2383,6 +2846,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2391,7 +2855,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-up": { "version": "2.1.0", @@ -2438,6 +2903,7 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2447,6 +2913,7 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2472,10 +2939,14 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -2520,19 +2991,44 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -2628,6 +3124,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -2737,10 +3246,11 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2763,6 +3273,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2777,6 +3300,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -2793,6 +3317,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2884,6 +3409,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -3362,6 +3888,20 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3386,6 +3926,29 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "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.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz", @@ -3399,6 +3962,29 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3465,12 +4051,61 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -3493,6 +4128,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "dev": true, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3505,16 +4147,14 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, "node_modules/media-typer": { @@ -3522,15 +4162,20 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -3546,6 +4191,7 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3568,6 +4214,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -3576,10 +4223,11 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3589,6 +4237,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -3596,6 +4245,16 @@ "node": ">= 0.6" } }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3879,10 +4538,11 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3992,10 +4652,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4080,6 +4744,7 @@ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -4087,6 +4752,16 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4176,6 +4851,7 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4214,10 +4890,11 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -4373,6 +5050,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -4397,12 +5075,13 @@ } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -4445,15 +5124,17 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -4645,7 +5326,8 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semistandard": { "version": "16.0.1", @@ -4685,13 +5367,11 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4700,10 +5380,11 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -4728,6 +5409,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4736,13 +5418,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-javascript": { "version": "6.0.0", @@ -4754,15 +5448,16 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -4772,7 +5467,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -4796,14 +5492,76 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4905,6 +5663,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5100,6 +5859,7 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -5140,6 +5900,13 @@ "node": ">=0.10.0" } }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "dev": true, + "license": "MIT" + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -5220,6 +5987,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -5241,15 +6009,6 @@ "node": ">=4.2.0" } }, - "node_modules/uberproto": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.6.tgz", - "integrity": "sha512-68H97HffZoFaa3HFtpstahWorN9dSp5uTU6jo3GjIQ6JkJBR3hC2Nx/e/HFOoYHdUyT/Z1MRWfxN1EiQJZUyCQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/uglify-js": { "version": "3.16.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", @@ -5289,6 +6048,7 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5307,10 +6067,25 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -5322,6 +6097,7 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5419,12 +6195,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -5565,6 +6335,12 @@ } } }, + "@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "dev": true + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -5591,62 +6367,145 @@ } }, "@feathersjs/adapter-commons": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.17.tgz", - "integrity": "sha512-Tq39nQApJCq4/q9DMaO+qKqyCNDZ4q2Dde3e3PPzDvpTJgnQLyVgc4lUCNnLGejYZHT34rpCka9/AXxkEfJrQQ==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-5.0.34.tgz", + "integrity": "sha512-wc0HAZ0uov68p1ytBR5npyAePdNbFrRqr1fINSpLvIkrUkKDEcC6I/lOpk1TBpoI8so5IO/seZhkl25pqKM43A==", "dev": true, "requires": { - "@feathersjs/commons": "^4.5.16", - "@feathersjs/errors": "^4.5.17", - "@feathersjs/feathers": "^4.5.17" + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34" } }, "@feathersjs/adapter-tests": { - "version": "4.5.16", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.16.tgz", - "integrity": "sha512-a9xCGCkKC1iTN5bRxtxk8/0P7C202RFahDuAdFa73j2Ex7Zjs64DCFV/4F4oGipVjWmWRldFI4WInkgBjTEelA==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-5.0.34.tgz", + "integrity": "sha512-++BH3fBVAkuBaM2EJyXdfg7pw4UzZvTwVgLs4puZywz7Ve67oBRpwByY6h2QPMYxTKJaeCw2gIkDUG66ToZKXw==", "dev": true }, + "@feathersjs/authentication": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/authentication/-/authentication-5.0.34.tgz", + "integrity": "sha512-JnOoYJKx60SQDCj/JJAH9wzAL0EFFMaOjBN5Vh8JVTj1L4IrxUfy7uGathBumQc5vB2BqtyCy4BG8+/L49oQbA==", + "dev": true, + "requires": { + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "@feathersjs/schema": "^5.0.34", + "@feathersjs/transport-commons": "^5.0.34", + "@types/jsonwebtoken": "^9.0.9", + "jsonwebtoken": "^9.0.2", + "lodash": "^4.17.21", + "long-timeout": "^0.1.1", + "uuid": "^11.1.0" + }, + "dependencies": { + "@feathersjs/schema": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/schema/-/schema-5.0.34.tgz", + "integrity": "sha512-BpQxp46Vp0tH7l9jW4HIAGQerql7aJBeRXRggCVhBuqK48KoD1UhvYCWBmWwEouaYUnZ77HjQIMn9c1fK+dF2w==", + "dev": true, + "requires": { + "@feathersjs/adapter-commons": "^5.0.34", + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "@types/json-schema": "^7.0.15", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "json-schema-to-ts": "^3.1.1" + } + }, + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "peer": true + } + } + }, "@feathersjs/commons": { - "version": "4.5.16", - "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.16.tgz", - "integrity": "sha512-FXKAcGApcd9w3M42gjLi8+oaPijabS8qbD4ynQK3PM8J7BqpbSdCzURsI7EpReoQxFxdhrR4jix8cQIC/iAeuw==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-5.0.34.tgz", + "integrity": "sha512-UfHzq7taVJx++TXxX5pmDSR72xRp+h5nler4xcUlcJWLLykCOYo8YCeW03S7T1p1NuFdy0qBmU+B+G89bjyGmg==", "dev": true }, "@feathersjs/errors": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.17.tgz", - "integrity": "sha512-HY1YJV/9d5wKd3RPNaWggOhAX4NmOulr5EvBMMm6jaMizJ7UMRUgZmqyRtuHL4h+u2LoLmWv9+wO3V+uCFoULg==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-5.0.34.tgz", + "integrity": "sha512-C0t+pONnMvwlDW6iczcYmxaHzGvaGn3+BLhwlySEVYRciWOURIO8Eo5JVdN7cSM3Z7AxS3Dpk4DEhyFU/D2w6w==", + "dev": true + }, + "@feathersjs/express": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-5.0.34.tgz", + "integrity": "sha512-TNy8vEIYnjB9eEwancP07C5wYnv5i1vXctKH9HhtIfa1xJ7KnGgIDT9LNO4gX0OeURzDcE+zFEB9Xnto6zKh4g==", "dev": true, "requires": { - "debug": "^4.3.3" + "@feathersjs/authentication": "^5.0.34", + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "@feathersjs/transport-commons": "^5.0.34", + "@types/compression": "^1.7.5", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.19.5", + "compression": "^1.8.0", + "cors": "^2.8.5", + "express": "^4.21.2" } }, - "@feathersjs/express": { - "version": "4.5.18", - "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.18.tgz", - "integrity": "sha512-MqrVtUcWeMnJjlx+xL5DDbPRxB5wLvlVGwjqKV6csnjOmtY8Jhv0q8Y86oUWPf3Cb/HXV1s6uSQ1Yg/JTY2EcA==", + "@feathersjs/feathers": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-5.0.34.tgz", + "integrity": "sha512-jgeqKq/Uhsfeld42F8uimqzPv/uhtohkenpaWeD+NudJp2YZNYfA6gDZAL5UTpAvrTJFmK3QR1q1CnuL1mJdHg==", "dev": true, "requires": { - "@feathersjs/commons": "^4.5.16", - "@feathersjs/errors": "^4.5.17", - "@types/express": "^4.17.13", - "debug": "^4.3.3", - "express": "^4.17.2", - "lodash": "^4.17.21", - "uberproto": "^2.0.6" + "@feathersjs/commons": "^5.0.34", + "@feathersjs/hooks": "^0.9.0", + "events": "^3.3.0" } }, - "@feathersjs/feathers": { - "version": "4.5.17", - "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-4.5.17.tgz", - "integrity": "sha512-m42AViNlMMEaHn1akyPt+JBWXHU4Ncp/u7F/6oAk7cFRTRwxqdXyUgsh3aKv7GFxgkN+VYR/ZD5+YcX2XwLVZA==", + "@feathersjs/hooks": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@feathersjs/hooks/-/hooks-0.9.0.tgz", + "integrity": "sha512-kLfWnuhbC25CPkR1/TDcVs0rSiv0JLNxrpUivLwc7FUnkyeciRi5VOmC1SOzL2SOagcozu3+m4VQiONyzgfY7w==", + "dev": true + }, + "@feathersjs/transport-commons": { + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-5.0.34.tgz", + "integrity": "sha512-l+oQm1oIvfrxNUlidcqCtKfdWdKn1zHXGhEa13xIKiU5m2LFz1EYeMuq5vh/1pU0iECq3Oi+KdW53YnGl446cw==", "dev": true, "requires": { - "@feathersjs/commons": "^4.5.16", - "debug": "^4.3.3", - "events": "^3.3.0", - "uberproto": "^2.0.6" + "@feathersjs/commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", + "encodeurl": "^2.0.0", + "lodash": "^4.17.21" } }, "@humanwhocodes/config-array": { @@ -5744,51 +6603,77 @@ } }, "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" } }, + "@types/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node": "*" + } + }, "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dev": true, "requires": { "@types/node": "*" } }, "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, + "@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/json5": { @@ -5797,10 +6682,26 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "requires": { + "@types/ms": "*", + "@types/node": "*" + } + }, "@types/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true }, "@types/node": { @@ -5810,27 +6711,38 @@ "dev": true }, "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true }, "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, "requires": { - "@types/mime": "*", + "@types/mime": "^1", "@types/node": "*" } }, + "@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz", @@ -5946,6 +6858,14 @@ "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "dependencies": { + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + } } }, "acorn": { @@ -5973,6 +6893,35 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -6273,21 +7222,21 @@ "dev": true }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -6334,6 +7283,12 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -6350,6 +7305,26 @@ "get-intrinsic": "^1.0.2" } }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -6425,6 +7400,47 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6447,15 +7463,15 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true }, "cookie-signature": { @@ -6470,6 +7486,16 @@ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6583,6 +7609,26 @@ "esutils": "^2.0.2" } }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6596,9 +7642,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, "enquirer": { @@ -6650,6 +7696,27 @@ "unbox-primitive": "^1.0.2" } }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -7115,37 +8182,37 @@ "dev": true }, "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -7201,6 +8268,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -7239,13 +8312,13 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -7327,9 +8400,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "function.prototype.name": { @@ -7363,14 +8436,31 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, "get-stdin": { @@ -7435,6 +8525,12 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -7516,9 +8612,9 @@ } }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, "has-tostringtag": { @@ -7530,6 +8626,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -7998,6 +9103,16 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -8019,6 +9134,24 @@ "minimist": "^1.2.0" } }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "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.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + } + }, "jsx-ast-utils": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz", @@ -8029,6 +9162,27 @@ "object.assign": "^4.1.2" } }, + "jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8082,12 +9236,54 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -8104,6 +9300,12 @@ "is-unicode-supported": "^0.1.0" } }, + "long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "dev": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8113,14 +9315,11 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true }, "media-typer": { "version": "0.3.0", @@ -8129,9 +9328,9 @@ "dev": true }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true }, "merge2": { @@ -8163,9 +9362,9 @@ "dev": true }, "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true }, "mime-types": { @@ -8175,6 +9374,14 @@ "dev": true, "requires": { "mime-db": "1.52.0" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + } } }, "minimatch": { @@ -8384,9 +9591,9 @@ "dev": true }, "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true }, "neo-async": { @@ -8467,9 +9674,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true }, "object-keys": { @@ -8532,6 +9739,12 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8629,9 +9842,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, "path-type": { @@ -8762,12 +9975,12 @@ "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "queue-microtask": { @@ -8792,9 +10005,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", @@ -8933,18 +10146,15 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "requires": { "debug": "2.6.9", @@ -8979,6 +10189,12 @@ } } }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -8997,15 +10213,15 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "setprototypeof": { @@ -9030,14 +10246,51 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "simple-update-notifier": { @@ -9278,6 +10531,12 @@ "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", "dev": true }, + "ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "dev": true + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -9350,12 +10609,6 @@ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, - "uberproto": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.6.tgz", - "integrity": "sha512-68H97HffZoFaa3HFtpstahWorN9dSp5uTU6jo3GjIQ6JkJBR3hC2Nx/e/HFOoYHdUyT/Z1MRWfxN1EiQJZUyCQ==", - "dev": true - }, "uglify-js": { "version": "3.16.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", @@ -9402,6 +10655,12 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, + "uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true + }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -9483,12 +10742,6 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 0916c9e..62166be 100644 --- a/package.json +++ b/package.json @@ -61,17 +61,17 @@ "lib": "lib" }, "peerDependencies": { - "@feathersjs/adapter-commons": "4.*", - "@feathersjs/feathers": "4.*", - "@feathersjs/errors": "4.*", + "@feathersjs/adapter-commons": "5.*", + "@feathersjs/feathers": "5.*", + "@feathersjs/errors": "5.*", "@prisma/client": "5.*" }, "devDependencies": { - "@feathersjs/adapter-commons": "^4.5.17", - "@feathersjs/errors": "^4.5.17", - "@feathersjs/adapter-tests": "^4.5.16", - "@feathersjs/express": "^4.5.18", - "@feathersjs/feathers": "^4.5.17", + "@feathersjs/adapter-commons": "^5.0.34", + "@feathersjs/errors": "^5.0.34", + "@feathersjs/adapter-tests": "^5.0.34", + "@feathersjs/express": "^5.0.34", + "@feathersjs/feathers": "^5.0.34", "@prisma/client": "^5.9.1", "@types/node": "^17.0.5", "@typescript-eslint/eslint-plugin": "^5.8.1", diff --git a/prisma/tests.db b/prisma/tests.db index 27bc02706755d3615bc083ef09cb394a3b4216f0..8146dcc508e2ddef53f4762b9afe234c67418f4e 100644 GIT binary patch delta 586 zcmZo@U}|V!njp!{XfO$P|3}g?0@l_NH6AP zW|n0NNX;+EN%c(83*%;FmV|Qk_5pP>FmQ5){Ka&nx#^ybU2L7k~*MJZu91 = Partial, + ServiceParams extends AdapterParams = AdapterParams, + PatchData extends Partial = Partial, +> extends AdapterBase< + Result, + Data, + PatchData, + ServiceParams, + PrismaServiceOptions + > { + Model: any; + client: PrismaClient; + + constructor(options: PrismaServiceOptions, client: PrismaClient) { + if (!client) { + throw new errors.GeneralError('PrismaClient is required.'); + } + if (options.operators && !Array.isArray(options.operators)) { + throw new errors.GeneralError( + 'The \'operators\' option must be an array. For migration from feathers.js v4 see example: https://github.com/feathersjs-ecosystem/feathers-sequelize/tree/dove#migrate-to-feathers-v5-dove', + ); + } + + super({ + id: options.id || 'id', + paginate: { + default: options.paginate?.default, + max: options.paginate?.max, + }, + model: options.model, + multi: options.multi || [], + filters: options.filters || {}, + events: options.events || [], + operators: Object.values(OPERATORS).concat(options.operators || []), + }); + + const { model } = options; + if (!model) { + throw new errors.GeneralError('You must provide a model string.'); + } + + if (!client[model]) { + throw new errors.GeneralError(`No model with name ${model} found in prisma client.`); + } + this.client = client; + + this.Model = client[model]; + } + + + filterQuery(params: ServiceParams) { + const options = this.getOptions(params); + const { filters, query: _query } = filterQuery(params.query || {}, options); + + if (filters?.$select) { + if (!filters.$select.includes(this.id)) { + filters.$select.push(this.id); + } + filters.$select = filters.$select.map((select: any) => `${select}`); + } + + return { + filters: filters ?? {}, + query: _query, + paginate: options.paginate, + }; + } + + async _find( + params?: ServiceParams & { paginate?: PaginationOptions }, + ): Promise> + async _find(params?: ServiceParams & { paginate: false }): Promise + async _find(params?: ServiceParams): Promise | Result[]> + async _find( + params: ServiceParams = {} as ServiceParams, + ): Promise | Result[]> { + const { query, filters } = this.filterQuery(params ?? {}); + const { operators = [] } = this.options; + const { skip, take, orderBy, where, select, include } = buildPrismaQueryParams({ + query, filters, whitelist: operators.concat(Object.keys(filters)), + }, this.options.id || 'id'); + try { + const findMany = () => { + return this.Model.findMany({ + ...(typeof take === 'number' ? { skip, take } : { skip }), + orderBy, + where, + ...buildSelectOrInclude({ select, include }), + }); + }; + + if (!this.options.paginate || !this.options.paginate.default || (typeof take !== 'number' && !take)) { + const data = await findMany(); + return data; + } + + const [data, count] = await this.client.$transaction([ + findMany(), + this.Model.count({ + where, + }), + ]); + + const result = { + total: count, + skip, + limit: take, + data, + }; + return result; + } catch (e) { + errorHandler(e); + } + } + + async _get( + id: Id, + params: ServiceParams = {} as ServiceParams, + ): Promise { + try { + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = buildPrismaQueryParams({ + id, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, this.options.id ?? 'id'); + if (_helper.idQueryIsObject || _helper.queryWhereExists) { + const result: Result = await this.Model.findFirst({ + where: buildWhereWithOptionalIdObject(id, where, this.options.id || 'id'), + ...buildSelectOrInclude({ select, include }), + }); + if (!result) throw new errors.NotFound(`No record found for id '${id}' and query`); + return result; + } + checkIdInQuery({ id, query, idField: this.options.id || 'id' }); + const result: Result = await this.Model.findUnique({ + where, + ...buildSelectOrInclude({ select, include }), + }); + if (!result) { + throw new errors.NotFound(`No record found for id '${id}'`); + } + return result; + } catch (e) { + errorHandler(e, 'findUnique'); + } + } + + async _create(data: Data, params?: ServiceParams): Promise + async _create(data: Data[], params?: ServiceParams): Promise + async _create( + data: Data | Data[], + params?: ServiceParams, + ): Promise + async _create( + data: Data | Data[], + params: ServiceParams = {} as ServiceParams, + ): Promise { + const { query, filters } = this.filterQuery(params); + console.log('🚀 ~ PrismaAdapter ~ _create ~ query, filters:', query, filters); + + const { operators = [] } = this.options; + console.log('🚀 ~ PrismaAdapter ~ _create ~ operators:', operators); + const { select, include } = buildPrismaQueryParams({ + query, + filters, + whitelist: operators.concat(Object.keys(filters)) + }, this.options.id || 'id'); + console.log('🚀 ~ PrismaAdapter ~ _create ~ select, include:', select, include); + + try { + if (Array.isArray(data)) { + if (!this.allowsMulti('create', params)) { + throw new errors.MethodNotAllowed(); + } + + const result: Result[] = await this.client.$transaction(data.map((d) => this.Model.create({ + data: d, + ...buildSelectOrInclude({ select, include }), + }))); + return result; + } + const result: Result = await this.Model.create({ + data, + ...buildSelectOrInclude({ select, include }), + }); + return result; + } catch (e) { + errorHandler(e); + } + } + + async _update( + id: Id, + data: Data, + params: ServiceParams = {} as ServiceParams, + ): Promise { + return this.internalUpdate(id, data, params, true); + } + + private async internalUpdate( + id: Id, + data: PatchData | Data, + params: ServiceParams, + returnResult: true + ): Promise { + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = buildPrismaQueryParams({ + id, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, this.options.id ?? 'id'); + try { + if (_helper.idQueryIsObject) { + const newWhere = buildWhereWithOptionalIdObject(id, where, this.options.id ?? 'id'); + const [, result] = await this.client.$transaction([ + this.Model.updateMany({ + data, + where: newWhere, + ...buildSelectOrInclude({ select, include }), + }), + this.Model.findFirst({ + where: { + ...newWhere, + ...data, + }, + ...buildSelectOrInclude({ select, include }), + }), + ]); + if (!result) throw new errors.NotFound(`No record found for id '${id}'`); + return result; + } + checkIdInQuery({ id, query, idField: this.options.id ?? 'id' }); + const result = await this.Model.update({ + data, + where, + ...buildSelectOrInclude({ select, include }), + }); + if (select || returnResult) { + return result; + } + // @ts-expect-error Type 'Result' is not assignable to type 'any'. + return { [this.options.id ?? 'id']: result.id, ...data }; + } catch (e) { + errorHandler(e, 'update'); + } + } + + async _patch( + id: null, + data: PatchData, + params?: ServiceParams, + ): Promise + async _patch(id: Id, data: PatchData, params?: ServiceParams): Promise + async _patch( + id: NullableId, + data: PatchData, + params: ServiceParams = {} as ServiceParams, + ): Promise { + if (!id || Array.isArray(data)) { + if (!this.allowsMulti('patch', params)) { + throw new errors.MethodNotAllowed(); + } + } + + if (id && !Array.isArray(data)) { + const result = await this.internalUpdate(id, data, params, true); + return result; + } + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include } = buildPrismaQueryParams({ + query, + filters, + whitelist: operators.concat(Object.keys(filters)), + }, this.options.id ?? 'id'); + try { + const [, result] = await this.client.$transaction([ + this.Model.updateMany({ + data, + where, + ...buildSelectOrInclude({ select, include }), + }), + this.Model.findMany({ + where: { + ...where, + ...data, + }, + ...buildSelectOrInclude({ select, include }), + }), + ]); + return result; + } catch (e) { + errorHandler(e, 'updateMany'); + } + } + + async _remove(id: null, params?: ServiceParams): Promise + async _remove(id: Id, params?: ServiceParams): Promise + async _remove( + id: NullableId, + params: ServiceParams = {} as ServiceParams, + ): Promise { + if (!id && !this.allowsMulti('remove', params)) { + throw new errors.MethodNotAllowed(); + } + + const { query, filters } = this.filterQuery(params); + const { operators = [] } = this.options; + const { where, select, include, _helper } = buildPrismaQueryParams({ + id: id || undefined, query, filters, whitelist: operators.concat(Object.keys(filters)), + }, this.options.id ?? 'id'); + if (id && !_helper.idQueryIsObject) { + try { + checkIdInQuery({ id, query, allowOneOf: true, idField: this.options.id ?? 'id' }); + const result: Result = await this.Model.delete({ + where: id ? { [this.options.id ?? 'id']: id } : where, + ...buildSelectOrInclude({ select, include }), + }); + return result; + } catch (e) { + errorHandler(e, 'delete'); + } + } + try { + const query = { + where: id ? buildWhereWithOptionalIdObject(id, where, this.options.id ?? 'id') : where, + ...buildSelectOrInclude({ select, include }), + }; + const [data] = await this.client.$transaction([ + id ? this.Model.findFirst(query) : this.Model.findMany(query), + this.Model.deleteMany(query), + ]); + if (id && !data) throw new errors.NotFound(`No record found for id '${id}'`); + return data; + } catch (e) { + errorHandler(e, 'deleteMany'); + } + } +} diff --git a/src/error-handler.ts b/src/error-handler.ts index 036b956..d2aa9c6 100644 --- a/src/error-handler.ts +++ b/src/error-handler.ts @@ -19,7 +19,7 @@ function getType(v: number): string { return type; } -export function errorHandler(error: any, prismaMethod?: string) { +export function errorHandler(error: any, prismaMethod?: string): never { let feathersError; if (error instanceof errors.FeathersError) { feathersError = error; diff --git a/src/service.ts b/src/service.ts index 1050cfa..64cc0f9 100644 --- a/src/service.ts +++ b/src/service.ts @@ -1,233 +1,67 @@ -import type { Params } from '@feathersjs/feathers'; -import { AdapterService } from '@feathersjs/adapter-commons'; -import * as errors from '@feathersjs/errors'; +import { Id, Paginated, PaginationOptions, Params, ServiceMethods } from '@feathersjs/feathers'; +import { PrismaAdapter } from './adapter'; +import { PaginatedOrArray, PrismaServiceOptions } from './types'; +import { AdapterParams } from '@feathersjs/adapter-commons'; import { PrismaClient } from '@prisma/client'; -import { IdField, PrismaServiceOptions } from './types'; -import { buildPrismaQueryParams, buildSelectOrInclude, buildWhereWithOptionalIdObject, checkIdInQuery } from './utils'; -import { OPERATORS } from './constants'; -import { errorHandler } from './error-handler'; -export class PrismaService> extends AdapterService { - Model: any; - client: PrismaClient; - - constructor(options: PrismaServiceOptions, client: PrismaClient) { - super({ - id: options.id || 'id', - paginate: { - default: options.paginate?.default, - max: options.paginate?.max, - }, - multi: options.multi || [], - filters: options.filters || [], - events: options.events || [], - whitelist: Object.values(OPERATORS).concat(options.whitelist || []), - }); - - const { model } = options; - if (!model) { - throw new errors.GeneralError('You must provide a model string.'); - } - // @ts-ignore - if (!client[model]) { - throw new errors.GeneralError(`No model with name ${model} found in prisma client.`); - } - this.client = client; - // @ts-ignore - this.Model = client[model]; - } - - async _find(params: Params = {}): Promise { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { skip, take, orderBy, where, select, include } = buildPrismaQueryParams({ - query, filters, whitelist, - }, this.options.id); - try { - const findMany = () => { - return this.Model.findMany({ - ...(typeof take === 'number' ? { skip, take } : { skip }), - orderBy, - where, - ...buildSelectOrInclude({ select, include }), - }); - }; - - if (!this.options.paginate.default || (typeof take !== 'number' && !take)) { - const data = await findMany(); - return data; - } - - const [data, count] = await this.client.$transaction([ - findMany(), - this.Model.count({ - where, - }), - ]); - - const result = { - total: count, - skip, - limit: take, - data, - }; - return result; - } catch (e) { - errorHandler(e); - } +export class PrismaService< + Result = any, + Data extends Partial = Partial, + ServiceParams extends Params = AdapterParams, + PatchData extends Partial = Partial, +> + extends PrismaAdapter + implements + ServiceMethods, Data, ServiceParams, PatchData> +{ + async find< + P extends ServiceParams & { paginate?: PaginationOptions | false }, + >(params?: P): Promise> { + return this._find(params) as any; } - async _get(id: IdField, params: Params = {}) { - try { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = buildPrismaQueryParams({ - id, query, filters, whitelist - }, this.options.id); - if (_helper.idQueryIsObject || _helper.queryWhereExists) { - const result: Partial = await this.Model.findFirst({ - where: buildWhereWithOptionalIdObject(id, where, this.options.id), - ...buildSelectOrInclude({ select, include }), - }); - if (!result) throw new errors.NotFound(`No record found for id '${id}' and query`); - return result; - } - checkIdInQuery({ id, query, idField: this.options.id }); - const result: Partial = await this.Model.findUnique({ - where, - ...buildSelectOrInclude({ select, include }), - }); - if (!result) throw new errors.NotFound(`No record found for id '${id}'`); - return result; - } catch (e) { - errorHandler(e, 'findUnique'); - } + async get(id: Id, params?: ServiceParams): Promise { + return this._get(id, params); } - async _create(data: Partial | Partial[], params: Params = {}) { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { select, include } = buildPrismaQueryParams({ query, filters, whitelist }, this.options.id); - try { - if (Array.isArray(data)) { - const result: Partial[] = await this.client.$transaction(data.map((d) => this.Model.create({ - data: d, - ...buildSelectOrInclude({ select, include }), - }))); - return result; - } - const result: Partial = await this.Model.create({ - data, - ...buildSelectOrInclude({ select, include }), - }); - return result; - } catch (e) { - errorHandler(e); - } + async create(data: Data, params?: ServiceParams): Promise + async create(data: Data[], params?: ServiceParams): Promise + async create( + data: Data | Data[], + params?: ServiceParams, + ): Promise + async create( + data: Data | Data[], + params?: ServiceParams, + ): Promise { + return this._create(data, params); } - async _update(id: IdField, data: Partial, params: Params = {}, returnResult = false) { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = buildPrismaQueryParams({ - id, query, filters, whitelist, - }, this.options.id); - try { - if (_helper.idQueryIsObject) { - const newWhere = buildWhereWithOptionalIdObject(id, where, this.options.id); - const [, result] = await this.client.$transaction([ - this.Model.updateMany({ - data, - where: newWhere, - ...buildSelectOrInclude({ select, include }), - }), - this.Model.findFirst({ - where: { - ...newWhere, - ...data, - }, - ...buildSelectOrInclude({ select, include }), - }), - ]); - if (!result) throw new errors.NotFound(`No record found for id '${id}'`); - return result; - } - checkIdInQuery({ id, query, idField: this.options.id }); - const result = await this.Model.update({ - data, - where, - ...buildSelectOrInclude({ select, include }), - }); - if (select || returnResult) { - return result; - } - return { [this.options.id]: result.id, ...data }; - } catch (e) { - errorHandler(e, 'update'); - } + async update(id: Id, data: Data, params?: ServiceParams): Promise { + return this._update(id, data, params); } - async _patch(id: IdField | null, data: Partial | Partial[], params: Params = {}) { - if (id && !Array.isArray(data)) { - const result = await this._update(id, data, params, true); - return result; - } - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include } = buildPrismaQueryParams({ query, filters, whitelist }, this.options.id); - try { - const [, result] = await this.client.$transaction([ - this.Model.updateMany({ - data, - where, - ...buildSelectOrInclude({ select, include }), - }), - this.Model.findMany({ - where: { - ...where, - ...data, - }, - ...buildSelectOrInclude({ select, include }), - }), - ]); - return result; - } catch (e) { - errorHandler(e, 'updateMany'); - } + async patch(id: Id, data: PatchData, params?: ServiceParams): Promise + async patch( + id: null, + data: PatchData, + params?: ServiceParams, + ): Promise + async patch( + id: Id | null, + data: PatchData, + params?: ServiceParams, + ): Promise { + return this._patch(id as any /** fighting overloads */, data, params); } - async _remove(id: IdField | null, params: Params = {}) { - const { query, filters } = this.filterQuery(params); - const { whitelist } = this.options; - const { where, select, include, _helper } = buildPrismaQueryParams({ - id: id || undefined, query, filters, whitelist, - }, this.options.id); - if (id && !_helper.idQueryIsObject) { - try { - checkIdInQuery({ id, query, allowOneOf: true, idField: this.options.id }); - const result: Partial = await this.Model.delete({ - where: id ? { [this.options.id]: id } : where, - ...buildSelectOrInclude({ select, include }), - }); - return result; - } catch (e) { - errorHandler(e, 'delete'); - } - } - try { - const query = { - where: id ? buildWhereWithOptionalIdObject(id, where, this.options.id) : where, - ...buildSelectOrInclude({ select, include }), - }; - const [data] = await this.client.$transaction([ - id ? this.Model.findFirst(query) : this.Model.findMany(query), - this.Model.deleteMany(query), - ]); - if (id && !data) throw new errors.NotFound(`No record found for id '${id}'`); - return data; - } catch (e) { - errorHandler(e, 'deleteMany'); - } + async remove(id: Id, params?: ServiceParams): Promise + async remove(id: null, params?: ServiceParams): Promise + async remove( + id: Id | null, + params?: ServiceParams, + ): Promise { + return this._remove(id as any /** fighting overloads */, params); } } diff --git a/src/types.ts b/src/types.ts index d0c7fb2..f04a615 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,3 +1,7 @@ +import { FilterSettings } from '@feathersjs/adapter-commons'; +import { Prisma } from '@prisma/client'; +import type { Paginated, PaginationOptions } from '@feathersjs/feathers'; + export type PrismaClient = any; export type IdField = string | number; @@ -6,15 +10,16 @@ export type Paginate = { default?: number; max?: number; } - +type CamelCase = + S extends `${infer F}${infer R}` ? `${Lowercase}${R}` : S; export interface PrismaServiceOptions { - model: string; + model: CamelCase; events?: string[]; multi?: boolean | string[]; id?: string; paginate?: Paginate; - whitelist?: string[]; - filters?: string[]; + operators?: string[]; + filters?: FilterSettings; } export type EagerQuery = (string | string[] | string[][])[] | Record; @@ -47,3 +52,10 @@ export type QueryParamRecordsOr = Record = P extends { paginate: false } + ? R[] + : P extends { paginate: PaginationOptions } + ? Paginated + : Paginated | R[]; diff --git a/src/utils.ts b/src/utils.ts index 2f37ebd..af25a5a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -97,11 +97,16 @@ export const mergeFiltersWithSameKey = ( return filter; }; -export const buildWhereAndInclude = (query: QueryParam, whitelist: string[], idField: string) => { +export const buildWhereAndInclude = (filters: QueryParam, whitelist: string[], idField: string) => { const where: Record = {}; let include: Record = {}; - Object.keys(query).forEach((k: string | '$or' | '$and') => { - const value = query[k]; + Object.keys(filters).forEach((k: string | '$or' | '$and') => { + const value = filters[k]; + + if (['$sort', '$limit', '$skip'].includes(k)) { + return; + } + if (k === '$or' && Array.isArray(value)) { where.OR = value.map((v) => buildWhereAndInclude(v, whitelist, idField).where); } else if (k === '$and' && Array.isArray(value)) { @@ -116,6 +121,8 @@ export const buildWhereAndInclude = (query: QueryParam, whitelist: string[], idF } else if (k !== '$eager' && typeof value !== 'object' && !Array.isArray(value)) { where[k] = castToNumberBooleanStringOrNull(value); } else if (k === '$eager' && whitelist.includes(k)) { + console.log('🚀 ~ buildWhereAndInclude ~ whitelist:', whitelist); + const eager = value as EagerQuery; include = castEagerQueryToPrismaInclude(eager, whitelist, idField); } @@ -149,9 +156,10 @@ export const buildPrismaQueryParams = ( }, idField: string, ) => { + console.log('🚀 ~ buildPrismaQueryParams ~ whitelist:', whitelist); let select = buildSelect(filters.$select || []); const selectExists = Object.keys(select).length > 0; - const { where, include } = buildWhereAndInclude(id ? { [idField]: id, ...query } : query, whitelist, idField); + const { where, include } = buildWhereAndInclude(Object.assign({},id ? { [idField]: id, ...query } : query, filters), whitelist, idField); const includeExists = Object.keys(include).length > 0; const orderBy = buildOrderBy(filters.$sort || {}); const { skip, take } = buildPagination(filters.$skip, filters.$limit); diff --git a/test/index.test.js b/test/index.test.js index 622dd9d..874da3a 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -85,7 +85,8 @@ try { const users = prismaService({ model: 'user', events: ['testing'], - whitelist: ['$eager', '$prisma'], + filters: {'$eager': true }, + operators: ['$prisma'], }, prismaClient); const people = prismaService({ @@ -102,7 +103,7 @@ const peopleId = prismaService({ const todos = prismaService({ model: 'todo', multi: ['create', 'patch', 'remove'], - whitelist: ['$eager'], + filters: {'$eager': true}, }, prismaClient); app.use('/users', users); From 1e8eb9ca880ab9aac82e07e44c4951218e1b859d Mon Sep 17 00:00:00 2001 From: Muhammadyusuf Kurbonov Date: Thu, 31 Jul 2025 21:40:47 +0500 Subject: [PATCH 2/3] impl: add support for feathers v5 --- dist/adapter.js | 7 ++----- prisma/tests.db | Bin 32768 -> 32768 bytes src/adapter.ts | 13 +++++++------ test/index.test.js | 6 ++++++ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/dist/adapter.js b/dist/adapter.js index 5e527c1..d241f9d 100644 --- a/dist/adapter.js +++ b/dist/adapter.js @@ -126,15 +126,12 @@ class PrismaAdapter extends adapter_commons_1.AdapterBase { _create(data, params = {}) { return __awaiter(this, void 0, void 0, function* () { const { query, filters } = this.filterQuery(params); - console.log('🚀 ~ PrismaAdapter ~ _create ~ query, filters:', query, filters); const { operators = [] } = this.options; - console.log('🚀 ~ PrismaAdapter ~ _create ~ operators:', operators); const { select, include } = (0, utils_1.buildPrismaQueryParams)({ query, filters, whitelist: operators.concat(Object.keys(filters)) }, this.options.id || 'id'); - console.log('🚀 ~ PrismaAdapter ~ _create ~ select, include:', select, include); try { if (Array.isArray(data)) { if (!this.allowsMulti('create', params)) { @@ -153,10 +150,10 @@ class PrismaAdapter extends adapter_commons_1.AdapterBase { } _update(id, data, params = {}) { return __awaiter(this, void 0, void 0, function* () { - return this.internalUpdate(id, data, params, true); + return yield this.internalUpdate(id, data, params); }); } - internalUpdate(id, data, params, returnResult) { + internalUpdate(id, data, params, returnResult = false) { var _a, _b, _c, _d; return __awaiter(this, void 0, void 0, function* () { const { query, filters } = this.filterQuery(params); diff --git a/prisma/tests.db b/prisma/tests.db index 8146dcc508e2ddef53f4762b9afe234c67418f4e..8da9ce648323d1029ca50004c01d3cc23bcae30d 100644 GIT binary patch delta 440 zcmZo@U}|V!njp!{z}q@e#t}qqOpudTHZm|bH#9QSH8wFY(={%N0F{6xj9C~j0)?_cLL3kw zBPOs=1cRhFNPBdMzl(oth-+|&5#z?&wY-pL1YMyMOYiVv`q-$c4n51iIW}K{RYGiC~ zZkCp6nwFY8d7-?cT%GZ$<138}jEoEn4a^NJ4a|(q;xqFyOBg{C%Qq?9!^FfcHRgCsd!63a4En1EakkR*tk3gj{TLXl*6jUss$Rq`B)xCttER;CsWs z!he{F|1SSm{&W0?Hw!9k=C|c!VHRZy$xq3bUd+qPEXx#-nqQEU>Y1V!#?8nq3FYeT z0~*D^z{v?x$jJoM5n7yDWU_rzKs^7%0IqQUcMOsY;?fKpoM592{anKpLLA*q?0}l; z7{q}(8Nm|9EGG6qp=^*42Smt-2`m)BASn*g9v$NE;vXC08XRI|Vn6vnyi^ESS_Q0w zlgTH)C^Z)>A_NryxyaDO9-ctnV@)7`_+aoI-+jLOz~r$Gm^^^7P>34Vg{Wc8$buA{ zK!<-t3G3&mk~dH!PoYZgMv+_#k_06WpqcbZ3qXrtNdd@I09on+as)JA0L7$1E@W^4 uvIH5Vp*bWcwMYRTvRJboFeIJ%!6Auc8qjp4Tt>C@jKvQSOD8|DR{#JwXZxN2 diff --git a/src/adapter.ts b/src/adapter.ts index 321dd29..5496f89 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -1,4 +1,4 @@ -import type { Id, NullableId, Paginated, PaginationOptions, Params } from '@feathersjs/feathers'; +import type { Id, NullableId, Paginated, PaginationOptions } from '@feathersjs/feathers'; import { AdapterBase, AdapterParams, filterQuery } from '@feathersjs/adapter-commons'; import * as errors from '@feathersjs/errors'; import { PrismaClient } from '@prisma/client'; @@ -167,16 +167,13 @@ export class PrismaAdapter< params: ServiceParams = {} as ServiceParams, ): Promise { const { query, filters } = this.filterQuery(params); - console.log('🚀 ~ PrismaAdapter ~ _create ~ query, filters:', query, filters); const { operators = [] } = this.options; - console.log('🚀 ~ PrismaAdapter ~ _create ~ operators:', operators); const { select, include } = buildPrismaQueryParams({ query, filters, whitelist: operators.concat(Object.keys(filters)) }, this.options.id || 'id'); - console.log('🚀 ~ PrismaAdapter ~ _create ~ select, include:', select, include); try { if (Array.isArray(data)) { @@ -205,14 +202,18 @@ export class PrismaAdapter< data: Data, params: ServiceParams = {} as ServiceParams, ): Promise { - return this.internalUpdate(id, data, params, true); + return await this.internalUpdate( + id, + data, + params + ); } private async internalUpdate( id: Id, data: PatchData | Data, params: ServiceParams, - returnResult: true + returnResult = false ): Promise { const { query, filters } = this.filterQuery(params); const { operators = [] } = this.options; diff --git a/test/index.test.js b/test/index.test.js index 874da3a..3f31b88 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -514,12 +514,18 @@ describe('Feathers Prisma Service', () => { const result = await todosService.update(results[0].id, { tag1: 'NEW TAG', + prio: 4, + title: 'new test title', + done: true, }, { query: { $and: [{id: {$in: inIds}}], }, }); expect(result.tag1).to.be.equal('NEW TAG'); + expect(result.title).to.be.equal('new test title'); + expect(result.prio).to.be.equal(4); + expect(result.userId).to.be.equal(data.id); }); it('.patch + multiple id queries + result', async () => { From 1292358694a85221a8a79d63b87e7032b14aa217 Mon Sep 17 00:00:00 2001 From: Muhammadyusuf Kurbonov Date: Thu, 31 Jul 2025 21:43:09 +0500 Subject: [PATCH 3/3] impl: add support for feathers v5 --- test/index.test.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/index.test.js b/test/index.test.js index 3f31b88..874da3a 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -514,18 +514,12 @@ describe('Feathers Prisma Service', () => { const result = await todosService.update(results[0].id, { tag1: 'NEW TAG', - prio: 4, - title: 'new test title', - done: true, }, { query: { $and: [{id: {$in: inIds}}], }, }); expect(result.tag1).to.be.equal('NEW TAG'); - expect(result.title).to.be.equal('new test title'); - expect(result.prio).to.be.equal(4); - expect(result.userId).to.be.equal(data.id); }); it('.patch + multiple id queries + result', async () => {