@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
- if (e && e.__esModule) return e;
14
- var n = Object.create(null);
15
- if (e) {
16
- Object.keys(e).forEach(function (k) {
17
- if (k !== 'default') {
18
- var d = Object.getOwnPropertyDescriptor(e, k);
19
- Object.defineProperty(n, k, d.get ? d : {
20
- enumerable: true,
21
- get: function () { return e[k]; }
22
- });
23
- }
24
- });
25
- }
26
- n["default"] = e;
27
- return Object.freeze(n);
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((req, res) => {
37
- fmw.lookup(req, res);
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
- switch (req.headers['content-type']) {
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
- if (e && e.__esModule) return e;
14
- var n = Object.create(null);
15
- if (e) {
16
- Object.keys(e).forEach(function (k) {
17
- if (k !== 'default') {
18
- var d = Object.getOwnPropertyDescriptor(e, k);
19
- Object.defineProperty(n, k, d.get ? d : {
20
- enumerable: true,
21
- get: function () { return e[k]; }
22
- });
23
- }
24
- });
25
- }
26
- n["default"] = e;
27
- return Object.freeze(n);
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((req, res) => {
37
- fmw.lookup(req, res);
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
- switch (req.headers['content-type']) {
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((req, res) => {
9
- fmw.lookup(req, res);
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
- switch (req.headers['content-type']) {
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.5",
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/body-parser": "^1.19.2",
13
- "@types/node": "^17.0.24",
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
  }