@inversifyjs/class-validation 2.0.0 → 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 +17 -0
- package/README.md +1 -1
- package/lib/cjs/pipes/ClassValidationPipe.d.ts.map +1 -1
- package/lib/cjs/pipes/ClassValidationPipe.js +26 -0
- package/lib/cjs/pipes/ClassValidationPipe.js.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -1
- package/package.json +21 -21
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
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
|
+
|
|
11
|
+
## 2.0.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
- @inversifyjs/reflect-metadata-utils@1.4.1
|
|
17
|
+
- @inversifyjs/framework-core@1.0.1
|
|
18
|
+
- @inversifyjs/validation-common@2.0.1
|
|
19
|
+
|
|
3
20
|
## 2.0.0
|
|
4
21
|
|
|
5
22
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fclass-validation) [](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fclass-validation) [](https://www.npmjs.com/package/@inversifyjs/class-validation)
|
|
2
2
|
|
|
3
3
|
# @inversifyjs/class-validation
|
|
4
4
|
|
|
@@ -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
|
@@ -5,31 +5,31 @@
|
|
|
5
5
|
},
|
|
6
6
|
"description": "InversifyJs class-validator validation package",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@inversifyjs/framework-core": "1.0.
|
|
9
|
-
"@inversifyjs/reflect-metadata-utils": "1.4.
|
|
10
|
-
"@inversifyjs/validation-common": "2.0.
|
|
8
|
+
"@inversifyjs/framework-core": "1.0.1",
|
|
9
|
+
"@inversifyjs/reflect-metadata-utils": "1.4.1",
|
|
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",
|