@bomb.sh/router 0.7.0 → 0.8.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.
Files changed (45) hide show
  1. package/README.md +50 -24
  2. package/esm/lib/checkpoint.js +26 -1
  3. package/esm/lib/command.d.ts +3 -2
  4. package/esm/lib/command.js +2 -1
  5. package/esm/lib/dynamic.d.ts +3 -3
  6. package/esm/lib/dynamic.js +20 -3
  7. package/esm/lib/extend.d.ts +3 -2
  8. package/esm/lib/extend.js +3 -1
  9. package/esm/lib/parse.js +6 -5
  10. package/esm/lib/pipeline.d.ts +1 -1
  11. package/esm/lib/route.d.ts +16 -3
  12. package/esm/lib/route.js +5 -2
  13. package/esm/lib/types.d.ts +4 -4
  14. package/esm/mod.d.ts +2 -1
  15. package/esm/mod.js +2 -1
  16. package/package.json +1 -1
  17. package/src/_dnt.polyfills.ts +0 -27
  18. package/src/lib/argument.ts +0 -100
  19. package/src/lib/bind.ts +0 -421
  20. package/src/lib/checkpoint.ts +0 -10
  21. package/src/lib/command.ts +0 -36
  22. package/src/lib/dasherize.ts +0 -7
  23. package/src/lib/decode.ts +0 -55
  24. package/src/lib/definition.ts +0 -17
  25. package/src/lib/dynamic.ts +0 -39
  26. package/src/lib/env.ts +0 -142
  27. package/src/lib/extend.ts +0 -12
  28. package/src/lib/maybe.ts +0 -22
  29. package/src/lib/multiple.ts +0 -23
  30. package/src/lib/option.ts +0 -57
  31. package/src/lib/param.ts +0 -96
  32. package/src/lib/parse.ts +0 -478
  33. package/src/lib/pipeline.ts +0 -549
  34. package/src/lib/print.ts +0 -216
  35. package/src/lib/read.ts +0 -133
  36. package/src/lib/rest.ts +0 -10
  37. package/src/lib/result.ts +0 -10
  38. package/src/lib/route.ts +0 -77
  39. package/src/lib/toggle.ts +0 -132
  40. package/src/lib/tokenize.ts +0 -74
  41. package/src/lib/tokenizer.ts +0 -191
  42. package/src/lib/transform.ts +0 -49
  43. package/src/lib/types.ts +0 -460
  44. package/src/lib/values.ts +0 -131
  45. package/src/mod.ts +0 -74
