@bepalo/spine 1.5.17 → 2.7.19
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/README.md +532 -1
- package/dist/auth-middlewares.d.ts.map +1 -1
- package/dist/auth-middlewares.js +1 -0
- package/dist/auth-middlewares.js.map +1 -1
- package/dist/cache.d.ts +72 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +387 -0
- package/dist/cache.js.map +1 -0
- package/dist/cjs/auth-middlewares.d.ts.map +1 -1
- package/dist/cjs/auth-middlewares.js +1 -0
- package/dist/cjs/auth-middlewares.js.map +1 -1
- package/dist/cjs/cache.d.ts +72 -0
- package/dist/cjs/cache.d.ts.map +1 -0
- package/dist/cjs/cache.js +387 -0
- package/dist/cjs/cache.js.map +1 -0
- package/dist/cjs/exp-cache.d.ts +101 -0
- package/dist/cjs/exp-cache.d.ts.map +1 -0
- package/dist/cjs/exp-cache.js +551 -0
- package/dist/cjs/exp-cache.js.map +1 -0
- package/dist/cjs/generator.d.ts +142 -19
- package/dist/cjs/generator.d.ts.map +1 -1
- package/dist/cjs/generator.js +416 -36
- package/dist/cjs/generator.js.map +1 -1
- package/dist/cjs/helpers.d.ts +49 -2
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +169 -14
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/linked-list.d.ts +35 -0
- package/dist/cjs/linked-list.d.ts.map +1 -0
- package/dist/cjs/linked-list.js +300 -0
- package/dist/cjs/linked-list.js.map +1 -0
- package/dist/cjs/middlewares.d.ts +264 -28
- package/dist/cjs/middlewares.d.ts.map +1 -1
- package/dist/cjs/middlewares.js +691 -44
- package/dist/cjs/middlewares.js.map +1 -1
- package/dist/cjs/parsers.d.ts +32 -10
- package/dist/cjs/parsers.d.ts.map +1 -1
- package/dist/cjs/parsers.js +84 -46
- package/dist/cjs/parsers.js.map +1 -1
- package/dist/cjs/router.d.ts +5 -6
- package/dist/cjs/router.d.ts.map +1 -1
- package/dist/cjs/router.js +272 -149
- package/dist/cjs/router.js.map +1 -1
- package/dist/cjs/status.d.ts.map +1 -1
- package/dist/cjs/status.js +80 -79
- package/dist/cjs/status.js.map +1 -1
- package/dist/cjs/types.d.ts +74 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +15 -2
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +1 -0
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +1 -0
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/utils.node.d.ts +1 -1
- package/dist/cjs/utils.node.d.ts.map +1 -1
- package/dist/cjs/utils.node.js +31 -7
- package/dist/cjs/utils.node.js.map +1 -1
- package/dist/exp-cache.d.ts +101 -0
- package/dist/exp-cache.d.ts.map +1 -0
- package/dist/exp-cache.js +551 -0
- package/dist/exp-cache.js.map +1 -0
- package/dist/generator.d.ts +142 -19
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +416 -36
- package/dist/generator.js.map +1 -1
- package/dist/helpers.d.ts +49 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +169 -14
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/linked-list.d.ts +35 -0
- package/dist/linked-list.d.ts.map +1 -0
- package/dist/linked-list.js +300 -0
- package/dist/linked-list.js.map +1 -0
- package/dist/middlewares.d.ts +264 -28
- package/dist/middlewares.d.ts.map +1 -1
- package/dist/middlewares.js +691 -44
- package/dist/middlewares.js.map +1 -1
- package/dist/parsers.d.ts +32 -10
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +84 -46
- package/dist/parsers.js.map +1 -1
- package/dist/router.d.ts +5 -6
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +272 -149
- package/dist/router.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +80 -79
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +74 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.node.d.ts +1 -1
- package/dist/utils.node.d.ts.map +1 -1
- package/dist/utils.node.js +31 -7
- package/dist/utils.node.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/linked-list.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.LinkedList = void 0;
|
|
5
|
+
const node_util_1 = require("node:util");
|
|
6
|
+
class LinkedList {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.first = undefined;
|
|
9
|
+
this.last = undefined;
|
|
10
|
+
this.size = 0;
|
|
11
|
+
}
|
|
12
|
+
*[Symbol.iterator]() {
|
|
13
|
+
for (let node = this.first; node !== undefined; node = node.next) {
|
|
14
|
+
yield node.data;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
*values() {
|
|
18
|
+
for (let node = this.first; node !== undefined; node = node.next) {
|
|
19
|
+
yield node.data;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
[node_util_1.inspect.custom](depth, options) {
|
|
23
|
+
return {
|
|
24
|
+
size: this.size,
|
|
25
|
+
entries: [...this],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
toJSON() {
|
|
29
|
+
const list = new Array(this.size);
|
|
30
|
+
for (let node = this.first, i = 0; node !== undefined; node = node.next, i++) {
|
|
31
|
+
list[i] = node.data;
|
|
32
|
+
}
|
|
33
|
+
return list;
|
|
34
|
+
}
|
|
35
|
+
insertStart(data) {
|
|
36
|
+
const newNode = {
|
|
37
|
+
data,
|
|
38
|
+
prev: undefined,
|
|
39
|
+
next: this.first,
|
|
40
|
+
};
|
|
41
|
+
if (this.first === undefined) {
|
|
42
|
+
this.last = this.first = newNode;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.first.prev = newNode;
|
|
46
|
+
this.first = newNode;
|
|
47
|
+
}
|
|
48
|
+
this.size++;
|
|
49
|
+
return newNode;
|
|
50
|
+
}
|
|
51
|
+
insertEnd(data) {
|
|
52
|
+
const newNode = {
|
|
53
|
+
data,
|
|
54
|
+
prev: this.last,
|
|
55
|
+
next: undefined,
|
|
56
|
+
};
|
|
57
|
+
if (this.first === undefined) {
|
|
58
|
+
this.last = this.first = newNode;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.last.next = newNode;
|
|
62
|
+
this.last = newNode;
|
|
63
|
+
}
|
|
64
|
+
this.size++;
|
|
65
|
+
return newNode;
|
|
66
|
+
}
|
|
67
|
+
insertBefore(beforeNode, data) {
|
|
68
|
+
const { prev } = beforeNode;
|
|
69
|
+
const newNode = {
|
|
70
|
+
data,
|
|
71
|
+
prev,
|
|
72
|
+
next: beforeNode,
|
|
73
|
+
};
|
|
74
|
+
if (prev !== undefined) {
|
|
75
|
+
prev.next = newNode;
|
|
76
|
+
}
|
|
77
|
+
beforeNode.prev = newNode;
|
|
78
|
+
if (this.first === beforeNode) {
|
|
79
|
+
this.first = newNode;
|
|
80
|
+
}
|
|
81
|
+
this.size++;
|
|
82
|
+
return newNode;
|
|
83
|
+
}
|
|
84
|
+
insertAfter(afterNode, data) {
|
|
85
|
+
const { next } = afterNode;
|
|
86
|
+
const newNode = {
|
|
87
|
+
data,
|
|
88
|
+
prev: afterNode,
|
|
89
|
+
next,
|
|
90
|
+
};
|
|
91
|
+
if (next !== undefined) {
|
|
92
|
+
next.prev = newNode;
|
|
93
|
+
}
|
|
94
|
+
afterNode.next = newNode;
|
|
95
|
+
if (this.last === afterNode) {
|
|
96
|
+
this.last = newNode;
|
|
97
|
+
}
|
|
98
|
+
this.size++;
|
|
99
|
+
return newNode;
|
|
100
|
+
}
|
|
101
|
+
moveBefore(beforeNode, node) {
|
|
102
|
+
if (node === beforeNode) {
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
// splice node
|
|
106
|
+
{
|
|
107
|
+
const { prev, next } = node;
|
|
108
|
+
if (prev !== undefined) {
|
|
109
|
+
prev.next = next;
|
|
110
|
+
}
|
|
111
|
+
if (next !== undefined) {
|
|
112
|
+
next.prev = prev;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// insert node before
|
|
116
|
+
const { prev } = beforeNode;
|
|
117
|
+
if (prev !== undefined) {
|
|
118
|
+
prev.next = node;
|
|
119
|
+
}
|
|
120
|
+
beforeNode.prev = node;
|
|
121
|
+
node.prev = prev;
|
|
122
|
+
node.next = beforeNode;
|
|
123
|
+
if (this.first === beforeNode) {
|
|
124
|
+
this.first = node;
|
|
125
|
+
}
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
moveAfter(afterNode, node) {
|
|
129
|
+
if (node === afterNode) {
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
// splice node
|
|
133
|
+
{
|
|
134
|
+
const { prev, next } = node;
|
|
135
|
+
if (prev !== undefined) {
|
|
136
|
+
prev.next = next;
|
|
137
|
+
}
|
|
138
|
+
if (next !== undefined) {
|
|
139
|
+
next.prev = prev;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// insert node after
|
|
143
|
+
const { next } = afterNode;
|
|
144
|
+
if (next !== undefined) {
|
|
145
|
+
next.prev = node;
|
|
146
|
+
}
|
|
147
|
+
afterNode.next = node;
|
|
148
|
+
node.next = next;
|
|
149
|
+
node.prev = afterNode;
|
|
150
|
+
if (this.last === afterNode) {
|
|
151
|
+
this.last = node;
|
|
152
|
+
}
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
popStart() {
|
|
156
|
+
if (this.first !== undefined) {
|
|
157
|
+
const { data, next } = this.first;
|
|
158
|
+
this.first = next;
|
|
159
|
+
if (next !== undefined) {
|
|
160
|
+
next.prev = undefined;
|
|
161
|
+
}
|
|
162
|
+
if (this.first === undefined) {
|
|
163
|
+
this.last = undefined;
|
|
164
|
+
}
|
|
165
|
+
this.size--;
|
|
166
|
+
return data;
|
|
167
|
+
}
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
popEnd() {
|
|
171
|
+
if (this.last !== undefined) {
|
|
172
|
+
const { data, prev } = this.last;
|
|
173
|
+
this.last = prev;
|
|
174
|
+
if (prev !== undefined) {
|
|
175
|
+
prev.next = undefined;
|
|
176
|
+
}
|
|
177
|
+
if (this.last === undefined) {
|
|
178
|
+
this.first = undefined;
|
|
179
|
+
}
|
|
180
|
+
this.size--;
|
|
181
|
+
return data;
|
|
182
|
+
}
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
cutStart(node, cutSize) {
|
|
186
|
+
const { prev } = node;
|
|
187
|
+
this.first = node;
|
|
188
|
+
node.prev = undefined;
|
|
189
|
+
if (prev !== undefined) {
|
|
190
|
+
prev.next = undefined;
|
|
191
|
+
}
|
|
192
|
+
this.size -= cutSize;
|
|
193
|
+
return prev;
|
|
194
|
+
}
|
|
195
|
+
cutEnd(node, cutSize) {
|
|
196
|
+
const { next } = node;
|
|
197
|
+
this.last = node;
|
|
198
|
+
node.next = undefined;
|
|
199
|
+
if (next !== undefined) {
|
|
200
|
+
next.prev = undefined;
|
|
201
|
+
}
|
|
202
|
+
this.size -= cutSize;
|
|
203
|
+
return next;
|
|
204
|
+
}
|
|
205
|
+
cutLeft(node, cutSize) {
|
|
206
|
+
const { prev } = node;
|
|
207
|
+
this.last = prev;
|
|
208
|
+
if (prev === undefined) {
|
|
209
|
+
this.first = undefined;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
prev.next = undefined;
|
|
213
|
+
}
|
|
214
|
+
node.prev = undefined;
|
|
215
|
+
this.size -= cutSize;
|
|
216
|
+
return node;
|
|
217
|
+
}
|
|
218
|
+
cutRight(node, cutSize) {
|
|
219
|
+
const { next } = node;
|
|
220
|
+
this.first = next;
|
|
221
|
+
if (next === undefined) {
|
|
222
|
+
this.last = undefined;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
next.prev = undefined;
|
|
226
|
+
}
|
|
227
|
+
node.next = undefined;
|
|
228
|
+
this.size -= cutSize;
|
|
229
|
+
return node;
|
|
230
|
+
}
|
|
231
|
+
remove(node) {
|
|
232
|
+
const { prev, next } = node;
|
|
233
|
+
if (prev !== undefined) {
|
|
234
|
+
prev.next = next;
|
|
235
|
+
node.prev = undefined;
|
|
236
|
+
}
|
|
237
|
+
if (next !== undefined) {
|
|
238
|
+
next.prev = prev;
|
|
239
|
+
node.next = undefined;
|
|
240
|
+
}
|
|
241
|
+
if (node === this.first) {
|
|
242
|
+
this.first = next;
|
|
243
|
+
}
|
|
244
|
+
if (node === this.last) {
|
|
245
|
+
this.last = prev;
|
|
246
|
+
}
|
|
247
|
+
this.size--;
|
|
248
|
+
return node;
|
|
249
|
+
}
|
|
250
|
+
moveToStart(node) {
|
|
251
|
+
if (node === this.first) {
|
|
252
|
+
return node;
|
|
253
|
+
}
|
|
254
|
+
const { prev, next } = node;
|
|
255
|
+
// detach node
|
|
256
|
+
if (prev !== undefined) {
|
|
257
|
+
prev.next = next;
|
|
258
|
+
}
|
|
259
|
+
if (next !== undefined) {
|
|
260
|
+
next.prev = prev;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.last = prev;
|
|
264
|
+
}
|
|
265
|
+
// insert start
|
|
266
|
+
node.next = this.first;
|
|
267
|
+
node.prev = undefined;
|
|
268
|
+
this.first.prev = node;
|
|
269
|
+
this.first = node;
|
|
270
|
+
return node;
|
|
271
|
+
}
|
|
272
|
+
moveToEnd(node) {
|
|
273
|
+
if (node === this.last) {
|
|
274
|
+
return node;
|
|
275
|
+
}
|
|
276
|
+
const { prev, next } = node;
|
|
277
|
+
// detach node
|
|
278
|
+
if (prev !== undefined) {
|
|
279
|
+
prev.next = next;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
this.first = next;
|
|
283
|
+
}
|
|
284
|
+
if (next !== undefined) {
|
|
285
|
+
next.prev = prev;
|
|
286
|
+
}
|
|
287
|
+
// insert end
|
|
288
|
+
node.prev = this.last;
|
|
289
|
+
node.next = undefined;
|
|
290
|
+
this.last.next = node;
|
|
291
|
+
this.last = node;
|
|
292
|
+
return node;
|
|
293
|
+
}
|
|
294
|
+
clear() {
|
|
295
|
+
this.first = this.last = undefined;
|
|
296
|
+
this.size = 0;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.LinkedList = LinkedList;
|
|
300
|
+
//# sourceMappingURL=linked-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linked-list.js","sourceRoot":"","sources":["../src/linked-list.ts"],"names":[],"mappings":"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"}
|
package/dist/middlewares.d.ts
CHANGED
|
@@ -1,18 +1,110 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CTBody, CTCookie, CTQuery, ParseBodyOptions, ParsedBody } from "./parsers.ts";
|
|
2
|
+
import { HttpError } from "./types.ts";
|
|
3
|
+
import type { HttpMethodLower, HttpMethodUpper, Context, Handler, HttpMethod, XFrameOptions, ReferrerPolicy, ContentSecurityPolicyParams, StrictTransportSecurityParams, CrossOriginOpenerPolicy, CrossOriginEmbedderPolicy, CrossOriginResourcePolicy, ContentSecurityPolicyArrayParams, StrictTransportSecurity, ContentSecurityPolicySource, ContentSecurityPolicyFetchDirectiveType, HandlerReturn } from "./types.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Force http into https
|
|
6
|
+
*
|
|
7
|
+
* @returns {Handler<ExtendContext>} Middleware function
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export declare const forceHttps: <ExtendContext extends Record<string, unknown> = {}>(config?: {
|
|
11
|
+
toPort?: number;
|
|
12
|
+
}) => Handler<ExtendContext>;
|
|
13
|
+
/**
|
|
14
|
+
* Set security headers.
|
|
15
|
+
* - "X-Content-Type-Options": always "nosniff"
|
|
16
|
+
* - "X-Frame-Options": default "DENY"
|
|
17
|
+
* - "Referrer-Policy": from parameters
|
|
18
|
+
* - "Strict-Transport-Security": from parameters
|
|
19
|
+
* - "Content-Security-Policy": from parameters
|
|
20
|
+
*
|
|
21
|
+
* @returns {Handler<ExtendContext>} Middleware function
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export declare const securityHeaders: <ExtendContext extends Record<string, unknown> = {}>(config?: {
|
|
25
|
+
referrerPolicy?: ReferrerPolicy | null;
|
|
26
|
+
xFrameOptions?: XFrameOptions | null;
|
|
27
|
+
strictTransportSecurity?: StrictTransportSecurity | StrictTransportSecurityParams | boolean | null;
|
|
28
|
+
/**
|
|
29
|
+
* @property [config.contentSecurityPolicy] When using the array version
|
|
30
|
+
* please take note of whitespace usage to differentiate between some values.
|
|
31
|
+
* NOTE: Custom values require a preceding space.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* contentSecurityPolicy: {
|
|
35
|
+
* "default-src": "'self'",
|
|
36
|
+
* "object-src": "'none'",
|
|
37
|
+
* "frame-ancestors": "'none'",
|
|
38
|
+
* "script-src style-src font-src": [
|
|
39
|
+
* "'self'",
|
|
40
|
+
* "https://unpkg.com",
|
|
41
|
+
* "'unsafe-inline'",
|
|
42
|
+
* ],
|
|
43
|
+
* "script-src": [
|
|
44
|
+
* "'self'",
|
|
45
|
+
* "'strict-dynamic'",
|
|
46
|
+
* `'nonce-${toBase64UUID(crypto.randomUUID())}'`,
|
|
47
|
+
* "'unsafe-inline'",
|
|
48
|
+
* ],
|
|
49
|
+
* "img-src": [ "'self'", "data:" ],
|
|
50
|
+
* "upgrade-insecure-requests": true,
|
|
51
|
+
* "trusted-types": " type-a type-b",
|
|
52
|
+
* // "trusted-types": "'none'",
|
|
53
|
+
* }
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* contentSecurityPolicy: {
|
|
57
|
+
* [ "default-src", "'self'" ],
|
|
58
|
+
* [ "object-src", "'none'" ],
|
|
59
|
+
* [ "frame-ancestors", "'none'" ],
|
|
60
|
+
* [
|
|
61
|
+
* "script-src style-src font-src",
|
|
62
|
+
* "'self'",
|
|
63
|
+
* "https://unpkg.com",
|
|
64
|
+
* "'unsafe-inline'",
|
|
65
|
+
* ],
|
|
66
|
+
* [
|
|
67
|
+
* "script-src",
|
|
68
|
+
* "'self'",
|
|
69
|
+
* "'strict-dynamic'",
|
|
70
|
+
* `'nonce-${toBase64UUID(crypto.randomUUID())}'`,
|
|
71
|
+
* "'unsafe-inline'",
|
|
72
|
+
* ],
|
|
73
|
+
* [ "img-src", "'self'", "data:" ],
|
|
74
|
+
* [ "upgrade-insecure-requests" ],
|
|
75
|
+
* [ "trusted-types", " type-a type-b" ],
|
|
76
|
+
* // [ "trusted-types", "'none'" ],
|
|
77
|
+
* }
|
|
78
|
+
*
|
|
79
|
+
*/
|
|
80
|
+
contentSecurityPolicy?: ContentSecurityPolicyArrayParams | ContentSecurityPolicyParams | (ContentSecurityPolicyParams & { [K in string as K extends keyof ContentSecurityPolicyFetchDirectiveType | "upgrade-insecure-requests" | "trusted-types" ? never : K]: ContentSecurityPolicySource | ContentSecurityPolicySource[]; }) | null;
|
|
81
|
+
crossOriginOpenerPolicy?: CrossOriginOpenerPolicy;
|
|
82
|
+
/**
|
|
83
|
+
* @property
|
|
84
|
+
*/
|
|
85
|
+
crossOriginEmbedderPolicy?: CrossOriginEmbedderPolicy;
|
|
86
|
+
crossOriginResourcePolicy?: CrossOriginResourcePolicy;
|
|
87
|
+
/**
|
|
88
|
+
* @property [config.headers] Extra headers to set.
|
|
89
|
+
*/
|
|
90
|
+
headers?: [string, string][] | Record<string, string>;
|
|
91
|
+
}) => Handler<ExtendContext>;
|
|
2
92
|
/**
|
|
3
93
|
* Creates a rate limiting middleware using token bucket algorithm.
|
|
4
94
|
* Supports both fixed interval refill and continuous rate-based refill.
|
|
5
95
|
*
|
|
6
|
-
* @template {Record<string, unknown>} ExtendContext
|
|
7
|
-
* @
|
|
8
|
-
* @
|
|
9
|
-
* @
|
|
10
|
-
* @
|
|
11
|
-
* @
|
|
12
|
-
* @
|
|
13
|
-
* @
|
|
14
|
-
* @
|
|
15
|
-
* @
|
|
96
|
+
* @template {Record<string, unknown>} ExtendContext Extend Router Context
|
|
97
|
+
* @property {Object} config Rate limiting configuration
|
|
98
|
+
* @property {Function} [config.key] Function to generate cache key from request and context
|
|
99
|
+
* @property {number} [config.maxTokens] Maximum number of tokens in the bucket
|
|
100
|
+
* @property {number} [config.refillInterval] Fixed interval in seconds for token refill
|
|
101
|
+
* @property {number} [config.refillRate] Continuous refill rate in tokens per second
|
|
102
|
+
* @property {number} [config.cleanUpInterval] Interval in seconds for cleanup timer
|
|
103
|
+
* @property {number} [config.cleanUpIdleDelay] Time in seconds to delay cleanup of filled token buckets
|
|
104
|
+
* @property {boolean} [config.setXRateLimitHeaders=false] Whether to set X-RateLimit headers in response
|
|
105
|
+
* @property {boolean} [config.breakPipeline=false] If true, returns Break_Pipeline
|
|
106
|
+
* @property {"status"|"text"|"json"} [config.responseType="text"] Response type
|
|
107
|
+
* @returns {Handler<ExtendContext>} Middleware function that enforces rate limits
|
|
16
108
|
*
|
|
17
109
|
* @example
|
|
18
110
|
* // Fixed interval rate limiting (10 requests per minute)
|
|
@@ -32,9 +124,9 @@ import { type Context, type Handler, type HttpMethod } from "./types.ts";
|
|
|
32
124
|
* maxTokens: 100,
|
|
33
125
|
* });
|
|
34
126
|
*
|
|
35
|
-
* @throws {
|
|
127
|
+
* @throws {Error} If neither refillInterval nor refillRate is provided
|
|
36
128
|
*/
|
|
37
|
-
export declare const limitRate: <ExtendContext extends Record<string, unknown> =
|
|
129
|
+
export declare const limitRate: <ExtendContext extends Record<string, unknown> = {}>(config: {
|
|
38
130
|
key: (ctx: Context<ExtendContext>) => string | Promise<string>;
|
|
39
131
|
maxTokens: number;
|
|
40
132
|
refillInterval?: number;
|
|
@@ -43,22 +135,26 @@ export declare const limitRate: <ExtendContext extends Record<string, unknown> =
|
|
|
43
135
|
cleanUpIdleDelay?: number;
|
|
44
136
|
setXRateLimitHeaders?: boolean;
|
|
45
137
|
breakPipeline?: boolean;
|
|
138
|
+
responseType?: "text" | "status" | "json";
|
|
46
139
|
}) => Handler<ExtendContext>;
|
|
47
140
|
/**
|
|
48
141
|
* Creates a CORS (Cross-Origin Resource Sharing) middleware.
|
|
49
142
|
* Supports preflight requests and configurable CORS headers.
|
|
50
143
|
*
|
|
51
|
-
* @template {Record<string, unknown>} ExtendContext
|
|
52
|
-
* @param {Object} [config]
|
|
53
|
-
* @param {string|string[]|"*"} [config.origins="*"]
|
|
54
|
-
* @param {HttpMethod[]} [config.methods=["
|
|
55
|
-
* @param {string[]} [config.allowedHeaders=["Content-Type","Authorization"]]
|
|
56
|
-
* @param {string[]} [config.exposedHeaders]
|
|
57
|
-
* @param {boolean} [config.credentials=false]
|
|
58
|
-
* @param {number} [config.maxAge=86400]
|
|
59
|
-
* @param {boolean} [config.varyOrigin=
|
|
60
|
-
* @param {boolean} [
|
|
61
|
-
* @
|
|
144
|
+
* @template {Record<string, unknown>} ExtendContext Extend Router Context
|
|
145
|
+
* @param {Object} [config] CORS configuration
|
|
146
|
+
* @param {string|string[]|"*"} [config.origins="*"] Allowed origins (wildcard "*", single origin, or array)
|
|
147
|
+
* @param {(HttpMethod|HttpMethodUpper|HttpMethodLower)[]} [config.methods=["Get","Head","Put","Patch","Post","Delete"]] Allowed HTTP methods
|
|
148
|
+
* @param {string[]} [config.allowedHeaders=["Content-Type","Authorization"]] Allowed request headers
|
|
149
|
+
* @param {string[]} [config.exposedHeaders] Headers exposed to the browser
|
|
150
|
+
* @param {boolean} [config.credentials=false] Allow credentials (cookies, authorization headers)
|
|
151
|
+
* @param {number} [config.maxAge=86400] Maximum age for preflight cache in seconds
|
|
152
|
+
* @param {boolean} [config.varyOrigin=true] Add Vary: Origin header for caching
|
|
153
|
+
* @param {boolean} [config.breakPipeline=false] If true, returns Break_Pipeline
|
|
154
|
+
* @param {"status"|"text"|"json"} [config.responseType="text"] Response type
|
|
155
|
+
* @returns {Handler<ExtendContext>} Middleware function that handles CORS headers
|
|
156
|
+
*
|
|
157
|
+
* @throws {HttpError} If credentials is enabled with wildcard origin ("*")
|
|
62
158
|
*
|
|
63
159
|
* @example
|
|
64
160
|
* // Basic CORS with all defaults
|
|
@@ -69,20 +165,160 @@ export declare const limitRate: <ExtendContext extends Record<string, unknown> =
|
|
|
69
165
|
* const corsMiddleware = cors({
|
|
70
166
|
* origins: ["https://example.com", "https://api.example.com"],
|
|
71
167
|
* credentials: true,
|
|
72
|
-
* methods: ["
|
|
168
|
+
* methods: ["Get", "Post", "Put", "Delete"],
|
|
73
169
|
* allowedHeaders: ["Content-Type", "Authorization", "X-Custom-Header"]
|
|
74
170
|
* });
|
|
75
171
|
*
|
|
76
|
-
* @throws {HttpError} If credentials is true with wildcard origin ("*")
|
|
77
172
|
*/
|
|
78
|
-
export declare const cors: <ExtendContext extends Record<string, unknown> =
|
|
173
|
+
export declare const cors: <ExtendContext extends Record<string, unknown> = {}>(config?: {
|
|
79
174
|
origins: "*" | string | string[];
|
|
80
|
-
methods?: HttpMethod[] | null;
|
|
175
|
+
methods?: (HttpMethod | HttpMethodUpper | HttpMethodLower)[] | null;
|
|
81
176
|
allowedHeaders?: string[] | null;
|
|
82
177
|
exposedHeaders?: string[] | null;
|
|
83
178
|
credentials?: boolean | null;
|
|
84
179
|
maxAge?: number | null;
|
|
85
180
|
varyOrigin?: boolean;
|
|
86
181
|
breakPipeline?: boolean;
|
|
182
|
+
responseType?: "text" | "status" | "json";
|
|
87
183
|
}) => Handler<ExtendContext>;
|
|
184
|
+
/**
|
|
185
|
+
* Types used as validator target
|
|
186
|
+
*/
|
|
187
|
+
export type ValidateTargetTypes = {
|
|
188
|
+
params: Record<string, string>;
|
|
189
|
+
query: Record<string, string>;
|
|
190
|
+
cookie: Record<string, string>;
|
|
191
|
+
body: ParsedBody;
|
|
192
|
+
};
|
|
193
|
+
type CTFrom<ExtendContext extends Record<string, unknown> = {}, Options extends Pick<ValidateOptions<ExtendContext>, "params" | "query" | "cookie" | "body"> = Pick<ValidateOptions<ExtendContext>, "params" | "query" | "cookie" | "body">> = {
|
|
194
|
+
[K in keyof Options as {} extends Options[K] ? K : never]: K extends keyof ValidateTargetTypes ? ValidateTargetTypes[K] : never;
|
|
195
|
+
};
|
|
196
|
+
declare type Type<t = unknown, $ = {}> = any;
|
|
197
|
+
type CustomErrorType = abstract new (...args: any[]) => unknown;
|
|
198
|
+
export type ValidatorReturn<T = unknown> = Exclude<HandlerReturn, void> | Error | HttpError | T;
|
|
199
|
+
export type ValidatorFn<Target, ExtendContext extends Record<string, unknown> = {}> = Type<any, any> & {
|
|
200
|
+
(target: Target): ValidatorReturn<Target>;
|
|
201
|
+
(this: Context<ExtendContext>, target: Target): ValidatorReturn<Target>;
|
|
202
|
+
};
|
|
203
|
+
export type ValidatorFnIt<Target, ExtendContext extends Record<string, unknown> = {}> = Type<any, any> & {
|
|
204
|
+
(target: Target): ValidatorReturn<Target>;
|
|
205
|
+
(this: Context<ExtendContext>, target: Target): ValidatorReturn<Target>;
|
|
206
|
+
(target: Target, ctx: Context<ExtendContext>, index: number): ValidatorReturn<Target>;
|
|
207
|
+
};
|
|
208
|
+
export type PropValidator<Target, ExtendContext extends Record<string, unknown> = {}> = {
|
|
209
|
+
(target: Target): ValidatorReturn<Target>;
|
|
210
|
+
(this: Context<ExtendContext>, target: Target): ValidatorReturn<Target>;
|
|
211
|
+
};
|
|
212
|
+
export type PropValidatorIt<Target, ExtendContext extends Record<string, unknown> = {}> = {
|
|
213
|
+
(target: Target): ValidatorReturn<Target>;
|
|
214
|
+
(this: Context<ExtendContext>, target: Target): ValidatorReturn<Target>;
|
|
215
|
+
(target: Target, ctx: Context<ExtendContext>, index: number): ValidatorReturn<Target>;
|
|
216
|
+
};
|
|
217
|
+
export type Validator<Target, ExtendContext extends Record<string, unknown> = {}> = ValidatorFn<Target, ExtendContext> | (Target extends Record<string, unknown> ? {
|
|
218
|
+
[K in keyof Target]: PropValidator<Target[K], ExtendContext>;
|
|
219
|
+
} : never);
|
|
220
|
+
export type ValidatorIt<Target, ExtendContext extends Record<string, unknown> = {}> = ValidatorFnIt<Target, ExtendContext> | (Target extends Record<string, unknown> ? {
|
|
221
|
+
[K in keyof Target]: PropValidatorIt<Target[K], ExtendContext>;
|
|
222
|
+
} : never);
|
|
223
|
+
export type ValidateQueryParser<ExtendContext extends Record<string, unknown> = {}> = {
|
|
224
|
+
(ctx: Context<CTQuery & ExtendContext>): Promise<void> | void;
|
|
225
|
+
};
|
|
226
|
+
export type ValidateCookieParser<ExtendContext extends Record<string, unknown> = {}> = {
|
|
227
|
+
(ctx: Context<CTCookie & ExtendContext>): Promise<void> | void;
|
|
228
|
+
};
|
|
229
|
+
export type ValidateBodyParser<ExtendContext extends Record<string, unknown> = {}> = {
|
|
230
|
+
(ctx: Context<CTBody & ExtendContext>): Promise<void> | void;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* Options type for validator middleware function.
|
|
234
|
+
*/
|
|
235
|
+
export interface ValidateOptions<ExtendContext extends ({
|
|
236
|
+
params: Record<string, string>;
|
|
237
|
+
} & ({
|
|
238
|
+
query: Record<string, string>;
|
|
239
|
+
} | {
|
|
240
|
+
cookie: Record<string, string>;
|
|
241
|
+
} | {
|
|
242
|
+
body: ParsedBody;
|
|
243
|
+
} | {
|
|
244
|
+
query: Record<string, string>;
|
|
245
|
+
body: ParsedBody;
|
|
246
|
+
} | {
|
|
247
|
+
query: Record<string, string>;
|
|
248
|
+
cookie: Record<string, string>;
|
|
249
|
+
} | {
|
|
250
|
+
cookie: Record<string, string>;
|
|
251
|
+
body: ParsedBody;
|
|
252
|
+
} | {
|
|
253
|
+
query: Record<string, string>;
|
|
254
|
+
cookie: Record<string, string>;
|
|
255
|
+
body: ParsedBody;
|
|
256
|
+
})) | Record<string, unknown> = {}> {
|
|
257
|
+
responseType?: "text" | "status" | "json";
|
|
258
|
+
errors?: Array<CustomErrorType>;
|
|
259
|
+
paramsReassign?: boolean;
|
|
260
|
+
params?: Validator<Record<string, string>, ExtendContext>;
|
|
261
|
+
paramsErrors?: Array<CustomErrorType>;
|
|
262
|
+
strangeParams?: boolean | {
|
|
263
|
+
<Target extends Record<string, unknown>>(target: Target, key: string): void | any;
|
|
264
|
+
};
|
|
265
|
+
queryParse?: boolean | ValidateQueryParser<ExtendContext>;
|
|
266
|
+
queryReassign?: boolean;
|
|
267
|
+
query?: Validator<Record<string, string>, ExtendContext>;
|
|
268
|
+
queryErrors?: Array<CustomErrorType>;
|
|
269
|
+
strangeQuery?: boolean | {
|
|
270
|
+
<Target extends Record<string, unknown>>(target: Target, key: string): void | any;
|
|
271
|
+
};
|
|
272
|
+
cookieParse?: boolean | ValidateCookieParser<ExtendContext>;
|
|
273
|
+
cookieReassign?: boolean;
|
|
274
|
+
cookie?: Validator<Record<string, string>, ExtendContext>;
|
|
275
|
+
cookieErrors?: Array<CustomErrorType>;
|
|
276
|
+
strangeCookie?: boolean | {
|
|
277
|
+
<Target extends Record<string, unknown>>(target: Target, key: string): void | any;
|
|
278
|
+
};
|
|
279
|
+
bodyParseOptions?: ParseBodyOptions;
|
|
280
|
+
bodyParse?: boolean | ValidateBodyParser<ExtendContext>;
|
|
281
|
+
bodyReassign?: boolean;
|
|
282
|
+
body?: ValidatorFnIt<ParsedBody, ExtendContext> | Array<ValidatorIt<ParsedBody, ExtendContext>>;
|
|
283
|
+
bodyErrors?: Array<CustomErrorType>;
|
|
284
|
+
strangeBody?: boolean | {
|
|
285
|
+
<Target extends Record<string, unknown>>(target: Target, key: string): void | any;
|
|
286
|
+
};
|
|
287
|
+
strange?: boolean | {
|
|
288
|
+
<Target extends Record<string, unknown>>(target: Target, key: string): void | any;
|
|
289
|
+
};
|
|
290
|
+
breakPipeline?: boolean;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Creates a request params, query and body validator middleware function
|
|
294
|
+
*
|
|
295
|
+
* @param {Validator<Record<string, string>,ExtendContext>} [config.params] Parameters validator
|
|
296
|
+
* @param {CustomErrorType} [config.paramsErrors] Parameters validator's expected error instance types other than Error derivatives
|
|
297
|
+
* @param {boolean|ValidateQueryParser<ExtendContext>} [config.queryParse] Parse query before validation. 'true' for default parser or provide a custom parser
|
|
298
|
+
* @param {Validator<Record<string, string>,ExtendContext>} [config.query] Query validator
|
|
299
|
+
* @param {CustomErrorType} [config.queryErrors] Query validator's expected error instance types other than Error derivatives
|
|
300
|
+
* @param {boolean|ValidateCookieParser<ExtendContext>} [config.cookieParse] Parse cookie before validation. 'true' for default parser or provide a custom parser
|
|
301
|
+
* @param {Validator<Record<string, string>,ExtendContext>} [config.cookie] Cookie validator
|
|
302
|
+
* @param {CustomErrorType} [config.cookieErrors] Cookie validator's expected error instance types other than Error derivatives
|
|
303
|
+
* @param {ParseBodyOptions} [config.bodyParseOptions] Body parser options
|
|
304
|
+
* @param {boolean|ValidateBodyParser<ExtendContext>} [config.bodyParse] Parse body before validation. 'true' for default parser or provide a custom parser
|
|
305
|
+
* @param {ValidatorFnIt<ParsedBody,ExtendContext>|Array<ValidatorIt<ParsedBody,ExtendContext>>} [config.body] Body validator
|
|
306
|
+
* @param {CustomErrorType} [config.bodyErrors] Body validator's expected error instance types other than Error derivatives
|
|
307
|
+
* @param {Array<CustomErrorType>} [config.errors] All validator's expected error instance types other than Error derivatives. Can be overridden.
|
|
308
|
+
* @param {boolean} [config.paramsReassign] Reassign validated return value of the params validator function
|
|
309
|
+
* @param {boolean} [config.queryReassign] Reassign validated return value of the query validator function
|
|
310
|
+
* @param {boolean} [config.cookieReassign] Reassign validated return value of the cookie validator function
|
|
311
|
+
* @param {boolean} [config.bodyReassign] Reassign validated return value of the body validator function
|
|
312
|
+
* @param {boolean|{<Target extends Record<string, unknown>>(target: Target,key: string,):void|any;}} [config.strangeParams] Handle strange or unexpected properties
|
|
313
|
+
* @param {boolean|{<Target extends Record<string, unknown>>(target: Target,key: string,):void|any;}} [config.strangeQuery] Handle strange or unexpected properties
|
|
314
|
+
* @param {boolean|{<Target extends Record<string, unknown>>(target: Target,key: string,):void|any;}} [config.strangeCookie] Handle strange or unexpected properties
|
|
315
|
+
* @param {boolean|{<Target extends Record<string, unknown>>(target: Target,key: string,):void|any;}} [config.strangeBody] Handle strange or unexpected properties
|
|
316
|
+
* @param {boolean|{<Target extends Record<string, unknown>>(target: Target,key: string,):void|any;}} [config.strange] A default common option to handle strange or unexpected properties
|
|
317
|
+
* @param {"status"|"text"|"json"} [config.responseType="text"] Response type.
|
|
318
|
+
* - Note: 'status' type will omit content
|
|
319
|
+
* @param {boolean} [config.breakPipeline=false] If true, returns Break_Pipeline
|
|
320
|
+
* @returns {HandlerReturn}
|
|
321
|
+
*/
|
|
322
|
+
export declare const validate: <ExtendContext extends Record<string, unknown> = {}, Options extends ValidateOptions<ExtendContext> = ValidateOptions<ExtendContext>>({ responseType, errors, paramsReassign, params: paramsValidator, paramsErrors, strangeParams, queryParse, queryReassign, query: queryValidator, queryErrors, strangeQuery, cookieParse, cookieReassign, cookie: cookieValidator, cookieErrors, strangeCookie, bodyParse, bodyParseOptions, bodyReassign, body: bodyValidator, bodyErrors, strangeBody, strange, breakPipeline, }: Options) => Handler<ExtendContext & CTFrom<ExtendContext, Options>>;
|
|
323
|
+
export {};
|
|
88
324
|
//# sourceMappingURL=middlewares.d.ts.map
|