@kaito-http/core 2.3.5 → 2.3.8
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.
|
@@ -5,9 +5,11 @@ import { KaitoRequest } from './req';
|
|
|
5
5
|
import { KaitoResponse } from './res';
|
|
6
6
|
import { KaitoError } from './error';
|
|
7
7
|
import { GetContext } from './util';
|
|
8
|
+
export declare type Before = (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
|
|
8
9
|
export interface ServerConfig<Context> {
|
|
9
10
|
router: Router<Context, RoutesInit<Context>>;
|
|
10
11
|
getContext: GetContext<Context>;
|
|
12
|
+
before?: Before[];
|
|
11
13
|
onError(arg: {
|
|
12
14
|
error: Error;
|
|
13
15
|
req: KaitoRequest;
|
|
@@ -5,37 +5,88 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var http = require('http');
|
|
6
6
|
var fmw = require('find-my-way');
|
|
7
7
|
var tls = require('tls');
|
|
8
|
+
var contentType = require('content-type');
|
|
8
9
|
var getRawBody = require('raw-body');
|
|
9
10
|
|
|
10
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
11
12
|
|
|
12
13
|
function _interopNamespace(e) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
n["default"] = e;
|
|
28
|
+
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
var http__namespace = /*#__PURE__*/_interopNamespace(http);
|
|
31
32
|
var fmw__default = /*#__PURE__*/_interopDefault(fmw);
|
|
32
33
|
var getRawBody__default = /*#__PURE__*/_interopDefault(getRawBody);
|
|
33
34
|
|
|
35
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
36
|
+
try {
|
|
37
|
+
var info = gen[key](arg);
|
|
38
|
+
var value = info.value;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
reject(error);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (info.done) {
|
|
45
|
+
resolve(value);
|
|
46
|
+
} else {
|
|
47
|
+
Promise.resolve(value).then(_next, _throw);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function _asyncToGenerator(fn) {
|
|
52
|
+
return function () {
|
|
53
|
+
var self = this,
|
|
54
|
+
args = arguments;
|
|
55
|
+
return new Promise(function (resolve, reject) {
|
|
56
|
+
var gen = fn.apply(self, args);
|
|
57
|
+
|
|
58
|
+
function _next(value) {
|
|
59
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function _throw(err) {
|
|
63
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
_next(undefined);
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
34
71
|
function createFMWServer(config) {
|
|
35
72
|
var fmw = config.router.toFindMyWay(config);
|
|
36
|
-
var server = http__namespace.createServer((
|
|
37
|
-
|
|
38
|
-
|
|
73
|
+
var server = http__namespace.createServer( /*#__PURE__*/function () {
|
|
74
|
+
var _ref = _asyncToGenerator(function* (req, res) {
|
|
75
|
+
for (var fn of (_config$before = config.before) !== null && _config$before !== void 0 ? _config$before : []) {
|
|
76
|
+
var _config$before;
|
|
77
|
+
|
|
78
|
+
// Disabled because we need these to run in order!
|
|
79
|
+
// eslint-disable-next-line no-await-in-loop
|
|
80
|
+
yield fn(req, res);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
fmw.lookup(req, res);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return function (_x, _x2) {
|
|
87
|
+
return _ref.apply(this, arguments);
|
|
88
|
+
};
|
|
89
|
+
}());
|
|
39
90
|
return {
|
|
40
91
|
server,
|
|
41
92
|
fmw
|
|
@@ -98,42 +149,6 @@ function _objectSpread2(target) {
|
|
|
98
149
|
return target;
|
|
99
150
|
}
|
|
100
151
|
|
|
101
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
102
|
-
try {
|
|
103
|
-
var info = gen[key](arg);
|
|
104
|
-
var value = info.value;
|
|
105
|
-
} catch (error) {
|
|
106
|
-
reject(error);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (info.done) {
|
|
111
|
-
resolve(value);
|
|
112
|
-
} else {
|
|
113
|
-
Promise.resolve(value).then(_next, _throw);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function _asyncToGenerator(fn) {
|
|
118
|
-
return function () {
|
|
119
|
-
var self = this,
|
|
120
|
-
args = arguments;
|
|
121
|
-
return new Promise(function (resolve, reject) {
|
|
122
|
-
var gen = fn.apply(self, args);
|
|
123
|
-
|
|
124
|
-
function _next(value) {
|
|
125
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function _throw(err) {
|
|
129
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
_next(undefined);
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
152
|
class WrappedError extends Error {
|
|
138
153
|
static maybe(maybeError) {
|
|
139
154
|
if (maybeError instanceof Error) {
|
|
@@ -187,7 +202,15 @@ function _getInput() {
|
|
|
187
202
|
|
|
188
203
|
var buffer = yield getRawBody__default["default"](req.raw);
|
|
189
204
|
|
|
190
|
-
|
|
205
|
+
if (!req.headers['content-type']) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
var {
|
|
210
|
+
type
|
|
211
|
+
} = contentType.parse(req.headers['content-type']);
|
|
212
|
+
|
|
213
|
+
switch (type) {
|
|
191
214
|
case 'application/json':
|
|
192
215
|
{
|
|
193
216
|
return JSON.parse(buffer.toString());
|
|
@@ -5,37 +5,88 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var http = require('http');
|
|
6
6
|
var fmw = require('find-my-way');
|
|
7
7
|
var tls = require('tls');
|
|
8
|
+
var contentType = require('content-type');
|
|
8
9
|
var getRawBody = require('raw-body');
|
|
9
10
|
|
|
10
11
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
11
12
|
|
|
12
13
|
function _interopNamespace(e) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
15
|
+
var n = Object.create(null);
|
|
16
|
+
if (e) {
|
|
17
|
+
Object.keys(e).forEach(function (k) {
|
|
18
|
+
if (k !== 'default') {
|
|
19
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return e[k]; }
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
n["default"] = e;
|
|
28
|
+
return Object.freeze(n);
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
var http__namespace = /*#__PURE__*/_interopNamespace(http);
|
|
31
32
|
var fmw__default = /*#__PURE__*/_interopDefault(fmw);
|
|
32
33
|
var getRawBody__default = /*#__PURE__*/_interopDefault(getRawBody);
|
|
33
34
|
|
|
35
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
36
|
+
try {
|
|
37
|
+
var info = gen[key](arg);
|
|
38
|
+
var value = info.value;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
reject(error);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (info.done) {
|
|
45
|
+
resolve(value);
|
|
46
|
+
} else {
|
|
47
|
+
Promise.resolve(value).then(_next, _throw);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function _asyncToGenerator(fn) {
|
|
52
|
+
return function () {
|
|
53
|
+
var self = this,
|
|
54
|
+
args = arguments;
|
|
55
|
+
return new Promise(function (resolve, reject) {
|
|
56
|
+
var gen = fn.apply(self, args);
|
|
57
|
+
|
|
58
|
+
function _next(value) {
|
|
59
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function _throw(err) {
|
|
63
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
_next(undefined);
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
34
71
|
function createFMWServer(config) {
|
|
35
72
|
var fmw = config.router.toFindMyWay(config);
|
|
36
|
-
var server = http__namespace.createServer((
|
|
37
|
-
|
|
38
|
-
|
|
73
|
+
var server = http__namespace.createServer( /*#__PURE__*/function () {
|
|
74
|
+
var _ref = _asyncToGenerator(function* (req, res) {
|
|
75
|
+
for (var fn of (_config$before = config.before) !== null && _config$before !== void 0 ? _config$before : []) {
|
|
76
|
+
var _config$before;
|
|
77
|
+
|
|
78
|
+
// Disabled because we need these to run in order!
|
|
79
|
+
// eslint-disable-next-line no-await-in-loop
|
|
80
|
+
yield fn(req, res);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
fmw.lookup(req, res);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return function (_x, _x2) {
|
|
87
|
+
return _ref.apply(this, arguments);
|
|
88
|
+
};
|
|
89
|
+
}());
|
|
39
90
|
return {
|
|
40
91
|
server,
|
|
41
92
|
fmw
|
|
@@ -98,42 +149,6 @@ function _objectSpread2(target) {
|
|
|
98
149
|
return target;
|
|
99
150
|
}
|
|
100
151
|
|
|
101
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
102
|
-
try {
|
|
103
|
-
var info = gen[key](arg);
|
|
104
|
-
var value = info.value;
|
|
105
|
-
} catch (error) {
|
|
106
|
-
reject(error);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (info.done) {
|
|
111
|
-
resolve(value);
|
|
112
|
-
} else {
|
|
113
|
-
Promise.resolve(value).then(_next, _throw);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function _asyncToGenerator(fn) {
|
|
118
|
-
return function () {
|
|
119
|
-
var self = this,
|
|
120
|
-
args = arguments;
|
|
121
|
-
return new Promise(function (resolve, reject) {
|
|
122
|
-
var gen = fn.apply(self, args);
|
|
123
|
-
|
|
124
|
-
function _next(value) {
|
|
125
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function _throw(err) {
|
|
129
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
_next(undefined);
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
152
|
class WrappedError extends Error {
|
|
138
153
|
static maybe(maybeError) {
|
|
139
154
|
if (maybeError instanceof Error) {
|
|
@@ -187,7 +202,15 @@ function _getInput() {
|
|
|
187
202
|
|
|
188
203
|
var buffer = yield getRawBody__default["default"](req.raw);
|
|
189
204
|
|
|
190
|
-
|
|
205
|
+
if (!req.headers['content-type']) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
var {
|
|
210
|
+
type
|
|
211
|
+
} = contentType.parse(req.headers['content-type']);
|
|
212
|
+
|
|
213
|
+
switch (type) {
|
|
191
214
|
case 'application/json':
|
|
192
215
|
{
|
|
193
216
|
return JSON.parse(buffer.toString());
|
|
@@ -1,13 +1,64 @@
|
|
|
1
1
|
import * as http from 'http';
|
|
2
2
|
import fmw from 'find-my-way';
|
|
3
3
|
import { TLSSocket } from 'tls';
|
|
4
|
+
import { parse } from 'content-type';
|
|
4
5
|
import getRawBody from 'raw-body';
|
|
5
6
|
|
|
7
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
8
|
+
try {
|
|
9
|
+
var info = gen[key](arg);
|
|
10
|
+
var value = info.value;
|
|
11
|
+
} catch (error) {
|
|
12
|
+
reject(error);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (info.done) {
|
|
17
|
+
resolve(value);
|
|
18
|
+
} else {
|
|
19
|
+
Promise.resolve(value).then(_next, _throw);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function _asyncToGenerator(fn) {
|
|
24
|
+
return function () {
|
|
25
|
+
var self = this,
|
|
26
|
+
args = arguments;
|
|
27
|
+
return new Promise(function (resolve, reject) {
|
|
28
|
+
var gen = fn.apply(self, args);
|
|
29
|
+
|
|
30
|
+
function _next(value) {
|
|
31
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function _throw(err) {
|
|
35
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
_next(undefined);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
6
43
|
function createFMWServer(config) {
|
|
7
44
|
var fmw = config.router.toFindMyWay(config);
|
|
8
|
-
var server = http.createServer((
|
|
9
|
-
|
|
10
|
-
|
|
45
|
+
var server = http.createServer( /*#__PURE__*/function () {
|
|
46
|
+
var _ref = _asyncToGenerator(function* (req, res) {
|
|
47
|
+
for (var fn of (_config$before = config.before) !== null && _config$before !== void 0 ? _config$before : []) {
|
|
48
|
+
var _config$before;
|
|
49
|
+
|
|
50
|
+
// Disabled because we need these to run in order!
|
|
51
|
+
// eslint-disable-next-line no-await-in-loop
|
|
52
|
+
yield fn(req, res);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fmw.lookup(req, res);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return function (_x, _x2) {
|
|
59
|
+
return _ref.apply(this, arguments);
|
|
60
|
+
};
|
|
61
|
+
}());
|
|
11
62
|
return {
|
|
12
63
|
server,
|
|
13
64
|
fmw
|
|
@@ -70,42 +121,6 @@ function _objectSpread2(target) {
|
|
|
70
121
|
return target;
|
|
71
122
|
}
|
|
72
123
|
|
|
73
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
74
|
-
try {
|
|
75
|
-
var info = gen[key](arg);
|
|
76
|
-
var value = info.value;
|
|
77
|
-
} catch (error) {
|
|
78
|
-
reject(error);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (info.done) {
|
|
83
|
-
resolve(value);
|
|
84
|
-
} else {
|
|
85
|
-
Promise.resolve(value).then(_next, _throw);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function _asyncToGenerator(fn) {
|
|
90
|
-
return function () {
|
|
91
|
-
var self = this,
|
|
92
|
-
args = arguments;
|
|
93
|
-
return new Promise(function (resolve, reject) {
|
|
94
|
-
var gen = fn.apply(self, args);
|
|
95
|
-
|
|
96
|
-
function _next(value) {
|
|
97
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function _throw(err) {
|
|
101
|
-
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
_next(undefined);
|
|
105
|
-
});
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
124
|
class WrappedError extends Error {
|
|
110
125
|
static maybe(maybeError) {
|
|
111
126
|
if (maybeError instanceof Error) {
|
|
@@ -159,7 +174,15 @@ function _getInput() {
|
|
|
159
174
|
|
|
160
175
|
var buffer = yield getRawBody(req.raw);
|
|
161
176
|
|
|
162
|
-
|
|
177
|
+
if (!req.headers['content-type']) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
var {
|
|
182
|
+
type
|
|
183
|
+
} = parse(req.headers['content-type']);
|
|
184
|
+
|
|
185
|
+
switch (type) {
|
|
163
186
|
case 'application/json':
|
|
164
187
|
{
|
|
165
188
|
return JSON.parse(buffer.toString());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaito-http/core",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "Functional HTTP Framework for TypeScript",
|
|
5
5
|
"repository": "https://github.com/kaito-http/kaito",
|
|
6
6
|
"author": "Alistair Smith <hi@alistair.sh>",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"module": "dist/kaito-http-core.esm.js",
|
|
10
10
|
"types": "dist/kaito-http-core.cjs.d.ts",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@types/
|
|
13
|
-
"@types/node": "^17.0.
|
|
12
|
+
"@types/content-type": "^1.1.5",
|
|
13
|
+
"@types/node": "^17.0.25",
|
|
14
14
|
"typescript": "4.6",
|
|
15
15
|
"zod": "^3.14.4"
|
|
16
16
|
},
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"framework"
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"content-type": "^1.0.4",
|
|
35
36
|
"find-my-way": "^5.5.0",
|
|
36
37
|
"raw-body": "^2.5.1"
|
|
37
38
|
}
|