@gahojin-inc/middy-http-body-parser 2026.3.3 → 2026.5.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.
- package/dist/index.d.ts +21 -0
- package/dist/{index.mjs → index.js} +5 -5
- package/dist/index.js.map +1 -0
- package/dist/parser/{json.d.cts → json.d.ts} +1 -1
- package/dist/parser/{json.mjs → json.js} +2 -2
- package/dist/parser/json.js.map +1 -0
- package/dist/parser/{urlencode.d.cts → urlencode.d.ts} +1 -1
- package/dist/parser/{urlencode.mjs → urlencode.js} +3 -3
- package/dist/parser/urlencode.js.map +1 -0
- package/package.json +15 -27
- package/dist/index.cjs +0 -55
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -21
- package/dist/index.d.mts +0 -21
- package/dist/index.mjs.map +0 -1
- package/dist/parser/json.cjs +0 -17
- package/dist/parser/json.cjs.map +0 -1
- package/dist/parser/json.d.mts +0 -3
- package/dist/parser/json.mjs.map +0 -1
- package/dist/parser/urlencode.cjs +0 -6
- package/dist/parser/urlencode.d.mts +0 -3
- package/dist/parser/urlencode.mjs.map +0 -1
- package/dist/urlencode-CdbvAHSA.js +0 -52
- package/dist/urlencode-CdbvAHSA.js.map +0 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { default as middy } from '@middy/core';
|
|
2
|
+
import { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
3
|
+
type BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult;
|
|
4
|
+
type BodyParser<TResult = any> = {
|
|
5
|
+
contentType: RegExp;
|
|
6
|
+
parse: BodyParseFn<TResult>;
|
|
7
|
+
invalidMessage: string;
|
|
8
|
+
} & ({
|
|
9
|
+
errorWhenUndefined: true;
|
|
10
|
+
} | {
|
|
11
|
+
errorWhenUndefined: false;
|
|
12
|
+
responseWhenUndefined: any;
|
|
13
|
+
});
|
|
14
|
+
type Options = {
|
|
15
|
+
parsers: BodyParser[];
|
|
16
|
+
disableContentTypeError: boolean;
|
|
17
|
+
};
|
|
18
|
+
type RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent;
|
|
19
|
+
declare const parser: (options?: Partial<Options>) => middy.MiddlewareObj<RequestEvent>;
|
|
20
|
+
export default parser;
|
|
21
|
+
export type { BodyParser };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import jsonParser from "./parser/json.
|
|
2
|
-
import urlencodeParser from "./parser/urlencode.
|
|
1
|
+
import jsonParser from "./parser/json.js";
|
|
2
|
+
import urlencodeParser from "./parser/urlencode.js";
|
|
3
3
|
import { createError } from "@middy/util";
|
|
4
4
|
//#region src/index.ts
|
|
5
|
-
|
|
5
|
+
var defaultOptions = {
|
|
6
6
|
parsers: [jsonParser, urlencodeParser],
|
|
7
7
|
disableContentTypeError: false
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
var parser = (options = {}) => {
|
|
10
10
|
const { parsers, disableContentTypeError } = {
|
|
11
11
|
...defaultOptions,
|
|
12
12
|
...options
|
|
@@ -48,4 +48,4 @@ const parser = (options = {}) => {
|
|
|
48
48
|
//#endregion
|
|
49
49
|
export { parser as default };
|
|
50
50
|
|
|
51
|
-
//# sourceMappingURL=index.
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type middy from '@middy/core'\nimport { createError } from '@middy/util'\nimport type { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from 'aws-lambda'\nimport jsonParser from './parser/json.js'\nimport urlencodeParser from './parser/urlencode.js'\n\ntype BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult\n\ntype BodyParser<TResult = any> = {\n contentType: RegExp\n parse: BodyParseFn<TResult>\n invalidMessage: string\n} & (\n | {\n errorWhenUndefined: true\n }\n | {\n errorWhenUndefined: false\n responseWhenUndefined: any\n }\n)\n\ntype Options = {\n parsers: BodyParser[]\n disableContentTypeError: boolean\n}\n\ntype RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent\n\nconst defaultOptions: Options = {\n parsers: [jsonParser, urlencodeParser],\n disableContentTypeError: false,\n}\n\nconst parser = (options: Partial<Options> = {}): middy.MiddlewareObj<RequestEvent> => {\n const opts: Options = { ...defaultOptions, ...options }\n const { parsers, disableContentTypeError } = opts\n\n const beforeFn: middy.MiddlewareFn<RequestEvent> = (request) => {\n const { headers, body } = request.event\n const contentType = headers?.['content-type'] ?? headers?.['Content-Type']\n\n const parser = parsers.find((parser) => {\n return contentType && parser.contentType.test(contentType)\n })\n if (!parser) {\n if (disableContentTypeError) {\n return\n }\n throw createError(415, 'Unsupported Media Type', {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: contentType },\n })\n }\n\n if (typeof body === 'undefined' || body === null) {\n if (parser.errorWhenUndefined === true) {\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body },\n })\n }\n request.event.body = parser.responseWhenUndefined\n return\n }\n\n try {\n const data = request.event.isBase64Encoded ? Buffer.from(body, 'base64').toString() : body\n\n request.event.body = parser.parse(data, body)\n } catch (err) {\n // UnprocessableEntity\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body, message: err instanceof Error ? err.message : err?.toString() },\n })\n }\n }\n\n return {\n before: beforeFn,\n }\n}\n\nexport default parser\nexport type { BodyParser }\n"],"mappings":";;;;AA6BA,IAAM,iBAA0B;CAC9B,SAAS,CAAC,YAAY,gBAAgB;CACtC,yBAAyB;CAC1B;AAED,IAAM,UAAU,UAA4B,EAAE,KAAwC;CAEpF,MAAM,EAAE,SAAS,4BAA4B;EADrB,GAAG;EAAgB,GAAG;EACD;CAE7C,MAAM,YAA8C,YAAY;EAC9D,MAAM,EAAE,SAAS,SAAS,QAAQ;EAClC,MAAM,cAAc,UAAU,mBAAmB,UAAU;EAE3D,MAAM,SAAS,QAAQ,MAAM,WAAW;AACtC,UAAO,eAAe,OAAO,YAAY,KAAK,YAAY;IAC1D;AACF,MAAI,CAAC,QAAQ;AACX,OAAI,wBACF;AAEF,SAAM,YAAY,KAAK,0BAA0B,EAC/C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAa,EAC7E,CAAC;;AAGJ,MAAI,OAAO,SAAS,eAAe,SAAS,MAAM;AAChD,OAAI,OAAO,uBAAuB,KAChC,OAAM,YAAY,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,EACtE,CAAC;AAEJ,WAAQ,MAAM,OAAO,OAAO;AAC5B;;AAGF,MAAI;GACF,MAAM,OAAO,QAAQ,MAAM,kBAAkB,OAAO,KAAK,MAAM,SAAS,CAAC,UAAU,GAAG;AAEtF,WAAQ,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK;WACtC,KAAK;AAEZ,SAAM,YAAY,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,KAAK,UAAU;IAAE,EACrI,CAAC;;;AAIN,QAAO,EACL,QAAQ,UACT"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/parser/json.ts
|
|
2
|
-
|
|
2
|
+
var jsonParser = {
|
|
3
3
|
contentType: /^application\/(.+\+)?json($|;.+)/,
|
|
4
4
|
parse: (body) => {
|
|
5
5
|
return JSON.parse(body);
|
|
@@ -10,4 +10,4 @@ const jsonParser = {
|
|
|
10
10
|
//#endregion
|
|
11
11
|
export { jsonParser as default };
|
|
12
12
|
|
|
13
|
-
//# sourceMappingURL=json.
|
|
13
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","names":[],"sources":["../../src/parser/json.ts"],"sourcesContent":["import type { BodyParser } from '../index.js'\n\nconst invalidMessage = 'Invalid or malformed JSON was provided'\n\nconst jsonParser: BodyParser = {\n contentType: /^application\\/(.+\\+)?json($|;.+)/,\n parse: (body) => {\n return JSON.parse(body)\n },\n invalidMessage,\n errorWhenUndefined: true,\n}\n\nexport default jsonParser\n"],"mappings":";AAIA,IAAM,aAAyB;CAC7B,aAAa;CACb,QAAQ,SAAS;AACf,SAAO,KAAK,MAAM,KAAK;;CAEzB,gBAAA;CACA,oBAAoB;CACrB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import querystring from "node:querystring";
|
|
2
2
|
//#region src/parser/urlencode.ts
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
var invalidMessage = "Invalid or malformed URL encoded form was provided";
|
|
4
|
+
var urlencodeParser = {
|
|
5
5
|
contentType: /^application\/x-www-form-urlencoded(;.*)?$/,
|
|
6
6
|
parse: (body) => {
|
|
7
7
|
const ret = Object.assign({}, querystring.parse(body));
|
|
@@ -15,4 +15,4 @@ const urlencodeParser = {
|
|
|
15
15
|
//#endregion
|
|
16
16
|
export { urlencodeParser as default };
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=urlencode.
|
|
18
|
+
//# sourceMappingURL=urlencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlencode.js","names":[],"sources":["../../src/parser/urlencode.ts"],"sourcesContent":["import querystring from 'node:querystring'\nimport type { BodyParser } from '../index.js'\n\nconst invalidMessage = 'Invalid or malformed URL encoded form was provided'\nconst urlencodeParser: BodyParser = {\n contentType: /^application\\/x-www-form-urlencoded(;.*)?$/,\n parse: (body) => {\n const ret = Object.assign({}, querystring.parse(body))\n if (ret?.[body] === '') {\n throw new Error(invalidMessage)\n }\n return ret\n },\n invalidMessage,\n errorWhenUndefined: false,\n responseWhenUndefined: {},\n}\n\nexport default urlencodeParser\n"],"mappings":";;AAGA,IAAM,iBAAiB;AACvB,IAAM,kBAA8B;CAClC,aAAa;CACb,QAAQ,SAAS;EACf,MAAM,MAAM,OAAO,OAAO,EAAE,EAAE,YAAY,MAAM,KAAK,CAAC;AACtD,MAAI,MAAM,UAAU,GAClB,OAAM,IAAI,MAAM,eAAe;AAEjC,SAAO;;CAET;CACA,oBAAoB;CACpB,uBAAuB,EAAE;CAC1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gahojin-inc/middy-http-body-parser",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.5.0",
|
|
4
4
|
"description": "Middy HTTP body parser",
|
|
5
5
|
"author": "GAHOJIN, Inc.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,46 +23,34 @@
|
|
|
23
23
|
"access": "public",
|
|
24
24
|
"provenance": true
|
|
25
25
|
},
|
|
26
|
-
"main": "./dist/index.
|
|
27
|
-
"module": "./dist/index.
|
|
28
|
-
"types": "./dist/index.d.
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"module": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
29
|
"exports": {
|
|
30
30
|
"./package.json": "./package.json",
|
|
31
31
|
".": {
|
|
32
32
|
"import": {
|
|
33
|
-
"types": "./dist/index.d.
|
|
34
|
-
"default": "./dist/index.
|
|
35
|
-
},
|
|
36
|
-
"require": {
|
|
37
|
-
"types": "./dist/index.d.cts",
|
|
38
|
-
"default": "./dist/index.cjs"
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"default": "./dist/index.js"
|
|
39
35
|
}
|
|
40
36
|
},
|
|
41
37
|
"./parser/json": {
|
|
42
38
|
"import": {
|
|
43
|
-
"types": "./dist/parser/json.d.
|
|
44
|
-
"default": "./dist/parser/json.
|
|
45
|
-
},
|
|
46
|
-
"require": {
|
|
47
|
-
"types": "./dist/parser/json.d.cts",
|
|
48
|
-
"default": "./dist/parser/json.cjs"
|
|
39
|
+
"types": "./dist/parser/json.d.ts",
|
|
40
|
+
"default": "./dist/parser/json.js"
|
|
49
41
|
}
|
|
50
42
|
},
|
|
51
43
|
"./parser/urlencode": {
|
|
52
44
|
"import": {
|
|
53
|
-
"types": "./dist/parser/urlencode.d.
|
|
54
|
-
"default": "./dist/parser/
|
|
55
|
-
},
|
|
56
|
-
"require": {
|
|
57
|
-
"types": "./dist/parser/json.d.cts",
|
|
58
|
-
"default": "./dist/parser/urlencode.cjs"
|
|
45
|
+
"types": "./dist/parser/urlencode.d.ts",
|
|
46
|
+
"default": "./dist/parser/urlencode.js"
|
|
59
47
|
}
|
|
60
48
|
}
|
|
61
49
|
},
|
|
62
50
|
"devDependencies": {
|
|
63
|
-
"@gahojin-inc/aws-lambda-mock-context": "2026.
|
|
64
|
-
"@middy/core": "7.
|
|
65
|
-
"@middy/util": "7.
|
|
51
|
+
"@gahojin-inc/aws-lambda-mock-context": "2026.4.0",
|
|
52
|
+
"@middy/core": "7.3.3",
|
|
53
|
+
"@middy/util": "7.3.3",
|
|
66
54
|
"@types/aws-lambda": "8.10.161"
|
|
67
55
|
},
|
|
68
56
|
"peerDependencies": {
|
|
@@ -71,11 +59,11 @@
|
|
|
71
59
|
"@types/aws-lambda": "^8"
|
|
72
60
|
},
|
|
73
61
|
"scripts": {
|
|
74
|
-
"build": "
|
|
62
|
+
"build": "vite build",
|
|
75
63
|
"lint": "biome check --write .",
|
|
76
64
|
"lint:ci": "biome ci .",
|
|
77
65
|
"check": "tsc --noEmit",
|
|
78
|
-
"check:packagejson": "attw --pack --profile
|
|
66
|
+
"check:packagejson": "attw --pack --profile esm-only .",
|
|
79
67
|
"test": "vitest --watch",
|
|
80
68
|
"test:unit": "vitest --passWithNoTests --run --coverage"
|
|
81
69
|
}
|
package/dist/index.cjs
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
Object.defineProperties(exports, {
|
|
2
|
-
__esModule: { value: true },
|
|
3
|
-
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
-
});
|
|
5
|
-
const require_urlencode = require("./urlencode-CdbvAHSA.js");
|
|
6
|
-
const require_parser_json = require("./parser/json.cjs");
|
|
7
|
-
let _middy_util = require("@middy/util");
|
|
8
|
-
//#region src/index.ts
|
|
9
|
-
const defaultOptions = {
|
|
10
|
-
parsers: [require_parser_json.default, require_urlencode.urlencodeParser],
|
|
11
|
-
disableContentTypeError: false
|
|
12
|
-
};
|
|
13
|
-
const parser = (options = {}) => {
|
|
14
|
-
const { parsers, disableContentTypeError } = {
|
|
15
|
-
...defaultOptions,
|
|
16
|
-
...options
|
|
17
|
-
};
|
|
18
|
-
const beforeFn = (request) => {
|
|
19
|
-
const { headers, body } = request.event;
|
|
20
|
-
const contentType = headers?.["content-type"] ?? headers?.["Content-Type"];
|
|
21
|
-
const parser = parsers.find((parser) => {
|
|
22
|
-
return contentType && parser.contentType.test(contentType);
|
|
23
|
-
});
|
|
24
|
-
if (!parser) {
|
|
25
|
-
if (disableContentTypeError) return;
|
|
26
|
-
throw (0, _middy_util.createError)(415, "Unsupported Media Type", { cause: {
|
|
27
|
-
package: "@gahojin-inc/middy-http-body-parser",
|
|
28
|
-
data: contentType
|
|
29
|
-
} });
|
|
30
|
-
}
|
|
31
|
-
if (typeof body === "undefined" || body === null) {
|
|
32
|
-
if (parser.errorWhenUndefined === true) throw (0, _middy_util.createError)(415, parser.invalidMessage, { cause: {
|
|
33
|
-
package: "@gahojin-inc/middy-http-body-parser",
|
|
34
|
-
data: body
|
|
35
|
-
} });
|
|
36
|
-
request.event.body = parser.responseWhenUndefined;
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const data = request.event.isBase64Encoded ? Buffer.from(body, "base64").toString() : body;
|
|
41
|
-
request.event.body = parser.parse(data, body);
|
|
42
|
-
} catch (err) {
|
|
43
|
-
throw (0, _middy_util.createError)(415, parser.invalidMessage, { cause: {
|
|
44
|
-
package: "@gahojin-inc/middy-http-body-parser",
|
|
45
|
-
data: body,
|
|
46
|
-
message: err instanceof Error ? err.message : err?.toString()
|
|
47
|
-
} });
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
return { before: beforeFn };
|
|
51
|
-
};
|
|
52
|
-
//#endregion
|
|
53
|
-
exports.default = parser;
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["jsonParser","urlencodeParser"],"sources":["../src/index.ts"],"sourcesContent":["import type middy from '@middy/core'\nimport { createError } from '@middy/util'\nimport type { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from 'aws-lambda'\nimport jsonParser from './parser/json'\nimport urlencodeParser from './parser/urlencode'\n\ntype BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult\n\ntype BodyParser<TResult = any> = {\n contentType: RegExp\n parse: BodyParseFn<TResult>\n invalidMessage: string\n} & (\n | {\n errorWhenUndefined: true\n }\n | {\n errorWhenUndefined: false\n responseWhenUndefined: any\n }\n)\n\ntype Options = {\n parsers: BodyParser[]\n disableContentTypeError: boolean\n}\n\ntype RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent\n\nconst defaultOptions: Options = {\n parsers: [jsonParser, urlencodeParser],\n disableContentTypeError: false,\n}\n\nconst parser = (options: Partial<Options> = {}): middy.MiddlewareObj<RequestEvent> => {\n const opts: Options = { ...defaultOptions, ...options }\n const { parsers, disableContentTypeError } = opts\n\n const beforeFn: middy.MiddlewareFn<RequestEvent> = (request) => {\n const { headers, body } = request.event\n const contentType = headers?.['content-type'] ?? headers?.['Content-Type']\n\n const parser = parsers.find((parser) => {\n return contentType && parser.contentType.test(contentType)\n })\n if (!parser) {\n if (disableContentTypeError) {\n return\n }\n throw createError(415, 'Unsupported Media Type', {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: contentType },\n })\n }\n\n if (typeof body === 'undefined' || body === null) {\n if (parser.errorWhenUndefined === true) {\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body },\n })\n }\n request.event.body = parser.responseWhenUndefined\n return\n }\n\n try {\n const data = request.event.isBase64Encoded ? Buffer.from(body, 'base64').toString() : body\n\n request.event.body = parser.parse(data, body)\n } catch (err) {\n // UnprocessableEntity\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body, message: err instanceof Error ? err.message : err?.toString() },\n })\n }\n }\n\n return {\n before: beforeFn,\n }\n}\n\nexport default parser\nexport type { BodyParser }\n"],"mappings":";;;;;;;;AA6BA,MAAM,iBAA0B;CAC9B,SAAS,CAACA,oBAAAA,SAAYC,kBAAAA,gBAAgB;CACtC,yBAAyB;CAC1B;AAED,MAAM,UAAU,UAA4B,EAAE,KAAwC;CAEpF,MAAM,EAAE,SAAS,4BADK;EAAE,GAAG;EAAgB,GAAG;EAAS;CAGvD,MAAM,YAA8C,YAAY;EAC9D,MAAM,EAAE,SAAS,SAAS,QAAQ;EAClC,MAAM,cAAc,UAAU,mBAAmB,UAAU;EAE3D,MAAM,SAAS,QAAQ,MAAM,WAAW;AACtC,UAAO,eAAe,OAAO,YAAY,KAAK,YAAY;IAC1D;AACF,MAAI,CAAC,QAAQ;AACX,OAAI,wBACF;AAEF,UAAA,GAAA,YAAA,aAAkB,KAAK,0BAA0B,EAC/C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAa,EAC7E,CAAC;;AAGJ,MAAI,OAAO,SAAS,eAAe,SAAS,MAAM;AAChD,OAAI,OAAO,uBAAuB,KAChC,QAAA,GAAA,YAAA,aAAkB,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,EACtE,CAAC;AAEJ,WAAQ,MAAM,OAAO,OAAO;AAC5B;;AAGF,MAAI;GACF,MAAM,OAAO,QAAQ,MAAM,kBAAkB,OAAO,KAAK,MAAM,SAAS,CAAC,UAAU,GAAG;AAEtF,WAAQ,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK;WACtC,KAAK;AAEZ,UAAA,GAAA,YAAA,aAAkB,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,KAAK,UAAU;IAAE,EACrI,CAAC;;;AAIN,QAAO,EACL,QAAQ,UACT"}
|
package/dist/index.d.cts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type middy from "@middy/core";
|
|
2
|
-
import type { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from "aws-lambda";
|
|
3
|
-
type BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult;
|
|
4
|
-
type BodyParser<TResult = any> = {
|
|
5
|
-
contentType: RegExp;
|
|
6
|
-
parse: BodyParseFn<TResult>;
|
|
7
|
-
invalidMessage: string;
|
|
8
|
-
} & ({
|
|
9
|
-
errorWhenUndefined: true;
|
|
10
|
-
} | {
|
|
11
|
-
errorWhenUndefined: false;
|
|
12
|
-
responseWhenUndefined: any;
|
|
13
|
-
});
|
|
14
|
-
type Options = {
|
|
15
|
-
parsers: BodyParser[];
|
|
16
|
-
disableContentTypeError: boolean;
|
|
17
|
-
};
|
|
18
|
-
type RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent;
|
|
19
|
-
declare const parser: (options?: Partial<Options>) => middy.MiddlewareObj<RequestEvent>;
|
|
20
|
-
export default parser;
|
|
21
|
-
export type { BodyParser };
|
package/dist/index.d.mts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type middy from "@middy/core";
|
|
2
|
-
import type { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from "aws-lambda";
|
|
3
|
-
type BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult;
|
|
4
|
-
type BodyParser<TResult = any> = {
|
|
5
|
-
contentType: RegExp;
|
|
6
|
-
parse: BodyParseFn<TResult>;
|
|
7
|
-
invalidMessage: string;
|
|
8
|
-
} & ({
|
|
9
|
-
errorWhenUndefined: true;
|
|
10
|
-
} | {
|
|
11
|
-
errorWhenUndefined: false;
|
|
12
|
-
responseWhenUndefined: any;
|
|
13
|
-
});
|
|
14
|
-
type Options = {
|
|
15
|
-
parsers: BodyParser[];
|
|
16
|
-
disableContentTypeError: boolean;
|
|
17
|
-
};
|
|
18
|
-
type RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent;
|
|
19
|
-
declare const parser: (options?: Partial<Options>) => middy.MiddlewareObj<RequestEvent>;
|
|
20
|
-
export default parser;
|
|
21
|
-
export type { BodyParser };
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type middy from '@middy/core'\nimport { createError } from '@middy/util'\nimport type { ALBEvent, APIGatewayEvent, APIGatewayProxyEventV2 } from 'aws-lambda'\nimport jsonParser from './parser/json'\nimport urlencodeParser from './parser/urlencode'\n\ntype BodyParseFn<TResult = any> = (body: string, rawBody: string) => TResult\n\ntype BodyParser<TResult = any> = {\n contentType: RegExp\n parse: BodyParseFn<TResult>\n invalidMessage: string\n} & (\n | {\n errorWhenUndefined: true\n }\n | {\n errorWhenUndefined: false\n responseWhenUndefined: any\n }\n)\n\ntype Options = {\n parsers: BodyParser[]\n disableContentTypeError: boolean\n}\n\ntype RequestEvent = APIGatewayEvent | APIGatewayProxyEventV2 | ALBEvent\n\nconst defaultOptions: Options = {\n parsers: [jsonParser, urlencodeParser],\n disableContentTypeError: false,\n}\n\nconst parser = (options: Partial<Options> = {}): middy.MiddlewareObj<RequestEvent> => {\n const opts: Options = { ...defaultOptions, ...options }\n const { parsers, disableContentTypeError } = opts\n\n const beforeFn: middy.MiddlewareFn<RequestEvent> = (request) => {\n const { headers, body } = request.event\n const contentType = headers?.['content-type'] ?? headers?.['Content-Type']\n\n const parser = parsers.find((parser) => {\n return contentType && parser.contentType.test(contentType)\n })\n if (!parser) {\n if (disableContentTypeError) {\n return\n }\n throw createError(415, 'Unsupported Media Type', {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: contentType },\n })\n }\n\n if (typeof body === 'undefined' || body === null) {\n if (parser.errorWhenUndefined === true) {\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body },\n })\n }\n request.event.body = parser.responseWhenUndefined\n return\n }\n\n try {\n const data = request.event.isBase64Encoded ? Buffer.from(body, 'base64').toString() : body\n\n request.event.body = parser.parse(data, body)\n } catch (err) {\n // UnprocessableEntity\n throw createError(415, parser.invalidMessage, {\n cause: { package: '@gahojin-inc/middy-http-body-parser', data: body, message: err instanceof Error ? err.message : err?.toString() },\n })\n }\n }\n\n return {\n before: beforeFn,\n }\n}\n\nexport default parser\nexport type { BodyParser }\n"],"mappings":";;;;AA6BA,MAAM,iBAA0B;CAC9B,SAAS,CAAC,YAAY,gBAAgB;CACtC,yBAAyB;CAC1B;AAED,MAAM,UAAU,UAA4B,EAAE,KAAwC;CAEpF,MAAM,EAAE,SAAS,4BADK;EAAE,GAAG;EAAgB,GAAG;EAAS;CAGvD,MAAM,YAA8C,YAAY;EAC9D,MAAM,EAAE,SAAS,SAAS,QAAQ;EAClC,MAAM,cAAc,UAAU,mBAAmB,UAAU;EAE3D,MAAM,SAAS,QAAQ,MAAM,WAAW;AACtC,UAAO,eAAe,OAAO,YAAY,KAAK,YAAY;IAC1D;AACF,MAAI,CAAC,QAAQ;AACX,OAAI,wBACF;AAEF,SAAM,YAAY,KAAK,0BAA0B,EAC/C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAa,EAC7E,CAAC;;AAGJ,MAAI,OAAO,SAAS,eAAe,SAAS,MAAM;AAChD,OAAI,OAAO,uBAAuB,KAChC,OAAM,YAAY,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,EACtE,CAAC;AAEJ,WAAQ,MAAM,OAAO,OAAO;AAC5B;;AAGF,MAAI;GACF,MAAM,OAAO,QAAQ,MAAM,kBAAkB,OAAO,KAAK,MAAM,SAAS,CAAC,UAAU,GAAG;AAEtF,WAAQ,MAAM,OAAO,OAAO,MAAM,MAAM,KAAK;WACtC,KAAK;AAEZ,SAAM,YAAY,KAAK,OAAO,gBAAgB,EAC5C,OAAO;IAAE,SAAS;IAAuC,MAAM;IAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,KAAK,UAAU;IAAE,EACrI,CAAC;;;AAIN,QAAO,EACL,QAAQ,UACT"}
|
package/dist/parser/json.cjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
Object.defineProperties(exports, {
|
|
2
|
-
__esModule: { value: true },
|
|
3
|
-
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
-
});
|
|
5
|
-
//#region src/parser/json.ts
|
|
6
|
-
const jsonParser = {
|
|
7
|
-
contentType: /^application\/(.+\+)?json($|;.+)/,
|
|
8
|
-
parse: (body) => {
|
|
9
|
-
return JSON.parse(body);
|
|
10
|
-
},
|
|
11
|
-
invalidMessage: "Invalid or malformed JSON was provided",
|
|
12
|
-
errorWhenUndefined: true
|
|
13
|
-
};
|
|
14
|
-
//#endregion
|
|
15
|
-
exports.default = jsonParser;
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=json.cjs.map
|
package/dist/parser/json.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.cjs","names":[],"sources":["../../src/parser/json.ts"],"sourcesContent":["import type { BodyParser } from '../index'\n\nconst invalidMessage = 'Invalid or malformed JSON was provided'\n\nconst jsonParser: BodyParser = {\n contentType: /^application\\/(.+\\+)?json($|;.+)/,\n parse: (body) => {\n return JSON.parse(body)\n },\n invalidMessage,\n errorWhenUndefined: true,\n}\n\nexport default jsonParser\n"],"mappings":";;;;;AAIA,MAAM,aAAyB;CAC7B,aAAa;CACb,QAAQ,SAAS;AACf,SAAO,KAAK,MAAM,KAAK;;CAEzB,gBAPqB;CAQrB,oBAAoB;CACrB"}
|
package/dist/parser/json.d.mts
DELETED
package/dist/parser/json.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.mjs","names":[],"sources":["../../src/parser/json.ts"],"sourcesContent":["import type { BodyParser } from '../index'\n\nconst invalidMessage = 'Invalid or malformed JSON was provided'\n\nconst jsonParser: BodyParser = {\n contentType: /^application\\/(.+\\+)?json($|;.+)/,\n parse: (body) => {\n return JSON.parse(body)\n },\n invalidMessage,\n errorWhenUndefined: true,\n}\n\nexport default jsonParser\n"],"mappings":";AAIA,MAAM,aAAyB;CAC7B,aAAa;CACb,QAAQ,SAAS;AACf,SAAO,KAAK,MAAM,KAAK;;CAEzB,gBAPqB;CAQrB,oBAAoB;CACrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlencode.mjs","names":[],"sources":["../../src/parser/urlencode.ts"],"sourcesContent":["import querystring from 'node:querystring'\nimport type { BodyParser } from '../index'\n\nconst invalidMessage = 'Invalid or malformed URL encoded form was provided'\nconst urlencodeParser: BodyParser = {\n contentType: /^application\\/x-www-form-urlencoded(;.*)?$/,\n parse: (body) => {\n const ret = Object.assign({}, querystring.parse(body))\n if (ret?.[body] === '') {\n throw new Error(invalidMessage)\n }\n return ret\n },\n invalidMessage,\n errorWhenUndefined: false,\n responseWhenUndefined: {},\n}\n\nexport default urlencodeParser\n"],"mappings":";;AAGA,MAAM,iBAAiB;AACvB,MAAM,kBAA8B;CAClC,aAAa;CACb,QAAQ,SAAS;EACf,MAAM,MAAM,OAAO,OAAO,EAAE,EAAE,YAAY,MAAM,KAAK,CAAC;AACtD,MAAI,MAAM,UAAU,GAClB,OAAM,IAAI,MAAM,eAAe;AAEjC,SAAO;;CAET;CACA,oBAAoB;CACpB,uBAAuB,EAAE;CAC1B"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
//#region \0rolldown/runtime.js
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
-
key = keys[i];
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
-
get: ((k) => from[k]).bind(null, key),
|
|
13
|
-
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
//#endregion
|
|
23
|
-
let node_querystring = require("node:querystring");
|
|
24
|
-
node_querystring = __toESM(node_querystring);
|
|
25
|
-
//#region src/parser/urlencode.ts
|
|
26
|
-
const invalidMessage = "Invalid or malformed URL encoded form was provided";
|
|
27
|
-
const urlencodeParser = {
|
|
28
|
-
contentType: /^application\/x-www-form-urlencoded(;.*)?$/,
|
|
29
|
-
parse: (body) => {
|
|
30
|
-
const ret = Object.assign({}, node_querystring.default.parse(body));
|
|
31
|
-
if (ret?.[body] === "") throw new Error(invalidMessage);
|
|
32
|
-
return ret;
|
|
33
|
-
},
|
|
34
|
-
invalidMessage,
|
|
35
|
-
errorWhenUndefined: false,
|
|
36
|
-
responseWhenUndefined: {}
|
|
37
|
-
};
|
|
38
|
-
//#endregion
|
|
39
|
-
Object.defineProperty(exports, "__toESM", {
|
|
40
|
-
enumerable: true,
|
|
41
|
-
get: function() {
|
|
42
|
-
return __toESM;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
Object.defineProperty(exports, "urlencodeParser", {
|
|
46
|
-
enumerable: true,
|
|
47
|
-
get: function() {
|
|
48
|
-
return urlencodeParser;
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=urlencode-CdbvAHSA.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlencode-CdbvAHSA.js","names":["querystring"],"sources":["../src/parser/urlencode.ts"],"sourcesContent":["import querystring from 'node:querystring'\nimport type { BodyParser } from '../index'\n\nconst invalidMessage = 'Invalid or malformed URL encoded form was provided'\nconst urlencodeParser: BodyParser = {\n contentType: /^application\\/x-www-form-urlencoded(;.*)?$/,\n parse: (body) => {\n const ret = Object.assign({}, querystring.parse(body))\n if (ret?.[body] === '') {\n throw new Error(invalidMessage)\n }\n return ret\n },\n invalidMessage,\n errorWhenUndefined: false,\n responseWhenUndefined: {},\n}\n\nexport default urlencodeParser\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAM,iBAAiB;AACvB,MAAM,kBAA8B;CAClC,aAAa;CACb,QAAQ,SAAS;EACf,MAAM,MAAM,OAAO,OAAO,EAAE,EAAEA,iBAAAA,QAAY,MAAM,KAAK,CAAC;AACtD,MAAI,MAAM,UAAU,GAClB,OAAM,IAAI,MAAM,eAAe;AAEjC,SAAO;;CAET;CACA,oBAAoB;CACpB,uBAAuB,EAAE;CAC1B"}
|