@satorijs/core
Advanced tools
Comparing version 4.3.0 to 4.3.1
@@ -170,17 +170,9 @@ import { Context, Service, z, Logger } from 'cordis'; | ||
type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; | ||
type Take<S extends string, D extends string, O extends string = ''> = S extends `${infer L extends D}${infer S}` ? Take<S, D, `${O}${L}`> : [O, S]; | ||
type TakeIdent<S extends string> = S extends `"${infer M}"${infer S}` ? [M, S] : Take<S, Upper | Lower | Digit | '_'>; | ||
type SkipRegExp<S extends string, A extends 0[] = [], B extends 0[] = []> = S extends `${infer M}${infer S}` ? M extends '\\' ? S extends `${string}${infer S}` ? SkipRegExp<S, A, B> : never : M extends '(' ? SkipRegExp<S, [0, ...A], B> : M extends ')' ? A['length'] extends B['length'] ? S : SkipRegExp<S, A, [0, ...B]> : SkipRegExp<S, A, B> : never; | ||
type TakeModifier<P extends string, S extends string> = S extends `?${infer S}` ? [{ | ||
type Take<S extends string, D extends string, O extends string = ''> = S extends `${infer C extends D}${infer S}` ? Take<S, D, `${O}${C}`> : [O, S]; | ||
type TakeIdent<S extends string> = S extends `"${infer P}"${infer S}` ? [P, S] : Take<S, Upper | Lower | Digit | '_'>; | ||
export type ExtractParams<S extends string, O extends {} = {}, A extends 0[] = []> = S extends `${infer C}${infer S}` ? C extends '\\' ? S extends `${string}${infer S}` ? ExtractParams<S, O, A> : O : C extends ':' | '*' ? TakeIdent<S> extends [infer P extends string, infer S extends string] ? ExtractParams<S, O & (A['length'] extends 0 ? { | ||
[K in P]: string; | ||
} : { | ||
[K in P]?: string; | ||
}, S] : S extends `+${infer S}` ? [{ | ||
[K in P]: string[]; | ||
}, S] : S extends `*${infer S}` ? [{ | ||
[K in P]?: string[]; | ||
}, S] : S extends `(${infer S}` ? [{ | ||
[K in P]: string; | ||
}, SkipRegExp<S>] : [{ | ||
[K in P]: string; | ||
}, S]; | ||
export type ExtractParams<S extends string, O extends {} = {}> = S extends `${string}:${infer S}` ? TakeIdent<S> extends [infer P extends string, infer S extends string] ? TakeModifier<P, S> extends [infer E, infer S extends string] ? ExtractParams<S, O & E> : never : never : O; | ||
}), A> : never : C extends '{' ? ExtractParams<S, O, [0, ...A]> : C extends '}' ? A extends [0, ...infer A extends 0[]] ? ExtractParams<S, O, A> : ExtractParams<S, O, A> : ExtractParams<S, O, A> : O; | ||
export class VirtualRouter { | ||
@@ -187,0 +179,0 @@ ctx: Context; |
{ | ||
"name": "@satorijs/core", | ||
"description": "Core components of Satorijs", | ||
"version": "4.3.0", | ||
"version": "4.3.1", | ||
"type": "module", | ||
@@ -6,0 +6,0 @@ "main": "lib/index.cjs", |
@@ -33,44 +33,33 @@ import { Service } from 'cordis' | ||
type Take<S extends string, D extends string, O extends string = ''> = | ||
| S extends `${infer L extends D}${infer S}` | ||
? Take<S, D, `${O}${L}`> | ||
| S extends `${infer C extends D}${infer S}` | ||
? Take<S, D, `${O}${C}`> | ||
: [O, S] | ||
type TakeIdent<S extends string> = | ||
| S extends `"${infer M}"${infer S}` | ||
? [M, S] | ||
| S extends `"${infer P}"${infer S}` | ||
? [P, S] | ||
: Take<S, Upper | Lower | Digit | '_'> | ||
type SkipRegExp<S extends string, A extends 0[] = [], B extends 0[] = []> = | ||
| S extends `${infer M}${infer S}` | ||
? M extends '\\' | ||
// path-to-regexp v8 syntax | ||
export type ExtractParams<S extends string, O extends {} = {}, A extends 0[] = []> = | ||
| S extends `${infer C}${infer S}` | ||
? C extends '\\' | ||
? S extends `${string}${infer S}` | ||
? SkipRegExp<S, A, B> | ||
: never | ||
: M extends '(' | ||
? SkipRegExp<S, [0, ...A], B> | ||
: M extends ')' | ||
? A['length'] extends B['length'] | ||
? S | ||
: SkipRegExp<S, A, [0, ...B]> | ||
: SkipRegExp<S, A, B> | ||
: never | ||
type TakeModifier<P extends string, S extends string> = | ||
| S extends `?${infer S}` | ||
? [{ [K in P]?: string }, S] | ||
: S extends `+${infer S}` | ||
? [{ [K in P]: string[] }, S] | ||
: S extends `*${infer S}` | ||
? [{ [K in P]?: string[] }, S] | ||
: S extends `(${infer S}` | ||
? [{ [K in P]: string }, SkipRegExp<S>] | ||
: [{ [K in P]: string }, S] | ||
export type ExtractParams<S extends string, O extends {} = {}> = | ||
| S extends `${string}:${infer S}` | ||
? TakeIdent<S> extends [infer P extends string, infer S extends string] | ||
? TakeModifier<P, S> extends [infer E, infer S extends string] | ||
? ExtractParams<S, O & E> | ||
: never | ||
: never | ||
? ExtractParams<S, O, A> | ||
: O | ||
: C extends ':' | '*' | ||
? TakeIdent<S> extends [infer P extends string, infer S extends string] | ||
? ExtractParams<S, O & ( | ||
| A['length'] extends 0 | ||
? { [K in P]: string } | ||
: { [K in P]?: string } | ||
), A> | ||
: never | ||
: C extends '{' | ||
? ExtractParams<S, O, [0, ...A]> | ||
: C extends '}' | ||
? A extends [0, ...infer A extends 0[]] | ||
? ExtractParams<S, O, A> | ||
: ExtractParams<S, O, A> | ||
: ExtractParams<S, O, A> | ||
: O | ||
@@ -89,6 +78,4 @@ | ||
return this.ctx.effect(() => { | ||
const keys: Key[] = [] | ||
const route: VirtualRoute = { | ||
regexp: pathToRegexp(path, keys), | ||
keys, | ||
...pathToRegexp(path), | ||
callback, | ||
@@ -95,0 +82,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
129456
2672