@middy/validator 3.6.1 → 4.0.0-alpha.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 (3) hide show
  1. package/index.cjs +46 -70
  2. package/index.js +35 -66
  3. package/package.json +6 -11
package/index.cjs CHANGED
@@ -2,121 +2,97 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(module, "exports", {
6
- enumerable: true,
7
- get: ()=>_default
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ transpileSchema: ()=>transpileSchema,
13
+ transpileLocale: ()=>transpileLocale,
14
+ default: ()=>_default
8
15
  });
9
16
  const _util = require("@middy/util");
10
- const _2020Js = _interopRequireDefault(require("ajv/dist/2020.js"));
11
- const _ajvI18N = _interopRequireDefault(require("ajv-i18n"));
12
- const _ajvFormats = _interopRequireDefault(require("ajv-formats"));
13
- const _ajvFormatsDraft2019 = _interopRequireDefault(require("ajv-formats-draft2019"));
14
- const _typeofJs = _interopRequireDefault(require("ajv-keywords/dist/definitions/typeof.js"));
15
- const _fastUri = _interopRequireDefault(require("fast-uri"));
17
+ const _ajvCmd = require("ajv-cmd");
18
+ const _ajvFtlI18N = _interopRequireDefault(require("ajv-ftl-i18n"));
16
19
  function _interopRequireDefault(obj) {
17
20
  return obj && obj.__esModule ? obj : {
18
21
  default: obj
19
22
  };
20
23
  }
21
- const Ajv = _2020Js.default.default;
22
- let ajv;
23
- const ajvDefaults = {
24
- strict: true,
25
- coerceTypes: 'array',
26
- allErrors: true,
27
- useDefaults: 'empty',
28
- messages: false,
29
- uriResolver: _fastUri.default,
30
- keywords: [
31
- (0, _typeofJs.default)()
32
- ]
33
- };
34
24
  const defaults = {
35
25
  eventSchema: undefined,
36
26
  contextSchema: undefined,
37
27
  responseSchema: undefined,
38
- ajvOptions: {},
39
- ajvInstance: undefined,
28
+ i18nEnabled: true,
40
29
  defaultLanguage: 'en',
41
- i18nEnabled: true
30
+ languages: {}
42
31
  };
