@kaito-http/core 2.3.6 → 2.3.9

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.
@@ -26,7 +26,6 @@ export declare class Router<Context, Routes extends RoutesInit<Context>> {
26
26
  readonly 'mkcol': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "MKCOL", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "MKCOL", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "MKCOL", Context, Input>; }>;
27
27
  readonly 'move': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "MOVE", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "MOVE", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "MOVE", Context, Input>; }>;
28
28
  readonly 'notify': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "NOTIFY", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "NOTIFY", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "NOTIFY", Context, Input>; }>;
29
- readonly 'options': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "OPTIONS", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "OPTIONS", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "OPTIONS", Context, Input>; }>;
30
29
  readonly 'patch': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "PATCH", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "PATCH", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "PATCH", Context, Input>; }>;
31
30
  readonly 'post': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "POST", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "POST", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "POST", Context, Input>; }>;
32
31
  readonly 'propfind': <Result, Path extends `/${string}`, Input extends z.ZodType<any, z.ZodTypeDef, any> = never>(path: Path, route: Omit<Route<Result, Path, "PROPFIND", Context, Input>, "method">) => Router<Context, Path extends keyof Routes ? NoEmpty<Pick<Routes, Path>> | { [key in Path]: Route<Result, Path, "PROPFIND", Context, Input>; } : Routes & { [key_1 in Path]: Route<Result, Path, "PROPFIND", Context, Input>; }>;
@@ -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,92 @@ 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
+ if (req.method === 'OPTIONS') {
84
+ return;
85
+ }
86
+
87
+ fmw.lookup(req, res);
88
+ });
89
+
90
+ return function (_x, _x2) {
91
+ return _ref.apply(this, arguments);
92
+ };
93
+ }());
39
94
  return {
40
95
  server,
41
96
  fmw
@@ -98,42 +153,6 @@ function _objectSpread2(target) {
98
153
  return target;
99
154
  }
100
155
 
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
156
  class WrappedError extends Error {
138
157
  static maybe(maybeError) {
139
158
  if (maybeError instanceof Error) {
@@ -187,7 +206,15 @@ function _getInput() {
187
206
 
188
207
  var buffer = yield getRawBody__default["default"](req.raw);
189
208
 
190
- switch (req.headers['content-type']) {
209
+ if (!req.headers['content-type']) {
210
+ return null;
211
+ }
212
+
213
+ var {
214
+ type
215
+ } = contentType.parse(req.headers['content-type']);
216
+
217
+ switch (type) {
191
218
  case 'application/json':
192
219
  {
193
220
  return JSON.parse(buffer.toString());
@@ -365,8 +392,6 @@ class Router {
365
392
 
366
393
  _defineProperty(this, 'notify', this.make('NOTIFY'));
367
394
 
368
- _defineProperty(this, 'options', this.make('OPTIONS'));
369
-
370
395
  _defineProperty(this, 'patch', this.make('PATCH'));
371
396
 
372
397
  _defineProperty(this, 'post', this.make('POST'));
@@ -5,37 +5,92 @@ 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
+ if (req.method === 'OPTIONS') {
84
+ return;
85
+ }
86
+
87
+ fmw.lookup(req, res);
88
+ });
89
+
90
+ return function (_x, _x2) {
91
+ return _ref.apply(this, arguments);
92
+ };
93
+ }());
39
94
  return {
40
95
  server,
41
96
  fmw
@@ -98,42 +153,6 @@ function _objectSpread2(target) {
98
153
  return target;
99
154
  }
100
155
 
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
156
  class WrappedError extends Error {
138
157
  static maybe(maybeError) {
139
158
  if (maybeError instanceof Error) {
@@ -187,7 +206,15 @@ function _getInput() {
187
206
 
188
207
  var buffer = yield getRawBody__default["default"](req.raw);
189
208
 
190
- switch (req.headers['content-type']) {
209
+ if (!req.headers['content-type']) {
210
+ return null;
211
+ }
212
+
213
+ var {
214
+ type
215
+ } = contentType.parse(req.headers['content-type']);
216
+
217
+ switch (type) {
191
218
  case 'application/json':
192
219
  {
193
220
  return JSON.parse(buffer.toString());
@@ -365,8 +392,6 @@ class Router {
365
392
 
366
393
  _defineProperty(this, 'notify', this.make('NOTIFY'));
367
394
 
368
- _defineProperty(this, 'options', this.make('OPTIONS'));
369
-
370
395
  _defineProperty(this, 'patch', this.make('PATCH'));
371
396
 
372
397
  _defineProperty(this, 'post', this.make('POST'));
@@ -1,13 +1,68 @@
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
+ if (req.method === 'OPTIONS') {
56
+ return;
57
+ }
58
+
59
+ fmw.lookup(req, res);
60
+ });
61
+
62
+ return function (_x, _x2) {
63
+ return _ref.apply(this, arguments);
64
+ };
65
+ }());
11
66
  return {
12
67
  server,
13
68
  fmw
@@ -70,42 +125,6 @@ function _objectSpread2(target) {
70
125
  return target;
71
126
  }
72
127
 
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
128
  class WrappedError extends Error {
110
129
  static maybe(maybeError) {
111
130
  if (maybeError instanceof Error) {
@@ -159,7 +178,15 @@ function _getInput() {
159
178
 
160
179
  var buffer = yield getRawBody(req.raw);
161
180
 
162
- switch (req.headers['content-type']) {
181
+ if (!req.headers['content-type']) {
182
+ return null;
183
+ }
184
+
185
+ var {
186
+ type
187
+ } = parse(req.headers['content-type']);
188
+
189
+ switch (type) {
163
190
  case 'application/json':
164
191
  {
165
192
  return JSON.parse(buffer.toString());
@@ -337,8 +364,6 @@ class Router {
337
364
 
338
365
  _defineProperty(this, 'notify', this.make('NOTIFY'));
339
366
 
340
- _defineProperty(this, 'options', this.make('OPTIONS'));
341
-
342
367
  _defineProperty(this, 'patch', this.make('PATCH'));
343
368
 
344
369
  _defineProperty(this, 'post', this.make('POST'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaito-http/core",
3
- "version": "2.3.6",
3
+ "version": "2.3.9",
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,6 +9,7 @@
9
9
  "module": "dist/kaito-http-core.esm.js",
10
10
  "types": "dist/kaito-http-core.cjs.d.ts",
11
11
  "devDependencies": {
12
+ "@types/content-type": "^1.1.5",
12
13
  "@types/node": "^17.0.25",
13
14
  "typescript": "4.6",
14
15
  "zod": "^3.14.4"
@@ -31,6 +32,7 @@
31
32
  "framework"
32
33
  ],
33
34
  "dependencies": {
35
+ "content-type": "^1.0.4",
34
36
  "find-my-way": "^5.5.0",
35
37
  "raw-body": "^2.5.1"
36
38
  }