1 | import { createError } from '@middy/util';
|
2 | const defaults = {
|
3 | eventSchema: undefined,
|
4 | contextSchema: undefined,
|
5 | responseSchema: undefined,
|
6 | defaultLanguage: 'en',
|
7 | languages: {}
|
8 | };
|
9 | const validatorMiddleware = (opts = {})=>{
|
10 | const { eventSchema , contextSchema , responseSchema , defaultLanguage , languages } = {
|
11 | ...defaults,
|
12 | ...opts
|
13 | };
|
14 | const validatorMiddlewareBefore = async (request)=>{
|
15 | if (eventSchema) {
|
16 | const validEvent = await eventSchema(request.event);
|
17 | if (!validEvent) {
|
18 | const localize = languages[request.event.preferredLanguage] ?? languages[defaultLanguage];
|
19 | localize?.(eventSchema.errors);
|
20 | throw createError(400, 'Event object failed validation', {
|
21 | cause: eventSchema.errors
|
22 | });
|
23 | }
|
24 | }
|
25 | if (contextSchema) {
|
26 | const validContext = await contextSchema(request.context);
|
27 | if (!validContext) {
|
28 | throw createError(500, 'Context object failed validation', {
|
29 | cause: contextSchema.errors
|
30 | });
|
31 | }
|
32 | }
|
33 | };
|
34 | const validatorMiddlewareAfter = async (request)=>{
|
35 | const validResponse = await responseSchema(request.response);
|
36 | if (!validResponse) {
|
37 | throw createError(500, 'Response object failed validation', {
|
38 | cause: responseSchema.errors
|
39 | });
|
40 | }
|
41 | };
|
42 | return {
|
43 | before: eventSchema ?? contextSchema ? validatorMiddlewareBefore : undefined,
|
44 | after: responseSchema ? validatorMiddlewareAfter : undefined
|
45 | };
|
46 | };
|
47 | export default validatorMiddleware;
|
48 |
|
49 |
|
50 |
|
\ | No newline at end of file |