@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.
Files changed (2) hide show
  1. package/index.js +60 -54
  2. 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
- const Ajv = _ajv.default // esm workaround for linting
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', // important for query string params
10
+ coerceTypes: 'array',
13
11
  allErrors: true,
14
12
  useDefaults: 'empty',
15
- messages: false // allow i18n
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, ...opts }
36
- inputSchema = compile(inputSchema, ajvOptions, ajvInstance)
37
- outputSchema = compile(outputSchema, ajvOptions, ajvInstance)
32
+ } = { ...defaults,
33
+ ...opts
34
+ };
35
+ inputSchema = compile(inputSchema, ajvOptions, ajvInstance);
36
+ outputSchema = compile(outputSchema, ajvOptions, ajvInstance);
38
37
 
39
- const validatorMiddlewareBefore = async (request) => {
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
- // Bad Request
49
- throw createError(400, 'Event object failed validation', { cause: inputSchema.errors })
47
+ throw createError(400, 'Event object failed validation', {
48
+ cause: inputSchema.errors
49
+ });
50
50
  }
51
- }
51
+ };
52
52
 
53
- const validatorMiddlewareAfter = async (request) => {
54
- const valid = outputSchema(request.response)
53
+ const validatorMiddlewareAfter = async request => {
54
+ const valid = outputSchema(request.response);
55
55
 
56
56
  if (!valid) {
57
- // Internal Server Error
58
- throw createError(500, 'Response object failed validation', { cause: outputSchema.errors })
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
- // Check if already compiled
71
- if (typeof schema === 'function' || !schema) return schema
72
- const options = { ...ajvDefaults, ...ajvOptions }
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
- // Update options when initializing the middleware multiple times
79
- ajv.opts = { ...ajv.opts, ...options }
80
+ ajv.opts = { ...ajv.opts,
81
+ ...options
82
+ };
80
83
  }
81
- return ajv.compile(schema)
82
- }
83
84
 
84
- /* in ajv-i18n Portuguese is represented as pt-BR */
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 = (lang) =>
96
- languageNormalizationMap[lang] ?? lang
98
+ const normalizePreferredLanguage = lang => languageNormalizationMap[lang] ?? lang;
97
99
 
98
- const availableLanguages = Object.keys(localize)
99
- const chooseLanguage = ({ preferredLanguage }, defaultLanguage) => {
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",
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.3",
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.3",
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": "1441158711580313765e6d156046ef0fade0d156"
61
+ "gitHead": "d4bea7f4e21f6a9bbb1f6f6908361169598b9e53"
62
62
  }