@inversifyjs/class-validation 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @inversifyjs/class-validation
|
|
2
2
|
|
|
3
|
+
## 2.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated `ClassValidationPipe` to properly handle nullish and primitive values
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @inversifyjs/validation-common@2.0.2
|
|
10
|
+
|
|
3
11
|
## 2.0.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassValidationPipe.d.ts","sourceRoot":"","sources":["../../../src/pipes/ClassValidationPipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ClassValidationPipe.d.ts","sourceRoot":"","sources":["../../../src/pipes/ClassValidationPipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA4BjE,qBAAa,mBAAoB,YAAW,IAAI;IACjC,OAAO,CAClB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC;CAyDpB"}
|
|
@@ -5,15 +5,41 @@ const reflect_metadata_utils_1 = require("@inversifyjs/reflect-metadata-utils");
|
|
|
5
5
|
const validation_common_1 = require("@inversifyjs/validation-common");
|
|
6
6
|
const class_transformer_1 = require("class-transformer");
|
|
7
7
|
const class_validator_1 = require("class-validator");
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
9
|
+
const ALLOW_NULLISH_VALUE_TYPES_LIST = [
|
|
10
|
+
Object,
|
|
11
|
+
undefined,
|
|
12
|
+
];
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
14
|
+
const NON_VALIDATED_TYPES_LIST = [
|
|
15
|
+
Array,
|
|
16
|
+
BigInt,
|
|
17
|
+
Boolean,
|
|
18
|
+
Buffer,
|
|
19
|
+
Function,
|
|
20
|
+
Number,
|
|
21
|
+
Object,
|
|
22
|
+
String,
|
|
23
|
+
Symbol,
|
|
24
|
+
];
|
|
8
25
|
class ClassValidationPipe {
|
|
9
26
|
async execute(input, metadata) {
|
|
10
27
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
11
28
|
const inputType = (0, reflect_metadata_utils_1.getOwnReflectMetadata)(
|
|
12
29
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
13
30
|
metadata.targetClass.prototype, 'design:paramtypes', metadata.methodName)?.[metadata.parameterIndex];
|
|
31
|
+
if (input == undefined) {
|
|
32
|
+
if (ALLOW_NULLISH_VALUE_TYPES_LIST.includes(inputType)) {
|
|
33
|
+
return input;
|
|
34
|
+
}
|
|
35
|
+
throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.validationFailed, `Validation failed. Found nullish value but expected type "${inputType?.name ?? 'undefined'}" at ${metadata.targetClass.name}.${metadata.methodName.toString()}[${metadata.parameterIndex.toString()}].`);
|
|
36
|
+
}
|
|
14
37
|
if (inputType === undefined) {
|
|
15
38
|
throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.invalidConfiguration, `Param type metadata for ${metadata.targetClass.name}.${metadata.methodName.toString()}[${metadata.parameterIndex.toString()}] is not defined. Are you enabling "emitDecoratorMetadata" and "experimentalDecorators" Typescript compiler options?`);
|
|
16
39
|
}
|
|
40
|
+
if (NON_VALIDATED_TYPES_LIST.includes(inputType)) {
|
|
41
|
+
return input;
|
|
42
|
+
}
|
|
17
43
|
const instance = (0, class_transformer_1.plainToInstance)(inputType, input);
|
|
18
44
|
const validationResult = await (0, class_validator_1.validate)(instance, {
|
|
19
45
|
forbidNonWhitelisted: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassValidationPipe.js","sourceRoot":"","sources":["../../../src/pipes/ClassValidationPipe.ts"],"names":[],"mappings":";;;AACA,gFAA4E;AAC5E,sEAGwC;AACxC,yDAAsE;AACtE,qDAA4D;AAE5D,MAAa,mBAAmB;IACvB,KAAK,CAAC,OAAO,CAClB,KAAc,EACd,QAAsB;QAEtB,sEAAsE;QACtE,MAAM,SAAS,GAAyB,IAAA,8CAAqB;QAC3D,iEAAiE;QACjE,QAAQ,CAAC,WAAW,CAAC,SAAS,EAC9B,mBAAmB,EACnB,QAAQ,CAAC,UAAU,CACpB,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE7B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,oBAAoB,EACjD,2BAA2B,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,sHAAsH,CACnP,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAW,IAAA,mCAAe,EACtC,SAAqC,EACrC,KAAK,CACN,CAAC;QAEF,MAAM,gBAAgB,GAAsB,MAAM,IAAA,0BAAQ,EAAC,QAAQ,EAAE;YACnE,oBAAoB,EAAE,IAAI;YAC1B,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,KAAK;YAC5B,kBAAkB,EAAE,KAAK;YACzB,uBAAuB,EAAE,KAAK;YAC9B,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,gBAAgB;iBACb,GAAG,CAAC,CAAC,KAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBAC7D,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"ClassValidationPipe.js","sourceRoot":"","sources":["../../../src/pipes/ClassValidationPipe.ts"],"names":[],"mappings":";;;AACA,gFAA4E;AAC5E,sEAGwC;AACxC,yDAAsE;AACtE,qDAA4D;AAE5D,sEAAsE;AACtE,MAAM,8BAA8B,GAA6B;IAC/D,MAAM;IACN,SAAS;CACV,CAAC;AAEF,sEAAsE;AACtE,MAAM,wBAAwB,GAAe;IAC3C,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAa,mBAAmB;IACvB,KAAK,CAAC,OAAO,CAClB,KAAc,EACd,QAAsB;QAEtB,sEAAsE;QACtE,MAAM,SAAS,GAAyB,IAAA,8CAAqB;QAC3D,iEAAiE;QACjE,QAAQ,CAAC,WAAW,CAAC,SAAS,EAC9B,mBAAmB,EACnB,QAAQ,CAAC,UAAU,CACpB,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE7B,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,IAAI,8BAA8B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,6DAA6D,SAAS,EAAE,IAAI,IAAI,WAAW,QAAQ,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CACzM,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,oBAAoB,EACjD,2BAA2B,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,sHAAsH,CACnP,CAAC;QACJ,CAAC;QAED,IAAI,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAW,IAAA,mCAAe,EACtC,SAAqC,EACrC,KAAK,CACN,CAAC;QAEF,MAAM,gBAAgB,GAAsB,MAAM,IAAA,0BAAQ,EAAC,QAAQ,EAAE;YACnE,oBAAoB,EAAE,IAAI;YAC1B,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,KAAK;YAC5B,kBAAkB,EAAE,KAAK;YACzB,uBAAuB,EAAE,KAAK;YAC9B,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,gBAAgB;iBACb,GAAG,CAAC,CAAC,KAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;iBAC7D,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA7DD,kDA6DC"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getOwnReflectMetadata as
|
|
1
|
+
import{getOwnReflectMetadata as e}from"@inversifyjs/reflect-metadata-utils";import{InversifyValidationError as t,InversifyValidationErrorKind as i}from"@inversifyjs/validation-common";import{plainToInstance as r}from"class-transformer";import{validate as a}from"class-validator";const n=[Object,void 0],o=[Array,BigInt,Boolean,Buffer,Function,Number,Object,String,Symbol];class s{async execute(s,d){const l=e(d.targetClass.prototype,"design:paramtypes",d.methodName)?.[d.parameterIndex];if(null==s){if(n.includes(l))return s;throw new t(i.validationFailed,`Validation failed. Found nullish value but expected type "${l?.name??"undefined"}" at ${d.targetClass.name}.${d.methodName.toString()}[${d.parameterIndex.toString()}].`)}if(void 0===l)throw new t(i.invalidConfiguration,`Param type metadata for ${d.targetClass.name}.${d.methodName.toString()}[${d.parameterIndex.toString()}] is not defined. Are you enabling "emitDecoratorMetadata" and "experimentalDecorators" Typescript compiler options?`);if(o.includes(l))return s;const m=r(l,s),p=await a(m,{forbidNonWhitelisted:!0,forbidUnknownValues:!0,skipMissingProperties:!1,skipNullProperties:!1,skipUndefinedProperties:!1,stopAtFirstError:!1,whitelist:!0});if(p.length>0)throw new t(i.validationFailed,p.map(e=>e.toString(!1,!1)).join("\n"));return m}}export{s as ClassValidationPipe};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/pipes/ClassValidationPipe.ts"],"sourcesContent":[null],"names":["ClassValidationPipe","execute","input","metadata","inputType","getOwnReflectMetadata","targetClass","prototype","methodName","parameterIndex","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/pipes/ClassValidationPipe.ts"],"sourcesContent":[null],"names":["ALLOW_NULLISH_VALUE_TYPES_LIST","Object","undefined","NON_VALIDATED_TYPES_LIST","Array","BigInt","Boolean","Buffer","Function","Number","String","Symbol","ClassValidationPipe","execute","input","metadata","inputType","getOwnReflectMetadata","targetClass","prototype","methodName","parameterIndex","includes","InversifyValidationError","InversifyValidationErrorKind","validationFailed","name","toString","invalidConfiguration","instance","plainToInstance","validationResult","validate","forbidNonWhitelisted","forbidUnknownValues","skipMissingProperties","skipNullProperties","skipUndefinedProperties","stopAtFirstError","whitelist","length","map","error","join"],"mappings":"uRAUA,MAAMA,EAA2D,CAC/DC,YACAC,GAIIC,EAAuC,CAC3CC,MACAC,OACAC,QACAC,OACAC,SACAC,OACAR,OACAS,OACAC,cAGWC,EACJ,aAAMC,CACXC,EACAC,GAGA,MAAMC,EAAkCC,EAEtCF,EAASG,YAAYC,UACrB,oBACAJ,EAASK,cACPL,EAASM,gBAEb,GAAanB,MAATY,EAAoB,CACtB,GAAId,EAA+BsB,SAASN,GAC1C,OAAOF,EAGT,MAAM,IAAIS,EACRC,EAA6BC,iBAC7B,6DAA6DT,GAAWU,MAAQ,mBAAmBX,EAASG,YAAYQ,QAAQX,EAASK,WAAWO,cAAcZ,EAASM,eAAeM,eAE9L,CAEA,QAAkBzB,IAAdc,EACF,MAAM,IAAIO,EACRC,EAA6BI,qBAC7B,2BAA2Bb,EAASG,YAAYQ,QAAQX,EAASK,WAAWO,cAAcZ,EAASM,eAAeM,kIAItH,GAAIxB,EAAyBmB,SAASN,GACpC,OAAOF,EAGT,MAAMe,EAAmBC,EACvBd,EACAF,GAGIiB,QAA4CC,EAASH,EAAU,CACnEI,sBAAsB,EACtBC,qBAAqB,EACrBC,uBAAuB,EACvBC,oBAAoB,EACpBC,yBAAyB,EACzBC,kBAAkB,EAClBC,WAAW,IAGb,GAAIR,EAAiBS,OAAS,EAC5B,MAAM,IAAIjB,EACRC,EAA6BC,iBAC7BM,EACGU,IAAKC,GAA2BA,EAAMf,UAAS,GAAO,IACtDgB,KAAK,OAIZ,OAAOd,CACT"}
|
package/package.json
CHANGED
|
@@ -7,29 +7,29 @@
|
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@inversifyjs/framework-core": "1.0.1",
|
|
9
9
|
"@inversifyjs/reflect-metadata-utils": "1.4.1",
|
|
10
|
-
"@inversifyjs/validation-common": "2.0.
|
|
10
|
+
"@inversifyjs/validation-common": "2.0.2"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@stryker-mutator/core": "9.
|
|
14
|
-
"@stryker-mutator/typescript-checker": "9.
|
|
15
|
-
"@stryker-mutator/vitest-runner": "9.
|
|
16
|
-
"@types/express": "5.0.
|
|
17
|
-
"@types/node": "
|
|
18
|
-
"@vitest/coverage-v8": "
|
|
19
|
-
"eslint": "9.
|
|
20
|
-
"inversify": "^7.
|
|
21
|
-
"prettier": "3.
|
|
22
|
-
"rimraf": "6.
|
|
23
|
-
"rollup": "4.
|
|
13
|
+
"@stryker-mutator/core": "9.4.0",
|
|
14
|
+
"@stryker-mutator/typescript-checker": "9.4.0",
|
|
15
|
+
"@stryker-mutator/vitest-runner": "9.4.0",
|
|
16
|
+
"@types/express": "5.0.6",
|
|
17
|
+
"@types/node": "24.10.9",
|
|
18
|
+
"@vitest/coverage-v8": "4.0.18",
|
|
19
|
+
"eslint": "9.39.2",
|
|
20
|
+
"inversify": "^7.11.0",
|
|
21
|
+
"prettier": "3.8.1",
|
|
22
|
+
"rimraf": "6.1.2",
|
|
23
|
+
"rollup": "4.56.0",
|
|
24
24
|
"ts-loader": "9.5.4",
|
|
25
25
|
"tslib": "2.8.1",
|
|
26
|
-
"typescript": "5.9.
|
|
27
|
-
"vitest": "
|
|
28
|
-
"@inversifyjs/http-core": "
|
|
29
|
-
"@inversifyjs/http-express": "
|
|
26
|
+
"typescript": "5.9.3",
|
|
27
|
+
"vitest": "4.0.18",
|
|
28
|
+
"@inversifyjs/http-core": "4.10.2",
|
|
29
|
+
"@inversifyjs/http-express": "4.10.2"
|
|
30
30
|
},
|
|
31
31
|
"devEngines": {
|
|
32
|
-
"node": "^
|
|
32
|
+
"node": "^24.10.0",
|
|
33
33
|
"pnpm": "^9.12.1"
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://inversify.io",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"name": "@inversifyjs/class-validation",
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"class-transformer": "~0.5.1",
|
|
58
|
-
"class-validator": "~0.14.
|
|
58
|
+
"class-validator": "~0.14.3"
|
|
59
59
|
},
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"type": "git",
|
|
65
65
|
"url": "git+https://github.com/inversify/monorepo.git"
|
|
66
66
|
},
|
|
67
|
-
"version": "2.0.
|
|
67
|
+
"version": "2.0.2",
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "pnpm run build:cjs && pnpm run build:esm",
|
|
70
70
|
"build:cjs": "tsc --build tsconfig.cjs.json && pnpm exec foundation-ts-package-cjs ./lib/cjs",
|