@inversifyjs/ajv-validation 2.0.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +5 -0
  4. package/lib/cjs/calculations/stringifyAjvErrors.d.ts +3 -0
  5. package/lib/cjs/calculations/stringifyAjvErrors.d.ts.map +1 -0
  6. package/lib/cjs/calculations/stringifyAjvErrors.js +9 -0
  7. package/lib/cjs/calculations/stringifyAjvErrors.js.map +1 -0
  8. package/lib/cjs/calculations/stringifyAjvErrors.spec.d.ts +2 -0
  9. package/lib/cjs/calculations/stringifyAjvErrors.spec.d.ts.map +1 -0
  10. package/lib/cjs/calculations/updateAjvValidationMetadata.d.ts +3 -0
  11. package/lib/cjs/calculations/updateAjvValidationMetadata.d.ts.map +1 -0
  12. package/lib/cjs/calculations/updateAjvValidationMetadata.js +15 -0
  13. package/lib/cjs/calculations/updateAjvValidationMetadata.js.map +1 -0
  14. package/lib/cjs/calculations/updateAjvValidationMetadata.spec.d.ts +2 -0
  15. package/lib/cjs/calculations/updateAjvValidationMetadata.spec.d.ts.map +1 -0
  16. package/lib/cjs/decorators/ValidateAjvSchema.d.ts +3 -0
  17. package/lib/cjs/decorators/ValidateAjvSchema.d.ts.map +1 -0
  18. package/lib/cjs/decorators/ValidateAjvSchema.js +13 -0
  19. package/lib/cjs/decorators/ValidateAjvSchema.js.map +1 -0
  20. package/lib/cjs/decorators/ValidateAjvSchema.spec.d.ts +2 -0
  21. package/lib/cjs/decorators/ValidateAjvSchema.spec.d.ts.map +1 -0
  22. package/lib/cjs/index.d.ts +4 -0
  23. package/lib/cjs/index.d.ts.map +1 -0
  24. package/lib/cjs/index.js +10 -0
  25. package/lib/cjs/index.js.map +1 -0
  26. package/lib/cjs/package.json +3 -0
  27. package/lib/cjs/pipes/AjvCompiledValidationPipe.d.ts +6 -0
  28. package/lib/cjs/pipes/AjvCompiledValidationPipe.d.ts.map +1 -0
  29. package/lib/cjs/pipes/AjvCompiledValidationPipe.int.spec.d.ts +9 -0
  30. package/lib/cjs/pipes/AjvCompiledValidationPipe.int.spec.d.ts.map +1 -0
  31. package/lib/cjs/pipes/AjvCompiledValidationPipe.js +41 -0
  32. package/lib/cjs/pipes/AjvCompiledValidationPipe.js.map +1 -0
  33. package/lib/cjs/pipes/AjvValidationPipe.d.ts +10 -0
  34. package/lib/cjs/pipes/AjvValidationPipe.d.ts.map +1 -0
  35. package/lib/cjs/pipes/AjvValidationPipe.int.spec.d.ts +9 -0
  36. package/lib/cjs/pipes/AjvValidationPipe.int.spec.d.ts.map +1 -0
  37. package/lib/cjs/pipes/AjvValidationPipe.js +50 -0
  38. package/lib/cjs/pipes/AjvValidationPipe.js.map +1 -0
  39. package/lib/cjs/pipes/AjvValidationPipe.spec.d.ts +2 -0
  40. package/lib/cjs/pipes/AjvValidationPipe.spec.d.ts.map +1 -0
  41. package/lib/cjs/reflectMetadata/models/ajvValidationMetadataReflectKey.d.ts +2 -0
  42. package/lib/cjs/reflectMetadata/models/ajvValidationMetadataReflectKey.d.ts.map +1 -0
  43. package/lib/cjs/reflectMetadata/models/ajvValidationMetadataReflectKey.js +5 -0
  44. package/lib/cjs/reflectMetadata/models/ajvValidationMetadataReflectKey.js.map +1 -0
  45. package/lib/esm/index.d.ts +18 -0
  46. package/lib/esm/index.d.ts.map +1 -0
  47. package/lib/esm/index.js +2 -0
  48. package/lib/esm/index.js.map +1 -0
  49. package/lib/esm/package.json +3 -0
  50. package/package.json +83 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # @inversifyjs/ajv-validation
