@tsed/ajv 6.87.1 → 6.89.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 (72) hide show
  1. package/lib/{decorators → cjs/decorators}/formats.d.ts +0 -0
  2. package/lib/cjs/decorators/formats.js +22 -0
  3. package/lib/cjs/decorators/formats.js.map +1 -0
  4. package/lib/{decorators → cjs/decorators}/keyword.d.ts +0 -0
  5. package/lib/cjs/decorators/keyword.js +21 -0
  6. package/lib/cjs/decorators/keyword.js.map +1 -0
  7. package/lib/{errors → cjs/errors}/AjvValidationError.d.ts +0 -0
  8. package/lib/cjs/errors/AjvValidationError.js +13 -0
  9. package/lib/cjs/errors/AjvValidationError.js.map +1 -0
  10. package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  11. package/lib/cjs/index.js +11 -0
  12. package/lib/cjs/index.js.map +1 -0
  13. package/lib/{interfaces → cjs/interfaces}/FormatsMethods.d.ts +0 -0
  14. package/lib/cjs/interfaces/FormatsMethods.js +3 -0
  15. package/lib/cjs/interfaces/FormatsMethods.js.map +1 -0
  16. package/lib/{interfaces → cjs/interfaces}/IAjvSettings.d.ts +0 -0
  17. package/lib/cjs/interfaces/IAjvSettings.js +3 -0
  18. package/lib/cjs/interfaces/IAjvSettings.js.map +1 -0
  19. package/lib/{interfaces → cjs/interfaces}/KeywordMethods.d.ts +0 -0
  20. package/lib/cjs/interfaces/KeywordMethods.js +3 -0
  21. package/lib/cjs/interfaces/KeywordMethods.js.map +1 -0
  22. package/lib/{services → cjs/services}/Ajv.d.ts +0 -0
  23. package/lib/cjs/services/Ajv.js +68 -0
  24. package/lib/cjs/services/Ajv.js.map +1 -0
  25. package/lib/{services → cjs/services}/AjvService.d.ts +0 -0
  26. package/lib/cjs/services/AjvService.js +91 -0
  27. package/lib/cjs/services/AjvService.js.map +1 -0
  28. package/lib/{utils → cjs/utils}/defaultErrorFormatter.d.ts +0 -0
  29. package/lib/cjs/utils/defaultErrorFormatter.js +24 -0
  30. package/lib/cjs/utils/defaultErrorFormatter.js.map +1 -0
  31. package/lib/{utils → cjs/utils}/getPath.d.ts +0 -0
  32. package/lib/cjs/utils/getPath.js +9 -0
  33. package/lib/cjs/utils/getPath.js.map +1 -0
  34. package/lib/esm/decorators/formats.js +18 -0
  35. package/lib/esm/decorators/formats.js.map +1 -0
  36. package/lib/esm/decorators/keyword.js +17 -0
  37. package/lib/esm/decorators/keyword.js.map +1 -0
  38. package/lib/esm/errors/AjvValidationError.js +9 -0
  39. package/lib/esm/errors/AjvValidationError.js.map +1 -0
  40. package/lib/esm/index.js +8 -0
  41. package/lib/esm/index.js.map +1 -0
  42. package/lib/esm/interfaces/FormatsMethods.js +2 -0
  43. package/lib/esm/interfaces/FormatsMethods.js.map +1 -0
  44. package/lib/esm/interfaces/IAjvSettings.js +2 -0
  45. package/lib/esm/interfaces/IAjvSettings.js.map +1 -0
  46. package/lib/esm/interfaces/KeywordMethods.js +2 -0
  47. package/lib/esm/interfaces/KeywordMethods.js.map +1 -0
  48. package/lib/esm/services/Ajv.js +65 -0
  49. package/lib/esm/services/Ajv.js.map +1 -0
  50. package/lib/esm/services/AjvService.js +88 -0
  51. package/lib/esm/services/AjvService.js.map +1 -0
  52. package/lib/esm/utils/defaultErrorFormatter.js +20 -0
  53. package/lib/esm/utils/defaultErrorFormatter.js.map +1 -0
  54. package/lib/esm/utils/getPath.js +5 -0
  55. package/lib/esm/utils/getPath.js.map +1 -0
  56. package/lib/types/decorators/formats.d.ts +10 -0
  57. package/lib/types/decorators/keyword.d.ts +12 -0
  58. package/lib/types/errors/AjvValidationError.d.ts +6 -0
  59. package/lib/types/index.d.ts +15 -0
  60. package/lib/types/interfaces/FormatsMethods.d.ts +4 -0
  61. package/lib/types/interfaces/IAjvSettings.d.ts +19 -0
  62. package/lib/types/interfaces/KeywordMethods.d.ts +23 -0
  63. package/lib/types/services/Ajv.d.ts +1 -0
  64. package/lib/types/services/AjvService.d.ts +19 -0
  65. package/lib/types/utils/defaultErrorFormatter.d.ts +4 -0
  66. package/lib/types/utils/getPath.d.ts +1 -0
  67. package/package.json +18 -15
  68. package/tsconfig.compile.esm.json +23 -0
  69. package/lib/index.js +0 -302
  70. package/lib/index.js.map +0 -1
  71. package/lib/index.modern.js +0 -295
  72. package/lib/index.modern.js.map +0 -1
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/errors/AjvValidationError.ts","../src/utils/getPath.ts","../src/utils/defaultErrorFormatter.ts","../src/services/Ajv.ts","../src/services/AjvService.ts","../src/decorators/keyword.ts","../src/decorators/formats.ts"],"sourcesContent":["import {BadRequest} from \"@tsed/exceptions\";\n\nexport class AjvValidationError extends BadRequest {\n public name: string = \"AJV_VALIDATION_ERROR\";\n public errors: any[];\n\n constructor(message: string, errors: any[] = []) {\n super(message);\n this.errors = errors;\n }\n}\n","import {getValue} from \"@tsed/core\";\n\nexport function getPath(error: any) {\n return getValue(error, \"dataPath\", getValue(error, \"instancePath\", \"\")).replace(/\\//gi, \".\");\n}\n","import {AjvErrorObject} from \"../interfaces/IAjvSettings\";\nimport {getPath} from \"./getPath\";\n\nexport function defaultErrorFormatter(error: AjvErrorObject & {dataPath: string}) {\n const value = JSON.stringify(error.data === undefined ? \"undefined\" : error.data);\n const join = (list: any[]): string => list.filter(Boolean).join(\"\").trim();\n\n error.dataPath = getPath(error);\n\n const [, indexPath, ...paths] = error.dataPath.split(\".\");\n const deepPaths = paths.length ? \".\" + paths.join(\".\") : \"\";\n\n if (error.collectionName) {\n switch (error.collectionName) {\n case \"Array\":\n return join([`${error.modelName || \"\"}[${indexPath}]${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n case \"Map\":\n return join([`Map<${indexPath}, ${error.modelName || \"\"}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n case \"Set\":\n return join([`Set<${indexPath}, ${error.modelName || \"\"}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n }\n }\n\n return join([!error.modelName && \"Value\", `${error.modelName || \"\"}`, error.dataPath, ` ${error.message}. Given value: ${value}`]);\n}\n","import {cleanObject} from \"@tsed/core\";\nimport {Configuration, InjectorService, ProviderScope, registerProvider} from \"@tsed/di\";\nimport Ajv, {Format, KeywordDefinition, Vocabulary} from \"ajv\";\nimport AjvFormats from \"ajv-formats\";\nimport {FormatsMethods} from \"../interfaces/FormatsMethods\";\nimport {IAjvSettings} from \"../interfaces/IAjvSettings\";\n\nfunction getHandler(key: string, service: any) {\n if (service[key]) {\n return service[key].bind(service);\n }\n}\n\nfunction getKeywordProviders(injector: InjectorService) {\n return injector.getProviders(\"ajv:keyword\");\n}\n\nfunction bindKeywords(injector: InjectorService): Vocabulary {\n return getKeywordProviders(injector).map((provider) => {\n const options = provider.store.get<Omit<KeywordDefinition, \"compile\">>(\"ajv:keyword\", {})!;\n const service = injector.invoke(provider.token);\n\n return <KeywordDefinition>cleanObject({\n ...options,\n validate: getHandler(\"validate\", service),\n compile: getHandler(\"compile\", service),\n code: getHandler(\"code\", service),\n macro: getHandler(\"macro\", service)\n });\n });\n}\n\nfunction getFormatsProviders(injector: InjectorService) {\n return injector.getProviders(\"ajv:formats\");\n}\n\nfunction getFormats(injector: InjectorService): {name: string; options: Format}[] {\n return getFormatsProviders(injector).map((provider) => {\n const {name, options} = provider.store.get<any>(\"ajv:formats\", {})!;\n const service = injector.invoke<FormatsMethods<any>>(provider.token);\n\n return {\n name,\n options: {\n ...options,\n validate: service.validate.bind(service),\n compare: service.compare?.bind(service)\n }\n };\n });\n}\n\nregisterProvider({\n provide: Ajv,\n deps: [Configuration, InjectorService],\n scope: ProviderScope.SINGLETON,\n useFactory(configuration: Configuration, injector: InjectorService) {\n const {errorFormatter, keywords = [], ...props} = configuration.get<IAjvSettings>(\"ajv\") || {};\n const options = {\n verbose: false,\n coerceTypes: true,\n strict: false,\n keywords: [...keywords, ...bindKeywords(injector)],\n ...props\n };\n\n const ajv = new Ajv(options);\n\n AjvFormats(ajv as any);\n\n getFormats(injector).forEach(({name, options}) => {\n ajv.addFormat(name, options);\n });\n\n return ajv;\n }\n});\n","import {deepClone, getValue, nameOf, prototypeOf, setValue, Type} from \"@tsed/core\";\nimport {Constant, Inject, Injectable} from \"@tsed/di\";\nimport {getJsonSchema, JsonEntityStore, JsonSchema, JsonSchemaObject} from \"@tsed/schema\";\nimport Ajv, {ErrorObject} from \"ajv\";\nimport {AjvValidationError} from \"../errors/AjvValidationError\";\nimport {AjvErrorObject, ErrorFormatter} from \"../interfaces/IAjvSettings\";\nimport {defaultErrorFormatter} from \"../utils/defaultErrorFormatter\";\nimport \"./Ajv\";\nimport {getPath} from \"../utils/getPath\";\n\nexport interface AjvValidateOptions extends Record<string, any> {\n schema?: JsonSchema | Partial<JsonSchemaObject>;\n type?: Type<any> | any;\n collectionType?: Type<any> | any;\n}\n\n@Injectable()\nexport class AjvService {\n @Constant(\"ajv.errorFormatter\", defaultErrorFormatter)\n protected errorFormatter: ErrorFormatter;\n\n @Inject()\n protected ajv: Ajv;\n\n async validate(value: any, options: AjvValidateOptions | JsonSchema): Promise<any> {\n let {schema, type, collectionType, ...additionalOptions} = this.mapOptions(options);\n\n schema = schema || getJsonSchema(type, {...additionalOptions, customKeys: true});\n\n if (schema) {\n const localValue = deepClone(value);\n const valid = await this.ajv.validate(schema as any, localValue);\n if (!valid) {\n throw this.mapErrors(this.ajv.errors || [], {\n type,\n collectionType,\n async: true,\n value: localValue\n });\n }\n }\n\n return value;\n }\n\n protected mapOptions(options: AjvValidateOptions | JsonSchema): AjvValidateOptions {\n if (options instanceof JsonSchema) {\n return {\n schema: options.toJSON({customKeys: true})\n };\n }\n\n return options;\n }\n\n protected mapErrors(errors: ErrorObject[], options: any) {\n const {type, collectionType, value} = options;\n\n const message = errors\n .map((error: AjvErrorObject) => {\n if (collectionType) {\n error.collectionName = nameOf(collectionType);\n }\n\n const dataPath = getPath(error);\n\n if (!error.data) {\n if (dataPath) {\n error.data = getValue(value, dataPath.replace(/^\\./, \"\"));\n } else if (error.schemaPath !== \"#/required\") {\n error.data = value;\n }\n }\n\n if (dataPath && dataPath.match(/pwd|password|mdp|secret/)) {\n error.data = \"[REDACTED]\";\n }\n\n if (type) {\n error.modelName = nameOf(type);\n error.message = this.mapClassError(error, type);\n }\n\n return this.errorFormatter.call(this, error, {});\n })\n .join(\"\\n\");\n\n return new AjvValidationError(message, errors);\n }\n\n protected mapClassError(error: AjvErrorObject, targetType: Type<any>) {\n const propertyKey = getValue(error, \"params.missingProperty\");\n\n if (propertyKey) {\n const store = JsonEntityStore.from<JsonEntityStore>(prototypeOf(targetType), propertyKey);\n\n if (store) {\n setValue(error, \"params.missingProperty\", store.name || propertyKey);\n\n return error.message!.replace(`'${propertyKey}'`, `'${store.name || propertyKey}'`);\n }\n }\n\n return error.message;\n }\n}\n","import {StoreSet, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {JsonSchema} from \"@tsed/schema\";\nimport {AnySchemaObject, KeywordDefinition} from \"ajv\";\n\nexport type KeywordOptions = Partial<Omit<KeywordDefinition, \"metaSchema\">> & {\n metaSchema?: AnySchemaObject | JsonSchema;\n};\n\n/**\n * Create new keyword custom validator\n * @param options\n * @decorator\n * @ajv\n */\nexport function Keyword(options: KeywordOptions): ClassDecorator {\n return useDecorators(\n Injectable({\n type: \"ajv:keyword\"\n }),\n StoreSet(\"ajv:keyword\", {\n ...options,\n metaSchema: options.metaSchema && options.metaSchema.toJSON ? options.metaSchema.toJSON() : options.metaSchema\n })\n );\n}\n","import {StoreSet, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {AsyncFormatDefinition, FormatDefinition} from \"ajv\";\n\nexport type FormatsOptions = Omit<FormatDefinition<any>, \"validate\" | \"compare\"> | Omit<AsyncFormatDefinition<any>, \"validate\" | \"compare\">;\n\n/**\n * Create a new custom formats validator\n * @param name\n * @param options\n * @decorator\n * @ajv\n */\nexport function Formats(name: string, options: FormatsOptions = {}): ClassDecorator {\n return useDecorators(\n Injectable({\n type: \"ajv:formats\"\n }),\n StoreSet(\"ajv:formats\", {\n name,\n options\n })\n );\n}\n"],"names":["AjvValidationError","BadRequest","constructor","message","errors","getPath","error","getValue","replace","defaultErrorFormatter","value","JSON","stringify","data","undefined","join","list","filter","Boolean","trim","dataPath","indexPath","paths","split","deepPaths","length","collectionName","modelName","getHandler","key","service","bind","getKeywordProviders","injector","getProviders","bindKeywords","map","provider","options","store","get","invoke","token","cleanObject","validate","compile","code","macro","getFormatsProviders","getFormats","name","compare","registerProvider","provide","Ajv","deps","Configuration","InjectorService","scope","ProviderScope","SINGLETON","useFactory","configuration","keywords","props","verbose","coerceTypes","strict","ajv","AjvFormats","forEach","addFormat","AjvService","mapOptions","schema","type","collectionType","additionalOptions","getJsonSchema","customKeys","localValue","deepClone","valid","mapErrors","async","JsonSchema","toJSON","nameOf","schemaPath","match","mapClassError","errorFormatter","call","targetType","propertyKey","JsonEntityStore","from","prototypeOf","setValue","__decorate","Constant","Inject","Injectable","Keyword","useDecorators","StoreSet","metaSchema","Formats"],"mappings":"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"}
@@ -1,295 +0,0 @@
1
- import { BadRequest } from '@tsed/exceptions';
2
- import { __decorate, __metadata } from 'tslib';
3
- import { getValue, cleanObject, deepClone, nameOf, prototypeOf, setValue, useDecorators, StoreSet } from '@tsed/core';
4
- import { registerProvider, Configuration, InjectorService, ProviderScope, Constant, Inject, Injectable } from '@tsed/di';
5
- import { getJsonSchema, JsonSchema, JsonEntityStore } from '@tsed/schema';
6
- import Ajv from 'ajv';
7
- import AjvFormats from 'ajv-formats';
8
-
9
- class AjvValidationError extends BadRequest {
10
- constructor(message, errors = []) {
11
- super(message);
12
- this.name = "AJV_VALIDATION_ERROR";
13
- this.errors = errors;
14
- }
15
-
16
- }
17
-
18
- function _extends() {
19
- _extends = Object.assign || function (target) {
20
- for (var i = 1; i < arguments.length; i++) {
21
- var source = arguments[i];
22
-
23
- for (var key in source) {
24
- if (Object.prototype.hasOwnProperty.call(source, key)) {
25
- target[key] = source[key];
26
- }
27
- }
28
- }
29
-
30
- return target;
31
- };
32
-
33
- return _extends.apply(this, arguments);
34
- }
35
-
36
- function _objectWithoutPropertiesLoose(source, excluded) {
37
- if (source == null) return {};
38
- var target = {};
39
- var sourceKeys = Object.keys(source);
40
- var key, i;
41
-
42
- for (i = 0; i < sourceKeys.length; i++) {
43
- key = sourceKeys[i];
44
- if (excluded.indexOf(key) >= 0) continue;
45
- target[key] = source[key];
46
- }
47
-
48
- return target;
49
- }
50
-
51
- function getPath(error) {
52
- return getValue(error, "dataPath", getValue(error, "instancePath", "")).replace(/\//gi, ".");
53
- }
54
-
55
- function defaultErrorFormatter(error) {
56
- const value = JSON.stringify(error.data === undefined ? "undefined" : error.data);
57
-
58
- const join = list => list.filter(Boolean).join("").trim();
59
-
60
- error.dataPath = getPath(error);
61
- const [, indexPath, ...paths] = error.dataPath.split(".");
62
- const deepPaths = paths.length ? "." + paths.join(".") : "";
63
-
64
- if (error.collectionName) {
65
- switch (error.collectionName) {
66
- case "Array":
67
- return join([`${error.modelName || ""}[${indexPath}]${deepPaths}`, ` ${error.message}. Given value: ${value}`]);
68
-
69
- case "Map":
70
- return join([`Map<${indexPath}, ${error.modelName || ""}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);
71
-
72
- case "Set":
73
- return join([`Set<${indexPath}, ${error.modelName || ""}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);
74
- }
75
- }
76
-
77
- return join([!error.modelName && "Value", `${error.modelName || ""}`, error.dataPath, ` ${error.message}. Given value: ${value}`]);
78
- }
79
-
80
- const _excluded$1 = ["errorFormatter", "keywords"];
81
-
82
- function getHandler(key, service) {
83
- if (service[key]) {
84
- return service[key].bind(service);
85
- }
86
- }
87
-
88
- function getKeywordProviders(injector) {
89
- return injector.getProviders("ajv:keyword");
90
- }
91
-
92
- function bindKeywords(injector) {
93
- return getKeywordProviders(injector).map(provider => {
94
- const options = provider.store.get("ajv:keyword", {});
95
- const service = injector.invoke(provider.token);
96
- return cleanObject(_extends({}, options, {
97
- validate: getHandler("validate", service),
98
- compile: getHandler("compile", service),
99
- code: getHandler("code", service),
100
- macro: getHandler("macro", service)
101
- }));
102
- });
103
- }
104
-
105
- function getFormatsProviders(injector) {
106
- return injector.getProviders("ajv:formats");
107
- }
108
-
109
- function getFormats(injector) {
110
- return getFormatsProviders(injector).map(provider => {
111
- var _service$compare;
112
-
113
- const {
114
- name,
115
- options
116
- } = provider.store.get("ajv:formats", {});
117
- const service = injector.invoke(provider.token);
118
- return {
119
- name,
120
- options: _extends({}, options, {
121
- validate: service.validate.bind(service),
122
- compare: (_service$compare = service.compare) == null ? void 0 : _service$compare.bind(service)
123
- })
124
- };
125
- });
126
- }
127
-
128
- registerProvider({
129
- provide: Ajv,
130
- deps: [Configuration, InjectorService],
131
- scope: ProviderScope.SINGLETON,
132
-
133
- useFactory(configuration, injector) {
134
- const _ref = configuration.get("ajv") || {},
135
- {
136
- keywords = []
137
- } = _ref,
138
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
139
-
140
- const options = _extends({
141
- verbose: false,
142
- coerceTypes: true,
143
- strict: false,
144
- keywords: [...keywords, ...bindKeywords(injector)]
145
- }, props);
146
-
147
- const ajv = new Ajv(options);
148
- AjvFormats(ajv);
149
- getFormats(injector).forEach(({
150
- name,
151
- options
152
- }) => {
153
- ajv.addFormat(name, options);
154
- });
155
- return ajv;
156
- }
157
-
158
- });
159
-
160
- const _excluded = ["schema", "type", "collectionType"];
161
- let AjvService = class AjvService {
162
- async validate(value, options) {
163
- let _this$mapOptions = this.mapOptions(options),
164
- {
165
- schema,
166
- type,
167
- collectionType
168
- } = _this$mapOptions,
169
- additionalOptions = _objectWithoutPropertiesLoose(_this$mapOptions, _excluded);
170
-
171
- schema = schema || getJsonSchema(type, _extends({}, additionalOptions, {
172
- customKeys: true
173
- }));
174
-
175
- if (schema) {
176
- const localValue = deepClone(value);
177
- const valid = await this.ajv.validate(schema, localValue);
178
-
179
- if (!valid) {
180
- throw this.mapErrors(this.ajv.errors || [], {
181
- type,
182
- collectionType,
183
- async: true,
184
- value: localValue
185
- });
186
- }
187
- }
188
-
189
- return value;
190
- }
191
-
192
- mapOptions(options) {
193
- if (options instanceof JsonSchema) {
194
- return {
195
- schema: options.toJSON({
196
- customKeys: true
197
- })
198
- };
199
- }
200
-
201
- return options;
202
- }
203
-
204
- mapErrors(errors, options) {
205
- const {
206
- type,
207
- collectionType,
208
- value
209
- } = options;
210
- const message = errors.map(error => {
211
- if (collectionType) {
212
- error.collectionName = nameOf(collectionType);
213
- }
214
-
215
- const dataPath = getPath(error);
216
-
217
- if (!error.data) {
218
- if (dataPath) {
219
- error.data = getValue(value, dataPath.replace(/^\./, ""));
220
- } else if (error.schemaPath !== "#/required") {
221
- error.data = value;
222
- }
223
- }
224
-
225
- if (dataPath && dataPath.match(/pwd|password|mdp|secret/)) {
226
- error.data = "[REDACTED]";
227
- }
228
-
229
- if (type) {
230
- error.modelName = nameOf(type);
231
- error.message = this.mapClassError(error, type);
232
- }
233
-
234
- return this.errorFormatter.call(this, error, {});
235
- }).join("\n");
236
- return new AjvValidationError(message, errors);
237
- }
238
-
239
- mapClassError(error, targetType) {
240
- const propertyKey = getValue(error, "params.missingProperty");
241
-
242
- if (propertyKey) {
243
- const store = JsonEntityStore.from(prototypeOf(targetType), propertyKey);
244
-
245
- if (store) {
246
- setValue(error, "params.missingProperty", store.name || propertyKey);
247
- return error.message.replace(`'${propertyKey}'`, `'${store.name || propertyKey}'`);
248
- }
249
- }
250
-
251
- return error.message;
252
- }
253
-
254
- };
255
-
256
- __decorate([Constant("ajv.errorFormatter", defaultErrorFormatter), __metadata("design:type", Function)], AjvService.prototype, "errorFormatter", void 0);
257
-
258
- __decorate([Inject(), __metadata("design:type", Ajv)], AjvService.prototype, "ajv", void 0);
259
-
260
- AjvService = __decorate([Injectable()], AjvService);
261
-
262
- /**
263
- * Create new keyword custom validator
264
- * @param options
265
- * @decorator
266
- * @ajv
267
- */
268
-
269
- function Keyword(options) {
270
- return useDecorators(Injectable({
271
- type: "ajv:keyword"
272
- }), StoreSet("ajv:keyword", _extends({}, options, {
273
- metaSchema: options.metaSchema && options.metaSchema.toJSON ? options.metaSchema.toJSON() : options.metaSchema
274
- })));
275
- }
276
-
277
- /**
278
- * Create a new custom formats validator
279
- * @param name
280
- * @param options
281
- * @decorator
282
- * @ajv
283
- */
284
-
285
- function Formats(name, options = {}) {
286
- return useDecorators(Injectable({
287
- type: "ajv:formats"
288
- }), StoreSet("ajv:formats", {
289
- name,
290
- options
291
- }));
292
- }
293
-
294
- export { AjvService, AjvValidationError, Formats, Keyword };
295
- //# sourceMappingURL=index.modern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/errors/AjvValidationError.ts","../src/utils/getPath.ts","../src/utils/defaultErrorFormatter.ts","../src/services/Ajv.ts","../src/services/AjvService.ts","../src/decorators/keyword.ts","../src/decorators/formats.ts"],"sourcesContent":["import {BadRequest} from \"@tsed/exceptions\";\n\nexport class AjvValidationError extends BadRequest {\n public name: string = \"AJV_VALIDATION_ERROR\";\n public errors: any[];\n\n constructor(message: string, errors: any[] = []) {\n super(message);\n this.errors = errors;\n }\n}\n","import {getValue} from \"@tsed/core\";\n\nexport function getPath(error: any) {\n return getValue(error, \"dataPath\", getValue(error, \"instancePath\", \"\")).replace(/\\//gi, \".\");\n}\n","import {AjvErrorObject} from \"../interfaces/IAjvSettings\";\nimport {getPath} from \"./getPath\";\n\nexport function defaultErrorFormatter(error: AjvErrorObject & {dataPath: string}) {\n const value = JSON.stringify(error.data === undefined ? \"undefined\" : error.data);\n const join = (list: any[]): string => list.filter(Boolean).join(\"\").trim();\n\n error.dataPath = getPath(error);\n\n const [, indexPath, ...paths] = error.dataPath.split(\".\");\n const deepPaths = paths.length ? \".\" + paths.join(\".\") : \"\";\n\n if (error.collectionName) {\n switch (error.collectionName) {\n case \"Array\":\n return join([`${error.modelName || \"\"}[${indexPath}]${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n case \"Map\":\n return join([`Map<${indexPath}, ${error.modelName || \"\"}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n case \"Set\":\n return join([`Set<${indexPath}, ${error.modelName || \"\"}>${deepPaths}`, ` ${error.message}. Given value: ${value}`]);\n }\n }\n\n return join([!error.modelName && \"Value\", `${error.modelName || \"\"}`, error.dataPath, ` ${error.message}. Given value: ${value}`]);\n}\n","import {cleanObject} from \"@tsed/core\";\nimport {Configuration, InjectorService, ProviderScope, registerProvider} from \"@tsed/di\";\nimport Ajv, {Format, KeywordDefinition, Vocabulary} from \"ajv\";\nimport AjvFormats from \"ajv-formats\";\nimport {FormatsMethods} from \"../interfaces/FormatsMethods\";\nimport {IAjvSettings} from \"../interfaces/IAjvSettings\";\n\nfunction getHandler(key: string, service: any) {\n if (service[key]) {\n return service[key].bind(service);\n }\n}\n\nfunction getKeywordProviders(injector: InjectorService) {\n return injector.getProviders(\"ajv:keyword\");\n}\n\nfunction bindKeywords(injector: InjectorService): Vocabulary {\n return getKeywordProviders(injector).map((provider) => {\n const options = provider.store.get<Omit<KeywordDefinition, \"compile\">>(\"ajv:keyword\", {})!;\n const service = injector.invoke(provider.token);\n\n return <KeywordDefinition>cleanObject({\n ...options,\n validate: getHandler(\"validate\", service),\n compile: getHandler(\"compile\", service),\n code: getHandler(\"code\", service),\n macro: getHandler(\"macro\", service)\n });\n });\n}\n\nfunction getFormatsProviders(injector: InjectorService) {\n return injector.getProviders(\"ajv:formats\");\n}\n\nfunction getFormats(injector: InjectorService): {name: string; options: Format}[] {\n return getFormatsProviders(injector).map((provider) => {\n const {name, options} = provider.store.get<any>(\"ajv:formats\", {})!;\n const service = injector.invoke<FormatsMethods<any>>(provider.token);\n\n return {\n name,\n options: {\n ...options,\n validate: service.validate.bind(service),\n compare: service.compare?.bind(service)\n }\n };\n });\n}\n\nregisterProvider({\n provide: Ajv,\n deps: [Configuration, InjectorService],\n scope: ProviderScope.SINGLETON,\n useFactory(configuration: Configuration, injector: InjectorService) {\n const {errorFormatter, keywords = [], ...props} = configuration.get<IAjvSettings>(\"ajv\") || {};\n const options = {\n verbose: false,\n coerceTypes: true,\n strict: false,\n keywords: [...keywords, ...bindKeywords(injector)],\n ...props\n };\n\n const ajv = new Ajv(options);\n\n AjvFormats(ajv as any);\n\n getFormats(injector).forEach(({name, options}) => {\n ajv.addFormat(name, options);\n });\n\n return ajv;\n }\n});\n","import {deepClone, getValue, nameOf, prototypeOf, setValue, Type} from \"@tsed/core\";\nimport {Constant, Inject, Injectable} from \"@tsed/di\";\nimport {getJsonSchema, JsonEntityStore, JsonSchema, JsonSchemaObject} from \"@tsed/schema\";\nimport Ajv, {ErrorObject} from \"ajv\";\nimport {AjvValidationError} from \"../errors/AjvValidationError\";\nimport {AjvErrorObject, ErrorFormatter} from \"../interfaces/IAjvSettings\";\nimport {defaultErrorFormatter} from \"../utils/defaultErrorFormatter\";\nimport \"./Ajv\";\nimport {getPath} from \"../utils/getPath\";\n\nexport interface AjvValidateOptions extends Record<string, any> {\n schema?: JsonSchema | Partial<JsonSchemaObject>;\n type?: Type<any> | any;\n collectionType?: Type<any> | any;\n}\n\n@Injectable()\nexport class AjvService {\n @Constant(\"ajv.errorFormatter\", defaultErrorFormatter)\n protected errorFormatter: ErrorFormatter;\n\n @Inject()\n protected ajv: Ajv;\n\n async validate(value: any, options: AjvValidateOptions | JsonSchema): Promise<any> {\n let {schema, type, collectionType, ...additionalOptions} = this.mapOptions(options);\n\n schema = schema || getJsonSchema(type, {...additionalOptions, customKeys: true});\n\n if (schema) {\n const localValue = deepClone(value);\n const valid = await this.ajv.validate(schema as any, localValue);\n if (!valid) {\n throw this.mapErrors(this.ajv.errors || [], {\n type,\n collectionType,\n async: true,\n value: localValue\n });\n }\n }\n\n return value;\n }\n\n protected mapOptions(options: AjvValidateOptions | JsonSchema): AjvValidateOptions {\n if (options instanceof JsonSchema) {\n return {\n schema: options.toJSON({customKeys: true})\n };\n }\n\n return options;\n }\n\n protected mapErrors(errors: ErrorObject[], options: any) {\n const {type, collectionType, value} = options;\n\n const message = errors\n .map((error: AjvErrorObject) => {\n if (collectionType) {\n error.collectionName = nameOf(collectionType);\n }\n\n const dataPath = getPath(error);\n\n if (!error.data) {\n if (dataPath) {\n error.data = getValue(value, dataPath.replace(/^\\./, \"\"));\n } else if (error.schemaPath !== \"#/required\") {\n error.data = value;\n }\n }\n\n if (dataPath && dataPath.match(/pwd|password|mdp|secret/)) {\n error.data = \"[REDACTED]\";\n }\n\n if (type) {\n error.modelName = nameOf(type);\n error.message = this.mapClassError(error, type);\n }\n\n return this.errorFormatter.call(this, error, {});\n })\n .join(\"\\n\");\n\n return new AjvValidationError(message, errors);\n }\n\n protected mapClassError(error: AjvErrorObject, targetType: Type<any>) {\n const propertyKey = getValue(error, \"params.missingProperty\");\n\n if (propertyKey) {\n const store = JsonEntityStore.from<JsonEntityStore>(prototypeOf(targetType), propertyKey);\n\n if (store) {\n setValue(error, \"params.missingProperty\", store.name || propertyKey);\n\n return error.message!.replace(`'${propertyKey}'`, `'${store.name || propertyKey}'`);\n }\n }\n\n return error.message;\n }\n}\n","import {StoreSet, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {JsonSchema} from \"@tsed/schema\";\nimport {AnySchemaObject, KeywordDefinition} from \"ajv\";\n\nexport type KeywordOptions = Partial<Omit<KeywordDefinition, \"metaSchema\">> & {\n metaSchema?: AnySchemaObject | JsonSchema;\n};\n\n/**\n * Create new keyword custom validator\n * @param options\n * @decorator\n * @ajv\n */\nexport function Keyword(options: KeywordOptions): ClassDecorator {\n return useDecorators(\n Injectable({\n type: \"ajv:keyword\"\n }),\n StoreSet(\"ajv:keyword\", {\n ...options,\n metaSchema: options.metaSchema && options.metaSchema.toJSON ? options.metaSchema.toJSON() : options.metaSchema\n })\n );\n}\n","import {StoreSet, useDecorators} from \"@tsed/core\";\nimport {Injectable} from \"@tsed/di\";\nimport {AsyncFormatDefinition, FormatDefinition} from \"ajv\";\n\nexport type FormatsOptions = Omit<FormatDefinition<any>, \"validate\" | \"compare\"> | Omit<AsyncFormatDefinition<any>, \"validate\" | \"compare\">;\n\n/**\n * Create a new custom formats validator\n * @param name\n * @param options\n * @decorator\n * @ajv\n */\nexport function Formats(name: string, options: FormatsOptions = {}): ClassDecorator {\n return useDecorators(\n Injectable({\n type: \"ajv:formats\"\n }),\n StoreSet(\"ajv:formats\", {\n name,\n options\n })\n );\n}\n"],"names":["AjvValidationError","BadRequest","constructor","message","errors","getPath","error","getValue","replace","defaultErrorFormatter","value","JSON","stringify","data","undefined","join","list","filter","Boolean","trim","dataPath","indexPath","paths","split","deepPaths","length","collectionName","modelName","getHandler","key","service","bind","getKeywordProviders","injector","getProviders","bindKeywords","map","provider","options","store","get","invoke","token","cleanObject","validate","compile","code","macro","getFormatsProviders","getFormats","name","compare","registerProvider","provide","Ajv","deps","Configuration","InjectorService","scope","ProviderScope","SINGLETON","useFactory","configuration","keywords","props","verbose","coerceTypes","strict","ajv","AjvFormats","forEach","addFormat","AjvService","mapOptions","schema","type","collectionType","additionalOptions","getJsonSchema","customKeys","localValue","deepClone","valid","mapErrors","async","JsonSchema","toJSON","nameOf","schemaPath","match","mapClassError","errorFormatter","call","targetType","propertyKey","JsonEntityStore","from","prototypeOf","setValue","__decorate","Constant","Inject","Injectable","Keyword","useDecorators","StoreSet","metaSchema","Formats"],"mappings":"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"}