1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | Object.defineProperty(exports, "__esModule", { value: true });
|
7 | exports.AjvFactoryProvider = exports.DEFAULT_AJV_VALIDATION_OPTIONS = void 0;
|
8 | const tslib_1 = require("tslib");
|
9 | const core_1 = require("@loopback/core");
|
10 | const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
11 | const ajv_errors_1 = tslib_1.__importDefault(require("ajv-errors"));
|
12 | const ajv_formats_1 = tslib_1.__importDefault(require("ajv-formats"));
|
13 | const ajv_keywords_1 = tslib_1.__importDefault(require("ajv-keywords"));
|
14 | const debug_1 = tslib_1.__importDefault(require("debug"));
|
15 | const keys_1 = require("../keys");
|
16 | const openapi_formats_1 = require("./openapi-formats");
|
17 | const debug = (0, debug_1.default)('loopback:rest:ajv');
|
18 | exports.DEFAULT_AJV_VALIDATION_OPTIONS = {
|
19 | $data: true,
|
20 | };
|
21 |
|
22 |
|
23 |
|
24 | let AjvFactoryProvider = class AjvFactoryProvider {
|
25 | constructor(options = exports.DEFAULT_AJV_VALIDATION_OPTIONS) {
|
26 | this.options = options;
|
27 | }
|
28 | value() {
|
29 | return options => {
|
30 | let validationOptions = {
|
31 | ...this.options,
|
32 | ...options,
|
33 | };
|
34 |
|
35 | validationOptions = {
|
36 | allErrors: true,
|
37 | strictTypes: false,
|
38 | ...validationOptions,
|
39 | };
|
40 | debug('AJV options', validationOptions);
|
41 | const ajvOptions = { ...validationOptions };
|
42 | delete ajvOptions.ajvErrors;
|
43 | const ajvInst = new ajv_1.default(ajvOptions);
|
44 | ajvInst.addKeyword('components');
|
45 | ajvInst.addKeyword('x-typescript-type');
|
46 | (0, ajv_keywords_1.default)(ajvInst, validationOptions.ajvKeywords);
|
47 | (0, ajv_errors_1.default)(ajvInst, validationOptions.ajvErrors);
|
48 | if (this.keywords) {
|
49 | this.keywords.forEach(keyword => {
|
50 | debug('Adding Ajv keyword %s', keyword.keyword);
|
51 | ajvInst.addKeyword(keyword);
|
52 | });
|
53 | }
|
54 | (0, ajv_formats_1.default)(ajvInst);
|
55 | for (const format of openapi_formats_1.openapiFormats) {
|
56 | ajvInst.addFormat(format.name, format);
|
57 | }
|
58 | if (this.formats) {
|
59 | this.formats.forEach(format => {
|
60 | debug('Adding Ajv format %s', format.name);
|
61 | ajvInst.addFormat(format.name, format);
|
62 | });
|
63 | }
|
64 | return ajvInst;
|
65 | };
|
66 | }
|
67 | };
|
68 | tslib_1.__decorate([
|
69 | (0, core_1.inject)((0, core_1.filterByTag)(keys_1.RestTags.AJV_KEYWORD)),
|
70 | tslib_1.__metadata("design:type", Array)
|
71 | ], AjvFactoryProvider.prototype, "keywords", void 0);
|
72 | tslib_1.__decorate([
|
73 | (0, core_1.inject)((0, core_1.filterByTag)(keys_1.RestTags.AJV_FORMAT)),
|
74 | tslib_1.__metadata("design:type", Array)
|
75 | ], AjvFactoryProvider.prototype, "formats", void 0);
|
76 | AjvFactoryProvider = tslib_1.__decorate([
|
77 | (0, core_1.injectable)({ scope: core_1.BindingScope.SINGLETON }),
|
78 | tslib_1.__param(0, (0, core_1.inject)(keys_1.RestBindings.REQUEST_BODY_PARSER_OPTIONS.deepProperty('validation'), { optional: true })),
|
79 | tslib_1.__metadata("design:paramtypes", [Object])
|
80 | ], AjvFactoryProvider);
|
81 | exports.AjvFactoryProvider = AjvFactoryProvider;
|
82 |
|
\ | No newline at end of file |