@@ -1,549 +0,0 @@
1
- import type {
2
- AddRoutesToLast,
3
- AnyPhase,
4
- AnyPhases,
5
- AnyRoute,
6
- Done,
7
- Method,
8
- MethodsOf,
9
- Next,
10
- Phase,
11
- Route,
12
- } from "./types.js";
13
-
14
- export type Element<D extends Delta> = {
15
- readonly [operation]: D;
16
- };
17
-
18
- export type AnyElement = Element<Delta>;
19
-
20
- export type Unary = (value: never) => unknown;
21
-
22
- export type AnyPipelineElement = Unary;
23
-
24
- export interface Transform {
25
- readonly input: unknown;
26
- readonly output: unknown;
27
- }
28
-
29
- export type ApplyTransform<F extends Transform, S> = (
30
- F & { readonly input: S }
31
- )["output"];
32
-
33
- export interface ModelTransform extends Transform {
34
- readonly input: object;
35
- readonly output: object;
36
- }
37
-
38
- // We don’t need ModelPatch semantically. It is only a TypeScript
39
- // performance marker. Additive transforms expose their fields only so
40
- // static folds can batch them. ModelPatch exposes that additive field
41
- // set so the fold can combine twenty parameter operations into one
42
- // model update. Without it, every parameter must be applied as
43
- // another higher-kinded transform. Even with five-item
44
- // chunks and materializing after every step—and the 100-option tests
45
- // hit TS2589: type instantiation is excessively deep.
46
- export interface ModelPatch<Fields extends object> extends ModelTransform {
47
- readonly fields: Fields;
48
- readonly input: object;
49
- readonly output: ApplyModelPatch<this["input"], Fields>;
50
- }
51
-
52
- export type ApplyModelPatch<
53
- Model extends object,
54
- Fields extends object,
55
- > = SimplifyModel<Omit<Model, keyof Fields> & Fields>;
56
-
57
- export interface TransformElement<F extends Transform> {
58
- readonly [operation]: Custom<F>;
59
-
60
- <S extends F["input"]>(value: S): ApplyTransform<F, S>;
61
- }
62
-
63
- export interface ModelElement<F extends ModelTransform> {
64
- readonly [operation]: TransformModel<F>;
65
-
66
- <R extends AnyRoute>(route: R): Apply<R, TransformModel<F>>;
67
- }
68
-
69
- export interface IdentityElement<S> {
70
- readonly [operation]: Identity<S>;
71
-
72
- <T extends S>(value: T): T;
73
- }
74
-
75
- export interface MethodElement<Added extends Method> {
76
- readonly [operation]: AddMethod<Added>;
77
-
78
- <
79
- const N extends string,
80
- const M extends Method,
81
- const P extends AnyPhases,
82
- >(route: Route<N, M, P>): Route<N, M | Added, P>;
83
- }
84
-
85
- export interface RoutesElement<Added extends readonly AnyRoute[]> {
86
- readonly [operation]: AddRoutes<Added>;
87
-
88
- <
89
- const N extends string,
90
- const M extends Method,
91
- const P extends AnyPhases,
92
- >(route: Route<N, M, P>): Route<
93
- N,
94
- M,
95
- AddRoutesToLast<P, Added>
96
- >;
97
- }
98
-
99
- export type Extension<E extends readonly Unary[]> =
100
- & Element<Batch<E>>
101
- & (E extends readonly AnyElement[] ? GenericExtension<E>
102
- : ConcreteExtension<E>);
103
-
104
- interface GenericExtension<E extends readonly Unary[]> {
105
- readonly [operation]: Batch<E>;
106
-
107
- <S extends InputOfPipeline<E>>(value: S): Fold<S, E>;
108
- }
109
-
110
- interface ConcreteExtension<E extends readonly Unary[]> {
111
- (
112
- value: [Fold<InputOfPipeline<E>, E>] extends [never] ? never
113
- : InputOfPipeline<E>,
114
- ): Fold<InputOfPipeline<E>, E>;
115
- }
116
-
117
- export interface DynamicElement<Requirement, E extends AnyElement> {
118
- readonly [operation]: Dynamic<Requirement, E>;
119
-
120
- <R extends AnyRoute>(route: R): Apply<R, Dynamic<Requirement, E>>;
121
- }
122
-
123
- export type Seed<R extends AnyRoute> = Route<
124
- R["name"],
125
- MethodsOf<R>,
126
- readonly [Phase<{}, [], never>]
127
- >;
128
-
129
- export type ConjoinPhases<
130
- A extends AnyRoute,
131
- B extends AnyRoute,
132
- Requirement,
133
- > = ConcatPhases<
134
- ContinueLast<A["phases"], Requirement>,
135
- B["phases"]
136
- >;
137
-
138
- export type Fold<
139
- S,
140
- E extends readonly AnyPipelineElement[],
141
- > = number extends E["length"] ? Conservative<S>
142
- : E extends readonly [
143
- infer Head extends AnyPipelineElement,
144
- ...infer Tail extends readonly AnyPipelineElement[],
145
- ] ? true extends IsUnion<Head> ? Conservative<S>
146
- : Head extends AnyElement
147
- ? S extends AnyRoute
148
- ? DeltaOf<Head> extends StaticDelta ? TakeStatic<E> extends readonly [
149
- infer Fields extends object,
150
- infer Routes extends readonly AnyRoute[],
151
- infer Methods extends Method,
152
- infer Rest extends readonly AnyPipelineElement[],
153
- ] ? Fold<WithStatic<S, Fields, Routes, Methods>, Rest>
154
- : never
155
- : Fold<Apply<S, DeltaOf<Head>>, Tail>
156
- : Fold<Apply<S, DeltaOf<Head>>, Tail>
157
- : Head extends (value: S) => infer Output ? Fold<Output, Tail>
158
- : never
159
- : S;
160
-
161
- export type Materialize<S> = AnyRoute extends S ? S
162
- : S extends Route<
163
- infer N,
164
- infer M,
165
- infer Phases
166
- > ? WithExtras<
167
- Route<
168
- N,
169
- M,
170
- {
171
- [K in keyof Phases]: Phases[K] extends AnyPhase
172
- ? MaterializePhase<Phases[K]>
173
- : Phases[K];
174
- }
175
- >,
176
- S
177
- >
178
- : S;
179
-
180
- export type Check<
181
- S,
182
- E extends readonly AnyPipelineElement[],
183
- > = number extends E["length"] ? unknown
184
- : E extends readonly AnyElement[]
185
- ? [Fold<S, E>] extends [never] ? CheckMixed<S, E>
186
- : E
187
- : CheckMixed<S, E>;
188
-
189
- export function mark<F extends Transform>(
190
- element: (value: never) => unknown,
191
- ): TransformElement<F> {
192
- return element as TransformElement<F>;
193
- }
194
-
195
- export function brand<E extends AnyElement>(element: unknown): E {
196
- return element as E;
197
- }
198
-
199
- declare const operation: unique symbol;
200
-
201
- type Delta =
202
- | Identity<unknown>
203
- | AddMethod<Method>
204
- | TransformModel<ModelTransform>
205
- | AddRoutes<readonly AnyRoute[]>
206
- | Batch<readonly Unary[]>
207
- | Dynamic<unknown, AnyElement>
208
- | Custom<Transform>;
209
-
210
- type StaticDelta =
211
- | Identity<unknown>
212
- | AddMethod<Method>
213
- | TransformModel<ModelPatch<object>>
214
- | AddRoutes<readonly AnyRoute[]>;
215
-
216
- interface Identity<S> {
217
- readonly type: "identity";
218
- readonly input: S;
219
- }
220
-
221
- interface AddMethod<M extends Method> {
222
- readonly type: "method";
223
- readonly method: M;
224
- }
225
-
226
- interface TransformModel<F extends ModelTransform> {
227
- readonly type: "model";
228
- readonly transform: F;
229
- }
230
-
231
- interface AddRoutes<C extends readonly AnyRoute[]> {
232
- readonly type: "routes";
233
- readonly children: C;
234
- }
235
-
236
- interface Batch<E extends readonly Unary[]> {
237
- readonly type: "batch";
238
- readonly elements: E;
239
- }
240
-
241
- interface Dynamic<Requirement, E extends AnyElement> {
242
- readonly type: "dynamic";
243
- readonly requirement: Requirement;
244
- readonly element: E;
245
- }
246
-
247
- interface Custom<F extends Transform> {
248
- readonly type: "custom";
249
- readonly transform: F;
250
- }
251
-
252
- type Apply<S, D extends Delta> = Delta extends D ? Conservative<S>
253
- : D extends Identity<infer Input> ? S extends Input ? S : never
254
- : D extends AddMethod<infer M> ? S extends AnyRoute ? Route<
255
- S["name"],
256
- MethodsOf<S> | M,
257
- S["phases"]
258
- >
259
- : never
260
- : D extends TransformModel<infer F> ? S extends AnyRoute ? WithModel<S, F>
261
- : never
262
- : D extends AddRoutes<infer C> ? S extends AnyRoute ? Route<
263
- S["name"],
264
- MethodsOf<S>,
265
- AddRoutesToLast<S["phases"], C>
266
- >
267
- : never
268
- : D extends Batch<infer E> ? Fold<S, E>
269
- : D extends Dynamic<infer Requirement, infer E>
270
- ? S extends AnyRoute
271
- ? DynamicAfter<Seed<S>, E> extends infer After extends AnyRoute ? Route<
272
- After["name"],
273
- MethodsOf<After>,
274
- ConjoinPhases<S, After, Requirement>
275
- >
276
- : never
277
- : never
278
- : D extends Custom<infer F> ? S extends F["input"] ? ApplyTransform<F, S>
279
- : never
280
- : never;
281
-
282
- type DeltaOf<E extends AnyElement> = E[typeof operation];
283
-
284
- type DynamicAfter<
285
- S extends AnyRoute,
286
- E extends AnyElement,
287
- > = DeltaOf<E> extends Batch<infer Elements>
288
- ? number extends Elements["length"] ? S
289
- : Apply<S, DeltaOf<E>>
290
- : Apply<S, DeltaOf<E>>;
291
-
292
- type IsUnion<T, Whole = T> = T extends unknown ? [Whole] extends [T] ? false
293
- : true
294
- : never;
295
-
296
- type Conservative<S> = S extends AnyRoute ? AnyRoute : unknown;
297
-
298
- type CheckMixed<
299
- S,
300
- E extends readonly AnyPipelineElement[],
301
- > = E extends readonly [] ? E
302
- : E extends readonly [
303
- infer Head extends AnyPipelineElement,
304
- ...infer Tail extends readonly AnyPipelineElement[],
305
- ] ? [Fold<S, readonly [Head]>] extends [never] ? readonly [never, ...Tail]
306
- : readonly [Head, ...CheckTail<Fold<S, readonly [Head]>, Tail>]
307
- : never;
308
-
309
- type CheckTail<
310
- S,
311
- E extends readonly AnyPipelineElement[],
312
- > = number extends E["length"] ? E
313
- : E extends readonly AnyElement[] ? E
314
- : CheckMixed<S, E>;
315
-
316
- type InputOf<E extends AnyPipelineElement> = E extends AnyElement
317
- ? InputOfDelta<DeltaOf<E>>
318
- : E extends (value: infer Input) => unknown ? Input
319
- : never;
320
-
321
- type InputOfPipeline<E extends readonly AnyPipelineElement[]> = E extends
322
- readonly [
323
- infer Head extends AnyPipelineElement,
324
- ...readonly AnyPipelineElement[],
325
- ] ? InputOf<Head>
326
- : unknown;
327
-
328
- type InputOfDelta<D extends Delta> = D extends Identity<infer Input> ? Input
329
- : D extends
330
- | AddMethod<Method>
331
- | TransformModel<ModelTransform>
332
- | AddRoutes<
333
- readonly AnyRoute[]
334
- >
335
- | Dynamic<unknown, AnyElement> ? AnyRoute
336
- : D extends Batch<infer E> ? InputOfPipeline<E>
337
- : D extends Custom<infer F> ? F["input"]
338
- : never;
339
-
340
- // Bound each scan; Fold resumes with E, so this is not an element limit.
341
- type TakeStatic<
342
- E extends readonly AnyPipelineElement[],
343
- Fields extends readonly object[] = readonly [],
344
- Routes extends readonly AnyRoute[] = readonly [],
345
- Methods extends Method = never,
346
- Count extends readonly unknown[] = readonly [],
347
- > = Count["length"] extends 20
348
- ? readonly [MergeFields<Fields>, Routes, Methods, E]
349
- : E extends readonly [
350
- infer Head extends AnyElement,
351
- ...infer Tail extends readonly AnyPipelineElement[],
352
- ] ? DeltaOf<Head> extends Identity<unknown> ? TakeStatic<
353
- Tail,
354
- Fields,
355
- Routes,
356
- Methods,
357
- readonly [...Count, unknown]
358
- >
359
- : DeltaOf<Head> extends AddMethod<infer M> ? TakeStatic<
360
- Tail,
361
- Fields,
362
- Routes,
363
- Methods | M,
364
- readonly [...Count, unknown]
365
- >
366
- : DeltaOf<Head> extends TransformModel<ModelPatch<infer Added>>
367
- ? TakeStatic<
368
- Tail,
369
- readonly [...Fields, Added],
370
- Routes,
371
- Methods,
372
- readonly [...Count, unknown]
373
- >
374
- : DeltaOf<Head> extends AddRoutes<infer C> ? TakeStatic<
375
- Tail,
376
- Fields,
377
- readonly [...Routes, ...C],
378
- Methods,
379
- readonly [...Count, unknown]
380
- >
381
- : readonly [MergeFields<Fields>, Routes, Methods, E]
382
- : readonly [MergeFields<Fields>, Routes, Methods, E];
383
-
384
- type MergeFields<F extends readonly object[]> = {
385
- [K in FieldKeys<F>]: FieldValue<F, K>;
386
- };
387
-
388
- type FieldKeys<F extends readonly object[]> = F extends readonly [
389
- infer Head extends object,
390
- ...infer Tail extends readonly object[],
391
- ] ? keyof Head | FieldKeys<Tail>
392
- : never;
393
-
394
- type FieldValue<
395
- F extends readonly object[],
396
- K extends PropertyKey,
397
- > = F extends readonly [
398
- ...infer Rest extends readonly object[],
399
- infer Last extends object,
400
- ] ? K extends keyof Last ? Last[K] : FieldValue<Rest, K>
401
- : never;
402
-
403
- type WithModel<
404
- R extends AnyRoute,
405
- F extends ModelTransform,
406
- > = ApplyModel<PhaseModel<Last<R["phases"]>>, F> extends infer Model
407
- ? [Model] extends [never] ? never
408
- : Model extends object ? Route<
409
- R["name"],
410
- MethodsOf<R>,
411
- ReplaceLastModel<R["phases"], MaterializeModel<Model>>
412
- >
413
- : never
414
- : never;
415
-
416
- type WithStatic<
417
- R extends AnyRoute,
418
- Fields extends object,
419
- Routes extends readonly AnyRoute[],
420
- Methods extends Method,
421
- > = Route<
422
- R["name"],
423
- MethodsOf<R> | Methods,
424
- AddStaticToLast<R["phases"], Fields, Routes>
425
- >;
426
-
427
- type AddStaticToLast<
428
- P extends AnyPhases,
429
- Fields extends object,
430
- Routes extends readonly AnyRoute[],
431
- > = keyof Fields extends never ? Routes extends readonly [] ? P
432
- : AddRoutesToLast<P, Routes>
433
- : Routes extends readonly [] ? AddFieldsToLast<P, Fields>
434
- : AddRoutesToLast<AddFieldsToLast<P, Fields>, Routes>;
435
-
436
- type AddFieldsToLast<
437
- P extends AnyPhases,
438
- Fields extends object,
439
- > = ReplaceLastModel<P, AddFields<PhaseModel<Last<P>>, Fields>>;
440
-
441
- type AddFields<Model extends object, Fields extends object> = ApplyModelPatch<
442
- Model,
443
- Fields
444
- >;
445
-
446
- type ReplaceLastModel<
447
- P extends AnyPhases,
448
- Model extends object,
449
- > = P extends readonly [infer Only extends AnyPhase]
450
- ? readonly [WithPhaseModel<Only, Model>]
451
- : P extends readonly [
452
- infer First extends AnyPhase,
453
- ...infer Middle extends AnyPhase[],
454
- AnyPhase,
455
- ] ? readonly [First, ...Middle, WithPhaseModel<Last<P>, Model>]
456
- : never;
457
-
458
- type WithPhaseModel<P extends AnyPhase, Model extends object> = P extends Next<
459
- infer _Current,
460
- infer Routes,
461
- infer Requirement
462
- > ? Next<Model, Routes, Requirement>
463
- : P extends Done<infer _Current, infer Routes> ? Done<Model, Routes>
464
- : never;
465
-
466
- type PhaseModel<P extends AnyPhase> = P extends Next<
467
- infer Model,
468
- readonly AnyRoute[],
469
- infer _Requirement
470
- > ? Model
471
- : P extends Done<infer Model, readonly AnyRoute[]> ? Model
472
- : never;
473
-
474
- type ApplyModel<
475
- Model extends object,
476
- F extends ModelTransform,
477
- > = Model extends F["input"] ? ApplyTransform<F, Model>
478
- : never;
479
-
480
- type MaterializeModel<Model extends object> = SimplifyModel<Model>;
481
-
482
- type SimplifyModel<Model> = { [K in keyof Model]: Model[K] };
483
-
484
- type Last<P extends AnyPhases> = P extends readonly [
485
- ...AnyPhase[],
486
- infer Tail extends AnyPhase,
487
- ] ? Tail
488
- : never;
489
-
490
- type ContinueLast<
491
- P extends AnyPhases,
492
- Requirement,
493
- > = P extends readonly [infer Only extends AnyPhase]
494
- ? readonly [WithRequirement<Only, Requirement>]
495
- : P extends readonly [
496
- infer Head extends AnyPhase,
497
- ...infer Middle extends readonly AnyPhase[],
498
- infer Tail extends AnyPhase,
499
- ] ? readonly [
500
- Head,
501
- ...Middle,
502
- WithRequirement<Tail, Requirement>,
503
- ]
504
- : never;
505
-
506
- type ConcatPhases<
507
- A extends AnyPhases,
508
- B extends AnyPhases,
509
- > = A extends readonly [
510
- infer AHead extends AnyPhase,
511
- ...infer ATail extends AnyPhase[],
512
- ] ? B extends readonly [
513
- infer BHead extends AnyPhase,
514
- ...infer BTail extends AnyPhase[],
515
- ] ? readonly [AHead, ...ATail, BHead, ...BTail]
516
- : never
517
- : never;
518
-
519
- type WithRequirement<
520
- P extends AnyPhase,
521
- Requirement,
522
- > = P extends Phase<infer Model, infer Children, never>
523
- ? Phase<Model, Children, Requirement>
524
- : never;
525
-
526
- type MaterializePhase<P extends AnyPhase> = P extends Next<
527
- infer Model,
528
- infer Routes,
529
- infer Requirement
530
- > ? Next<
531
- { [K in keyof Model]: Model[K] },
532
- Routes,
533
- Requirement
534
- >
535
- : P extends Done<infer Model, infer Routes> ? Done<
536
- { [K in keyof Model]: Model[K] },
537
- Routes
538
- >
539
- : never;
540
-
541
- type RouteKeys = keyof Route<
542
- string,
543
- Method,
544
- AnyPhases
545
- >;
546
-
547
- type WithExtras<R extends AnyRoute, S> = keyof Omit<S, RouteKeys> extends never
548
- ? R
549
- : R & Omit<S, RouteKeys>;