@typed/router 0.32.0 → 1.0.0-beta.1
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 +129 -2
- package/dist/AST.d.ts +96 -0
- package/dist/AST.d.ts.map +1 -0
- package/dist/AST.js +32 -0
- package/dist/CurrentRoute.d.ts +18 -0
- package/dist/CurrentRoute.d.ts.map +1 -0
- package/dist/CurrentRoute.js +18 -0
- package/dist/Matcher.d.ts +209 -0
- package/dist/Matcher.d.ts.map +1 -0
- package/dist/Matcher.js +633 -0
- package/dist/Parser.d.ts +92 -0
- package/dist/Parser.d.ts.map +1 -0
- package/dist/Parser.js +1 -0
- package/dist/Path.d.ts +216 -0
- package/dist/Path.d.ts.map +1 -0
- package/dist/Path.js +248 -0
- package/dist/Route.d.ts +57 -0
- package/dist/Route.d.ts.map +1 -0
- package/dist/Route.js +151 -0
- package/dist/Router.d.ts +9 -0
- package/dist/Router.d.ts.map +1 -0
- package/dist/Router.js +8 -0
- package/dist/Uri.d.ts +115 -0
- package/dist/Uri.d.ts.map +1 -0
- package/dist/Uri.js +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/package.json +32 -73
- package/src/AST.ts +166 -0
- package/src/CurrentRoute.ts +30 -331
- package/src/Matcher.test.ts +496 -0
- package/src/Matcher.ts +1375 -325
- package/src/Parser.ts +276 -0
- package/src/Path.test.ts +318 -0
- package/src/Path.ts +691 -0
- package/src/Route.test.ts +268 -0
- package/src/Route.ts +316 -0
- package/src/Router.ts +33 -0
- package/src/Uri.ts +214 -0
- package/src/index.ts +4 -28
- package/CurrentRoute/package.json +0 -6
- package/LICENSE +0 -21
- package/MatchInput/package.json +0 -6
- package/Matcher/package.json +0 -6
- package/RouteGuard/package.json +0 -6
- package/RouteMatch/package.json +0 -6
- package/dist/cjs/CurrentRoute.js +0 -170
- package/dist/cjs/CurrentRoute.js.map +0 -1
- package/dist/cjs/MatchInput.js +0 -96
- package/dist/cjs/MatchInput.js.map +0 -1
- package/dist/cjs/Matcher.js +0 -138
- package/dist/cjs/Matcher.js.map +0 -1
- package/dist/cjs/RouteGuard.js +0 -78
- package/dist/cjs/RouteGuard.js.map +0 -1
- package/dist/cjs/RouteMatch.js +0 -49
- package/dist/cjs/RouteMatch.js.map +0 -1
- package/dist/cjs/index.js +0 -53
- package/dist/cjs/index.js.map +0 -1
- package/dist/dts/CurrentRoute.d.ts +0 -94
- package/dist/dts/CurrentRoute.d.ts.map +0 -1
- package/dist/dts/MatchInput.d.ts +0 -143
- package/dist/dts/MatchInput.d.ts.map +0 -1
- package/dist/dts/Matcher.d.ts +0 -121
- package/dist/dts/Matcher.d.ts.map +0 -1
- package/dist/dts/RouteGuard.d.ts +0 -94
- package/dist/dts/RouteGuard.d.ts.map +0 -1
- package/dist/dts/RouteMatch.d.ts +0 -50
- package/dist/dts/RouteMatch.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -24
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/esm/CurrentRoute.js +0 -152
- package/dist/esm/CurrentRoute.js.map +0 -1
- package/dist/esm/MatchInput.js +0 -79
- package/dist/esm/MatchInput.js.map +0 -1
- package/dist/esm/Matcher.js +0 -130
- package/dist/esm/Matcher.js.map +0 -1
- package/dist/esm/RouteGuard.js +0 -57
- package/dist/esm/RouteGuard.js.map +0 -1
- package/dist/esm/RouteMatch.js +0 -29
- package/dist/esm/RouteMatch.js.map +0 -1
- package/dist/esm/index.js +0 -24
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/src/MatchInput.ts +0 -303
- package/src/RouteGuard.ts +0 -217
- package/src/RouteMatch.ts +0 -104
package/dist/Parser.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { Arg0, Pipe, TypeLambda, TypeLambda1 } from "hkt-core";
|
|
2
|
+
export type Result<Value, Rest extends string> = readonly [value: Value, rest: Rest];
|
|
3
|
+
export interface Parser<Output = unknown> extends TypeLambda<[
|
|
4
|
+
input: string
|
|
5
|
+
], Result<Output, string>> {
|
|
6
|
+
}
|
|
7
|
+
export type Parse<P extends Parser<unknown>, Input extends string> = Pipe<Input, P>;
|
|
8
|
+
type IsStringLiteral<T extends string> = string extends T ? false : true;
|
|
9
|
+
type StrictEquals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
|
|
10
|
+
type IsNoProgress<Input extends string, Rest extends string> = IsStringLiteral<Input> extends true ? StrictEquals<Input, Rest> : false;
|
|
11
|
+
export declare namespace Parser {
|
|
12
|
+
type Any = Parser<unknown>;
|
|
13
|
+
type Run<P extends Any, Input extends string> = Pipe<Input, P>;
|
|
14
|
+
interface Succeed<A> extends TypeLambda<[input: string], Result<A, string>> {
|
|
15
|
+
readonly return: Arg0<this> extends infer Input extends string ? readonly [A, Input] : never;
|
|
16
|
+
}
|
|
17
|
+
interface Fail extends TypeLambda<[input: string], never> {
|
|
18
|
+
readonly return: never;
|
|
19
|
+
}
|
|
20
|
+
interface Char<C extends string> extends TypeLambda<[input: string], Result<C, string>> {
|
|
21
|
+
readonly return: Arg0<this> extends `${C}${infer Rest}` ? readonly [C, Rest] : never;
|
|
22
|
+
}
|
|
23
|
+
interface String<S extends string> extends TypeLambda<[input: string], Result<S, string>> {
|
|
24
|
+
readonly return: Arg0<this> extends `${S}${infer Rest}` ? readonly [S, Rest] : never;
|
|
25
|
+
}
|
|
26
|
+
type LowercaseAlphabet = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
|
|
27
|
+
type UppercaseAlphabet = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z";
|
|
28
|
+
type Alphabet = LowercaseAlphabet | UppercaseAlphabet;
|
|
29
|
+
type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
|
|
30
|
+
type AlphaNumeric = Alphabet | Digit;
|
|
31
|
+
type TakeWhileInternal<Input extends string, Allowed extends string, Acc extends string = ""> = Input extends `${infer Head}${infer Tail}` ? Head extends Allowed ? TakeWhileInternal<Tail, Allowed, `${Acc}${Head}`> : readonly [Acc, Input] : readonly [Acc, Input];
|
|
32
|
+
type TakeWhile1Internal<Input extends string, Allowed extends string> = TakeWhileInternal<Input, Allowed> extends readonly [
|
|
33
|
+
infer Taken extends string,
|
|
34
|
+
infer Rest extends string
|
|
35
|
+
] ? Taken extends "" ? never : readonly [Taken, Rest] : never;
|
|
36
|
+
interface TakeWhile<Allowed extends string> extends TypeLambda<[
|
|
37
|
+
input: string
|
|
38
|
+
], Result<string, string>> {
|
|
39
|
+
readonly return: Arg0<this> extends infer Input extends string ? TakeWhileInternal<Input, Allowed> : never;
|
|
40
|
+
}
|
|
41
|
+
interface TakeWhile1<Allowed extends string> extends TypeLambda<[
|
|
42
|
+
input: string
|
|
43
|
+
], Result<string, string>> {
|
|
44
|
+
readonly return: Arg0<this> extends infer Input extends string ? TakeWhile1Internal<Input, Allowed> : never;
|
|
45
|
+
}
|
|
46
|
+
interface Map<P extends Any, F extends TypeLambda1> extends Parser<unknown> {
|
|
47
|
+
readonly return: Arg0<this> extends infer Input extends string ? Pipe<Input, P> extends infer R ? [R] extends [never] ? never : R extends readonly [infer Value, infer Rest extends string] ? readonly [Pipe<Value, F>, Rest] : never : never : never;
|
|
48
|
+
}
|
|
49
|
+
interface FlatMap<P extends Any, F extends TypeLambda1> extends Parser<unknown> {
|
|
50
|
+
readonly return: Arg0<this> extends infer Input extends string ? Pipe<Input, P> extends infer R ? [R] extends [never] ? never : R extends readonly [infer Value, infer Rest extends string] ? Pipe<Value, F> extends infer Next ? [Next] extends [never] ? never : Next extends Any ? Pipe<Rest, Next> : never : never : never : never : never;
|
|
51
|
+
}
|
|
52
|
+
interface Zip<P extends Any, Q extends Any> extends Parser<unknown> {
|
|
53
|
+
readonly return: Arg0<this> extends infer Input extends string ? Pipe<Input, P> extends infer R1 ? [R1] extends [never] ? never : R1 extends readonly [infer Value1, infer Rest1 extends string] ? Pipe<Rest1, Q> extends infer R2 ? [R2] extends [never] ? never : R2 extends readonly [infer Value2, infer Rest2 extends string] ? readonly [readonly [Value1, Value2], Rest2] : never : never : never : never : never;
|
|
54
|
+
}
|
|
55
|
+
interface OrElse<P extends Any, Q extends Any> extends Parser<unknown> {
|
|
56
|
+
readonly return: Arg0<this> extends infer Input extends string ? Pipe<Input, P> extends infer R ? [R] extends [never] ? Pipe<Input, Q> : R extends readonly [infer Value, infer Rest extends string] ? readonly [Value, Rest] : never : never : never;
|
|
57
|
+
}
|
|
58
|
+
interface Optional<P extends Any> extends Parser<unknown> {
|
|
59
|
+
readonly return: Arg0<this> extends infer Input extends string ? Pipe<Input, P> extends infer R ? [R] extends [never] ? readonly [undefined, Input] : R extends readonly [infer Value, infer Rest extends string] ? readonly [Value, Rest] : never : never : never;
|
|
60
|
+
}
|
|
61
|
+
type ManyInternal<P extends Any, Input extends string, Acc extends ReadonlyArray<unknown> = readonly []> = Pipe<Input, P> extends infer R ? [R] extends [never] ? readonly [Acc, Input] : R extends readonly [infer Value, infer Rest extends string] ? IsNoProgress<Input, Rest> extends true ? never : ManyInternal<P, Rest, readonly [...Acc, Value]> : never : never;
|
|
62
|
+
type Many1Internal<P extends Any, Input extends string> = Pipe<Input, P> extends infer R ? [R] extends [never] ? never : R extends readonly [infer Value, infer Rest extends string] ? IsNoProgress<Input, Rest> extends true ? never : ManyInternal<P, Rest, readonly [Value]> : never : never;
|
|
63
|
+
interface Many<P extends Any> extends Parser<unknown> {
|
|
64
|
+
readonly return: Arg0<this> extends infer Input extends string ? ManyInternal<P, Input> : never;
|
|
65
|
+
}
|
|
66
|
+
interface Many1<P extends Any> extends Parser<unknown> {
|
|
67
|
+
readonly return: Arg0<this> extends infer Input extends string ? Many1Internal<P, Input> : never;
|
|
68
|
+
}
|
|
69
|
+
interface MapTo<F extends TypeLambda1> extends TypeLambda1 {
|
|
70
|
+
readonly return: Arg0<this> extends infer P extends Any ? Map<P, F> : never;
|
|
71
|
+
}
|
|
72
|
+
interface FlatMapTo<F extends TypeLambda1> extends TypeLambda1 {
|
|
73
|
+
readonly return: Arg0<this> extends infer P extends Any ? FlatMap<P, F> : never;
|
|
74
|
+
}
|
|
75
|
+
interface ZipWith<Q extends Any> extends TypeLambda1 {
|
|
76
|
+
readonly return: Arg0<this> extends infer P extends Any ? Zip<P, Q> : never;
|
|
77
|
+
}
|
|
78
|
+
interface OrElseWith<Q extends Any> extends TypeLambda1 {
|
|
79
|
+
readonly return: Arg0<this> extends infer P extends Any ? OrElse<P, Q> : never;
|
|
80
|
+
}
|
|
81
|
+
interface OptionalOf extends TypeLambda1 {
|
|
82
|
+
readonly return: Arg0<this> extends infer P extends Any ? Optional<P> : never;
|
|
83
|
+
}
|
|
84
|
+
interface ManyOf extends TypeLambda1 {
|
|
85
|
+
readonly return: Arg0<this> extends infer P extends Any ? Many<P> : never;
|
|
86
|
+
}
|
|
87
|
+
interface Many1Of extends TypeLambda1 {
|
|
88
|
+
readonly return: Arg0<this> extends infer P extends Any ? Many1<P> : never;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export {};
|
|
92
|
+
//# sourceMappingURL=Parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../src/Parser.ts"],"names":[],"mappings":"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"}
|
package/dist/Parser.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/Path.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { Arg0, TypeLambda1 } from "hkt-core";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import type { PathAst } from "./AST.js";
|
|
4
|
+
import type { Parser } from "./Parser.js";
|
|
5
|
+
type PathStopChar = "/" | ":" | "*" | "?";
|
|
6
|
+
type QueryValueStopChar = "&";
|
|
7
|
+
type TakeWhileNotInternal<Input extends string, Stop extends string, Acc extends string = ""> = Input extends `${infer Head}${infer Tail}` ? Head extends Stop ? readonly [Acc, Input] : TakeWhileNotInternal<Tail, Stop, `${Acc}${Head}`> : readonly [Acc, Input];
|
|
8
|
+
type TakeWhileNot1Internal<Input extends string, Stop extends string> = TakeWhileNotInternal<Input, Stop> extends readonly [
|
|
9
|
+
infer Taken extends string,
|
|
10
|
+
infer Rest extends string
|
|
11
|
+
] ? Taken extends "" ? never : readonly [Taken, Rest] : never;
|
|
12
|
+
interface TakeWhileNot1<Stop extends string> extends Parser<string> {
|
|
13
|
+
readonly return: Arg0<this> extends infer Input extends string ? TakeWhileNot1Internal<Input, Stop> : never;
|
|
14
|
+
}
|
|
15
|
+
interface Second extends TypeLambda1 {
|
|
16
|
+
readonly return: Arg0<this> extends readonly [infer _A, infer B] ? B : never;
|
|
17
|
+
}
|
|
18
|
+
interface RegexBetweenParens extends TypeLambda1 {
|
|
19
|
+
readonly return: Arg0<this> extends readonly ["(", readonly [infer Regex extends string, ")"]] ? Regex : never;
|
|
20
|
+
}
|
|
21
|
+
type RegexParser = Parser.Map<Parser.Zip<Parser.Char<"(">, Parser.Zip<TakeWhileNot1<")">, Parser.Char<")">>>, RegexBetweenParens>;
|
|
22
|
+
type OptionalRegexParser = Parser.Optional<RegexParser>;
|
|
23
|
+
type OptionalQuestionMarkParser = Parser.Optional<Parser.Char<"?">>;
|
|
24
|
+
type ParameterNameParser = Parser.Zip<Parser.Char<":">, Parser.TakeWhile1<Parser.AlphaNumeric>>;
|
|
25
|
+
type ParameterPartsParser = Parser.Zip<ParameterNameParser, Parser.Zip<OptionalRegexParser, OptionalQuestionMarkParser>>;
|
|
26
|
+
type ParameterAst<Name extends string, Regex extends string | undefined, OptionalMark extends "?" | undefined> = [
|
|
27
|
+
{
|
|
28
|
+
readonly type: "parameter";
|
|
29
|
+
readonly name: Name;
|
|
30
|
+
} & ([Regex] extends [string] ? {
|
|
31
|
+
regex: Regex;
|
|
32
|
+
} : {}) & ([OptionalMark] extends ["?"] ? {
|
|
33
|
+
optional: true;
|
|
34
|
+
} : {})
|
|
35
|
+
] extends [infer Ast] ? ToReadonlyRecord<Ast> : never;
|
|
36
|
+
interface ToParameterAst extends TypeLambda1 {
|
|
37
|
+
readonly return: Arg0<this> extends readonly [
|
|
38
|
+
readonly [":", infer Name extends string],
|
|
39
|
+
readonly [infer Regex, infer OptionalMark]
|
|
40
|
+
] ? ParameterAst<Name, Regex extends string ? Regex : undefined, OptionalMark extends "?" ? OptionalMark : undefined> : never;
|
|
41
|
+
}
|
|
42
|
+
type ParameterParser = Parser.Map<ParameterPartsParser, ToParameterAst>;
|
|
43
|
+
interface ToWildcardAst extends TypeLambda1 {
|
|
44
|
+
readonly return: {
|
|
45
|
+
readonly type: "wildcard";
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
type WildcardParser = Parser.Map<Parser.Char<"*">, ToWildcardAst>;
|
|
49
|
+
interface ToLiteralAst extends TypeLambda1 {
|
|
50
|
+
readonly return: Arg0<this> extends infer Value extends string ? {
|
|
51
|
+
readonly type: "literal";
|
|
52
|
+
readonly value: Value;
|
|
53
|
+
} : never;
|
|
54
|
+
}
|
|
55
|
+
type PathLiteralParser = Parser.Map<TakeWhileNot1<PathStopChar>, ToLiteralAst>;
|
|
56
|
+
type QueryLiteralParser = Parser.Map<TakeWhileNot1<QueryValueStopChar>, ToLiteralAst>;
|
|
57
|
+
type QueryValueParser = Parser.OrElse<ParameterParser, Parser.OrElse<WildcardParser, QueryLiteralParser>>;
|
|
58
|
+
interface ToQueryParamAst extends TypeLambda1 {
|
|
59
|
+
readonly return: Arg0<this> extends readonly [
|
|
60
|
+
infer Name extends string,
|
|
61
|
+
readonly ["=", infer Value extends PathAst]
|
|
62
|
+
] ? {
|
|
63
|
+
readonly type: "query-param";
|
|
64
|
+
readonly name: Name;
|
|
65
|
+
readonly value: Value;
|
|
66
|
+
} : never;
|
|
67
|
+
}
|
|
68
|
+
type QueryParamParser = Parser.Map<Parser.Zip<Parser.TakeWhile1<Parser.AlphaNumeric>, Parser.Zip<Parser.Char<"=">, QueryValueParser>>, ToQueryParamAst>;
|
|
69
|
+
type QueryParamTailParser = Parser.Map<Parser.Zip<Parser.Char<"&">, QueryParamParser>, Second>;
|
|
70
|
+
interface PrependToTuple extends TypeLambda1 {
|
|
71
|
+
readonly return: Arg0<this> extends readonly [
|
|
72
|
+
infer Head,
|
|
73
|
+
infer Tail extends ReadonlyArray<unknown>
|
|
74
|
+
] ? readonly [Head, ...Tail] : never;
|
|
75
|
+
}
|
|
76
|
+
type QueryParamListParser = Parser.Map<Parser.Zip<QueryParamParser, Parser.Many<QueryParamTailParser>>, PrependToTuple>;
|
|
77
|
+
interface ToQueryParamsAst extends TypeLambda1 {
|
|
78
|
+
readonly return: Arg0<this> extends readonly [
|
|
79
|
+
"?",
|
|
80
|
+
infer Params extends ReadonlyArray<PathAst.QueryParam>
|
|
81
|
+
] ? {
|
|
82
|
+
readonly type: "query-params";
|
|
83
|
+
readonly value: Params;
|
|
84
|
+
} : never;
|
|
85
|
+
}
|
|
86
|
+
type QueryParamsParser = Parser.Map<Parser.Zip<Parser.Char<"?">, QueryParamListParser>, ToQueryParamsAst>;
|
|
87
|
+
type PathAtomParser = Parser.OrElse<QueryParamsParser, Parser.OrElse<ParameterParser, Parser.OrElse<WildcardParser, PathLiteralParser>>>;
|
|
88
|
+
type SkipSlashesParser = Parser.Optional<Parser.Many1<Parser.Char<"/">>>;
|
|
89
|
+
export type PathParser = Parser.Map<Parser.Zip<SkipSlashesParser, PathAtomParser>, Second>;
|
|
90
|
+
type SlashAst = {
|
|
91
|
+
readonly type: "slash";
|
|
92
|
+
};
|
|
93
|
+
type PathChunk = readonly [PathAst] | readonly [SlashAst, PathAst];
|
|
94
|
+
interface ToPathChunk extends TypeLambda1 {
|
|
95
|
+
readonly return: Arg0<this> extends readonly [infer Slashes, infer Ast extends PathAst] ? [Slashes] extends [undefined] ? readonly [Ast] : readonly [SlashAst, Ast] : never;
|
|
96
|
+
}
|
|
97
|
+
type PathChunkParser = Parser.Map<Parser.Zip<SkipSlashesParser, PathAtomParser>, ToPathChunk>;
|
|
98
|
+
type FlattenChunks<Chunks extends ReadonlyArray<PathChunk>, Acc extends ReadonlyArray<PathAst> = readonly []> = Chunks extends readonly [
|
|
99
|
+
infer Head extends PathChunk,
|
|
100
|
+
...infer Tail extends ReadonlyArray<PathChunk>
|
|
101
|
+
] ? FlattenChunks<Tail, readonly [...Acc, ...Head]> : Acc;
|
|
102
|
+
type CombineChunks<First, Chunks extends ReadonlyArray<PathChunk>> = [First] extends [PathAst] ? readonly [First, ...FlattenChunks<Chunks>] : FlattenChunks<Chunks>;
|
|
103
|
+
interface ToAsts extends TypeLambda1 {
|
|
104
|
+
readonly return: Arg0<this> extends readonly [
|
|
105
|
+
infer First,
|
|
106
|
+
infer Chunks extends ReadonlyArray<PathChunk>
|
|
107
|
+
] ? CombineChunks<First, Chunks> : never;
|
|
108
|
+
}
|
|
109
|
+
type ParseAstsResult<Input extends string> = Parser.Run<Parser.Map<Parser.Zip<Parser.Optional<PathParser>, Parser.Many<PathChunkParser>>, ToAsts>, Input>;
|
|
110
|
+
type GetAsts<R> = [R] extends [never] ? never : R extends readonly [infer Asts extends ReadonlyArray<PathAst>, infer _Rest extends string] ? Asts : never;
|
|
111
|
+
export type ParseAsts<Input extends string> = GetAsts<ParseAstsResult<Input>>;
|
|
112
|
+
type ParamsOfAst<T> = T extends {
|
|
113
|
+
type: "parameter";
|
|
114
|
+
name: infer Name extends string;
|
|
115
|
+
optional: true;
|
|
116
|
+
} ? {
|
|
117
|
+
[K in Name]?: string;
|
|
118
|
+
} : T extends {
|
|
119
|
+
readonly type: "parameter";
|
|
120
|
+
readonly name: infer Name extends string;
|
|
121
|
+
} ? {
|
|
122
|
+
[K in Name]: string;
|
|
123
|
+
} : T extends {
|
|
124
|
+
readonly type: "wildcard";
|
|
125
|
+
} ? {
|
|
126
|
+
"*": string;
|
|
127
|
+
} : T extends {
|
|
128
|
+
readonly type: "query-params";
|
|
129
|
+
readonly value: infer Values extends ReadonlyArray<PathAst.QueryParam>;
|
|
130
|
+
} ? ParamsOfQueryParams<Values> : {};
|
|
131
|
+
type ParamsOfQueryParams<T extends ReadonlyArray<PathAst.QueryParam>, Acc = {}> = T extends readonly [infer Head, ...infer Tail extends ReadonlyArray<PathAst.QueryParam>] ? ParamsOfQueryParams<Tail, Acc & ParamsOfQueryParam<Head>> : Acc;
|
|
132
|
+
type ParamsOfQueryParam<T> = T extends {
|
|
133
|
+
readonly type: "query-param";
|
|
134
|
+
readonly value: infer Value extends PathAst;
|
|
135
|
+
} ? ParamsOfAst<Value> : {};
|
|
136
|
+
type GetParams<T extends ReadonlyArray<PathAst>, Acc = {}> = T extends readonly [
|
|
137
|
+
infer Head,
|
|
138
|
+
...infer Tail extends ReadonlyArray<PathAst>
|
|
139
|
+
] ? GetParams<Tail, Acc & ParamsOfAst<Head>> : Acc;
|
|
140
|
+
type PathParamsOfAst<T> = T extends {
|
|
141
|
+
type: "parameter";
|
|
142
|
+
name: infer Name extends string;
|
|
143
|
+
optional: true;
|
|
144
|
+
} ? {
|
|
145
|
+
[K in Name]?: string;
|
|
146
|
+
} : T extends {
|
|
147
|
+
readonly type: "parameter";
|
|
148
|
+
readonly name: infer Name extends string;
|
|
149
|
+
} ? {
|
|
150
|
+
[K in Name]: string;
|
|
151
|
+
} : T extends {
|
|
152
|
+
readonly type: "wildcard";
|
|
153
|
+
} ? {
|
|
154
|
+
"*": string;
|
|
155
|
+
} : {};
|
|
156
|
+
type QueryParamsOfAst<T> = T extends {
|
|
157
|
+
readonly type: "query-params";
|
|
158
|
+
readonly value: infer Values extends ReadonlyArray<PathAst.QueryParam>;
|
|
159
|
+
} ? ParamsOfQueryParams<Values> : {};
|
|
160
|
+
type GetPathParams<T extends ReadonlyArray<PathAst>, Acc = {}> = T extends readonly [
|
|
161
|
+
infer Head,
|
|
162
|
+
...infer Tail extends ReadonlyArray<PathAst>
|
|
163
|
+
] ? GetPathParams<Tail, Acc & PathParamsOfAst<Head>> : Acc;
|
|
164
|
+
type GetQueryParams<T extends ReadonlyArray<PathAst>, Acc = {}> = T extends readonly [
|
|
165
|
+
infer Head,
|
|
166
|
+
...infer Tail extends ReadonlyArray<PathAst>
|
|
167
|
+
] ? GetQueryParams<Tail, Acc & QueryParamsOfAst<Head>> : Acc;
|
|
168
|
+
type ToReadonlyRecord<T> = [T] extends [infer T2] ? {
|
|
169
|
+
readonly [K in keyof T2]: T2[K];
|
|
170
|
+
} : never;
|
|
171
|
+
export type PathParams<P extends string> = ParseAsts<P> extends infer Asts ? [Asts] extends [never] ? never : Asts extends ReadonlyArray<PathAst> ? ToReadonlyRecord<GetPathParams<Asts>> : never : never;
|
|
172
|
+
export type QueryParams<P extends string> = ParseAsts<P> extends infer Asts ? [Asts] extends [never] ? never : Asts extends ReadonlyArray<PathAst> ? ToReadonlyRecord<GetQueryParams<Asts>> : never : never;
|
|
173
|
+
export type Params<P extends string> = ParseAsts<P> extends infer Asts ? [Asts] extends [never] ? never : Asts extends ReadonlyArray<PathAst> ? ToReadonlyRecord<GetParams<Asts>> : never : never;
|
|
174
|
+
export type RuntimeParseResult = readonly [asts: ReadonlyArray<PathAst>, rest: string];
|
|
175
|
+
export declare function parseWithRest(input: string): RuntimeParseResult;
|
|
176
|
+
export declare function parse<const P extends string>(input: P): ParseAsts<P>;
|
|
177
|
+
export type Join<Parts extends ReadonlyArray<PathAst>> = `/${StringJoin<{
|
|
178
|
+
[K in keyof Parts]: FormatAst<Parts[K]>;
|
|
179
|
+
}, "">}`;
|
|
180
|
+
type StringJoin<Input extends ReadonlyArray<string>, R extends string = ""> = Input extends readonly [infer A extends string, ...infer Rest extends ReadonlyArray<string>] ? StringJoin<Rest, `${R}${A}`> : R;
|
|
181
|
+
type FormatAst<T extends PathAst> = [T] extends [PathAst.Literal] ? T["value"] : [T] extends [PathAst.Parameter] ? FormatParameterAst<T> : [T] extends [PathAst.Wildcard] ? `*` : [T] extends [PathAst.Slash] ? `/` : [T] extends [PathAst.QueryParams] ? FormatQueryParamsAst<T["value"]> : never;
|
|
182
|
+
type FormatParameterAst<T extends PathAst.Parameter> = `:${T["name"]}${T["optional"] extends true ? "?" : ""}`;
|
|
183
|
+
type FormatQueryParamsAst<T extends ReadonlyArray<PathAst.QueryParam>, R extends string = "?"> = T extends readonly [
|
|
184
|
+
infer Head extends PathAst.QueryParam,
|
|
185
|
+
...infer Tail extends ReadonlyArray<PathAst.QueryParam>
|
|
186
|
+
] ? FormatQueryParamsAst<Tail, `${R}${R extends "?" ? "" : "&"}${FormatQueryParamAst<Head>}`> : R;
|
|
187
|
+
type FormatQueryParamAst<T extends PathAst.QueryParam> = `${T["name"]}=${FormatAst<T["value"]>}`;
|
|
188
|
+
export declare function join<const Parts extends ReadonlyArray<PathAst>>(asts: Parts): Join<Parts>;
|
|
189
|
+
/**
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
export declare function getSchemaFields<const Parts extends ReadonlyArray<PathAst>>(parts: Parts): {
|
|
193
|
+
requiredFields: [string, Schema.Top][];
|
|
194
|
+
optionalFields: [Schema.Record.Key, Schema.Top][];
|
|
195
|
+
queryParams: [string, {
|
|
196
|
+
readonly requiredFields: Array<[string, Schema.Top]>;
|
|
197
|
+
readonly optionalFields: Array<[Schema.Record.Key, Schema.Top]>;
|
|
198
|
+
}][];
|
|
199
|
+
};
|
|
200
|
+
export declare function getSchemas<const Parts extends ReadonlyArray<PathAst>>(parts: Parts): {
|
|
201
|
+
readonly pathSchema: Schema.StructWithRest<Schema.Struct<{
|
|
202
|
+
[k: string]: Schema.Top;
|
|
203
|
+
}>, Schema.$Record<Schema.Record.Key, Schema.Top>[]>;
|
|
204
|
+
readonly querySchema: Schema.Struct<{
|
|
205
|
+
[k: string]: Schema.StructWithRest<Schema.Struct<{
|
|
206
|
+
[k: string]: Schema.Top;
|
|
207
|
+
}>, Schema.$Record<Schema.Record.Key, Schema.Top>[]>;
|
|
208
|
+
}>;
|
|
209
|
+
readonly paramsSchema: Schema.StructWithRest<Schema.Struct<{
|
|
210
|
+
readonly [x: string]: Schema.Top | Schema.StructWithRest<Schema.Struct<{
|
|
211
|
+
[k: string]: Schema.Top;
|
|
212
|
+
}>, Schema.$Record<Schema.Record.Key, Schema.Top>[]>;
|
|
213
|
+
}>, Schema.$Record<Schema.Record.Key, Schema.Top>[]>;
|
|
214
|
+
};
|
|
215
|
+
export {};
|
|
216
|
+
//# sourceMappingURL=Path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../src/Path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1C,KAAK,kBAAkB,GAAG,GAAG,CAAC;AAE9B,KAAK,oBAAoB,CACvB,KAAK,SAAS,MAAM,EACpB,IAAI,SAAS,MAAM,EACnB,GAAG,SAAS,MAAM,GAAG,EAAE,IACrB,KAAK,SAAS,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,GAC1C,IAAI,SAAS,IAAI,GACf,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GACrB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,GACnD,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAE1B,KAAK,qBAAqB,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,IAClE,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,SAAS;IACjD,MAAM,KAAK,SAAS,MAAM;IAC1B,MAAM,IAAI,SAAS,MAAM;CAC1B,GACG,KAAK,SAAS,EAAE,GACd,KAAK,GACL,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GACxB,KAAK,CAAC;AAEZ,UAAU,aAAa,CAAC,IAAI,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,KAAK,SAAS,MAAM,GAC1D,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,GAClC,KAAK,CAAC;CACX;AAED,UAAU,MAAO,SAAQ,WAAW;IAClC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;CAC9E;AAED,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,KAAK,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,GAC1F,KAAK,GACL,KAAK,CAAC;CACX;AAED,KAAK,WAAW,GAAG,MAAM,CAAC,GAAG,CAC3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAC9E,kBAAkB,CACnB,CAAC;AAEF,KAAK,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,KAAK,0BAA0B,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpE,KAAK,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAEhG,KAAK,oBAAoB,GAAG,MAAM,CAAC,GAAG,CACpC,mBAAmB,EACnB,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAC5D,CAAC;AAEF,KAAK,YAAY,CACf,IAAI,SAAS,MAAM,EACnB,KAAK,SAAS,MAAM,GAAG,SAAS,EAChC,YAAY,SAAS,GAAG,GAAG,SAAS,IAClC;IACF;QAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAC3E;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,GAChB,EAAE,CAAC,GACL,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,EAAE,CAAC;CAC3D,SAAS,CAAC,MAAM,GAAG,CAAC,GACjB,gBAAgB,CAAC,GAAG,CAAC,GACrB,KAAK,CAAC;AAEV,UAAU,cAAe,SAAQ,WAAW;IAC1C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS;QAC3C,SAAS,CAAC,GAAG,EAAE,MAAM,IAAI,SAAS,MAAM,CAAC;QACzC,SAAS,CAAC,MAAM,KAAK,EAAE,MAAM,YAAY,CAAC;KAC3C,GACG,YAAY,CACV,IAAI,EACJ,KAAK,SAAS,MAAM,GAAG,KAAK,GAAG,SAAS,EACxC,YAAY,SAAS,GAAG,GAAG,YAAY,GAAG,SAAS,CACpD,GACD,KAAK,CAAC;CACX;AAED,KAAK,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;AAExE,UAAU,aAAc,SAAQ,WAAW;IACzC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;CAChD;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;AAElE,UAAU,YAAa,SAAQ,WAAW;IACxC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,KAAK,SAAS,MAAM,GAC1D;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GACnD,KAAK,CAAC;CACX;AAED,KAAK,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;AAE/E,KAAK,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,YAAY,CAAC,CAAC;AAEtF,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACnC,eAAe,EACf,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAClD,CAAC;AAEF,UAAU,eAAgB,SAAQ,WAAW;IAC3C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS;QAC3C,MAAM,IAAI,SAAS,MAAM;QACzB,SAAS,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,OAAO,CAAC;KAC5C,GACG;QAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAC5E,KAAK,CAAC;CACX;AAED,KAAK,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAChC,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EACtC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAC/C,EACD,eAAe,CAChB,CAAC;AAEF,KAAK,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;AAE/F,UAAU,cAAe,SAAQ,WAAW;IAC1C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS;QAC3C,MAAM,IAAI;QACV,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC;KAC1C,GACG,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GACxB,KAAK,CAAC;CACX;AAED,KAAK,oBAAoB,GAAG,MAAM,CAAC,GAAG,CACpC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAC/D,cAAc,CACf,CAAC;AAEF,UAAU,gBAAiB,SAAQ,WAAW;IAC5C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS;QAC3C,GAAG;QACH,MAAM,MAAM,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;KACvD,GACG;QACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,GACD,KAAK,CAAC;CACX;AAED,KAAK,iBAAiB,GAAG,MAAM,CAAC,GAAG,CACjC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC,EAClD,gBAAgB,CACjB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,CACjC,iBAAiB,EACjB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CACjF,CAAC;AAEF,KAAK,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3F,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3C,KAAK,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAEnE,UAAU,WAAY,SAAQ,WAAW;IACvC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,OAAO,EAAE,MAAM,GAAG,SAAS,OAAO,CAAC,GACnF,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,GAC3B,SAAS,CAAC,GAAG,CAAC,GACd,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,GAC1B,KAAK,CAAC;CACX;AAED,KAAK,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;AAE9F,KAAK,aAAa,CAChB,MAAM,SAAS,aAAa,CAAC,SAAS,CAAC,EACvC,GAAG,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,IAC9C,MAAM,SAAS,SAAS;IAC1B,MAAM,IAAI,SAAS,SAAS;IAC5B,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC;CAC/C,GACG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAC/C,GAAG,CAAC;AAER,KAAK,aAAa,CAAC,KAAK,EAAE,MAAM,SAAS,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAC1F,SAAS,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAC1C,aAAa,CAAC,MAAM,CAAC,CAAC;AAE1B,UAAU,MAAO,SAAQ,WAAW;IAClC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,SAAS;QAC3C,MAAM,KAAK;QACX,MAAM,MAAM,SAAS,aAAa,CAAC,SAAS,CAAC;KAC9C,GACG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,GAC5B,KAAK,CAAC;CACX;AAED,KAAK,eAAe,CAAC,KAAK,SAAS,MAAM,IAAI,MAAM,CAAC,GAAG,CACrD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,EACzF,KAAK,CACN,CAAC;AAEF,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACjC,KAAK,GACL,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,SAAS,MAAM,CAAC,GACxF,IAAI,GACJ,KAAK,CAAC;AAEZ,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9E,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAC;IAChC,QAAQ,EAAE,IAAI,CAAC;CAChB,GACG;KAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM;CAAE,GACxB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAA;CAAE,GAChF;KAAG,CAAC,IAAI,IAAI,GAAG,MAAM;CAAE,GACvB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACrC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf,CAAC,SAAS;IACN,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;CACxE,GACD,mBAAmB,CAAC,MAAM,CAAC,GAC3B,EAAE,CAAC;AAEb,KAAK,mBAAmB,CACtB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAC3C,GAAG,GAAG,EAAE,IACN,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GACxF,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,GACzD,GAAG,CAAC;AAER,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS;IACrC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,OAAO,CAAC;CAC7C,GACG,WAAW,CAAC,KAAK,CAAC,GAClB,EAAE,CAAC;AAEP,KAAK,SAAS,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,SAAS;IAC9E,MAAM,IAAI;IACV,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC;CAC7C,GACG,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GACxC,GAAG,CAAC;AAER,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAC;IAChC,QAAQ,EAAE,IAAI,CAAC;CAChB,GACG;KAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM;CAAE,GACxB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,MAAM,CAAA;CAAE,GAChF;KAAG,CAAC,IAAI,IAAI,GAAG,MAAM;CAAE,GACvB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACrC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf,EAAE,CAAC;AAEX,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;CACxE,GACG,mBAAmB,CAAC,MAAM,CAAC,GAC3B,EAAE,CAAC;AAEP,KAAK,aAAa,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,SAAS;IAClF,MAAM,IAAI;IACV,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC;CAC7C,GACG,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GAChD,GAAG,CAAC;AAER,KAAK,cAAc,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,SAAS;IACnF,MAAM,IAAI;IACV,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC;CAC7C,GACG,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAClD,GAAG,CAAC;AAER,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAC;AAEhG,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IACrC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,IAAI,GAC3B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GACpB,KAAK,GACL,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GACrC,KAAK,GACT,KAAK,CAAC;AAEZ,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IACtC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,IAAI,GAC3B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GACpB,KAAK,GACL,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GACtC,KAAK,GACT,KAAK,CAAC;AAEZ,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IACjC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,IAAI,GAC3B,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GACpB,KAAK,GACL,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GACjC,KAAK,GACT,KAAK,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEvF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CA0B/D;AAED,wBAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CASpE;AAED,MAAM,MAAM,IAAI,CAAC,KAAK,SAAS,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU,CACrE;KACG,CAAC,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACxC,EACD,EAAE,CACH,EAAE,CAAC;AAEJ,KAAK,UAAU,CACb,KAAK,SAAS,aAAa,CAAC,MAAM,CAAC,EACnC,CAAC,SAAS,MAAM,GAAG,EAAE,IACnB,KAAK,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC5F,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAC5B,CAAC,CAAC;AAEN,KAAK,SAAS,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAC7D,CAAC,CAAC,OAAO,CAAC,GACV,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAC7B,kBAAkB,CAAC,CAAC,CAAC,GACrB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAC5B,GAAG,GACH,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GACzB,GAAG,GACH,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,GAC/B,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAChC,KAAK,CAAC;AAElB,KAAK,kBAAkB,CAAC,CAAC,SAAS,OAAO,CAAC,SAAS,IACjD,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;AAC1D,KAAK,oBAAoB,CACvB,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAC3C,CAAC,SAAS,MAAM,GAAG,GAAG,IACpB,CAAC,SAAS,SAAS;IACrB,MAAM,IAAI,SAAS,OAAO,CAAC,UAAU;IACrC,GAAG,MAAM,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;CACxD,GACG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,GACzF,CAAC,CAAC;AAEN,KAAK,mBAAmB,CAAC,CAAC,SAAS,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAEjG,wBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAEzF;AAsMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK;;;;iCAOvD,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iCAC3B,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;EAiDtE;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK;;;;;;;;;;;;;;EA4BlF"}
|
package/dist/Path.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
import * as AST from "./AST.js";
|
|
3
|
+
export function parseWithRest(input) {
|
|
4
|
+
let index = 0;
|
|
5
|
+
const asts = [];
|
|
6
|
+
while (index < input.length) {
|
|
7
|
+
const start = index;
|
|
8
|
+
let hasSlash = false;
|
|
9
|
+
while (index < input.length && input[index] === "/") {
|
|
10
|
+
hasSlash = true;
|
|
11
|
+
index++;
|
|
12
|
+
}
|
|
13
|
+
const atom = parseAtom(input, index);
|
|
14
|
+
if (atom === undefined) {
|
|
15
|
+
index = start;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
if (hasSlash && asts.length > 0) {
|
|
19
|
+
asts.push(AST.slash());
|
|
20
|
+
}
|
|
21
|
+
asts.push(atom.ast);
|
|
22
|
+
index = atom.index;
|
|
23
|
+
}
|
|
24
|
+
return [asts, input.slice(index)];
|
|
25
|
+
}
|
|
26
|
+
export function parse(input) {
|
|
27
|
+
const [asts, rest] = parseWithRest(input);
|
|
28
|
+
for (let i = 0; i < rest.length; i++) {
|
|
29
|
+
if (rest[i] !== "/") {
|
|
30
|
+
const index = input.length - rest.length;
|
|
31
|
+
throw new Error(`Failed to parse path at index ${index}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return asts;
|
|
35
|
+
}
|
|
36
|
+
export function join(asts) {
|
|
37
|
+
return `/${asts.map(formatAst).join("")}`;
|
|
38
|
+
}
|
|
39
|
+
function formatAst(ast) {
|
|
40
|
+
switch (ast.type) {
|
|
41
|
+
case "literal":
|
|
42
|
+
return ast.value;
|
|
43
|
+
case "parameter":
|
|
44
|
+
return `:${ast.name}`;
|
|
45
|
+
case "wildcard":
|
|
46
|
+
return "*";
|
|
47
|
+
case "slash":
|
|
48
|
+
return "/";
|
|
49
|
+
case "query-params":
|
|
50
|
+
return `?${ast.value.map(getQueryParamAst).join("&")}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getQueryParamAst(ast) {
|
|
54
|
+
return `${ast.name}=${formatAst(ast.value)}`;
|
|
55
|
+
}
|
|
56
|
+
function parseAtom(input, index) {
|
|
57
|
+
const char = input[index];
|
|
58
|
+
if (char === undefined) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (char === "?") {
|
|
62
|
+
return parseQueryParams(input, index);
|
|
63
|
+
}
|
|
64
|
+
if (char === ":") {
|
|
65
|
+
return parseParameter(input, index);
|
|
66
|
+
}
|
|
67
|
+
if (char === "*") {
|
|
68
|
+
return { ast: AST.wildcard(), index: index + 1 };
|
|
69
|
+
}
|
|
70
|
+
return parsePathLiteral(input, index);
|
|
71
|
+
}
|
|
72
|
+
function parseParameter(input, index) {
|
|
73
|
+
if (input[index] !== ":") {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
let i = index + 1;
|
|
77
|
+
let name = "";
|
|
78
|
+
while (i < input.length && isAlphaNumeric(input[i])) {
|
|
79
|
+
name += input[i];
|
|
80
|
+
i++;
|
|
81
|
+
}
|
|
82
|
+
if (name.length === 0) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
let regex = undefined;
|
|
86
|
+
if (input[i] === "(") {
|
|
87
|
+
i++;
|
|
88
|
+
const start = i;
|
|
89
|
+
while (i < input.length && input[i] !== ")") {
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
if (i >= input.length) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (i === start) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
regex = input.slice(start, i);
|
|
99
|
+
i++;
|
|
100
|
+
}
|
|
101
|
+
let optional = undefined;
|
|
102
|
+
if (input[i] === "?") {
|
|
103
|
+
optional = true;
|
|
104
|
+
i++;
|
|
105
|
+
}
|
|
106
|
+
return { ast: AST.parameter(name, optional, regex), index: i };
|
|
107
|
+
}
|
|
108
|
+
function parsePathLiteral(input, index) {
|
|
109
|
+
const char = input[index];
|
|
110
|
+
if (char === undefined || isPathStopChar(char)) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
let i = index;
|
|
114
|
+
while (i < input.length && !isPathStopChar(input[i])) {
|
|
115
|
+
i++;
|
|
116
|
+
}
|
|
117
|
+
return { ast: AST.literal(input.slice(index, i)), index: i };
|
|
118
|
+
}
|
|
119
|
+
function parseQueryParams(input, index) {
|
|
120
|
+
if (input[index] !== "?") {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
const first = parseQueryParam(input, index + 1);
|
|
124
|
+
if (first === undefined) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
let i = first.index;
|
|
128
|
+
const params = [first.ast];
|
|
129
|
+
while (i < input.length && input[i] === "&") {
|
|
130
|
+
const start = i;
|
|
131
|
+
const next = parseQueryParam(input, i + 1);
|
|
132
|
+
if (next === undefined) {
|
|
133
|
+
i = start;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
params.push(next.ast);
|
|
137
|
+
i = next.index;
|
|
138
|
+
}
|
|
139
|
+
return { ast: AST.queryParams(params), index: i };
|
|
140
|
+
}
|
|
141
|
+
function parseQueryParam(input, index) {
|
|
142
|
+
let i = index;
|
|
143
|
+
let name = "";
|
|
144
|
+
while (i < input.length && isAlphaNumeric(input[i])) {
|
|
145
|
+
name += input[i];
|
|
146
|
+
i++;
|
|
147
|
+
}
|
|
148
|
+
if (name.length === 0) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
if (input[i] !== "=") {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
i++;
|
|
155
|
+
const value = parseQueryValue(input, i);
|
|
156
|
+
if (value === undefined) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
return { ast: AST.queryParam(name, value.ast), index: value.index };
|
|
160
|
+
}
|
|
161
|
+
function parseQueryValue(input, index) {
|
|
162
|
+
const char = input[index];
|
|
163
|
+
if (char === undefined) {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
if (char === ":") {
|
|
167
|
+
return parseParameter(input, index);
|
|
168
|
+
}
|
|
169
|
+
if (char === "*") {
|
|
170
|
+
return { ast: AST.wildcard(), index: index + 1 };
|
|
171
|
+
}
|
|
172
|
+
let i = index;
|
|
173
|
+
while (i < input.length && input[i] !== "&") {
|
|
174
|
+
i++;
|
|
175
|
+
}
|
|
176
|
+
if (i === index) {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
return { ast: AST.literal(input.slice(index, i)), index: i };
|
|
180
|
+
}
|
|
181
|
+
function isPathStopChar(char) {
|
|
182
|
+
return char === "/" || char === ":" || char === "*" || char === "?";
|
|
183
|
+
}
|
|
184
|
+
function isAlphaNumeric(char) {
|
|
185
|
+
return ((char >= "0" && char <= "9") || (char >= "a" && char <= "z") || (char >= "A" && char <= "Z"));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* @internal
|
|
189
|
+
*/
|
|
190
|
+
export function getSchemaFields(parts) {
|
|
191
|
+
const requiredFields = [];
|
|
192
|
+
const optionalFields = [];
|
|
193
|
+
const queryParams = [];
|
|
194
|
+
function addParameter(param) {
|
|
195
|
+
const base = param.regex
|
|
196
|
+
? Schema.String.pipe(Schema.check(Schema.isPattern(new RegExp(param.regex))))
|
|
197
|
+
: Schema.String;
|
|
198
|
+
if (param.optional) {
|
|
199
|
+
optionalFields.push([Schema.optionalKey(Schema.Literal(param.name)), Schema.optional(base)]);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
requiredFields.push([param.name, base]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function addQueryParams(params) {
|
|
206
|
+
for (const param of params) {
|
|
207
|
+
const { optionalFields, queryParams: _queryParams, requiredFields, } = getSchemaFields([param.value]);
|
|
208
|
+
queryParams.push([param.name, { optionalFields, requiredFields }]);
|
|
209
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
210
|
+
queryParams.push(..._queryParams);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function addParts(parts) {
|
|
214
|
+
for (const part of parts) {
|
|
215
|
+
if (part.type === "parameter") {
|
|
216
|
+
addParameter(part);
|
|
217
|
+
}
|
|
218
|
+
else if (part.type === "wildcard") {
|
|
219
|
+
requiredFields.push(["*", Schema.String]);
|
|
220
|
+
}
|
|
221
|
+
else if (part.type === "query-params") {
|
|
222
|
+
addQueryParams(part.value);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
addParts(parts);
|
|
227
|
+
return {
|
|
228
|
+
requiredFields,
|
|
229
|
+
optionalFields,
|
|
230
|
+
queryParams,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
export function getSchemas(parts) {
|
|
234
|
+
const { optionalFields, queryParams, requiredFields } = getSchemaFields(parts);
|
|
235
|
+
const pathFields = Object.fromEntries(requiredFields);
|
|
236
|
+
const queryFields = Object.fromEntries(queryParams.map(([name, { optionalFields, requiredFields }]) => [
|
|
237
|
+
name,
|
|
238
|
+
Schema.StructWithRest(Schema.Struct(Object.fromEntries(requiredFields)), optionalFields.map(([key, value]) => Schema.Record(key, value))),
|
|
239
|
+
]));
|
|
240
|
+
const pathSchema = Schema.StructWithRest(Schema.Struct(pathFields), optionalFields.map(([key, value]) => Schema.Record(key, value)));
|
|
241
|
+
const querySchema = Schema.Struct(queryFields);
|
|
242
|
+
const paramsSchema = Schema.StructWithRest(Schema.Struct({ ...pathFields, ...queryFields }), optionalFields.map(([key, value]) => Schema.Record(key, value)));
|
|
243
|
+
return {
|
|
244
|
+
pathSchema,
|
|
245
|
+
querySchema,
|
|
246
|
+
paramsSchema,
|
|
247
|
+
};
|
|
248
|
+
}
|