@bepalo/spine 1.5.16 → 2.6.18

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.
Files changed (104) hide show
  1. package/README.md +533 -81
  2. package/dist/auth-middlewares.d.ts.map +1 -1
  3. package/dist/auth-middlewares.js +1 -0
  4. package/dist/auth-middlewares.js.map +1 -1
  5. package/dist/cache.d.ts +72 -0
  6. package/dist/cache.d.ts.map +1 -0
  7. package/dist/cache.js +387 -0
  8. package/dist/cache.js.map +1 -0
  9. package/dist/cjs/auth-middlewares.d.ts.map +1 -1
  10. package/dist/cjs/auth-middlewares.js +1 -0
  11. package/dist/cjs/auth-middlewares.js.map +1 -1
  12. package/dist/cjs/cache.d.ts +72 -0
  13. package/dist/cjs/cache.d.ts.map +1 -0
  14. package/dist/cjs/cache.js +387 -0
  15. package/dist/cjs/cache.js.map +1 -0
  16. package/dist/cjs/exp-cache.d.ts +101 -0
  17. package/dist/cjs/exp-cache.d.ts.map +1 -0
  18. package/dist/cjs/exp-cache.js +551 -0
  19. package/dist/cjs/exp-cache.js.map +1 -0
  20. package/dist/cjs/generator.d.ts +142 -19
  21. package/dist/cjs/generator.d.ts.map +1 -1
  22. package/dist/cjs/generator.js +415 -35
  23. package/dist/cjs/generator.js.map +1 -1
  24. package/dist/cjs/helpers.d.ts +49 -2
  25. package/dist/cjs/helpers.d.ts.map +1 -1
  26. package/dist/cjs/helpers.js +169 -14
  27. package/dist/cjs/helpers.js.map +1 -1
  28. package/dist/cjs/index.d.ts +2 -0
  29. package/dist/cjs/index.d.ts.map +1 -1
  30. package/dist/cjs/index.js +3 -0
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/linked-list.d.ts +35 -0
  33. package/dist/cjs/linked-list.d.ts.map +1 -0
  34. package/dist/cjs/linked-list.js +300 -0
  35. package/dist/cjs/linked-list.js.map +1 -0
  36. package/dist/cjs/middlewares.d.ts +102 -12
  37. package/dist/cjs/middlewares.d.ts.map +1 -1
  38. package/dist/cjs/middlewares.js +119 -22
  39. package/dist/cjs/middlewares.js.map +1 -1
  40. package/dist/cjs/parsers.d.ts.map +1 -1
  41. package/dist/cjs/parsers.js +1 -0
  42. package/dist/cjs/parsers.js.map +1 -1
  43. package/dist/cjs/router.d.ts +5 -6
  44. package/dist/cjs/router.d.ts.map +1 -1
  45. package/dist/cjs/router.js +271 -148
  46. package/dist/cjs/router.js.map +1 -1
  47. package/dist/cjs/status.d.ts.map +1 -1
  48. package/dist/cjs/status.js +80 -79
  49. package/dist/cjs/status.js.map +1 -1
  50. package/dist/cjs/types.d.ts +74 -2
  51. package/dist/cjs/types.d.ts.map +1 -1
  52. package/dist/cjs/types.js +15 -2
  53. package/dist/cjs/types.js.map +1 -1
  54. package/dist/cjs/utils.d.ts.map +1 -1
  55. package/dist/cjs/utils.js +1 -0
  56. package/dist/cjs/utils.js.map +1 -1
  57. package/dist/cjs/utils.node.d.ts.map +1 -1
  58. package/dist/cjs/utils.node.js +1 -0
  59. package/dist/cjs/utils.node.js.map +1 -1
  60. package/dist/exp-cache.d.ts +101 -0
  61. package/dist/exp-cache.d.ts.map +1 -0
  62. package/dist/exp-cache.js +551 -0
  63. package/dist/exp-cache.js.map +1 -0
  64. package/dist/generator.d.ts +142 -19
  65. package/dist/generator.d.ts.map +1 -1
  66. package/dist/generator.js +415 -35
  67. package/dist/generator.js.map +1 -1
  68. package/dist/helpers.d.ts +49 -2
  69. package/dist/helpers.d.ts.map +1 -1
  70. package/dist/helpers.js +169 -14
  71. package/dist/helpers.js.map +1 -1
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +3 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/linked-list.d.ts +35 -0
  77. package/dist/linked-list.d.ts.map +1 -0
  78. package/dist/linked-list.js +300 -0
  79. package/dist/linked-list.js.map +1 -0
  80. package/dist/middlewares.d.ts +102 -12
  81. package/dist/middlewares.d.ts.map +1 -1
  82. package/dist/middlewares.js +119 -22
  83. package/dist/middlewares.js.map +1 -1
  84. package/dist/parsers.d.ts.map +1 -1
  85. package/dist/parsers.js +1 -0
  86. package/dist/parsers.js.map +1 -1
  87. package/dist/router.d.ts +5 -6
  88. package/dist/router.d.ts.map +1 -1
  89. package/dist/router.js +271 -148
  90. package/dist/router.js.map +1 -1
  91. package/dist/status.d.ts.map +1 -1
  92. package/dist/status.js +80 -79
  93. package/dist/status.js.map +1 -1
  94. package/dist/types.d.ts +74 -2
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +15 -2
  97. package/dist/types.js.map +1 -1
  98. package/dist/utils.d.ts.map +1 -1
  99. package/dist/utils.js +1 -0
  100. package/dist/utils.js.map +1 -1
  101. package/dist/utils.node.d.ts.map +1 -1
  102. package/dist/utils.node.js +1 -0
  103. package/dist/utils.node.js.map +1 -1
  104. package/package.json +1 -1
