k99 0.8.0 → 0.9.0

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/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * k99 v0.8.0
2
+ * k99 v0.9.0
3
3
  * (c) 2019-2026 猛火Fierflame
4
4
  * @license MIT
5
5
  */
6
- type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS';
6
+ type Method = string | 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS';
7
7
  interface CookieOption {
8
8
  domain?: string;
9
9
  path?: string;
@@ -119,151 +119,170 @@ interface FindHandler {
119
119
  (ctx: Context, setParams: (v: Params) => void): PromiseLike<Handler | Handler[] | null> | Handler | Handler[] | null;
120
120
  }
121
121
 
122
+ type FindItem<T extends Function> = [T | T[] | Router<T>, Record<string | symbol, any>, string[]];
123
+ type Finder<T extends Function> = (this: Router<T>, method: Method, path: string[]) => AsyncIterable<FindItem<T>> | Iterable<FindItem<T>>;
124
+ /** @import { Method, Params } from './main/types' */
122
125
  /**
123
- *
124
- * @param {...(Onionskin | Onionskin[])} handlers
125
- * @returns {Handler}
126
+ * @template {Function} T
127
+ * @typedef {[T | T[] | Router<T>, Record<string | symbol, any>, string[]]} FindItem
128
+ */
129
+ /**
130
+ * @template {Function} T
131
+ * @callback Finder
132
+ * @this {Router<T>}
133
+ * @param {Method} method
134
+ * @param {string[]} path
135
+ * @returns {AsyncIterable<FindItem<T>> | Iterable<FindItem<T>>}
126
136
  */
127
- declare function onionskin(...handlers: (Onionskin | Onionskin[])[]): Handler;
128
- type Onionskin = (ctx: Context, next: () => Promise<HandlerResult>) => PromiseLike<HandlerResult> | HandlerResult;
129
-
130
- type Guard = (ctx: Context) => PromiseLike<boolean | Handler | void> | boolean | Handler | void;
131
- type FindItem = [Handler | Handler[] | Router, Record<string | symbol, any>, string[]];
132
- type Finder = (this: Router, method: Method, path: string[], ctx: Context) => AsyncIterable<FindItem> | Iterable<FindItem>;
133
137
  /**
134
138
  * @abstract
139
+ * @template {Function} T
135
140
  */
136
- declare class Router {
141
+ declare class Router<T extends Function> {
137
142
  /**
138
143
  *
139
- * @param {Router | Handler[] | Handler} route
144
+ * @template {Function} T
145
+ * @param {Router<T> | T[] | T} route
146
+ * @param {Method} method
140
147
  * @param {string[]} path
141
- * @param {Context} ctx
142
- * @param {(v: Params) => void} setParams
143
148
  * @param {Params} params
144
- * @returns {Promise<Handler[] | null>}
149
+ * @param {AbortSignal?} [signal]
150
+ * @param {((v: Params) => void)?} [setParams]
151
+ * @returns {Promise<T[] | null>}
145
152
  */
146
- static "__#2@#find"(route: Router | Handler[] | Handler, path: string[], ctx: Context, setParams: (v: Params) => void, params: Params): Promise<Handler[] | null>;
153
+ static "__#2@#find"<T_1 extends Function>(route: Router<T_1> | T_1[] | T_1, method: Method, path: string[], params: Params, signal?: AbortSignal | null, setParams?: ((v: Params) => void) | null): Promise<T_1[] | null>;
147
154
  /**
148
155
  *
149
- * @param {Router[]} routers
150
- * @returns {FindHandler}
156
+ * @template {Function} T
157
+ * @param {Router<T>[]} routers
158
+ * @param {Method} method
159
+ * @param {string[]} path
160
+ * @param {AbortSignal?} [signal]
161
+ * @param {((v: Params) => void)?} [setParams]
162
+ * @returns {Promise<T[] | null>}
151
163
  */
152
- static make(routers: Router[]): FindHandler;
164
+ static find<T_1 extends Function>(routers: Router<T_1>[], method: Method, path: string[], signal?: AbortSignal | null, setParams?: ((v: Params) => void) | null): Promise<T_1[] | null>;
153
165
  /**
154
166
  *
155
- * @param {Finder} find
156
- * @returns {Router}
167
+ * @template {Function} T
168
+ * @param {Finder<T>} find
169
+ * @returns {Router<T>}
157
170
  */
158
- static create(find: Finder): Router;
171
+ static create<T_1 extends Function>(find: Finder<T_1>): Router<T_1>;
159
172
  disabled: boolean;
160
173
  /**
161
174
  * @abstract
162
175
  * @param {Method} method
163
176
  * @param {string[]} path
164
- * @param {Context} ctx
165
- * @returns {AsyncIterable<FindItem> | Iterable<FindItem>}
177
+ * @returns {AsyncIterable<FindItem<T>> | Iterable<FindItem<T>>}
166
178
  */
167
- find(method: Method, path: string[], ctx: Context): AsyncIterable<FindItem> | Iterable<FindItem>;
179
+ find(method: Method, path: string[]): AsyncIterable<FindItem<T>> | Iterable<FindItem<T>>;
168
180
  /**
169
181
  *
170
- * @param {...Handler | Handler[]} guards
182
+ * @param {...T | T[]} guards
171
183
  */
172
- guard(...guards: (Handler | Handler[])[]): void;
173
- /** @param {Onionskin} os */
174
- onionskin(os: Onionskin): void;
184
+ guard(...guards: (T | T[])[]): void;
175
185
  #private;
176
186
  }
177
187
 
178
- declare class ApiRouter extends Router {
188
+ /**
189
+ *
190
+ * @template {Function} T
191
+ * @extends {Router<T>}
192
+ */
193
+ declare class MapRouter<T extends Function> extends Router<T> {
179
194
  /**
180
195
  * 添加子路由
181
- * @template {Router | Finder} [T=ApiRouter]
196
+ * @template {Router<T> | Finder<T>} [P=MapRouter<T>]
182
197
  * @overload
183
- * @param {T} [router] 要注册的子路由或子路由的 Finder
184
- * @returns {T extends Finder ? Router : T}
198
+ * @param {P} [router] 要注册的子路由或子路由的 Finder<T>
199
+ * @returns {P extends Finder<T> ? Router<T> : P}
185
200
  */
186
- route<T extends Router | Finder = ApiRouter>(router?: T | undefined): T extends Finder ? Router : T;
201
+ route<P extends Router<T> | Finder<T> = MapRouter<T>>(router?: P | undefined): P extends Finder<T> ? Router<T> : P;
187
202
  /**
188
203
  * 添加子路由
189
- * @template {Router | Finder} [T=ApiRouter]
204
+ * @template {Router<T> | Finder<T>} [P=MapRouter<T>]
190
205
  * @overload
191
206
  * @param {string} path 要注册的路径
192
- * @param {T} [router] 要注册的子路由或子路由的 Finder
193
- * @returns {T extends Finder ? Router : T}
207
+ * @param {P} [router] 要注册的子路由或子路由的 Finder<T>
208
+ * @returns {P extends Finder<T> ? Router<T> : P}
194
209
  */
195
- route<T extends Router | Finder = ApiRouter>(path: string, router?: T | undefined): T extends Finder ? Router : T;
210
+ route<P extends Router<T> | Finder<T> = MapRouter<T>>(path: string, router?: P | undefined): P extends Finder<T> ? Router<T> : P;
196
211
  /**
197
212
  * 添加子路由
198
213
  * @overload
199
214
  * @param {TemplateStringsArray} template 要注册的路径模板
200
215
  * @param {...any} substitutions 要注册的路径模板代替内容
201
- * @returns {RouteBinder}
216
+ * @returns {RouteBinder<T>}
202
217
  */
203
- route(template: TemplateStringsArray, ...substitutions: any[]): RouteBinder;
218
+ route(template: TemplateStringsArray, ...substitutions: any[]): RouteBinder<T>;
204
219
  /**
205
220
  *
206
221
  * @param {Method} method
207
222
  * @param {string[]} path
208
- * @param {Context} ctx
209
- * @returns {Iterable<FindItem>}
223
+ * @returns {Iterable<FindItem<T>>}
210
224
  */
211
- find(method: Method, path: string[], ctx: Context): Iterable<FindItem>;
225
+ find(method: Method, path: string[]): Iterable<FindItem<T>>;
212
226
  /**
213
227
  * 注册处理函数
214
228
  * @overload
215
229
  * @param {Method | Iterable<Method> | ArrayLike<Method>} method 要注册的方法
216
- * @param {Handler} handler 要注册的处理函数
230
+ * @param {T} handler 要注册的处理函数
217
231
  * @returns {() => void}
218
232
  */
219
- verb(method: Method | Iterable<Method> | ArrayLike<Method>, handler: Handler): () => void;
233
+ verb(method: Method | Iterable<Method> | ArrayLike<Method>, handler: T): () => void;
220
234
  /**
221
235
  * 注册处理函数
222
236
  * @overload
223
237
  * @param {Method | Iterable<Method> | ArrayLike<Method>} method 要注册的方法
224
238
  * @param {string} path 要注册的路径
225
- * @param {Handler} handler 要注册的处理函数
239
+ * @param {T} handler 要注册的处理函数
226
240
  * @returns {() => void}
227
241
  */
228
- verb(method: Method | Iterable<Method> | ArrayLike<Method>, path: string, handler: Handler): () => void;
242
+ verb(method: Method | Iterable<Method> | ArrayLike<Method>, path: string, handler: T): () => void;
229
243
  /**
230
244
  * 注册处理函数
231
245
  * @overload
232
246
  * @param {Method | Iterable<Method> | ArrayLike<Method>} method 要注册的方法
233
247
  * @param {string} path 要注册的路径
234
- * @returns {Binder}
248
+ * @returns {Binder<T>}
249
+ */
250
+ verb(method: Method | Iterable<Method> | ArrayLike<Method>, path: string): Binder<T>;
251
+ /**
252
+ * @param {Method | Iterable<Method> | ArrayLike<Method>} method 要注册的方法
253
+ * @returns {Verb<T>}
235
254
  */
236
- verb(method: Method | Iterable<Method> | ArrayLike<Method>, path: string): Binder;
255
+ method(method: Method | Iterable<Method> | ArrayLike<Method>): Verb<T>;
237
256
  /**
238
257
  * 注册 HTTP GET/POST/PUT/DELETE 处理函数
239
258
  * @overload
240
- * @param {...Handler} handlers 要注册的处理函数
259
+ * @param {...T} handlers 要注册的处理函数
241
260
  * @returns {() => void}
242
261
  */
243
- match(...handlers: Handler[]): () => void;
262
+ match(...handlers: T[]): () => void;
244
263
  /**
245
264
  * 注册处理函数
246
265
  * @overload
247
266
  * @param {string} path 要注册的路径
248
- * @param {...Handler} handlers 要注册的处理函数
267
+ * @param {...T} handlers 要注册的处理函数
249
268
  * @returns {() => void}
250
269
  */
251
- match(path: string, ...handlers: Handler[]): () => void;
270
+ match(path: string, ...handlers: T[]): () => void;
252
271
  /**
253
272
  * 注册 HTTP GET/POST/PUT/DELETE 处理函数
254
273
  * @overload
255
274
  * @param {string} path 要注册的路径
256
- * @returns {Binder}
275
+ * @returns {Binder<T>}
257
276
  */
258
- match(path: string): Binder;
277
+ match(path: string): Binder<T>;
259
278
  /**
260
279
  * 注册 HTTP GET/POST/PUT/DELETE 处理函数
261
280
  * @overload
262
281
  * @param {TemplateStringsArray} template 要注册的路径模板
263
282
  * @param {...any} substitutions 要注册的路径模板代替内容
264
- * @returns {Binder}
283
+ * @returns {Binder<T>}
265
284
  */
266
- match(template: TemplateStringsArray, ...substitutions: any[]): Binder;
285
+ match(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
267
286
  /**
268
287
  * 注册 HTTP GET 处理函数
269
288
  * @overload
@@ -283,17 +302,17 @@ declare class ApiRouter extends Router {
283
302
  * 注册 HTTP GET 处理函数
284
303
  * @overload
285
304
  * @param {string} path 要注册的路径
286
- * @returns {Binder}
305
+ * @returns {Binder<T>}
287
306
  */
288
- get(path: string): Binder;
307
+ get(path: string): Binder<T>;
289
308
  /**
290
309
  * 注册 HTTP GET 处理函数
291
310
  * @overload
292
311
  * @param {TemplateStringsArray} template 要注册的路径模板
293
312
  * @param {...any} substitutions 要注册的路径模板代替内容
294
- * @returns {Binder}
313
+ * @returns {Binder<T>}
295
314
  */
296
- get(template: TemplateStringsArray, ...substitutions: any[]): Binder;
315
+ get(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
297
316
  /**
298
317
  * 注册 HTTP POST 处理函数
299
318
  * @overload
@@ -313,17 +332,17 @@ declare class ApiRouter extends Router {
313
332
  * 注册 HTTP POST 处理函数
314
333
  * @overload
315
334
  * @param {string} path 要注册的路径
316
- * @returns {Binder}
335
+ * @returns {Binder<T>}
317
336
  */
318
- post(path: string): Binder;
337
+ post(path: string): Binder<T>;
319
338
  /**
320
339
  * 注册 HTTP POST 处理函数
321
340
  * @overload
322
341
  * @param {TemplateStringsArray} template 要注册的路径模板
323
342
  * @param {...any} substitutions 要注册的路径模板代替内容
324
- * @returns {Binder}
343
+ * @returns {Binder<T>}
325
344
  */
326
- post(template: TemplateStringsArray, ...substitutions: any[]): Binder;
345
+ post(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
327
346
  /**
328
347
  * 注册 HTTP PUT 处理函数
329
348
  * @overload
@@ -343,17 +362,17 @@ declare class ApiRouter extends Router {
343
362
  * 注册 HTTP PUT 处理函数
344
363
  * @overload
345
364
  * @param {string} path 要注册的路径
346
- * @returns {Binder}
365
+ * @returns {Binder<T>}
347
366
  */
348
- put(path: string): Binder;
367
+ put(path: string): Binder<T>;
349
368
  /**
350
369
  * 注册 HTTP PUT 处理函数
351
370
  * @overload
352
371
  * @param {TemplateStringsArray} template 要注册的路径模板
353
372
  * @param {...any} substitutions 要注册的路径模板代替内容
354
- * @returns {Binder}
373
+ * @returns {Binder<T>}
355
374
  */
356
- put(template: TemplateStringsArray, ...substitutions: any[]): Binder;
375
+ put(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
357
376
  /**
358
377
  * 注册 HTTP DELETE 处理函数
359
378
  * @overload
@@ -373,17 +392,17 @@ declare class ApiRouter extends Router {
373
392
  * 注册 HTTP DELETE 处理函数
374
393
  * @overload
375
394
  * @param {string} path 要注册的路径
376
- * @returns {Binder}
395
+ * @returns {Binder<T>}
377
396
  */
378
- delete(path: string): Binder;
397
+ delete(path: string): Binder<T>;
379
398
  /**
380
399
  * 注册 HTTP DELETE 处理函数
381
400
  * @overload
382
401
  * @param {TemplateStringsArray} template 要注册的路径模板
383
402
  * @param {...any} substitutions 要注册的路径模板代替内容
384
- * @returns {Binder}
403
+ * @returns {Binder<T>}
385
404
  */
386
- delete(template: TemplateStringsArray, ...substitutions: any[]): Binder;
405
+ delete(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
387
406
  /**
388
407
  * 注册 HTTP HEAD 处理函数
389
408
  * @overload
@@ -403,17 +422,17 @@ declare class ApiRouter extends Router {
403
422
  * 注册 HTTP HEAD 处理函数
404
423
  * @overload
405
424
  * @param {string} path 要注册的路径
406
- * @returns {Binder}
425
+ * @returns {Binder<T>}
407
426
  */
408
- head(path: string): Binder;
427
+ head(path: string): Binder<T>;
409
428
  /**
410
429
  * 注册 HTTP HEAD 处理函数
411
430
  * @overload
412
431
  * @param {TemplateStringsArray} template 要注册的路径模板
413
432
  * @param {...any} substitutions 要注册的路径模板代替内容
414
- * @returns {Binder}
433
+ * @returns {Binder<T>}
415
434
  */
416
- head(template: TemplateStringsArray, ...substitutions: any[]): Binder;
435
+ head(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
417
436
  /**
418
437
  * 注册 HTTP OPTIONS 处理函数
419
438
  * @overload
@@ -433,22 +452,27 @@ declare class ApiRouter extends Router {
433
452
  * 注册 HTTP OPTIONS 处理函数
434
453
  * @overload
435
454
  * @param {string} path 要注册的路径
436
- * @returns {Binder}
455
+ * @returns {Binder<T>}
437
456
  */
438
- options(path: string): Binder;
457
+ options(path: string): Binder<T>;
439
458
  /**
440
459
  * 注册 HTTP OPTIONS 处理函数
441
460
  * @overload
442
461
  * @param {TemplateStringsArray} template 要注册的路径模板
443
462
  * @param {...any} substitutions 要注册的路径模板代替内容
444
- * @returns {Binder}
463
+ * @returns {Binder<T>}
445
464
  */
446
- options(template: TemplateStringsArray, ...substitutions: any[]): Binder;
465
+ options(template: TemplateStringsArray, ...substitutions: any[]): Binder<T>;
447
466
  #private;
448
467
  }
449
468
  type Match = (paths: string[]) => [Params, string[]] | undefined;
450
- type Binder = (handler: Handler, ...handlers: Handler[]) => () => void;
451
- type Route = {
469
+ type Binder<T extends Function> = (handler: T, ...handlers: T[]) => () => void;
470
+ type Verb1<T extends Function> = (handler: T, ...handlers: T[]) => () => void;
471
+ type Verb2<T extends Function> = (path: string, handler: T, ...handlers: T[]) => () => void;
472
+ type Verb3<T extends Function> = (path: string) => Binder<T>;
473
+ type Verb4<T extends Function> = (template: TemplateStringsArray, ...substitutions: any[]) => Binder<T>;
474
+ type Verb<T extends Function> = Verb1<T> & Verb2<T> & Verb3<T> & Verb4<T>;
475
+ type Route<T extends Function> = {
452
476
  /**
453
477
  * 路径匹配
454
478
  */
@@ -457,29 +481,20 @@ type Route = {
457
481
  /**
458
482
  * 处理函数
459
483
  */
460
- handlers: Handler[];
484
+ handlers: T[];
461
485
  /**
462
486
  * 方法列表
463
487
  */
464
488
  methods: Set<Method>;
465
489
  };
466
- type RouterRoute = {
490
+ type RouterRoute<T extends Function> = {
467
491
  /**
468
492
  * 路径匹配
469
493
  */
470
494
  match?: Match | undefined;
471
- router: Router;
495
+ router: Router<T>;
472
496
  };
473
- type RouteBinder<T extends Router | Finder = ApiRouter> = (router?: T | undefined) => T extends Finder ? Router : T;
474
-
475
- /**
476
- *
477
- * @param {Onionskin} onionskin
478
- * @param {Packer} [packer]
479
- * @returns {Packer}
480
- */
481
- declare function packer(onionskin: Onionskin, packer?: Packer): Packer;
482
- type Packer = (handler: Handler | Handler[]) => Handler | Handler[];
497
+ type RouteBinder<T extends Function, P extends Router<T> | Finder<T> = MapRouter<T>> = (router?: P | undefined) => P extends Finder<T> ? Router<T> : P;
483
498
 
484
499
  /**
485
500
  *
@@ -490,21 +505,22 @@ type Packer = (handler: Handler | Handler[]) => Handler | Handler[];
490
505
  */
491
506
  declare function main(request: Request, getHandler: FindHandler, { runner, error: echoError, catch: catchError, method: toMethod, environment, replacer: JSONReplacer, }?: Options): Promise<Response | null>;
492
507
 
493
- /** @import { FindHandler, Options } from './main/types' */
494
508
  /**
495
509
  *
496
- * @param {FindHandler} getHandler
510
+ * @param {Router<Handler> | Router<Handler>[] | FindHandler} routers
497
511
  * @param {Options} options
498
512
  * @returns {(request: Request) => Promise<Response | null>}
499
513
  */
500
- declare function make(getHandler: FindHandler, options: Options): (request: Request) => Promise<Response | null>;
514
+ declare function make(routers: Router<Handler> | Router<Handler>[] | FindHandler, options: Options): (request: Request) => Promise<Response | null>;
501
515
 
516
+ /** @import { FindHandler, Options } from './main/types' */
502
517
  /**
503
518
  *
504
- * @param {...(Handler | Handler[])} handlers
505
- * @returns {Handler}
519
+ * @param {FindHandler} getHandler
520
+ * @param {Options} options
521
+ * @returns {(request: Request) => Promise<Response | null>}
506
522
  */
507
- declare function merge(...handlers: (Handler | Handler[])[]): Handler;
523
+ declare function bind(getHandler: FindHandler, options: Options): (request: Request) => Promise<Response | null>;
508
524
 
509
525
  /**
510
526
  *
@@ -619,5 +635,5 @@ declare class Param {
619
635
  #private;
620
636
  }
621
637
 
622
- export { ApiRouter, Param, Router, Service, createFetch, main, make, merge, onionskin, packer, service, stateService, storeService };
623
- export type { Binder, Context, Cookie, CookieOption, FindHandler, FindItem, Finder, Guard, Handler, HandlerResult, Match, Method, Onionskin, Options, Packer, Route, RouteBinder, RouterRoute, Runner, StateService, StoreService };
638
+ export { MapRouter, Param, Router, Service, bind, createFetch, main, make, service, stateService, storeService };
639
+ export type { Binder, Context, Cookie, CookieOption, FindHandler, FindItem, Finder, Handler, HandlerResult, Match, Method, Options, Route, RouteBinder, RouterRoute, Runner, StateService, StoreService, Verb, Verb1, Verb2, Verb3, Verb4 };