@koa-stack/body 0.18.0 → 0.20.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/lib/cjs/index.js +305 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/esm/index.js +265 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/types/index.d.ts +67 -0
- package/lib/types/index.d.ts.map +1 -0
- package/package.json +1 -1
package/lib/cjs/index.js
ADDED
|
@@ -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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"}
|
package/lib/esm/index.js
ADDED
|
@@ -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"}
|