@koa-stack/body 0.18.0 → 0.19.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.
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.LazyBody = void 0;
40
+ const raw_body_1 = __importDefault(require("raw-body"));
41
+ const inflation_1 = __importDefault(require("inflation"));
42
+ const qs_1 = __importDefault(require("qs"));
43
+ const formidable_1 = __importDefault(require("formidable"));
44
+ function parseMultipartBody(koaRequest, opts) {
45
+ const form = (0, formidable_1.default)(opts.formidable);
46
+ return new Promise((resolve, reject) => {
47
+ form.parse(koaRequest.req, (err, fields, files) => {
48
+ if (err) {
49
+ reject(err);
50
+ }
51
+ else {
52
+ resolve({
53
+ params: fields,
54
+ files: files
55
+ });
56
+ }
57
+ });
58
+ });
59
+ }
60
+ async function getRawBodyText(koaRequest, opts) {
61
+ const len = koaRequest.length;
62
+ let encoding = koaRequest.headers['content-encoding'];
63
+ if (len && !encoding) {
64
+ opts.length = len;
65
+ }
66
+ // TODO how to detect custom encoding on content type to ser encoding for readRawBody
67
+ return (await (0, raw_body_1.default)((0, inflation_1.default)(koaRequest.req, opts.inflate), opts)).toString( /*which charset?*/);
68
+ }
69
+ /**
70
+ * Request body class
71
+ * json
72
+ *
73
+ */
74
+ class LazyBody {
75
+ constructor(ctx, type, data, raw, files) {
76
+ Object.defineProperty(this, "ctx", {
77
+ enumerable: true,
78
+ configurable: true,
79
+ writable: true,
80
+ value: void 0
81
+ });
82
+ Object.defineProperty(this, "type", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: void 0
87
+ });
88
+ Object.defineProperty(this, "data", {
89
+ enumerable: true,
90
+ configurable: true,
91
+ writable: true,
92
+ value: void 0
93
+ });
94
+ Object.defineProperty(this, "raw", {
95
+ enumerable: true,
96
+ configurable: true,
97
+ writable: true,
98
+ value: void 0
99
+ });
100
+ Object.defineProperty(this, "files", {
101
+ enumerable: true,
102
+ configurable: true,
103
+ writable: true,
104
+ value: void 0
105
+ });
106
+ this.ctx = ctx;
107
+ this.type = type;
108
+ this.data = data;
109
+ this.raw = raw;
110
+ this.files = files;
111
+ }
112
+ get isEmpty() {
113
+ return this.raw === '';
114
+ }
115
+ assertJSON(statusCode, message) {
116
+ if (this.type !== FormType.json) {
117
+ this.ctx.throw(statusCode || 415, message);
118
+ }
119
+ }
120
+ assertXML(statusCode, message) {
121
+ if (this.type !== FormType.xml) {
122
+ this.ctx.throw(statusCode || 415, message);
123
+ }
124
+ }
125
+ /**
126
+ * Assert body type is urlencoded
127
+ * @param {*} statusCode
128
+ * @param {*} message
129
+ */
130
+ assertForm(statusCode, message) {
131
+ if (this.type !== FormType.form) {
132
+ this.ctx.throw(statusCode || 415, message);
133
+ }
134
+ }
135
+ assertMultipart(statusCode, message) {
136
+ if (this.type !== FormType.multipart) {
137
+ this.ctx.throw(statusCode || 415, message);
138
+ }
139
+ }
140
+ assertText(statusCode, message) {
141
+ if (this.type !== FormType.text) {
142
+ this.ctx.throw(statusCode || 415, message);
143
+ }
144
+ }
145
+ /**
146
+ * Assert that body type is either multipart or urlencoded
147
+ * @param {*} statusCode
148
+ * @param {*} message
149
+ */
150
+ assertParams(statusCode, message) {
151
+ if (this.type !== FormType.form && this.type !== FormType.multipart) {
152
+ this.ctx.throw(statusCode || 415, message);
153
+ }
154
+ }
155
+ get text() {
156
+ return this.raw;
157
+ }
158
+ get json() {
159
+ return this.isJSON ? this.data : undefined;
160
+ }
161
+ get xml() {
162
+ return this.isXML ? this.data : undefined;
163
+ }
164
+ get params() {
165
+ switch (this.type) {
166
+ case FormType.form:
167
+ case FormType.multipart:
168
+ return this.data;
169
+ default: return undefined;
170
+ }
171
+ }
172
+ get isForm() {
173
+ return this.type === FormType.form;
174
+ }
175
+ get isJSON() {
176
+ return this.type === FormType.json;
177
+ }
178
+ get isXML() {
179
+ return this.type === FormType.xml;
180
+ }
181
+ get isMultipart() {
182
+ return this.type === FormType.multipart;
183
+ }
184
+ get isText() {
185
+ return this.type === FormType.text;
186
+ }
187
+ static install(koa, opts = {}) {
188
+ opts.encoding = opts.encoding || 'utf8';
189
+ opts.limit = opts.limit || '1mb';
190
+ Object.defineProperty(koa.request, 'body', {
191
+ get() {
192
+ if (!this._body) {
193
+ this._body = createBody(this, opts);
194
+ }
195
+ return this._body;
196
+ },
197
+ // be able to work along code using koa2-formidable (wich sets the body property pf the request)
198
+ set(body) {
199
+ this._body = body;
200
+ }
201
+ });
202
+ // payload is an alias to request.body
203
+ Object.defineProperty(koa.context, 'payload', {
204
+ get() {
205
+ return this.request.body;
206
+ },
207
+ set(body) {
208
+ this.request.body = body;
209
+ }
210
+ });
211
+ // payload is an alias to request.hasBody in v3
212
+ Object.defineProperty(koa.context, 'hasPayload', {
213
+ get() {
214
+ return this.request.length > 0 ||
215
+ this.request.headers['transfer-encoding'] != null;
216
+ },
217
+ });
218
+ }
219
+ }
220
+ exports.LazyBody = LazyBody;
221
+ var FormType;
222
+ (function (FormType) {
223
+ FormType[FormType["multipart"] = 0] = "multipart";
224
+ FormType[FormType["form"] = 1] = "form";
225
+ FormType[FormType["json"] = 2] = "json";
226
+ FormType[FormType["xml"] = 3] = "xml";
227
+ FormType[FormType["text"] = 4] = "text";
228
+ })(FormType || (FormType = {}));
229
+ async function createBody(koaRequest, opts) {
230
+ let type, data, raw, files = null;
231
+ if (koaRequest.is('multipart')) {
232
+ raw = '';
233
+ const result = await parseMultipartBody(koaRequest, opts);
234
+ data = result.params || {};
235
+ files = result.files || {};
236
+ type = FormType.multipart;
237
+ }
238
+ else if (koaRequest.is('urlencoded')) {
239
+ // by default we use qs. You can replace the querystring parser using opts.form
240
+ raw = await getRawBodyText(koaRequest, opts);
241
+ data = opts.form ? opts.form(raw) : qs_1.default.parse(raw);
242
+ type = FormType.form;
243
+ }
244
+ else if (koaRequest.is('json', '+json')) {
245
+ // by default we use JSON.parse. You can replace the json parser using opts.json
246
+ if (koaRequest.ctx.hasPayload) {
247
+ raw = await getRawBodyText(koaRequest, opts);
248
+ }
249
+ else {
250
+ raw = '';
251
+ }
252
+ if (raw === '') { // for JSON we support no content posted
253
+ data = undefined;
254
+ }
255
+ else {
256
+ data = opts.json ? opts.json(raw) : JSON.parse(raw);
257
+ }
258
+ type = FormType.json;
259
+ }
260
+ else if (koaRequest.is('xml', '+xml')) {
261
+ // by default fast-xml-parser is used - to change the parser you should provde an xml parser through opts.xml
262
+ raw = await getRawBodyText(koaRequest, opts);
263
+ if (opts.xml) {
264
+ data = opts.xml(raw);
265
+ }
266
+ else {
267
+ let parser = await tryGetXmlParser();
268
+ if (parser) {
269
+ data = parser.parse(raw);
270
+ }
271
+ }
272
+ type = FormType.xml;
273
+ }
274
+ else if (koaRequest.is('text/*')) {
275
+ raw = await getRawBodyText(koaRequest, opts);
276
+ type = FormType.text;
277
+ }
278
+ else {
279
+ type = FormType.text;
280
+ // if has body
281
+ console.log();
282
+ if (koaRequest.ctx.hasPayload) {
283
+ raw = await getRawBodyText(koaRequest, opts);
284
+ }
285
+ else {
286
+ raw = '';
287
+ }
288
+ }
289
+ return new LazyBody(koaRequest.ctx, type, data, raw, files);
290
+ }
291
+ /**
292
+ * Use fast-xml-parser if available
293
+ * @returns
294
+ */
295
+ async function tryGetXmlParser() {
296
+ try {
297
+ const mod = await Promise.resolve().then(() => __importStar(require("fast-xml-parser")));
298
+ return new mod.XMLParser();
299
+ }
300
+ catch (err) {
301
+ console.warn("Could not find fast-xml-parser. You need to pass xml option for a custom parser", err);
302
+ return undefined;
303
+ }
304
+ }
305
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,265 @@
1
+ import readRawBody from 'raw-body';
2
+ import inflate from 'inflation';
3
+ import qs from 'qs';
4
+ import formidable from 'formidable';
5
+ function parseMultipartBody(koaRequest, opts) {
6
+ const form = formidable(opts.formidable);
7
+ return new Promise((resolve, reject) => {
8
+ form.parse(koaRequest.req, (err, fields, files) => {
9
+ if (err) {
10
+ reject(err);
11
+ }
12
+ else {
13
+ resolve({
14
+ params: fields,
15
+ files: files
16
+ });
17
+ }
18
+ });
19
+ });
20
+ }
21
+ async function getRawBodyText(koaRequest, opts) {
22
+ const len = koaRequest.length;
23
+ let encoding = koaRequest.headers['content-encoding'];
24
+ if (len && !encoding) {
25
+ opts.length = len;
26
+ }
27
+ // TODO how to detect custom encoding on content type to ser encoding for readRawBody
28
+ return (await readRawBody(inflate(koaRequest.req, opts.inflate), opts)).toString( /*which charset?*/);
29
+ }
30
+ /**
31
+ * Request body class
32
+ * json
33
+ *
34
+ */
35
+ export class LazyBody {
36
+ constructor(ctx, type, data, raw, files) {
37
+ Object.defineProperty(this, "ctx", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: void 0
42
+ });
43
+ Object.defineProperty(this, "type", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: void 0
48
+ });
49
+ Object.defineProperty(this, "data", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: void 0
54
+ });
55
+ Object.defineProperty(this, "raw", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ Object.defineProperty(this, "files", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: void 0
66
+ });
67
+ this.ctx = ctx;
68
+ this.type = type;
69
+ this.data = data;
70
+ this.raw = raw;
71
+ this.files = files;
72
+ }
73
+ get isEmpty() {
74
+ return this.raw === '';
75
+ }
76
+ assertJSON(statusCode, message) {
77
+ if (this.type !== FormType.json) {
78
+ this.ctx.throw(statusCode || 415, message);
79
+ }
80
+ }
81
+ assertXML(statusCode, message) {
82
+ if (this.type !== FormType.xml) {
83
+ this.ctx.throw(statusCode || 415, message);
84
+ }
85
+ }
86
+ /**
87
+ * Assert body type is urlencoded
88
+ * @param {*} statusCode
89
+ * @param {*} message
90
+ */
91
+ assertForm(statusCode, message) {
92
+ if (this.type !== FormType.form) {
93
+ this.ctx.throw(statusCode || 415, message);
94
+ }
95
+ }
96
+ assertMultipart(statusCode, message) {
97
+ if (this.type !== FormType.multipart) {
98
+ this.ctx.throw(statusCode || 415, message);
99
+ }
100
+ }
101
+ assertText(statusCode, message) {
102
+ if (this.type !== FormType.text) {
103
+ this.ctx.throw(statusCode || 415, message);
104
+ }
105
+ }
106
+ /**
107
+ * Assert that body type is either multipart or urlencoded
108
+ * @param {*} statusCode
109
+ * @param {*} message
110
+ */
111
+ assertParams(statusCode, message) {
112
+ if (this.type !== FormType.form && this.type !== FormType.multipart) {
113
+ this.ctx.throw(statusCode || 415, message);
114
+ }
115
+ }
116
+ get text() {
117
+ return this.raw;
118
+ }
119
+ get json() {
120
+ return this.isJSON ? this.data : undefined;
121
+ }
122
+ get xml() {
123
+ return this.isXML ? this.data : undefined;
124
+ }
125
+ get params() {
126
+ switch (this.type) {
127
+ case FormType.form:
128
+ case FormType.multipart:
129
+ return this.data;
130
+ default: return undefined;
131
+ }
132
+ }
133
+ get isForm() {
134
+ return this.type === FormType.form;
135
+ }
136
+ get isJSON() {
137
+ return this.type === FormType.json;
138
+ }
139
+ get isXML() {
140
+ return this.type === FormType.xml;
141
+ }
142
+ get isMultipart() {
143
+ return this.type === FormType.multipart;
144
+ }
145
+ get isText() {
146
+ return this.type === FormType.text;
147
+ }
148
+ static install(koa, opts = {}) {
149
+ opts.encoding = opts.encoding || 'utf8';
150
+ opts.limit = opts.limit || '1mb';
151
+ Object.defineProperty(koa.request, 'body', {
152
+ get() {
153
+ if (!this._body) {
154
+ this._body = createBody(this, opts);
155
+ }
156
+ return this._body;
157
+ },
158
+ // be able to work along code using koa2-formidable (wich sets the body property pf the request)
159
+ set(body) {
160
+ this._body = body;
161
+ }
162
+ });
163
+ // payload is an alias to request.body
164
+ Object.defineProperty(koa.context, 'payload', {
165
+ get() {
166
+ return this.request.body;
167
+ },
168
+ set(body) {
169
+ this.request.body = body;
170
+ }
171
+ });
172
+ // payload is an alias to request.hasBody in v3
173
+ Object.defineProperty(koa.context, 'hasPayload', {
174
+ get() {
175
+ return this.request.length > 0 ||
176
+ this.request.headers['transfer-encoding'] != null;
177
+ },
178
+ });
179
+ }
180
+ }
181
+ var FormType;
182
+ (function (FormType) {
183
+ FormType[FormType["multipart"] = 0] = "multipart";
184
+ FormType[FormType["form"] = 1] = "form";
185
+ FormType[FormType["json"] = 2] = "json";
186
+ FormType[FormType["xml"] = 3] = "xml";
187
+ FormType[FormType["text"] = 4] = "text";
188
+ })(FormType || (FormType = {}));
189
+ async function createBody(koaRequest, opts) {
190
+ let type, data, raw, files = null;
191
+ if (koaRequest.is('multipart')) {
192
+ raw = '';
193
+ const result = await parseMultipartBody(koaRequest, opts);
194
+ data = result.params || {};
195
+ files = result.files || {};
196
+ type = FormType.multipart;
197
+ }
198
+ else if (koaRequest.is('urlencoded')) {
199
+ // by default we use qs. You can replace the querystring parser using opts.form
200
+ raw = await getRawBodyText(koaRequest, opts);
201
+ data = opts.form ? opts.form(raw) : qs.parse(raw);
202
+ type = FormType.form;
203
+ }
204
+ else if (koaRequest.is('json', '+json')) {
205
+ // by default we use JSON.parse. You can replace the json parser using opts.json
206
+ if (koaRequest.ctx.hasPayload) {
207
+ raw = await getRawBodyText(koaRequest, opts);
208
+ }
209
+ else {
210
+ raw = '';
211
+ }
212
+ if (raw === '') { // for JSON we support no content posted
213
+ data = undefined;
214
+ }
215
+ else {
216
+ data = opts.json ? opts.json(raw) : JSON.parse(raw);
217
+ }
218
+ type = FormType.json;
219
+ }
220
+ else if (koaRequest.is('xml', '+xml')) {
221
+ // by default fast-xml-parser is used - to change the parser you should provde an xml parser through opts.xml
222
+ raw = await getRawBodyText(koaRequest, opts);
223
+ if (opts.xml) {
224
+ data = opts.xml(raw);
225
+ }
226
+ else {
227
+ let parser = await tryGetXmlParser();
228
+ if (parser) {
229
+ data = parser.parse(raw);
230
+ }
231
+ }
232
+ type = FormType.xml;
233
+ }
234
+ else if (koaRequest.is('text/*')) {
235
+ raw = await getRawBodyText(koaRequest, opts);
236
+ type = FormType.text;
237
+ }
238
+ else {
239
+ type = FormType.text;
240
+ // if has body
241
+ console.log();
242
+ if (koaRequest.ctx.hasPayload) {
243
+ raw = await getRawBodyText(koaRequest, opts);
244
+ }
245
+ else {
246
+ raw = '';
247
+ }
248
+ }
249
+ return new LazyBody(koaRequest.ctx, type, data, raw, files);
250
+ }
251
+ /**
252
+ * Use fast-xml-parser if available
253
+ * @returns
254
+ */
255
+ async function tryGetXmlParser() {
256
+ try {
257
+ const mod = await import("fast-xml-parser");
258
+ return new mod.XMLParser();
259
+ }
260
+ catch (err) {
261
+ console.warn("Could not find fast-xml-parser. You need to pass xml option for a custom parser", err);
262
+ return undefined;
263
+ }
264
+ }
265
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import readRawBody from 'raw-body';
2
+ import inflate from 'inflation';
3
+ import formidable from 'formidable';
4
+ import Koa, { Context } from 'koa';
5
+ declare module 'koa' {
6
+ interface BaseContext {
7
+ payload: Promise<LazyBody>;
8
+ hasPayload: boolean;
9
+ }
10
+ }
11
+ export interface OwnOpts {
12
+ formidable?: formidable.Options;
13
+ inflate?: inflate.Options;
14
+ form?: (data: string) => any;
15
+ json?: (data: string) => any;
16
+ xml?: (data: string) => any;
17
+ }
18
+ export type LazyBodyOpts = readRawBody.Options & OwnOpts;
19
+ /**
20
+ * Request body class
21
+ * json
22
+ *
23
+ */
24
+ export declare class LazyBody {
25
+ ctx: Context;
26
+ type: FormType;
27
+ data: any;
28
+ raw: string;
29
+ files: formidable.Files | null | undefined;
30
+ constructor(ctx: Context, type: FormType, data: any, raw: string, files: formidable.Files | null | undefined);
31
+ get isEmpty(): boolean;
32
+ assertJSON(statusCode: number, message: string): void;
33
+ assertXML(statusCode: number, message: string): void;
34
+ /**
35
+ * Assert body type is urlencoded
36
+ * @param {*} statusCode
37
+ * @param {*} message
38
+ */
39
+ assertForm(statusCode: number, message: string): void;
40
+ assertMultipart(statusCode: number, message: string): void;
41
+ assertText(statusCode: number, message: string): void;
42
+ /**
43
+ * Assert that body type is either multipart or urlencoded
44
+ * @param {*} statusCode
45
+ * @param {*} message
46
+ */
47
+ assertParams(statusCode: number, message: string): void;
48
+ get text(): string;
49
+ get json(): any;
50
+ get xml(): any;
51
+ get params(): any;
52
+ get isForm(): boolean;
53
+ get isJSON(): boolean;
54
+ get isXML(): boolean;
55
+ get isMultipart(): boolean;
56
+ get isText(): boolean;
57
+ static install(koa: Koa, opts?: LazyBodyOpts): void;
58
+ }
59
+ declare enum FormType {
60
+ 'multipart' = 0,
61
+ 'form' = 1,
62
+ 'json' = 2,
63
+ 'xml' = 3,
64
+ 'text' = 4
65
+ }
66
+ export {};
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,UAAU,CAAC;AACnC,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,GAAG,EAAE,EAAE,OAAO,EAAW,MAAM,KAAK,CAAC;AAG5C,OAAO,QAAQ,KAAK,CAAC;IACjB,UAAU,WAAW;QACjB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3B,UAAU,EAAE,OAAO,CAAC;KACvB;CACJ;AAED,MAAM,WAAW,OAAO;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;CAC/B;AACD,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;AAgCzD;;;;GAIG;AACH,qBAAa,QAAQ;IAEjB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,GAAG,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;gBAE/B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS;IAQ5G,IAAI,OAAO,YAEV;IAED,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM9C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM7C;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM9C,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMnD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM9C;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMhD,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,QAEP;IAED,IAAI,GAAG,QAEN;IAED,IAAI,MAAM,QAOT;IAED,IAAI,MAAM,YAET;IAED,IAAI,MAAM,YAET;IAED,IAAI,KAAK,YAER;IAED,IAAI,WAAW,YAEd;IAED,IAAI,MAAM,YAET;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAE,YAAiB,GAAG,IAAI;CAiC1D;AACD,aAAK,QAAQ;IACT,WAAW,IAAA;IAAE,MAAM,IAAA;IAAE,MAAM,IAAA;IAAE,KAAK,IAAA;IAAE,MAAM,IAAA;CAC7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koa-stack/body",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "description": "Expose the request body as a promise in koa Context.body",
5
5
  "main": "./lib/cjs/index.js",
6
6
  "type": "module",