diff --git a/.gitignore b/.gitignore index 0daf468..67e8d73 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ node_modules .env +## Popular IDE's .vscode +.idea .eslintcache diff --git a/dist/error-handler.js b/dist/error-handler.js index 1d9bce0..0dbd38e 100644 --- a/dist/error-handler.js +++ b/dist/error-handler.js @@ -9,7 +9,7 @@ function getType(v) { common: v >= 1000 && v < 2000, query: v >= 2000 && v < 3000, migration: v >= 3000 && v < 4000, - introspection: v >= 4000 && v < 4000, + introspection: v >= 4000 && v < 5000, }; Object.keys(cases).map((key) => { // @ts-ignore diff --git a/dist/utils.d.ts b/dist/utils.d.ts index de641c7..f4b7626 100644 --- a/dist/utils.d.ts +++ b/dist/utils.d.ts @@ -2,7 +2,6 @@ import { EagerQuery, FeathersQueryData, IdField, QueryParam, QueryParamRecordFil export declare const castToNumberBooleanStringOrNull: (value: string | boolean | number) => string | number | boolean | null; export declare const castFeathersQueryToPrismaFilters: (p: QueryParamRecordFilters, whitelist: string[]) => Record; export declare const castEagerQueryToPrismaInclude: (value: EagerQuery, whitelist: string[], idField: string) => EagerQuery; -export declare const mergeFiltersWithSameKey: (where: Record, key: string, filter: Record | string | number | boolean | null) => Record | string | number | boolean; /** * WARN: This method is not safe for Feathers queries because unwanted queries can reach the Prisma-Client. **/ diff --git a/dist/utils.js b/dist/utils.js index b3ca68c..3e22885 100644 --- a/dist/utils.js +++ b/dist/utils.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.buildSelectOrInclude = exports.buildPrismaQueryParams = exports.buildBasePrismaQueryParams = exports.buildWhereWithId = exports.hasIdObject = exports.buildPagination = exports.buildOrderBy = exports.buildSelect = exports.buildWhereAndInclude = exports.buildIdField = exports.mergeFiltersWithSameKey = exports.castEagerQueryToPrismaInclude = exports.castFeathersQueryToPrismaFilters = exports.castToNumberBooleanStringOrNull = void 0; +exports.buildSelectOrInclude = exports.buildPrismaQueryParams = exports.buildBasePrismaQueryParams = exports.buildWhereWithId = exports.hasIdObject = exports.buildPagination = exports.buildOrderBy = exports.buildSelect = exports.buildWhereAndInclude = exports.buildIdField = exports.castEagerQueryToPrismaInclude = exports.castFeathersQueryToPrismaFilters = exports.castToNumberBooleanStringOrNull = void 0; const constants_1 = require("./constants"); const castToNumberBooleanStringOrNull = (value) => { const isNumber = typeof value === 'number'; @@ -40,9 +40,10 @@ const castFeathersQueryToPrismaFilters = (p, whitelist) => { return filters; }; exports.castFeathersQueryToPrismaFilters = castFeathersQueryToPrismaFilters; +// eslint-disable-next-line const castEagerQueryToPrismaInclude = (value, whitelist, idField) => { // we don't care about feathers compliance, we want where queries in our include - // thus just returnung the $eager value as include 1:1 + // thus just returning the $eager value as include 1:1 return value; // const include: Record = {}; // if (Array.isArray(value)) { @@ -83,19 +84,6 @@ const castEagerQueryToPrismaInclude = (value, whitelist, idField) => { // return include; }; exports.castEagerQueryToPrismaInclude = castEagerQueryToPrismaInclude; -const mergeFiltersWithSameKey = (where, key, filter) => { - const current = where[key]; - if (typeof filter === 'object') { - const currentIsObj = typeof current === 'object'; - return { - ...(currentIsObj ? current : {}), - ...filter, - ...(!currentIsObj && current ? { equals: current } : {}) - }; - } - return filter; -}; -exports.mergeFiltersWithSameKey = mergeFiltersWithSameKey; /** * WARN: This method is not safe for Feathers queries because unwanted queries can reach the Prisma-Client. **/ diff --git a/package-lock.json b/package-lock.json index 3ee41e2..adc22b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,14 +9,14 @@ "version": "0.12.0", "license": "MIT", "dependencies": { - "@feathersjs/adapter-commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15" + "@feathersjs/adapter-commons": "^4.5.17", + "@feathersjs/errors": "^4.5.17" }, "devDependencies": { - "@feathersjs/adapter-tests": "^4.5.15", - "@feathersjs/express": "^4.5.15", - "@feathersjs/feathers": "^4.5.15", - "@prisma/client": "^5.8.1", + "@feathersjs/adapter-tests": "^4.5.16", + "@feathersjs/express": "^4.5.17", + "@feathersjs/feathers": "^4.5.17", + "@prisma/client": "^5.9.1", "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^5.42.1", "@typescript-eslint/parser": "^5.42.1", @@ -25,9 +25,9 @@ "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.26.0", "istanbul": "^1.1.0-alpha.1", - "mocha": "^9.1.3", + "mocha": "^10.2.0", "nodemon": "^2.0.20", - "prisma": "^5.8.1", + "prisma": "^5.9.1", "semistandard": "^16.0.1", "typescript": "^4.8.4" }, @@ -183,13 +183,13 @@ } }, "node_modules/@feathersjs/adapter-commons": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.15.tgz", - "integrity": "sha512-kKqL4mYCe+dBn271lfJb6/79qEL0C7R7EfVrW+U75uCGrOuE3Ws8LbE2SQcjasUcrzZQShiJDJIpU/grcTPsHg==", + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.17.tgz", + "integrity": "sha512-Tq39nQApJCq4/q9DMaO+qKqyCNDZ4q2Dde3e3PPzDvpTJgnQLyVgc4lUCNnLGejYZHT34rpCka9/AXxkEfJrQQ==", "dependencies": { - "@feathersjs/commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15", - "@feathersjs/feathers": "^4.5.15" + "@feathersjs/commons": "^4.5.16", + "@feathersjs/errors": "^4.5.17", + "@feathersjs/feathers": "^4.5.17" }, "engines": { "node": ">= 10" @@ -200,9 +200,9 @@ } }, "node_modules/@feathersjs/adapter-tests": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.15.tgz", - "integrity": "sha512-PdRchUUCdZzUsgGX0/krSHcMduoJC+m9CxYmJrfN8DOCuR0GH7zWPEKa0E32IrUVkR3d6KbnXw+Lxz03kj0CWQ==", + "version": "4.5.16", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.16.tgz", + "integrity": "sha512-a9xCGCkKC1iTN5bRxtxk8/0P7C202RFahDuAdFa73j2Ex7Zjs64DCFV/4F4oGipVjWmWRldFI4WInkgBjTEelA==", "dev": true, "engines": { "node": ">= 10" @@ -213,9 +213,9 @@ } }, "node_modules/@feathersjs/commons": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.15.tgz", - "integrity": "sha512-eVEcLJL3GcPQBQcD77jI3fZ4MMx+iD02Px2Z1lDw+cn/iGCeQkWWAPQs4Tp+HGR1rTL5JO+unyhzN8V9X7OYmw==", + "version": "4.5.16", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.16.tgz", + "integrity": "sha512-FXKAcGApcd9w3M42gjLi8+oaPijabS8qbD4ynQK3PM8J7BqpbSdCzURsI7EpReoQxFxdhrR4jix8cQIC/iAeuw==", "engines": { "node": ">= 10" }, @@ -225,9 +225,9 @@ } }, "node_modules/@feathersjs/errors": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.15.tgz", - "integrity": "sha512-EJAYWMsWZlUA/halbgZBc6eP2d3HPkHi5GzprYEK58GCh51KJ36VjX7VKVEnMjgBSED+PE00tpr3ZvUC4nUR+Q==", + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.17.tgz", + "integrity": "sha512-HY1YJV/9d5wKd3RPNaWggOhAX4NmOulr5EvBMMm6jaMizJ7UMRUgZmqyRtuHL4h+u2LoLmWv9+wO3V+uCFoULg==", "dependencies": { "debug": "^4.3.3" }, @@ -236,13 +236,13 @@ } }, "node_modules/@feathersjs/express": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.15.tgz", - "integrity": "sha512-5gNaXpDZFY0W8svZflDCdQILeiVFt532LiLHYhBJdMK/lMyttKl1Ul8ZjQ/WF4P8Wmp196bxeIUyiJpIdoCXbQ==", + "version": "4.5.18", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.18.tgz", + "integrity": "sha512-MqrVtUcWeMnJjlx+xL5DDbPRxB5wLvlVGwjqKV6csnjOmtY8Jhv0q8Y86oUWPf3Cb/HXV1s6uSQ1Yg/JTY2EcA==", "dev": true, "dependencies": { - "@feathersjs/commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15", + "@feathersjs/commons": "^4.5.16", + "@feathersjs/errors": "^4.5.17", "@types/express": "^4.17.13", "debug": "^4.3.3", "express": "^4.17.2", @@ -258,11 +258,11 @@ } }, "node_modules/@feathersjs/feathers": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-4.5.15.tgz", - "integrity": "sha512-Q7sa1QAEhspYHsVEJPRg313bqjNaOhgvibiUxtjf3CGGJL9hVcAPLHQbrzsZuVTR4QwBATZSf6voEtuNmG/pIQ==", + "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==", "dependencies": { - "@feathersjs/commons": "^4.5.15", + "@feathersjs/commons": "^4.5.16", "debug": "^4.3.3", "events": "^3.3.0", "uberproto": "^2.0.6" @@ -344,9 +344,9 @@ } }, "node_modules/@prisma/client": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.8.1.tgz", - "integrity": "sha512-xQtMPfbIwLlbm0VVIVQY2yqQVOxPwRQhvIp7Z3m2900g1bu/zRHKhYZJQWELqmjl6d8YwBy0K2NvMqh47v1ubw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.9.1.tgz", + "integrity": "sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==", "dev": true, "hasInstallScript": true, "engines": { @@ -362,48 +362,48 @@ } }, "node_modules/@prisma/debug": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.8.1.tgz", - "integrity": "sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.9.1.tgz", + "integrity": "sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==", "dev": true }, "node_modules/@prisma/engines": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.8.1.tgz", - "integrity": "sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.9.1.tgz", + "integrity": "sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@prisma/debug": "5.8.1", - "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "@prisma/fetch-engine": "5.8.1", - "@prisma/get-platform": "5.8.1" + "@prisma/debug": "5.9.1", + "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "@prisma/fetch-engine": "5.9.1", + "@prisma/get-platform": "5.9.1" } }, "node_modules/@prisma/engines-version": { - "version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2.tgz", - "integrity": "sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==", + "version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64.tgz", + "integrity": "sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==", "dev": true }, "node_modules/@prisma/fetch-engine": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.8.1.tgz", - "integrity": "sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.9.1.tgz", + "integrity": "sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==", "dev": true, "dependencies": { - "@prisma/debug": "5.8.1", - "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "@prisma/get-platform": "5.8.1" + "@prisma/debug": "5.9.1", + "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "@prisma/get-platform": "5.9.1" } }, "node_modules/@prisma/get-platform": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.8.1.tgz", - "integrity": "sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.9.1.tgz", + "integrity": "sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==", "dev": true, "dependencies": { - "@prisma/debug": "5.8.1" + "@prisma/debug": "5.9.1" } }, "node_modules/@types/body-parser": { @@ -687,12 +687,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -2567,15 +2561,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -3577,42 +3562,39 @@ } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 14.0.0" }, "funding": { "type": "opencollective", @@ -3634,29 +3616,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3702,17 +3661,26 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3740,9 +3708,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -4223,13 +4191,13 @@ } }, "node_modules/prisma": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.8.1.tgz", - "integrity": "sha512-N6CpjzECnUHZ5beeYpDzkt2rYpEdAeqXX2dweu6BoQaeYkNZrC/WJHM+5MO/uidFHTak8QhkPKBWck1o/4MD4A==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.9.1.tgz", + "integrity": "sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "5.8.1" + "@prisma/engines": "5.9.1" }, "bin": { "prisma": "build/index.js" @@ -5556,9 +5524,9 @@ "dev": true }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { @@ -5783,42 +5751,42 @@ } }, "@feathersjs/adapter-commons": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.15.tgz", - "integrity": "sha512-kKqL4mYCe+dBn271lfJb6/79qEL0C7R7EfVrW+U75uCGrOuE3Ws8LbE2SQcjasUcrzZQShiJDJIpU/grcTPsHg==", + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-commons/-/adapter-commons-4.5.17.tgz", + "integrity": "sha512-Tq39nQApJCq4/q9DMaO+qKqyCNDZ4q2Dde3e3PPzDvpTJgnQLyVgc4lUCNnLGejYZHT34rpCka9/AXxkEfJrQQ==", "requires": { - "@feathersjs/commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15", - "@feathersjs/feathers": "^4.5.15" + "@feathersjs/commons": "^4.5.16", + "@feathersjs/errors": "^4.5.17", + "@feathersjs/feathers": "^4.5.17" } }, "@feathersjs/adapter-tests": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.15.tgz", - "integrity": "sha512-PdRchUUCdZzUsgGX0/krSHcMduoJC+m9CxYmJrfN8DOCuR0GH7zWPEKa0E32IrUVkR3d6KbnXw+Lxz03kj0CWQ==", + "version": "4.5.16", + "resolved": "https://registry.npmjs.org/@feathersjs/adapter-tests/-/adapter-tests-4.5.16.tgz", + "integrity": "sha512-a9xCGCkKC1iTN5bRxtxk8/0P7C202RFahDuAdFa73j2Ex7Zjs64DCFV/4F4oGipVjWmWRldFI4WInkgBjTEelA==", "dev": true }, "@feathersjs/commons": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.15.tgz", - "integrity": "sha512-eVEcLJL3GcPQBQcD77jI3fZ4MMx+iD02Px2Z1lDw+cn/iGCeQkWWAPQs4Tp+HGR1rTL5JO+unyhzN8V9X7OYmw==" + "version": "4.5.16", + "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-4.5.16.tgz", + "integrity": "sha512-FXKAcGApcd9w3M42gjLi8+oaPijabS8qbD4ynQK3PM8J7BqpbSdCzURsI7EpReoQxFxdhrR4jix8cQIC/iAeuw==" }, "@feathersjs/errors": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.15.tgz", - "integrity": "sha512-EJAYWMsWZlUA/halbgZBc6eP2d3HPkHi5GzprYEK58GCh51KJ36VjX7VKVEnMjgBSED+PE00tpr3ZvUC4nUR+Q==", + "version": "4.5.17", + "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-4.5.17.tgz", + "integrity": "sha512-HY1YJV/9d5wKd3RPNaWggOhAX4NmOulr5EvBMMm6jaMizJ7UMRUgZmqyRtuHL4h+u2LoLmWv9+wO3V+uCFoULg==", "requires": { "debug": "^4.3.3" } }, "@feathersjs/express": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.15.tgz", - "integrity": "sha512-5gNaXpDZFY0W8svZflDCdQILeiVFt532LiLHYhBJdMK/lMyttKl1Ul8ZjQ/WF4P8Wmp196bxeIUyiJpIdoCXbQ==", + "version": "4.5.18", + "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-4.5.18.tgz", + "integrity": "sha512-MqrVtUcWeMnJjlx+xL5DDbPRxB5wLvlVGwjqKV6csnjOmtY8Jhv0q8Y86oUWPf3Cb/HXV1s6uSQ1Yg/JTY2EcA==", "dev": true, "requires": { - "@feathersjs/commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15", + "@feathersjs/commons": "^4.5.16", + "@feathersjs/errors": "^4.5.17", "@types/express": "^4.17.13", "debug": "^4.3.3", "express": "^4.17.2", @@ -5827,11 +5795,11 @@ } }, "@feathersjs/feathers": { - "version": "4.5.15", - "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-4.5.15.tgz", - "integrity": "sha512-Q7sa1QAEhspYHsVEJPRg313bqjNaOhgvibiUxtjf3CGGJL9hVcAPLHQbrzsZuVTR4QwBATZSf6voEtuNmG/pIQ==", + "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==", "requires": { - "@feathersjs/commons": "^4.5.15", + "@feathersjs/commons": "^4.5.16", "debug": "^4.3.3", "events": "^3.3.0", "uberproto": "^2.0.6" @@ -5887,54 +5855,54 @@ } }, "@prisma/client": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.8.1.tgz", - "integrity": "sha512-xQtMPfbIwLlbm0VVIVQY2yqQVOxPwRQhvIp7Z3m2900g1bu/zRHKhYZJQWELqmjl6d8YwBy0K2NvMqh47v1ubw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.9.1.tgz", + "integrity": "sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==", "dev": true, "requires": {} }, "@prisma/debug": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.8.1.tgz", - "integrity": "sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.9.1.tgz", + "integrity": "sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==", "dev": true }, "@prisma/engines": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.8.1.tgz", - "integrity": "sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.9.1.tgz", + "integrity": "sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==", "dev": true, "requires": { - "@prisma/debug": "5.8.1", - "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "@prisma/fetch-engine": "5.8.1", - "@prisma/get-platform": "5.8.1" + "@prisma/debug": "5.9.1", + "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "@prisma/fetch-engine": "5.9.1", + "@prisma/get-platform": "5.9.1" } }, "@prisma/engines-version": { - "version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2.tgz", - "integrity": "sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==", + "version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64.tgz", + "integrity": "sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==", "dev": true }, "@prisma/fetch-engine": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.8.1.tgz", - "integrity": "sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.9.1.tgz", + "integrity": "sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==", "dev": true, "requires": { - "@prisma/debug": "5.8.1", - "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2", - "@prisma/get-platform": "5.8.1" + "@prisma/debug": "5.9.1", + "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64", + "@prisma/get-platform": "5.9.1" } }, "@prisma/get-platform": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.8.1.tgz", - "integrity": "sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.9.1.tgz", + "integrity": "sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==", "dev": true, "requires": { - "@prisma/debug": "5.8.1" + "@prisma/debug": "5.9.1" } }, "@types/body-parser": { @@ -6129,12 +6097,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -7593,12 +7555,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -8365,32 +8321,29 @@ } }, "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "requires": { - "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -8408,23 +8361,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -8460,12 +8396,23 @@ } }, "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } } }, "ms": { @@ -8491,9 +8438,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { @@ -8839,12 +8786,12 @@ "dev": true }, "prisma": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.8.1.tgz", - "integrity": "sha512-N6CpjzECnUHZ5beeYpDzkt2rYpEdAeqXX2dweu6BoQaeYkNZrC/WJHM+5MO/uidFHTak8QhkPKBWck1o/4MD4A==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.9.1.tgz", + "integrity": "sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==", "dev": true, "requires": { - "@prisma/engines": "5.8.1" + "@prisma/engines": "5.9.1" } }, "progress": { @@ -9774,9 +9721,9 @@ "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index 033dfc1..06b8a17 100644 --- a/package.json +++ b/package.json @@ -66,17 +66,17 @@ "lib": "lib" }, "dependencies": { - "@feathersjs/adapter-commons": "^4.5.15", - "@feathersjs/errors": "^4.5.15" + "@feathersjs/adapter-commons": "^4.5.17", + "@feathersjs/errors": "^4.5.17" }, "peerDependencies": { "@prisma/client": ">= 3.7.0" }, "devDependencies": { - "@feathersjs/adapter-tests": "^4.5.15", - "@feathersjs/express": "^4.5.15", - "@feathersjs/feathers": "^4.5.15", - "@prisma/client": "^5.8.1", + "@feathersjs/adapter-tests": "^4.5.16", + "@feathersjs/express": "^4.5.17", + "@feathersjs/feathers": "^4.5.17", + "@prisma/client": "^5.9.1", "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^5.42.1", "@typescript-eslint/parser": "^5.42.1", @@ -85,9 +85,9 @@ "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.26.0", "istanbul": "^1.1.0-alpha.1", - "mocha": "^9.1.3", + "mocha": "^10.2.0", "nodemon": "^2.0.20", - "prisma": "^5.8.1", + "prisma": "^5.9.1", "semistandard": "^16.0.1", "typescript": "^4.8.4" }, diff --git a/prisma/tests.db b/prisma/tests.db index 3be6075..96bbbda 100644 Binary files a/prisma/tests.db and b/prisma/tests.db differ diff --git a/src/error-handler.ts b/src/error-handler.ts index 191bbc1..dce63ca 100644 --- a/src/error-handler.ts +++ b/src/error-handler.ts @@ -7,7 +7,7 @@ function getType(v: number): string { common: v >= 1000 && v < 2000, query: v >= 2000 && v < 3000, migration: v >= 3000 && v < 4000, - introspection: v >= 4000 && v < 4000, + introspection: v >= 4000 && v < 5000, }; Object.keys(cases).map((key) => { // @ts-ignore diff --git a/src/utils.ts b/src/utils.ts index dfd4947..a9eaa0b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -37,6 +37,7 @@ export const castFeathersQueryToPrismaFilters = (p: QueryParamRecordFilters, whi return filters; }; +// eslint-disable-next-line export const castEagerQueryToPrismaInclude = (value: EagerQuery, whitelist: string[], idField: string) => { // we don't care about feathers compliance, we want where queries in our include // thus just returning the $eager value as include 1:1 @@ -240,4 +241,4 @@ export const buildSelectOrInclude = ( { select, include }: { select?: Record; include?: Record }, ) => { return select ? { select } : include ? { include } : {}; -}; \ No newline at end of file +}; diff --git a/test/errors.test.js b/test/errors.test.js new file mode 100644 index 0000000..ed4d7f0 --- /dev/null +++ b/test/errors.test.js @@ -0,0 +1,164 @@ +const { FeathersError } = require('@feathersjs/errors'); +const { errorHandler } = require('../dist'); +const { assert, expect } = require('chai'); +const Prisma = require("@prisma/client"); + +describe('the \'buildPrismaQueryParams\' function', () => { + const MESSAGE = 'test'; + const ERROR_BODY = {meta: 'meta', message: 'test', clientVersion: '5.9.1'} + + it('It should return error if instance of errors.FeathersError', async () => { + try { + const error = new FeathersError('Test Error'); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + } + }); + + it('It should return common type feathers error for P1000', async () => { + const code = 'P1000'; + const ERROR = { code, ...ERROR_BODY }; + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, ERROR); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('GeneralError'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(500); + expect(error.className).to.be.equal('general-error'); + } + }); + + it('It should return query type feathers error for P2025', async () => { + const code = 'P2025'; + const ERROR = {code, ...ERROR_BODY}; + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, ERROR); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('NotFound'); + expect(error.message).to.be.equal('Record not found.'); + expect(error.code).to.be.equal(404); + expect(error.className).to.be.equal('not-found'); + } + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, { ...ERROR, meta: { cause: 'Something is wrong.' } }); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('NotFound'); + expect(error.message).to.be.equal('Something is wrong.'); + expect(error.code).to.be.equal(404); + expect(error.className).to.be.equal('not-found'); + } + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, { ...ERROR, meta: null }); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('NotFound'); + expect(error.message).to.be.equal('Record not found.'); + expect(error.code).to.be.equal(404); + expect(error.className).to.be.equal('not-found'); + } + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, { code: 'P2000' }); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('BadRequest'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(400); + expect(error.className).to.be.equal('bad-request'); + } + }); + + it('It should return migration type feathers error for P3000 to P4000', async () => { + const code = 'P3000'; + const ERROR = {code, ...ERROR_BODY}; + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, ERROR); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('GeneralError'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(500); + expect(error.className).to.be.equal('general-error'); + } + }); + + it('It should return introspection type feathers error for P4000 to P5000', async () => { + const code = 'P4000'; + const ERROR = {code, ...ERROR_BODY}; + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, ERROR); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('GeneralError'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(500); + expect(error.className).to.be.equal('general-error'); + } + }); + + it('It should return default bad request type feathers error for > P5000', async () => { + const code = 'P5000'; + const ERROR = {code, ...ERROR_BODY}; + try { + const error = new Prisma.PrismaClientKnownRequestError(MESSAGE, ERROR); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('BadRequest'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(400); + expect(error.className).to.be.equal('bad-request'); + } + }); + + it('It should return prisma errors for PrismaClientValidationError and methods 4 methods', async () => { + const code = 'P2025'; + const ERROR = {code, ...ERROR_BODY}; + const prismaMethods = ['findUnique', 'remove', 'update', 'delete']; + for (const prismaMethod of prismaMethods) { + try { + const error = new Prisma.PrismaClientValidationError(MESSAGE, ERROR); + errorHandler(error, prismaMethod); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('NotFound'); + expect(error.message).to.be.equal('Record not found.'); + expect(error.code).to.be.equal(404); + expect(error.className).to.be.equal('not-found'); + } + } + try { + const error = new Prisma.PrismaClientValidationError(MESSAGE, ERROR); + errorHandler(error, 'unknownMethod'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('GeneralError'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(500); + expect(error.className).to.be.equal('general-error'); + } + }); + + it('It should return general feathers error for all other errors.', async () => { + try { + const error = new Error(MESSAGE); + errorHandler(error, 'findUnique'); + } catch (error) { + assert.ok(error instanceof FeathersError); + expect(error.name).to.be.equal('GeneralError'); + expect(error.message).to.be.equal(MESSAGE); + expect(error.code).to.be.equal(500); + expect(error.className).to.be.equal('general-error'); + } + }); +});