2
+
3
+ ## 2.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Added `AjvValidationPipe`
8
+ - Added `ValidateAjvSchema` decorator
9
+ - Added `AjvCompiledValidationPipe`
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+ - @inversifyjs/framework-core@1.0.0
15
+ - @inversifyjs/validation-common@2.0.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 inversify
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ [![Test coverage](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fstandard-schema-validation)](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fstandard-schema-validation) [![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Fframework%2Flibraries%2Fvalidation%2Fstandard-schema%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/standard-schema-validation)
2
+
3
+ # @inversifyjs/standard-schema-validation
4
+
5
+ Inversify monorepo standard-schema validation modules.
@@ -0,0 +1,3 @@
1
+ import { ErrorObject } from 'ajv';
2
+ export declare function stringifyAjvErrors(errors: Partial<ErrorObject>[]): string;
3
+ //# sourceMappingURL=stringifyAjvErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyAjvErrors.d.ts","sourceRoot":"","sources":["../../../src/calculations/stringifyAjvErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAElC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,CAOzE"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringifyAjvErrors = stringifyAjvErrors;
4
+ function stringifyAjvErrors(errors) {
5
+ return errors
6
+ .map((error) => `[schema: ${error.schemaPath ?? '-'}, instance: ${error.instancePath ?? '-'}]: "${error.message ?? '-'}"`)
7
+ .join('\n');
8
+ }
9
+ //# sourceMappingURL=stringifyAjvErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyAjvErrors.js","sourceRoot":"","sources":["../../../src/calculations/stringifyAjvErrors.ts"],"names":[],"mappings":";;AAEA,gDAOC;AAPD,SAAgB,kBAAkB,CAAC,MAA8B;IAC/D,OAAO,MAAM;SACV,GAAG,CACF,CAAC,KAA2B,EAAU,EAAE,CACtC,YAAY,KAAK,CAAC,UAAU,IAAI,GAAG,eAAe,KAAK,CAAC,YAAY,IAAI,GAAG,OAAO,KAAK,CAAC,OAAO,IAAI,GAAG,GAAG,CAC5G;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stringifyAjvErrors.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifyAjvErrors.spec.d.ts","sourceRoot":"","sources":["../../../src/calculations/stringifyAjvErrors.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { AnySchema } from 'ajv';
2
+ export declare function updateAjvValidationMetadata(typeList: AnySchema[], index: number): (metadata: AnySchema[][]) => AnySchema[][];
3
+ //# sourceMappingURL=updateAjvValidationMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateAjvValidationMetadata.d.ts","sourceRoot":"","sources":["../../../src/calculations/updateAjvValidationMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEhC,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,SAAS,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,SAAS,EAAE,EAAE,CAc5C"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateAjvValidationMetadata = updateAjvValidationMetadata;
4
+ function updateAjvValidationMetadata(typeList, index) {
5
+ return (metadata) => {
6
+ let schemaList = metadata[index];
7
+ if (schemaList === undefined) {
8
+ schemaList = [];
9
+ metadata[index] = schemaList;
10
+ }
11
+ schemaList.push(...typeList);
12
+ return metadata;
13
+ };
14
+ }
15
+ //# sourceMappingURL=updateAjvValidationMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateAjvValidationMetadata.js","sourceRoot":"","sources":["../../../src/calculations/updateAjvValidationMetadata.ts"],"names":[],"mappings":";;AAEA,kEAiBC;AAjBD,SAAgB,2BAA2B,CACzC,QAAqB,EACrB,KAAa;IAEb,OAAO,CAAC,QAAuB,EAAiB,EAAE;QAChD,IAAI,UAAU,GAA4B,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,GAAG,EAAE,CAAC;YAEhB,QAAQ,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE7B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=updateAjvValidationMetadata.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateAjvValidationMetadata.spec.d.ts","sourceRoot":"","sources":["../../../src/calculations/updateAjvValidationMetadata.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { AnySchema } from 'ajv';
2
+ export declare function ValidateAjvSchema(...schemaList: AnySchema[]): ParameterDecorator;
3
+ //# sourceMappingURL=ValidateAjvSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateAjvSchema.d.ts","sourceRoot":"","sources":["../../../src/decorators/ValidateAjvSchema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAMhC,wBAAgB,iBAAiB,CAC/B,GAAG,UAAU,EAAE,SAAS,EAAE,GACzB,kBAAkB,CAcpB"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidateAjvSchema = ValidateAjvSchema;
4
+ const reflect_metadata_utils_1 = require("@inversifyjs/reflect-metadata-utils");
5
+ const updateAjvValidationMetadata_1 = require("../calculations/updateAjvValidationMetadata");
6
+ const ajvValidationMetadataReflectKey_1 = require("../reflectMetadata/models/ajvValidationMetadataReflectKey");
7
+ // eslint-disable-next-line @typescript-eslint/naming-convention
8
+ function ValidateAjvSchema(...schemaList) {
9
+ return (target, key, index) => {
10
+ (0, reflect_metadata_utils_1.updateOwnReflectMetadata)(target.constructor, ajvValidationMetadataReflectKey_1.ajvValidationMetadataReflectKey, reflect_metadata_utils_1.buildEmptyArrayMetadata, (0, updateAjvValidationMetadata_1.updateAjvValidationMetadata)(schemaList, index), key);
11
+ };
12
+ }
13
+ //# sourceMappingURL=ValidateAjvSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateAjvSchema.js","sourceRoot":"","sources":["../../../src/decorators/ValidateAjvSchema.ts"],"names":[],"mappings":";;AAUA,8CAgBC;AA1BD,gFAG6C;AAG7C,6FAA0F;AAC1F,+GAA4G;AAE5G,gEAAgE;AAChE,SAAgB,iBAAiB,CAC/B,GAAG,UAAuB;IAE1B,OAAO,CACL,MAAc,EACd,GAAgC,EAChC,KAAa,EACP,EAAE;QACR,IAAA,iDAAwB,EACtB,MAAM,CAAC,WAAW,EAClB,iEAA+B,EAC/B,gDAAuB,EACvB,IAAA,yDAA2B,EAAC,UAAU,EAAE,KAAK,CAAC,EAC9C,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ValidateAjvSchema.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateAjvSchema.spec.d.ts","sourceRoot":"","sources":["../../../src/decorators/ValidateAjvSchema.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export { ValidateAjvSchema } from './decorators/ValidateAjvSchema';
2
+ export { AjvCompiledValidationPipe } from './pipes/AjvCompiledValidationPipe';
3
+ export { AjvValidationPipe } from './pipes/AjvValidationPipe';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AjvValidationPipe = exports.AjvCompiledValidationPipe = exports.ValidateAjvSchema = void 0;
4
+ var ValidateAjvSchema_1 = require("./decorators/ValidateAjvSchema");
5
+ Object.defineProperty(exports, "ValidateAjvSchema", { enumerable: true, get: function () { return ValidateAjvSchema_1.ValidateAjvSchema; } });
6
+ var AjvCompiledValidationPipe_1 = require("./pipes/AjvCompiledValidationPipe");
7
+ Object.defineProperty(exports, "AjvCompiledValidationPipe", { enumerable: true, get: function () { return AjvCompiledValidationPipe_1.AjvCompiledValidationPipe; } });
8
+ var AjvValidationPipe_1 = require("./pipes/AjvValidationPipe");
9
+ Object.defineProperty(exports, "AjvValidationPipe", { enumerable: true, get: function () { return AjvValidationPipe_1.AjvValidationPipe; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,oEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,+EAA8E;AAArE,sIAAA,yBAAyB,OAAA;AAClC,+DAA8D;AAArD,sHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,6 @@
1
+ import { AnySchema } from 'ajv';
2
+ import { AjvValidationPipe } from './AjvValidationPipe';
3
+ export declare class AjvCompiledValidationPipe extends AjvValidationPipe {
4
+ protected _validate(schema: AnySchema, input: unknown): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=AjvCompiledValidationPipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvCompiledValidationPipe.d.ts","sourceRoot":"","sources":["../../../src/pipes/AjvCompiledValidationPipe.ts"],"names":[],"mappings":"AAKA,OAAY,EAAE,SAAS,EAAoB,MAAM,KAAK,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,iBAAiB;cACrC,SAAS,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;CA+CjB"}
@@ -0,0 +1,9 @@
1
+ import { ErrorFilter, Pipe } from '@inversifyjs/framework-core';
2
+ import { Container, Newable } from 'inversify';
3
+ export interface Server {
4
+ host: string;
5
+ port: number;
6
+ shutdown: () => Promise<void>;
7
+ }
8
+ export declare function buildExpressServer(container: Container, errorFilterList: Newable<ErrorFilter>[], pipeList: (Newable<Pipe> | Pipe)[]): Promise<Server>;
9
+ //# sourceMappingURL=AjvCompiledValidationPipe.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvCompiledValidationPipe.int.spec.d.ts","sourceRoot":"","sources":["../../../src/pipes/AjvCompiledValidationPipe.int.spec.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,WAAW,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAW5E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAK/C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EACvC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AjvCompiledValidationPipe = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@inversifyjs/common");
6
+ const validation_common_1 = require("@inversifyjs/validation-common");
7
+ const ajv_1 = tslib_1.__importDefault(require("ajv"));
8
+ const stringifyAjvErrors_1 = require("../calculations/stringifyAjvErrors");
9
+ const AjvValidationPipe_1 = require("./AjvValidationPipe");
10
+ class AjvCompiledValidationPipe extends AjvValidationPipe_1.AjvValidationPipe {
11
+ async _validate(schema, input) {
12
+ if (typeof schema === 'boolean') {
13
+ return super._validate(schema, input);
14
+ }
15
+ if (schema.$id === undefined) {
16
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.invalidConfiguration, 'Schema must have an $id property when using AjvCompiledValidationPipe');
17
+ }
18
+ const validateFunction = this._ajv.getSchema(schema.$id) ??
19
+ this._ajv.addSchema(schema, schema.$id).getSchema(schema.$id);
20
+ if (validateFunction === undefined) {
21
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.unknown, `Unexpected missing schema after being added to Ajv instance: ${schema.$id}`);
22
+ }
23
+ const result = validateFunction(input);
24
+ if (!(0, common_1.isPromise)(result)) {
25
+ if (result) {
26
+ return;
27
+ }
28
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.validationFailed, (0, stringifyAjvErrors_1.stringifyAjvErrors)(validateFunction.errors ?? []));
29
+ }
30
+ try {
31
+ await this._ajv.validate(schema, input);
32
+ }
33
+ catch (error) {
34
+ if (error instanceof ajv_1.default.ValidationError) {
35
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.validationFailed, (0, stringifyAjvErrors_1.stringifyAjvErrors)(error.errors));
36
+ }
37
+ }
38
+ }
39
+ }
40
+ exports.AjvCompiledValidationPipe = AjvCompiledValidationPipe;
41
+ //# sourceMappingURL=AjvCompiledValidationPipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvCompiledValidationPipe.js","sourceRoot":"","sources":["../../../src/pipes/AjvCompiledValidationPipe.ts"],"names":[],"mappings":";;;;AAAA,gDAAgD;AAChD,sEAGwC;AACxC,sDAAuD;AAEvD,2EAAwE;AACxE,2DAAwD;AAExD,MAAa,yBAA0B,SAAQ,qCAAiB;IAC3C,KAAK,CAAC,SAAS,CAChC,MAAiB,EACjB,KAAc;QAEd,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,oBAAoB,EACjD,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,OAAO,EACpC,gEAAgE,MAAM,CAAC,GAAG,EAAE,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAA+B,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAA,kBAAS,EAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YAED,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,IAAA,uCAAkB,EAAC,gBAAgB,CAAC,MAAM,IAAI,EAAE,CAAC,CAClD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,aAAG,CAAC,eAAe,EAAE,CAAC;gBACzC,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,IAAA,uCAAkB,EAAC,KAAK,CAAC,MAAM,CAAC,CACjC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnDD,8DAmDC"}
@@ -0,0 +1,10 @@
1
+ import { Pipe, PipeMetadata } from '@inversifyjs/framework-core';
2
+ import Ajv, { AnySchema } from 'ajv';
3
+ export declare class AjvValidationPipe implements Pipe {
4
+ #private;
5
+ protected readonly _ajv: Ajv;
6
+ constructor(ajv: Ajv, typeList?: AnySchema[]);
7
+ execute(input: unknown, metadata: PipeMetadata): Promise<unknown>;
8
+ protected _validate(schema: AnySchema, input: unknown): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=AjvValidationPipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvValidationPipe.d.ts","sourceRoot":"","sources":["../../../src/pipes/AjvValidationPipe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAMjE,OAAO,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAKrC,qBAAa,iBAAkB,YAAW,IAAI;;IAC5C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;gBAGjB,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE;IAK/B,OAAO,CAClB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC;cAmBH,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAuC5E"}
@@ -0,0 +1,9 @@
1
+ import { ErrorFilter, Pipe } from '@inversifyjs/framework-core';
2
+ import { Container, Newable } from 'inversify';
3
+ export interface Server {
4
+ host: string;
5
+ port: number;
6
+ shutdown: () => Promise<void>;
7
+ }
8
+ export declare function buildExpressServer(container: Container, errorFilterList: Newable<ErrorFilter>[], pipeList: (Newable<Pipe> | Pipe)[]): Promise<Server>;
9
+ //# sourceMappingURL=AjvValidationPipe.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvValidationPipe.int.spec.d.ts","sourceRoot":"","sources":["../../../src/pipes/AjvValidationPipe.int.spec.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,WAAW,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAW5E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAK/C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EACvC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AjvValidationPipe = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@inversifyjs/common");
6
+ const reflect_metadata_utils_1 = require("@inversifyjs/reflect-metadata-utils");
7
+ const validation_common_1 = require("@inversifyjs/validation-common");
8
+ const ajv_1 = tslib_1.__importDefault(require("ajv"));
9
+ const stringifyAjvErrors_1 = require("../calculations/stringifyAjvErrors");
10
+ const ajvValidationMetadataReflectKey_1 = require("../reflectMetadata/models/ajvValidationMetadataReflectKey");
11
+ class AjvValidationPipe {
12
+ _ajv;
13
+ #schemaList;
14
+ constructor(ajv, typeList) {
15
+ this._ajv = ajv;
16
+ this.#schemaList = typeList ?? [];
17
+ }
18
+ async execute(input, metadata) {
19
+ const parameterSchemaList = (0, reflect_metadata_utils_1.getOwnReflectMetadata)(metadata.targetClass, ajvValidationMetadataReflectKey_1.ajvValidationMetadataReflectKey, metadata.methodName)?.[metadata.parameterIndex];
20
+ if (parameterSchemaList === undefined) {
21
+ return this.#applySchemaList(input, this.#schemaList);
22
+ }
23
+ return this.#applySchemaList(await this.#applySchemaList(input, this.#schemaList), parameterSchemaList);
24
+ }
25
+ async _validate(schema, input) {
26
+ const result = this._ajv.validate(schema, input);
27
+ if (!(0, common_1.isPromise)(result)) {
28
+ if (result) {
29
+ return;
30
+ }
31
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.validationFailed, (0, stringifyAjvErrors_1.stringifyAjvErrors)(this._ajv.errors ?? []));
32
+ }
33
+ try {
34
+ await result;
35
+ }
36
+ catch (error) {
37
+ if (error instanceof ajv_1.default.ValidationError) {
38
+ throw new validation_common_1.InversifyValidationError(validation_common_1.InversifyValidationErrorKind.validationFailed, (0, stringifyAjvErrors_1.stringifyAjvErrors)(error.errors));
39
+ }
40
+ }
41
+ }
42
+ async #applySchemaList(input, schemaList) {
43
+ for (const schema of schemaList) {
44
+ await this._validate(schema, input);
45
+ }
46
+ return input;
47
+ }
48
+ }
49
+ exports.AjvValidationPipe = AjvValidationPipe;
50
+ //# sourceMappingURL=AjvValidationPipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvValidationPipe.js","sourceRoot":"","sources":["../../../src/pipes/AjvValidationPipe.ts"],"names":[],"mappings":";;;;AAAA,gDAAgD;AAEhD,gFAA4E;AAC5E,sEAGwC;AACxC,sDAAqC;AAErC,2EAAwE;AACxE,+GAA4G;AAE5G,MAAa,iBAAiB;IACT,IAAI,CAAM;IACpB,WAAW,CAAc;IAElC,YAAY,GAAQ,EAAE,QAAsB;QAC1C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,QAAQ,IAAI,EAAE,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,KAAc,EACd,QAAsB;QAEtB,MAAM,mBAAmB,GAA4B,IAAA,8CAAqB,EAGxE,QAAQ,CAAC,WAAW,EACpB,iEAA+B,EAC/B,QAAQ,CAAC,UAAU,CACpB,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE7B,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,EACpD,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,MAAiB,EAAE,KAAc;QACzD,MAAM,MAAM,GAA+B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAC3D,MAAM,EACN,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,IAAA,kBAAS,EAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;YAED,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,IAAA,uCAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,aAAG,CAAC,eAAe,EAAE,CAAC;gBACzC,MAAM,IAAI,4CAAwB,CAChC,gDAA4B,CAAC,gBAAgB,EAC7C,IAAA,uCAAkB,EAAC,KAAK,CAAC,MAAM,CAAC,CACjC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,KAAc,EACd,UAAuB;QAEvB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAtED,8CAsEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AjvValidationPipe.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AjvValidationPipe.spec.d.ts","sourceRoot":"","sources":["../../../src/pipes/AjvValidationPipe.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const ajvValidationMetadataReflectKey: string;
2
+ //# sourceMappingURL=ajvValidationMetadataReflectKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajvValidationMetadataReflectKey.d.ts","sourceRoot":"","sources":["../../../../src/reflectMetadata/models/ajvValidationMetadataReflectKey.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,EAAE,MACiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ajvValidationMetadataReflectKey = void 0;
4
+ exports.ajvValidationMetadataReflectKey = '@inversifyjs/ajv-validation/ajvValidationMetadataReflectKey';
5
+ //# sourceMappingURL=ajvValidationMetadataReflectKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ajvValidationMetadataReflectKey.js","sourceRoot":"","sources":["../../../../src/reflectMetadata/models/ajvValidationMetadataReflectKey.ts"],"names":[],"mappings":";;;AAAa,QAAA,+BAA+B,GAC1C,6DAA6D,CAAC"}
@@ -0,0 +1,18 @@
1
+ import Ajv, { AnySchema } from 'ajv';
2
+ import { Pipe, PipeMetadata } from '@inversifyjs/framework-core';
3
+
4
+ declare function ValidateAjvSchema(...schemaList: AnySchema[]): ParameterDecorator;
5
+
6
+ declare class AjvValidationPipe implements Pipe {
7
+ #private;
8
+ protected readonly _ajv: Ajv;
9
+ constructor(ajv: Ajv, typeList?: AnySchema[]);
10
+ execute(input: unknown, metadata: PipeMetadata): Promise<unknown>;
11
+ protected _validate(schema: AnySchema, input: unknown): Promise<void>;
12
+ }
13
+
14
+ declare class AjvCompiledValidationPipe extends AjvValidationPipe {
15
+ protected _validate(schema: AnySchema, input: unknown): Promise<void>;
16
+ }
17
+
18
+ export { AjvCompiledValidationPipe, AjvValidationPipe, ValidateAjvSchema };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{updateOwnReflectMetadata as a,buildEmptyArrayMetadata as t,getOwnReflectMetadata as i}from"@inversifyjs/reflect-metadata-utils";import{isPromise as e}from"@inversifyjs/common";import{InversifyValidationError as n,InversifyValidationErrorKind as s}from"@inversifyjs/validation-common";import r from"ajv";const o="@inversifyjs/ajv-validation/ajvValidationMetadataReflectKey";function c(...i){return(e,n,s)=>{a(e.constructor,o,t,function(a,t){return i=>{let e=i[t];return void 0===e&&(e=[],i[t]=e),e.push(...a),i}}(i,s),n)}}function d(a){return a.map(a=>`[schema: ${a.schemaPath??"-"}, instance: ${a.instancePath??"-"}]: "${a.message??"-"}"`).join("\n")}class h{_ajv;#a;constructor(a,t){this._ajv=a,this.#a=t??[]}async execute(a,t){const e=i(t.targetClass,o,t.methodName)?.[t.parameterIndex];return void 0===e?this.#t(a,this.#a):this.#t(await this.#t(a,this.#a),e)}async _validate(a,t){const i=this._ajv.validate(a,t);if(!e(i)){if(i)return;throw new n(s.validationFailed,d(this._ajv.errors??[]))}try{await i}catch(a){if(a instanceof r.ValidationError)throw new n(s.validationFailed,d(a.errors))}}async#t(a,t){for(const i of t)await this._validate(i,a);return a}}class m extends h{async _validate(a,t){if("boolean"==typeof a)return super._validate(a,t);if(void 0===a.$id)throw new n(s.invalidConfiguration,"Schema must have an $id property when using AjvCompiledValidationPipe");const i=this._ajv.getSchema(a.$id)??this._ajv.addSchema(a,a.$id).getSchema(a.$id);if(void 0===i)throw new n(s.unknown,`Unexpected missing schema after being added to Ajv instance: ${a.$id}`);const o=i(t);if(!e(o)){if(o)return;throw new n(s.validationFailed,d(i.errors??[]))}try{await this._ajv.validate(a,t)}catch(a){if(a instanceof r.ValidationError)throw new n(s.validationFailed,d(a.errors))}}}export{m as AjvCompiledValidationPipe,h as AjvValidationPipe,c as ValidateAjvSchema};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/reflectMetadata/models/ajvValidationMetadataReflectKey.ts","../../src/decorators/ValidateAjvSchema.ts","../../src/calculations/updateAjvValidationMetadata.ts","../../src/calculations/stringifyAjvErrors.ts","../../src/pipes/AjvValidationPipe.ts","../../src/pipes/AjvCompiledValidationPipe.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["ajvValidationMetadataReflectKey","ValidateAjvSchema","schemaList","target","key","index","updateOwnReflectMetadata","constructor","buildEmptyArrayMetadata","typeList","metadata","undefined","push","updateAjvValidationMetadata","stringifyAjvErrors","errors","map","error","schemaPath","instancePath","message","join","AjvValidationPipe","_ajv","ajv","this","execute","input","parameterSchemaList","getOwnReflectMetadata","targetClass","methodName","parameterIndex","applySchemaList","_validate","schema","result","validate","isPromise","InversifyValidationError","InversifyValidationErrorKind","validationFailed","Ajv","ValidationError","AjvCompiledValidationPipe","super","$id","invalidConfiguration","validateFunction","getSchema","addSchema","unknown"],"mappings":"sTAAO,MAAMA,EACX,8DCSI,SAAUC,KACXC,GAEH,MAAO,CACLC,EACAC,EACAC,KAEAC,EACEH,EAAOI,YACPP,EACAQ,ECnBA,SACJC,EACAJ,GAEA,OAAQK,IACN,IAAIR,EAAsCQ,EAASL,GAUnD,YARmBM,IAAfT,IACFA,EAAa,GAEbQ,EAASL,GAASH,GAGpBA,EAAWU,QAAQH,GAEZC,EAEX,CDGMG,CAA4BX,EAAYG,GACxCD,GAGN,CExBM,SAAUU,EAAmBC,GACjC,OAAOA,EACJC,IACEC,GACC,YAAYA,EAAMC,YAAc,kBAAkBD,EAAME,cAAgB,UAAUF,EAAMG,SAAW,QAEtGC,KAAK,KACV,OCGaC,EACQC,KACVrB,GAET,WAAAK,CAAYiB,EAAUf,GACpBgB,KAAKF,KAAOC,EACZC,MAAKvB,EAAcO,GAAY,EACjC,CAEO,aAAMiB,CACXC,EACAjB,GAEA,MAAMkB,EAA+CC,EAGnDnB,EAASoB,YACT9B,EACAU,EAASqB,cACPrB,EAASsB,gBAEb,YAA4BrB,IAAxBiB,EACKH,MAAKQ,EAAiBN,EAAOF,MAAKvB,GAGpCuB,MAAKQ,QACJR,MAAKQ,EAAiBN,EAAOF,MAAKvB,GACxC0B,EAEJ,CAEU,eAAMM,CAAUC,EAAmBR,GAC3C,MAAMS,EAAqCX,KAAKF,KAAKc,SACnDF,EACAR,GAGF,IAAKW,EAAUF,GAAS,CACtB,GAAIA,EACF,OAGF,MAAM,IAAIG,EACRC,EAA6BC,iBAC7B3B,EAAmBW,KAAKF,KAAKR,QAAU,IAE3C,CAEA,UACQqB,CACR,CAAE,MAAOnB,GACP,GAAIA,aAAiByB,EAAIC,gBACvB,MAAM,IAAIJ,EACRC,EAA6BC,iBAC7B3B,EAAmBG,EAAMF,QAG/B,CACF,CAEA,OAAMkB,CACJN,EACAzB,GAEA,IAAK,MAAMiC,KAAUjC,QACbuB,KAAKS,UAAUC,EAAQR,GAG/B,OAAOA,CACT,ECvEI,MAAOiB,UAAkCtB,EAC1B,eAAMY,CACvBC,EACAR,GAEA,GAAsB,kBAAXQ,EACT,OAAOU,MAAMX,UAAUC,EAAQR,GAGjC,QAAmBhB,IAAfwB,EAAOW,IACT,MAAM,IAAIP,EACRC,EAA6BO,qBAC7B,yEAIJ,MAAMC,EACJvB,KAAKF,KAAK0B,UAAUd,EAAOW,MAC3BrB,KAAKF,KAAK2B,UAAUf,EAAQA,EAAOW,KAAKG,UAAUd,EAAOW,KAE3D,QAAyBnC,IAArBqC,EACF,MAAM,IAAIT,EACRC,EAA6BW,QAC7B,gEAAgEhB,EAAOW,OAI3E,MAAMV,EAAqCY,EAAiBrB,GAE5D,IAAKW,EAAUF,GAAS,CACtB,GAAIA,EACF,OAGF,MAAM,IAAIG,EACRC,EAA6BC,iBAC7B3B,EAAmBkC,EAAiBjC,QAAU,IAElD,CAEA,UACQU,KAAKF,KAAKc,SAASF,EAAQR,EACnC,CAAE,MAAOV,GACP,GAAIA,aAAiByB,EAAIC,gBACvB,MAAM,IAAIJ,EACRC,EAA6BC,iBAC7B3B,EAAmBG,EAAMF,QAG/B,CACF"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "author": "Roberto Pintos López",
3
+ "bugs": {
4
+ "url": "https://github.com/inversify/monorepo/issues"
5
+ },
6
+ "description": "InversifyJs http ajv validation package",
7
+ "dependencies": {
8
+ "@inversifyjs/common": "1.5.2",
9
+ "@inversifyjs/framework-core": "1.0.0",
10
+ "@inversifyjs/reflect-metadata-utils": "1.4.0",
11
+ "@inversifyjs/validation-common": "2.0.0"
12
+ },
13
+ "devDependencies": {
14
+ "@stryker-mutator/core": "9.1.1",
15
+ "@stryker-mutator/typescript-checker": "9.1.1",
16
+ "@stryker-mutator/vitest-runner": "9.1.1",
17
+ "@types/express": "5.0.3",
18
+ "@types/node": "22.18.6",
19
+ "@vitest/coverage-v8": "3.2.4",
20
+ "eslint": "9.36.0",
21
+ "inversify": "^7.10.0",
22
+ "prettier": "3.6.2",
23
+ "rimraf": "6.0.1",
24
+ "rollup": "4.52.0",
25
+ "ts-loader": "9.5.4",
26
+ "tslib": "2.8.1",
27
+ "typescript": "5.9.2",
28
+ "vitest": "3.2.4",
29
+ "@inversifyjs/http-core": "2.0.0",
30
+ "@inversifyjs/http-express": "2.0.0"
31
+ },
32
+ "devEngines": {
33
+ "node": "^22.10.2",
34
+ "pnpm": "^9.12.1"
35
+ },
36
+ "homepage": "https://inversify.io",
37
+ "keywords": [
38
+ "dependency injection",
39
+ "dependency inversion",
40
+ "di",
41
+ "inversion of control container",
42
+ "ioc",
43
+ "javascript",
44
+ "node",
45
+ "typescript"
46
+ ],
47
+ "license": "MIT",
48
+ "main": "lib/cjs/index.js",
49
+ "module": "lib/esm/index.js",
50
+ "exports": {
51
+ ".": {
52
+ "import": "./lib/esm/index.js",
53
+ "require": "./lib/cjs/index.js"
54
+ }
55
+ },
56
+ "name": "@inversifyjs/ajv-validation",
57
+ "peerDependencies": {
58
+ "ajv": "^8.17.1"
59
+ },
60
+ "publishConfig": {
61
+ "access": "public"
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/inversify/monorepo.git"
66
+ },
67
+ "version": "2.0.0",
68
+ "scripts": {
69
+ "build": "pnpm run build:cjs && pnpm run build:esm",
70
+ "build:cjs": "tsc --build tsconfig.cjs.json && pnpm exec foundation-ts-package-cjs ./lib/cjs",
71
+ "build:esm": "rollup -c ./rollup.config.mjs && pnpm exec foundation-ts-package-esm ./lib/esm",
72
+ "build:clean": "rimraf lib",
73
+ "format": "prettier --write ./src",
74
+ "lint": "eslint ./src",
75
+ "prebuild": "pnpm run build:clean",
76
+ "test": "vitest run",
77
+ "test:integration": "pnpm run test --project Integration",
78
+ "test:coverage": "pnpm run test:unit --coverage",
79
+ "test:mutation": "stryker run",
80
+ "test:uncommitted": "pnpm run test --changed=HEAD",
81
+ "test:unit": "pnpm run test --project Unit"
82
+ }
83
+ }