@@ -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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"}
@@ -1,4 +1,92 @@
1
- import { type Context, type Handler, type HttpMethod } from "./types.ts";
1
+ import type { HttpMethodLower, HttpMethodUpper, Context, Handler, HttpMethod, XFrameOptions, ReferrerPolicy, ContentSecurityPolicyParams, StrictTransportSecurityParams, CrossOriginOpenerPolicy, CrossOriginEmbedderPolicy, CrossOriginResourcePolicy, ContentSecurityPolicyArrayParams, StrictTransportSecurity, ContentSecurityPolicySource, ContentSecurityPolicyFetchDirectiveType } from "./types.ts";
2
+ /**
3
+ * Force http into https
4
+ *
5
+ * @returns {Handler<ExtendContext>} Middleware function
6
+ *
7
+ */
8
+ export declare const forceHttps: <ExtendContext extends Record<string, unknown> = {}>(config?: {
9
+ toPort?: number;
10
+ }) => Handler<ExtendContext>;
11
+ /**
12
+ * Set security headers.
13
+ * - "X-Content-Type-Options": always "nosniff"
14
+ * - "X-Frame-Options": default "DENY"
15
+ * - "Referrer-Policy": from parameters
16
+ * - "Strict-Transport-Security": from parameters
17
+ * - "Content-Security-Policy": from parameters
18
+ *
19
+ * @returns {Handler<ExtendContext>} Middleware function
20
+ *
21
+ */
22
+ export declare const securityHeaders: <ExtendContext extends Record<string, unknown> = {}>(config?: {
23
+ referrerPolicy?: ReferrerPolicy | null;
24
+ xFrameOptions?: XFrameOptions | null;
25
+ strictTransportSecurity?: StrictTransportSecurity | StrictTransportSecurityParams | boolean | null;
26
+ /**
27
+ * @property [config.contentSecurityPolicy] When using the array version
28
+ * please take note of whitespace usage to differentiate between some values.
29
+ * NOTE: Custom values require a preceding space.
30
+ *
31
+ * @example
32
+ * contentSecurityPolicy: {
33
+ * "default-src": "'self'",
34
+ * "object-src": "'none'",
35
+ * "frame-ancestors": "'none'",
36
+ * "script-src style-src font-src": [
37
+ * "'self'",
38
+ * "https://unpkg.com",
39
+ * "'unsafe-inline'",
40
+ * ],
41
+ * "script-src": [
42
+ * "'self'",
43
+ * "'strict-dynamic'",
44
+ * `'nonce-${toBase64UUID(crypto.randomUUID())}'`,
45
+ * "'unsafe-inline'",
46
+ * ],
47
+ * "img-src": [ "'self'", "data:" ],
48
+ * "upgrade-insecure-requests": true,
49
+ * "trusted-types": " type-a type-b",
50
+ * // "trusted-types": "'none'",
51
+ * }
52
+ *
53
+ * @example
54
+ * contentSecurityPolicy: {
55
+ * [ "default-src", "'self'" ],
56
+ * [ "object-src", "'none'" ],
57
+ * [ "frame-ancestors", "'none'" ],
58
+ * [
59
+ * "script-src style-src font-src",
60
+ * "'self'",
61
+ * "https://unpkg.com",
62
+ * "'unsafe-inline'",
63
+ * ],
64
+ * [
65
+ * "script-src",
66
+ * "'self'",
67
+ * "'strict-dynamic'",
68
+ * `'nonce-${toBase64UUID(crypto.randomUUID())}'`,
69
+ * "'unsafe-inline'",
70
+ * ],
71
+ * [ "img-src", "'self'", "data:" ],
72
+ * [ "upgrade-insecure-requests" ],
73
+ * [ "trusted-types", " type-a type-b" ],
74
+ * // [ "trusted-types", "'none'" ],
75
+ * }
76
+ *
77
+ */
78
+ contentSecurityPolicy?: ContentSecurityPolicyArrayParams | ContentSecurityPolicyParams | (ContentSecurityPolicyParams & { [K in string as K extends keyof ContentSecurityPolicyFetchDirectiveType | "upgrade-insecure-requests" | "trusted-types" ? never : K]: ContentSecurityPolicySource | ContentSecurityPolicySource[]; }) | null;
79
+ crossOriginOpenerPolicy?: CrossOriginOpenerPolicy;
80
+ /**
81
+ * @property
82
+ */
83
+ crossOriginEmbedderPolicy?: CrossOriginEmbedderPolicy;
84
+ crossOriginResourcePolicy?: CrossOriginResourcePolicy;
85
+ /**
86
+ * @property [config.headers] Extra headers to set.
87
+ */
88
+ headers?: [string, string][] | Record<string, string>;
89
+ }) => Handler<ExtendContext>;
2
90
  /**
3
91
  * Creates a rate limiting middleware using token bucket algorithm.
4
92
  * Supports both fixed interval refill and continuous rate-based refill.
@@ -12,7 +100,8 @@ import { type Context, type Handler, type HttpMethod } from "./types.ts";
12
100
  * @param {number} [config.cleanUpInterval] - Interval in seconds for cleanup timer
13
101
  * @param {number} [config.cleanUpIdleDelay] - Time in seconds to delay cleanup of filled token buckets
14
102
  * @param {boolean} [config.setXRateLimitHeaders=false] - Whether to set X-RateLimit headers in response
15
- * @returns {Function} Middleware function that enforces rate limits
103
+ * @param {boolean} [config.breakPipeline=false] - If true, returns Break_Pipeline
104
+ * @returns {Handler<ExtendContext>} Middleware function that enforces rate limits
16
105
  *
17
106
  * @example
18
107
  * // Fixed interval rate limiting (10 requests per minute)
@@ -32,9 +121,9 @@ import { type Context, type Handler, type HttpMethod } from "./types.ts";
32
121
  * maxTokens: 100,
33
122
  * });
34
123
  *
35
- * @throws {RouterError} If neither refillInterval nor refillRate is provided
124
+ * @throws {Error} If neither refillInterval nor refillRate is provided
36
125
  */