43
32
  const validatorMiddleware = (opts = {})=>{
44
- let { inputSchema , outputSchema , eventSchema , contextSchema , responseSchema , ajvOptions , ajvInstance , defaultLanguage , i18nEnabled } = {
33
+ const { eventSchema , contextSchema , responseSchema , i18nEnabled , defaultLanguage , languages } = {
45
34
  ...defaults,
46
35
  ...opts
47
36
  };
48
- eventSchema = compile(eventSchema ?? inputSchema, ajvOptions, ajvInstance);
49
- contextSchema = compile(contextSchema, ajvOptions, ajvInstance);
50
- responseSchema = compile(responseSchema ?? outputSchema, ajvOptions, ajvInstance);
51
37
  const validatorMiddlewareBefore = async (request)=>{
52
38
  if (eventSchema) {
53
39
  const validEvent = await eventSchema(request.event);
54
40
  if (!validEvent) {
55
41
  if (i18nEnabled) {
56
42
  const language = chooseLanguage(request.event, defaultLanguage);
57
- _ajvI18N.default[language](eventSchema.errors);
43
+ if (languages[language]) {
44
+ languages[language](eventSchema.errors);
45
+ } else {
46
+ _ajvFtlI18N.default[language](eventSchema.errors);
47
+ }
58
48
  }
59
- const error = (0, _util.createError)(400, 'Event object failed validation');
60
- error.cause = eventSchema.errors;
61
- throw error;
49
+ throw (0, _util.createError)(400, 'Event object failed validation', {
50
+ cause: eventSchema.errors
51
+ });
62
52
  }
63
53
  }
64
54
  if (contextSchema) {
65
55
  const validContext = await contextSchema(request.context);
66
56
  if (!validContext) {
67
- const error1 = (0, _util.createError)(500, 'Context object failed validation');
68
- error1.cause = contextSchema.errors;
69
- throw error1;
57
+ throw (0, _util.createError)(500, 'Context object failed validation', {
58
+ cause: contextSchema.errors
59
+ });
70
60
  }
71
61
  }
72
62
  };
73
63
  const validatorMiddlewareAfter = async (request)=>{
74
- const valid = await responseSchema(request.response);
75
- if (!valid) {
76
- const error = (0, _util.createError)(500, 'Response object failed validation');
77
- error.cause = responseSchema.errors;
78
- throw error;
64
+ const validResponse = await responseSchema(request.response);
65
+ if (!validResponse) {
66
+ throw (0, _util.createError)(500, 'Response object failed validation', {
67
+ cause: responseSchema.errors
68
+ });
79
69
  }
80
70
  };
81
71
  return {
82
- before: eventSchema ?? inputSchema ?? contextSchema ? validatorMiddlewareBefore : undefined,
83
- after: responseSchema ?? outputSchema ? validatorMiddlewareAfter : undefined
72
+ before: eventSchema ?? contextSchema ? validatorMiddlewareBefore : undefined,
73
+ after: responseSchema ? validatorMiddlewareAfter : undefined
84
74
  };
85
75
  };
86
- const compile = (schema, ajvOptions, ajvInstance = null)=>{
87
- if (typeof schema === 'function' || !schema) return schema;
76
+ const ajvDefaults = {
77
+ strict: true,
78
+ coerceTypes: 'array',
79
+ allErrors: true,
80
+ useDefaults: 'empty',
81
+ messages: true
82
+ };
83
+ const transpileSchema = (schema, ajvOptions)=>{
88
84
  const options = {
89
85
  ...ajvDefaults,
90
86
  ...ajvOptions
91
87
  };
92
- if (!ajv) {
93
- ajv = ajvInstance ?? new Ajv(options);
94
- (0, _ajvFormats.default)(ajv);
95
- (0, _ajvFormatsDraft2019.default)(ajv);
96
- } else if (!ajvInstance) {
97
- ajv.opts = {
98
- ...ajv.opts,
99
- ...options
100
- };
101
- }
102
- return ajv.compile(schema);
103
- };
104
- const languageNormalizationMap = {
105
- pt: 'pt-BR',
106
- 'pt-br': 'pt-BR',
107
- pt_BR: 'pt-BR',
108
- pt_br: 'pt-BR',
109
- 'zh-tw': 'zh-TW',
110
- zh_TW: 'zh-TW',
111
- zh_tw: 'zh-TW'
88
+ return (0, _ajvCmd.compile)(schema, options);
112
89
  };
113
- const normalizePreferredLanguage = (lang)=>languageNormalizationMap[lang] ?? lang;
114
- const availableLanguages = Object.keys(_ajvI18N.default);
90
+ const transpileLocale = _ajvCmd.ftl;
91
+ const availableLanguages = Object.keys(_ajvFtlI18N.default);
115
92
  const chooseLanguage = ({ preferredLanguage }, defaultLanguage)=>{
116
93
  if (preferredLanguage) {
117
- const lang = normalizePreferredLanguage(preferredLanguage);
118
- if (availableLanguages.includes(lang)) {
119
- return lang;
94
+ if (availableLanguages.includes(preferredLanguage)) {
95
+ return preferredLanguage;
120
96
  }
121
97
  }
122
98
  return defaultLanguage;
package/index.js CHANGED
@@ -1,109 +1,78 @@
1
1
  import { createError } from '@middy/util';
2
- import _ajv from 'ajv/dist/2020.js';
3
- import localize from 'ajv-i18n';
4
- import formats from 'ajv-formats';
5
- import formatsDraft2019 from 'ajv-formats-draft2019';
6
- import typeofKeyword from 'ajv-keywords/dist/definitions/typeof.js';
7
- import uriResolver from 'fast-uri';
8
- const Ajv = _ajv.default;
9
- let ajv;
10
- const ajvDefaults = {
11
- strict: true,
12
- coerceTypes: 'array',
13
- allErrors: true,
14
- useDefaults: 'empty',
15
- messages: false,
16
- uriResolver,
17
- keywords: [
18
- typeofKeyword()
19
- ]
20
- };
2
+ import { compile, ftl } from 'ajv-cmd';
3
+ import localize from 'ajv-ftl-i18n';
21
4
  const defaults = {
22
5
  eventSchema: undefined,
23
6
  contextSchema: undefined,
24
7
  responseSchema: undefined,
25
- ajvOptions: {},
26
- ajvInstance: undefined,
8
+ i18nEnabled: true,
27
9
  defaultLanguage: 'en',
28
- i18nEnabled: true
10
+ languages: {}
29
11
  };
30
12
  const validatorMiddleware = (opts = {})=>{
31
- let { inputSchema , outputSchema , eventSchema , contextSchema , responseSchema , ajvOptions , ajvInstance , defaultLanguage , i18nEnabled } = {
13
+ const { eventSchema , contextSchema , responseSchema , i18nEnabled , defaultLanguage , languages } = {
32
14
  ...defaults,
33
15
  ...opts
34
16
  };
35
- eventSchema = compile(eventSchema ?? inputSchema, ajvOptions, ajvInstance);
36
- contextSchema = compile(contextSchema, ajvOptions, ajvInstance);
37
- responseSchema = compile(responseSchema ?? outputSchema, ajvOptions, ajvInstance);
38
17
  const validatorMiddlewareBefore = async (request)=>{
39
18
  if (eventSchema) {
40
19
  const validEvent = await eventSchema(request.event);
41
20
  if (!validEvent) {
42
21
  if (i18nEnabled) {
43
22
  const language = chooseLanguage(request.event, defaultLanguage);
44
- localize[language](eventSchema.errors);
23
+ if (languages[language]) {
24
+ languages[language](eventSchema.errors);
25
+ } else {
26
+ localize[language](eventSchema.errors);
27
+ }
45
28
  }
46
- const error = createError(400, 'Event object failed validation');
47
- error.cause = eventSchema.errors;
48
- throw error;
29
+ throw createError(400, 'Event object failed validation', {
30
+ cause: eventSchema.errors
31
+ });
49
32
  }
50
33
  }
51
34
  if (contextSchema) {
52
35
  const validContext = await contextSchema(request.context);
53
36
  if (!validContext) {
54
- const error1 = createError(500, 'Context object failed validation');
55
- error1.cause = contextSchema.errors;
56
- throw error1;
37
+ throw createError(500, 'Context object failed validation', {
38
+ cause: contextSchema.errors
39
+ });
57
40
  }
58
41
  }
59
42
  };
60
43
  const validatorMiddlewareAfter = async (request)=>{
61
- const valid = await responseSchema(request.response);
62
- if (!valid) {
63
- const error = createError(500, 'Response object failed validation');
64
- error.cause = responseSchema.errors;
65
- throw error;
44
+ const validResponse = await responseSchema(request.response);
45
+ if (!validResponse) {
46
+ throw createError(500, 'Response object failed validation', {
47
+ cause: responseSchema.errors
48
+ });
66
49
  }
67
50
  };
68
51
  return {
69
- before: eventSchema ?? inputSchema ?? contextSchema ? validatorMiddlewareBefore : undefined,
70
- after: responseSchema ?? outputSchema ? validatorMiddlewareAfter : undefined
52
+ before: eventSchema ?? contextSchema ? validatorMiddlewareBefore : undefined,
53
+ after: responseSchema ? validatorMiddlewareAfter : undefined
71
54
  };
72
55
  };
73
- const compile = (schema, ajvOptions, ajvInstance = null)=>{
74
- if (typeof schema === 'function' || !schema) return schema;
56
+ const ajvDefaults = {
57
+ strict: true,
58
+ coerceTypes: 'array',
59
+ allErrors: true,
60
+ useDefaults: 'empty',
61
+ messages: true
62
+ };
63
+ export const transpileSchema = (schema, ajvOptions)=>{
75
64
  const options = {
76
65
  ...ajvDefaults,
77
66
  ...ajvOptions
78
67
  };
79
- if (!ajv) {
80
- ajv = ajvInstance ?? new Ajv(options);
81
- formats(ajv);
82
- formatsDraft2019(ajv);
83
- } else if (!ajvInstance) {
84
- ajv.opts = {
85
- ...ajv.opts,
86
- ...options
87
- };
88
- }
89
- return ajv.compile(schema);
90
- };
91
- const languageNormalizationMap = {
92
- pt: 'pt-BR',
93
- 'pt-br': 'pt-BR',
94
- pt_BR: 'pt-BR',
95
- pt_br: 'pt-BR',
96
- 'zh-tw': 'zh-TW',
97
- zh_TW: 'zh-TW',
98
- zh_tw: 'zh-TW'
68
+ return compile(schema, options);
99
69
  };
100
- const normalizePreferredLanguage = (lang)=>languageNormalizationMap[lang] ?? lang;
70
+ export const transpileLocale = ftl;
101
71
  const availableLanguages = Object.keys(localize);
102
72
  const chooseLanguage = ({ preferredLanguage }, defaultLanguage)=>{
103
73
  if (preferredLanguage) {
104
- const lang = normalizePreferredLanguage(preferredLanguage);
105
- if (availableLanguages.includes(lang)) {
106
- return lang;
74
+ if (availableLanguages.includes(preferredLanguage)) {
75
+ return preferredLanguage;
107
76
  }
108
77
  }
109
78
  return defaultLanguage;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@middy/validator",
3
- "version": "3.6.1",
3
+ "version": "4.0.0-alpha.0",
4
4
  "description": "Validator middleware for the middy framework",
5
5
  "type": "module",
6
6
  "engines": {
7
- "node": ">=14"
7
+ "node": ">=16"
8
8
  },
9
9
  "engineStrict": true,
10
10
  "publishConfig": {
@@ -61,18 +61,13 @@
61
61
  },
62
62
  "homepage": "https://middy.js.org",
63
63
  "dependencies": {
64
- "@middy/util": "3.6.1",
65
- "ajv": "8.11.0",
66
- "ajv-formats": "2.1.1",
67
- "ajv-formats-draft2019": "1.6.1",
68
- "ajv-i18n": "4.2.0",
69
- "ajv-keywords": "5.1.0",
70
- "fast-uri": "2.1.0"
64
+ "@middy/util": "4.0.0-alpha.0",
65
+ "ajv-cmd": "0.1.9"
71
66
  },
72
67
  "devDependencies": {
73
- "@middy/core": "3.6.1",
68
+ "@middy/core": "4.0.0-alpha.0",
74
69
  "@types/http-errors": "^1.8.1",
75
70
  "ajv-bsontype": "^1.0.7"
76
71
  },
77
- "gitHead": "31a7f9f8e93a73a8be382b3022b9cfcbc13b2961"
72
+ "gitHead": "306fb9aa633d5757d11ced3dc192f046ef3c2685"
78
73
  }