@middy/validator 3.0.0-alpha.3 → 3.0.0-alpha.4
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/index.js +60 -54
- package/package.json +4 -4
package/index.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { createError } from '@middy/util'
|
|
2
|
-
import _ajv from 'ajv/dist/2019.js'
|
|
3
|
-
import localize from 'ajv-i18n'
|
|
4
|
-
import formats from 'ajv-formats'
|
|
5
|
-
import formatsDraft2019 from 'ajv-formats-draft2019'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
let ajv
|
|
1
|
+
import { createError } from '@middy/util';
|
|
2
|
+
import _ajv from 'ajv/dist/2019.js';
|
|
3
|
+
import localize from 'ajv-i18n';
|
|
4
|
+
import formats from 'ajv-formats';
|
|
5
|
+
import formatsDraft2019 from 'ajv-formats-draft2019';
|
|
6
|
+
const Ajv = _ajv.default;
|
|
7
|
+
let ajv;
|
|
10
8
|
const ajvDefaults = {
|
|
11
9
|
strict: true,
|
|
12
|
-
coerceTypes: 'array',
|
|
10
|
+
coerceTypes: 'array',
|
|
13
11
|
allErrors: true,
|
|
14
12
|
useDefaults: 'empty',
|
|
15
|
-
messages: false
|
|
16
|
-
}
|
|
17
|
-
|
|
13
|
+
messages: false
|
|
14
|
+
};
|
|
18
15
|
const defaults = {
|
|
19
16
|
inputSchema: undefined,
|
|
20
17
|
outputSchema: undefined,
|
|
@@ -22,7 +19,7 @@ const defaults = {
|
|
|
22
19
|
ajvInstance: undefined,
|
|
23
20
|
defaultLanguage: 'en',
|
|
24
21
|
i18nEnabled: true
|
|
25
|
-
}
|
|
22
|
+
};
|
|
26
23
|
|
|
27
24
|
const validatorMiddleware = (opts = {}) => {
|
|
28
25
|
let {
|
|
@@ -32,56 +29,62 @@ const validatorMiddleware = (opts = {}) => {
|
|
|
32
29
|
ajvInstance,
|
|
33
30
|
defaultLanguage,
|
|
34
31
|
i18nEnabled
|
|
35
|
-
} = { ...defaults,
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
} = { ...defaults,
|
|
33
|
+
...opts
|
|
34
|
+
};
|
|
35
|
+
inputSchema = compile(inputSchema, ajvOptions, ajvInstance);
|
|
36
|
+
outputSchema = compile(outputSchema, ajvOptions, ajvInstance);
|
|
38
37
|
|
|
39
|
-
const validatorMiddlewareBefore = async
|
|
40
|
-
const valid = inputSchema(request.event)
|
|
38
|
+
const validatorMiddlewareBefore = async request => {
|
|
39
|
+
const valid = inputSchema(request.event);
|
|
41
40
|
|
|
42
41
|
if (!valid) {
|
|
43
42
|
if (i18nEnabled) {
|
|
44
|
-
const language = chooseLanguage(request.event, defaultLanguage)
|
|
45
|
-
localize[language](inputSchema.errors)
|
|
43
|
+
const language = chooseLanguage(request.event, defaultLanguage);
|
|
44
|
+
localize[language](inputSchema.errors);
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
throw createError(400, 'Event object failed validation', {
|
|
48
|
+
cause: inputSchema.errors
|
|
49
|
+
});
|
|
50
50
|
}
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
|
|
53
|
-
const validatorMiddlewareAfter = async
|
|
54
|
-
const valid = outputSchema(request.response)
|
|
53
|
+
const validatorMiddlewareAfter = async request => {
|
|
54
|
+
const valid = outputSchema(request.response);
|
|
55
55
|
|
|
56
56
|
if (!valid) {
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
throw createError(500, 'Response object failed validation', {
|
|
58
|
+
cause: outputSchema.errors
|
|
59
|
+
});
|
|
59
60
|
}
|
|
60
|
-
}
|
|
61
|
+
};
|
|
62
|
+
|
|
61
63
|
return {
|
|
62
64
|
before: inputSchema ? validatorMiddlewareBefore : undefined,
|
|
63
65
|
after: outputSchema ? validatorMiddlewareAfter : undefined
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
+
};
|
|
67
|
+
};
|
|
66
68
|
|
|
67
|
-
// This is pulled out due to it's performance cost (50-100ms on cold start)
|
|
68
|
-
// Precompile your schema during a build step is recommended.
|
|
69
69
|
const compile = (schema, ajvOptions, ajvInstance = null) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
if (typeof schema === 'function' || !schema) return schema;
|
|
71
|
+
const options = { ...ajvDefaults,
|
|
72
|
+
...ajvOptions
|
|
73
|
+
};
|
|
74
|
+
|
|
73
75
|
if (!ajv) {
|
|
74
|
-
ajv = ajvInstance ?? new Ajv(options)
|
|
75
|
-
formats(ajv)
|
|
76
|
-
formatsDraft2019(ajv)
|
|
76
|
+
ajv = ajvInstance ?? new Ajv(options);
|
|
77
|
+
formats(ajv);
|
|
78
|
+
formatsDraft2019(ajv);
|
|
77
79
|
} else if (!ajvInstance) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
ajv.opts = { ...ajv.opts,
|
|
81
|
+
...options
|
|
82
|
+
};
|
|
80
83
|
}
|
|
81
|
-
return ajv.compile(schema)
|
|
82
|
-
}
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
return ajv.compile(schema);
|
|
86
|
+
};
|
|
87
|
+
|
|
85
88
|
const languageNormalizationMap = {
|
|
86
89
|
pt: 'pt-BR',
|
|
87
90
|
'pt-br': 'pt-BR',
|
|
@@ -90,21 +93,24 @@ const languageNormalizationMap = {
|
|
|
90
93
|
'zh-tw': 'zh-TW',
|
|
91
94
|
zh_TW: 'zh-TW',
|
|
92
95
|
zh_tw: 'zh-TW'
|
|
93
|
-
}
|
|
96
|
+
};
|
|
94
97
|
|
|
95
|
-
const normalizePreferredLanguage =
|
|
96
|
-
languageNormalizationMap[lang] ?? lang
|
|
98
|
+
const normalizePreferredLanguage = lang => languageNormalizationMap[lang] ?? lang;
|
|
97
99
|
|
|
98
|
-
const availableLanguages = Object.keys(localize)
|
|
99
|
-
|
|
100
|
+
const availableLanguages = Object.keys(localize);
|
|
101
|
+
|
|
102
|
+
const chooseLanguage = ({
|
|
103
|
+
preferredLanguage
|
|
104
|
+
}, defaultLanguage) => {
|
|
100
105
|
if (preferredLanguage) {
|
|
101
|
-
const lang = normalizePreferredLanguage(preferredLanguage)
|
|
106
|
+
const lang = normalizePreferredLanguage(preferredLanguage);
|
|
107
|
+
|
|
102
108
|
if (availableLanguages.includes(lang)) {
|
|
103
|
-
return lang
|
|
109
|
+
return lang;
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
|
|
107
|
-
return defaultLanguage
|
|
108
|
-
}
|
|
113
|
+
return defaultLanguage;
|
|
114
|
+
};
|
|
109
115
|
|
|
110
|
-
export default validatorMiddleware
|
|
116
|
+
export default validatorMiddleware;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@middy/validator",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.4",
|
|
4
4
|
"description": "Validator middleware for the middy framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -47,16 +47,16 @@
|
|
|
47
47
|
},
|
|
48
48
|
"homepage": "https://github.com/middyjs/middy#readme",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@middy/util": "^3.0.0-alpha.
|
|
50
|
+
"@middy/util": "^3.0.0-alpha.4",
|
|
51
51
|
"ajv": "8.8.2",
|
|
52
52
|
"ajv-formats": "2.1.1",
|
|
53
53
|
"ajv-formats-draft2019": "1.6.1",
|
|
54
54
|
"ajv-i18n": "4.2.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@middy/core": "^3.0.0-alpha.
|
|
57
|
+
"@middy/core": "^3.0.0-alpha.4",
|
|
58
58
|
"@types/http-errors": "^1.8.1",
|
|
59
59
|
"ajv-bsontype": "^1.0.7"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "d4bea7f4e21f6a9bbb1f6f6908361169598b9e53"
|
|
62
62
|
}
|