@dismissible/nestjs-validation 0.1.0-canary.4b708a5.0
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/package.json +45 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/validation.module.d.ts +2 -0
- package/src/validation.module.js +16 -0
- package/src/validation.module.js.map +1 -0
- package/src/validation.service.d.ts +7 -0
- package/src/validation.service.js +54 -0
- package/src/validation.service.js.map +1 -0
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dismissible/nestjs-validation",
|
|
3
|
+
"version": "0.1.0-canary.4b708a5.0",
|
|
4
|
+
"description": "Validation service module for NestJS applications using class-validator and class-transformer",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./src/index.mjs",
|
|
10
|
+
"require": "./src/index.js",
|
|
11
|
+
"types": "./src/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {},
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@nestjs/common": "^11.0.0",
|
|
17
|
+
"class-validator": "^0.14.0",
|
|
18
|
+
"class-transformer": "^0.5.0"
|
|
19
|
+
},
|
|
20
|
+
"peerDependenciesMeta": {
|
|
21
|
+
"@nestjs/common": {
|
|
22
|
+
"optional": false
|
|
23
|
+
},
|
|
24
|
+
"class-validator": {
|
|
25
|
+
"optional": false
|
|
26
|
+
},
|
|
27
|
+
"class-transformer": {
|
|
28
|
+
"optional": false
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"nestjs",
|
|
33
|
+
"validation",
|
|
34
|
+
"class-validator",
|
|
35
|
+
"class-transformer",
|
|
36
|
+
"dto"
|
|
37
|
+
],
|
|
38
|
+
"author": "",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": ""
|
|
43
|
+
},
|
|
44
|
+
"type": "commonjs"
|
|
45
|
+
}
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./validation.service"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./validation.module"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/validation/src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,8DAAoC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const validation_service_1 = require("./validation.service");
|
|
7
|
+
let ValidationModule = class ValidationModule {
|
|
8
|
+
};
|
|
9
|
+
exports.ValidationModule = ValidationModule;
|
|
10
|
+
exports.ValidationModule = ValidationModule = tslib_1.__decorate([
|
|
11
|
+
(0, common_1.Module)({
|
|
12
|
+
providers: [validation_service_1.ValidationService],
|
|
13
|
+
exports: [validation_service_1.ValidationService],
|
|
14
|
+
})
|
|
15
|
+
], ValidationModule);
|
|
16
|
+
//# sourceMappingURL=validation.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.module.js","sourceRoot":"","sources":["../../../../libs/validation/src/validation.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,6DAAyD;AAMlD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAJ5B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,sCAAiB,CAAC;QAC9B,OAAO,EAAE,CAAC,sCAAiB,CAAC;KAC7B,CAAC;GACW,gBAAgB,CAAG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ClassConstructor } from 'class-transformer';
|
|
2
|
+
export declare class ValidationService {
|
|
3
|
+
validateDto<T extends object>(dtoClass: ClassConstructor<T>, data: unknown): Promise<T>;
|
|
4
|
+
validateInstance<T extends object>(instance: T): Promise<void>;
|
|
5
|
+
private formatValidationErrors;
|
|
6
|
+
private extractErrorMessage;
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const class_transformer_1 = require("class-transformer");
|
|
8
|
+
let ValidationService = class ValidationService {
|
|
9
|
+
async validateDto(dtoClass, data) {
|
|
10
|
+
if (data === null || data === undefined) {
|
|
11
|
+
throw new common_1.BadRequestException('Data cannot be null or undefined');
|
|
12
|
+
}
|
|
13
|
+
const dtoInstance = (0, class_transformer_1.plainToInstance)(dtoClass, data);
|
|
14
|
+
const validationErrors = await (0, class_validator_1.validate)(dtoInstance);
|
|
15
|
+
if (validationErrors.length > 0) {
|
|
16
|
+
const errorMessages = this.formatValidationErrors(validationErrors);
|
|
17
|
+
throw new common_1.BadRequestException(errorMessages);
|
|
18
|
+
}
|
|
19
|
+
return dtoInstance;
|
|
20
|
+
}
|
|
21
|
+
async validateInstance(instance) {
|
|
22
|
+
const validationErrors = await (0, class_validator_1.validate)(instance);
|
|
23
|
+
if (validationErrors.length > 0) {
|
|
24
|
+
const errorMessages = this.formatValidationErrors(validationErrors);
|
|
25
|
+
throw new common_1.BadRequestException(errorMessages);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
formatValidationErrors(errors) {
|
|
29
|
+
return errors
|
|
30
|
+
.map((error) => this.extractErrorMessage(error))
|
|
31
|
+
.filter((message) => message.length > 0)
|
|
32
|
+
.join('; ');
|
|
33
|
+
}
|
|
34
|
+
extractErrorMessage(error) {
|
|
35
|
+
const messages = [];
|
|
36
|
+
// Add constraint messages
|
|
37
|
+
if (error.constraints) {
|
|
38
|
+
messages.push(...Object.values(error.constraints));
|
|
39
|
+
}
|
|
40
|
+
// Recursively extract messages from nested errors
|
|
41
|
+
if (error.children && error.children.length > 0) {
|
|
42
|
+
const childMessages = error.children
|
|
43
|
+
.map((child) => this.extractErrorMessage(child))
|
|
44
|
+
.filter((message) => message.length > 0);
|
|
45
|
+
messages.push(...childMessages);
|
|
46
|
+
}
|
|
47
|
+
return messages.join(', ');
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.ValidationService = ValidationService;
|
|
51
|
+
exports.ValidationService = ValidationService = tslib_1.__decorate([
|
|
52
|
+
(0, common_1.Injectable)()
|
|
53
|
+
], ValidationService);
|
|
54
|
+
//# sourceMappingURL=validation.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.service.js","sourceRoot":"","sources":["../../../../libs/validation/src/validation.service.ts"],"names":[],"mappings":";;;;AAAA,2CAAiE;AACjE,qDAA4D;AAC5D,yDAAsE;AAG/D,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,KAAK,CAAC,WAAW,CAAmB,QAA6B,EAAE,IAAa;QAC9E,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,4BAAmB,CAAC,kCAAkC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,WAAW,GAAG,IAAA,mCAAe,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,MAAM,IAAA,0BAAQ,EAAC,WAAqB,CAAC,CAAC;QAE/D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,IAAI,4BAAmB,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAmB,QAAW;QAClD,MAAM,gBAAgB,GAAG,MAAM,IAAA,0BAAQ,EAAC,QAAkB,CAAC,CAAC;QAE5D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,IAAI,4BAAmB,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,MAAyB;QACtD,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,KAAsB;QAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0BAA0B;QAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,kDAAkD;QAClD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ;iBACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;iBAC/C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AAnDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAmD7B"}
|