37
- export declare const limitRate: <ExtendContext extends Record<string, unknown> = Record<string, never>>(config: {
126
+ export declare const limitRate: <ExtendContext extends Record<string, unknown> = {}>(config: {
38
127
  key: (ctx: Context<ExtendContext>) => string | Promise<string>;
39
128
  maxTokens: number;
40
129
  refillInterval?: number;
@@ -51,14 +140,16 @@ export declare const limitRate: <ExtendContext extends Record<string, unknown> =
51
140
  * @template {Record<string, unknown>} ExtendContext - Extend Router Context
52
141
  * @param {Object} [config] - CORS configuration
53
142
  * @param {string|string[]|"*"} [config.origins="*"] - Allowed origins (wildcard "*", single origin, or array)
54
- * @param {HttpMethod[]} [config.methods=["GET","HEAD","PUT","PATCH","POST","DELETE"]] - Allowed HTTP methods
143
+ * @param {(HttpMethod|HttpMethodUpper|HttpMethodLower)[]} [config.methods=["Get","Head","Put","Patch","Post","Delete"]] - Allowed HTTP methods
55
144
  * @param {string[]} [config.allowedHeaders=["Content-Type","Authorization"]] - Allowed request headers
56
145
  * @param {string[]} [config.exposedHeaders] - Headers exposed to the browser
57
146
  * @param {boolean} [config.credentials=false] - Allow credentials (cookies, authorization headers)
58
147
  * @param {number} [config.maxAge=86400] - Maximum age for preflight cache in seconds
59
- * @param {boolean} [config.varyOrigin=false] - Add Vary: Origin header for caching
60
- * @param {boolean} [options.breakPipeline=false] - If true, stops only pipe flow per handler type after success.
61
- * @returns {Function} Middleware function that handles CORS headers
148
+ * @param {boolean} [config.varyOrigin=true] - Add Vary: Origin header for caching
149
+ * @param {boolean} [config.breakPipeline=false] - If true, returns Break_Pipeline
150
+ * @returns {Handler<ExtendContext>} Middleware function that handles CORS headers
151
+ *
152
+ * @throws {HttpError} If credentials is enabled with wildcard origin ("*")
62
153
  *
63
154
  * @example
64
155
  * // Basic CORS with all defaults
@@ -69,15 +160,14 @@ export declare const limitRate: <ExtendContext extends Record<string, unknown> =
69
160
  * const corsMiddleware = cors({
70
161
  * origins: ["https://example.com", "https://api.example.com"],
71
162
  * credentials: true,
72
- * methods: ["GET", "POST", "PUT", "DELETE"],
163
+ * methods: ["Get", "Post", "Put", "Delete"],
73
164
  * allowedHeaders: ["Content-Type", "Authorization", "X-Custom-Header"]
74
165
  * });
75
166
  *
76
- * @throws {HttpError} If credentials is true with wildcard origin ("*")
77
167
  */
78
- export declare const cors: <ExtendContext extends Record<string, unknown> = Record<string, never>>(config?: {
168
+ export declare const cors: <ExtendContext extends Record<string, unknown> = {}>(config?: {
79
169
  origins: "*" | string | string[];
80
- methods?: HttpMethod[] | null;
170
+ methods?: (HttpMethod | HttpMethodUpper | HttpMethodLower)[] | null;
81
171
  allowedHeaders?: string[] | null;
82
172
  exposedHeaders?: string[] | null;
83
173
  credentials?: boolean | null;
@@ -1 +1 @@
1
- {"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,SAAS,GACpB,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrE,QAAQ;IACR,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,KAAG,OAAO,CAAC,aAAa,CA4HxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,IAAI,GACf,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrE,SAAS;IACT,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,KAAG,OAAO,CAAC,aAAa,CA+ExB,CAAC"}
1
+ {"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"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"}