@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/README.md
CHANGED
|
@@ -1,5 +1,132 @@
|
|
|
1
1
|
# @typed/router
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **Beta:** This package is in beta; APIs may change.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`@typed/router` provides **typed routing** for Effect apps: path and query parameters derived from route strings and decoded via Effect Schema, **Route** definitions, **Matcher** (pattern matching on routes), **CurrentRoute**, and **Router** layers. Use it when you need type-safe routing with parsable path/query and composable matchers that produce Fx streams and react to path changes.
|
|
8
|
+
|
|
9
|
+
## Use cases
|
|
10
|
+
|
|
11
|
+
- **Typed SPAs** — `BrowserRouter()` + `run(matcher)` for client-side routing; matcher cases yield Fx that switch as the path changes.
|
|
12
|
+
- **SSR** — `ServerRouter({ initialMemory })` for server rendering with in-memory navigation.
|
|
13
|
+
- **Tests** — `TestRouter()` with deterministic IDs for predictable route tests.
|
|
14
|
+
- **File-based routing** — `@typed/app` virtual modules generate Matcher source from route files; use `import { Matcher } from "router:./routes"` with typedVitePlugin or vmc.
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
1. **Route** — Define paths (`Route.Parse("/todos/:id")`), optionally with query (`?filter=`). Path and query types come from the route string.
|
|
19
|
+
2. **Matcher** — Add cases via `match(route, handler)`; each case returns an Fx, Effect, Stream, or value. Nest routes with `prefix(route)`.
|
|
20
|
+
3. **run(matcher)** — Compile the matcher and return an Fx that reacts to `CurrentPath` from `Navigation`. When the path changes, the matcher selects the matching case, scopes the previous handler, and yields the new handler's Fx.
|
|
21
|
+
4. **Router layers** — Provide `BrowserRouter`, `ServerRouter`, or `TestRouter` to supply `Navigation` and `CurrentRoute`.
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `effect`
|
|
26
|
+
- `@typed/fx`
|
|
27
|
+
- `@typed/guard`
|
|
28
|
+
- `@typed/id`
|
|
29
|
+
- `@typed/navigation`
|
|
30
|
+
- `find-my-way-ts`
|
|
31
|
+
- `hkt-core`
|
|
32
|
+
|
|
33
|
+
## API overview
|
|
34
|
+
|
|
35
|
+
- **Route** — `make(ast)`, `path`, `paramsSchema`, `pathSchema`, `querySchema`; path/query types are derived from the route path string.
|
|
36
|
+
- **Matcher** — cases keyed by route; each case returns an Fx; `prefix(parentRoute)` for nested routes; compile to router entries.
|
|
37
|
+
- **CurrentRoute** — service exposing the current matched route tree.
|
|
38
|
+
- **Router** — `compile(matcher)`, `makeLayerManager`, `makeCatchManager`, `makeLayoutManager` for building the routing layer.
|
|
39
|
+
- **Join**, **Parse** — helpers for path/query construction and parsing.
|
|
40
|
+
|
|
41
|
+
## Example
|
|
42
|
+
|
|
43
|
+
Define routes with `Router.Parse` and `Router.match`, then provide `Router.BrowserRouter()` (see the [TodoMVC example](https://github.com/typed-smol/typed-smol/tree/main/examples/todomvc)):
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import * as Router from "@typed/router";
|
|
47
|
+
|
|
48
|
+
const filterState = Router.match(Router.Slash, "all")
|
|
49
|
+
.match(Router.Parse("active"), "active")
|
|
50
|
+
.match(Router.Parse("completed"), "completed")
|
|
51
|
+
.pipe(Router.redirectTo("/"));
|
|
52
|
+
|
|
53
|
+
// Provide Router.BrowserRouter() and use filterState (or other matchers) in your layers
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For file-based routing, see `@typed/app` and its virtual `router:./routes` imports.
|
|
57
|
+
|
|
58
|
+
## API reference
|
|
59
|
+
|
|
60
|
+
### Router
|
|
61
|
+
|
|
62
|
+
| Symbol | Description |
|
|
63
|
+
| ------------------------ | ----------------------------------------------------------------------------------------------- |
|
|
64
|
+
| `Router` | Type: `CurrentRoute` or `Navigation`. The routing service union. |
|
|
65
|
+
| `BrowserRouter(window?)` | `Layer<Router>`. Provides router using the browser `window` (or global). |
|
|
66
|
+
| `ServerRouter(options)` | `Layer<Router>`. Provides router with `memory()` or `initialMemory()` from `@typed/navigation`. |
|
|
67
|
+
| `TestRouter(options)` | `Layer<Router>`. Like `ServerRouter` but with `Ids.Test()` for deterministic IDs. |
|
|
68
|
+
|
|
69
|
+
### Route
|
|
70
|
+
|
|
71
|
+
| Symbol | Description |
|
|
72
|
+
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
73
|
+
| `Route<P, S>` | Interface: `ast`, `path`, `paramsSchema`, `pathSchema`, `querySchema`. Path/query types come from the path string. |
|
|
74
|
+
| `Route.make(ast)` | Build a `Route` from an `AST.RouteAst`. |
|
|
75
|
+
| `Route.Parse(path)` | Parse a path string (e.g. `"/todos/:id?filter=all"`) into a typed `Route`. |
|
|
76
|
+
| `Route.Slash` | Route for `"/"`. |
|
|
77
|
+
| `Route.Wildcard` | Route for `"*"`. |
|
|
78
|
+
| `Route.Param(name)` | Route for `/:name` (string param). |
|
|
79
|
+
| `Route.ParamWithSchema(name, schema)` | Route for `/:name` with an Effect Schema codec. |
|
|
80
|
+
| `Route.Number(name)` | Route for `/:name` decoded as number. |
|
|
81
|
+
| `Route.Int(name)` | Route for `/:name` decoded as integer. |
|
|
82
|
+
| `Route.Join(...routes)` | Join route segments into one route (path and params combined). |
|
|
83
|
+
| `Route.Path<T>`, `Route.Type<T>`, `Route.Params<T>` | Type helpers for a route’s path string, decoded type, and params. |
|
|
84
|
+
|
|
85
|
+
### Matcher
|
|
86
|
+
|
|
87
|
+
| Symbol | Description |
|
|
88
|
+
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
|
|
89
|
+
| `Matcher<A, E, R>` | Interface: pattern match on routes; each case yields an Fx. |
|
|
90
|
+
| `match` | Start a matcher (same as `empty.match`). |
|
|
91
|
+
| `empty` | Empty matcher (no cases). |
|
|
92
|
+
| `matcher.match(route, handler)` | Add a case: `route` + handler (function, Fx, Effect, Stream, or value). |
|
|
93
|
+
| `matcher.match(route, options)` | Add a case with `handler`, optional `dependencies`, `layout`, `catch`. |
|
|
94
|
+
| `matcher.match(route, guard, handler)` | Add a case with a guard (e.g. from `@typed/guard`) before the handler. |
|
|
95
|
+
| `matcher.prefix(route)` | Nest this matcher under a parent route. |
|
|
96
|
+
| `matcher.provide(...layers)` | Provide Effect layers to the matcher. |
|
|
97
|
+
| `matcher.provideService(tag, service)` | Provide a single service. |
|
|
98
|
+
| `matcher.provideServices(services)` | Provide a service map. |
|
|
99
|
+
| `matcher.catchCause(f)` | Handle failures by cause. |
|
|
100
|
+
| `matcher.catch(f)` | Handle failures by error value. |
|
|
101
|
+
| `matcher.catchTag(tag, f)` | Handle a specific error tag. |
|
|
102
|
+
| `matcher.layout(layout)` | Wrap matcher output in a layout Fx. |
|
|
103
|
+
| `run(matcher)` | Compile the matcher and return an `Fx` that reacts to the current path (requires `Router` + `CurrentRoute`). |
|
|
104
|
+
| `catchCause(input, f)` | Attach cause-based error handling to an Fx or matcher run. |
|
|
105
|
+
| `catch(input, f)` | Attach error-based handling. |
|
|
106
|
+
| `catchTag(input, tag, f)` | Attach tag-based error handling. |
|
|
107
|
+
| `redirectTo(path)` | Returns a function that, given an Fx or matcher, redirects to `path` on failure. |
|
|
108
|
+
|
|
109
|
+
**Matcher types**
|
|
110
|
+
|
|
111
|
+
| Type | Description |
|
|
112
|
+
| ------------------------------------ | --------------------------------------------------------------------- |
|
|
113
|
+
| `Layout<Params, A, E, R, B, E2, R2>` | `(params) => Fx<B, E2, R2>`; wraps content with params and inner Fx. |
|
|
114
|
+
| `CatchHandler<E, A, E2, R2>` | `(cause: RefSubject<Cause<E>>) => Fx<A, E2, R2>`. |
|
|
115
|
+
| `MatchHandler<Params, A, E, R>` | Handler for a route: Fx, Effect, Stream, value, or `(params) => ...`. |
|
|
116
|
+
|
|
117
|
+
**Errors**
|
|
118
|
+
|
|
119
|
+
| Class | Description |
|
|
120
|
+
| ------------------ | ----------------------------------------------------- |
|
|
121
|
+
| `RouteNotFound` | No route matched the path. |
|
|
122
|
+
| `RouteDecodeError` | Path/query failed to decode (e.g. schema validation). |
|
|
123
|
+
| `RouteGuardError` | Guard rejected (e.g. auth). |
|
|
124
|
+
|
|
125
|
+
### CurrentRoute
|
|
126
|
+
|
|
127
|
+
| Symbol | Description |
|
|
128
|
+
| ---------------------------- | ------------------------------------------------------------------------------ |
|
|
129
|
+
| `CurrentRoute` | Effect Service exposing the current matched route tree. |
|
|
130
|
+
| `CurrentRouteTree` | `{ route: Route<string, any>; parent?: CurrentRouteTree }`. |
|
|
131
|
+
| `CurrentRoute.Default` | Layer that provides `CurrentRoute` from `Navigation.base`. |
|
|
132
|
+
| `CurrentRoute.extend(route)` | Layer that provides `CurrentRoute` with a fixed `route` and optional `parent`. |
|
package/dist/AST.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { Cause } from "effect/Cause";
|
|
2
|
+
import type { Top } from "effect/Schema";
|
|
3
|
+
import type { Transformation } from "effect/SchemaTransformation";
|
|
4
|
+
import type { Fx } from "@typed/fx/Fx";
|
|
5
|
+
import type { RefSubject } from "@typed/fx/RefSubject/RefSubject";
|
|
6
|
+
import type { Guard } from "@typed/guard";
|
|
7
|
+
import type { AnyLayer, Layout as LayoutType, MatchHandler } from "./Matcher.js";
|
|
8
|
+
export type PathAst = PathAst.Literal | PathAst.Parameter | PathAst.Slash | PathAst.Wildcard | PathAst.QueryParams;
|
|
9
|
+
export declare namespace PathAst {
|
|
10
|
+
type Literal = {
|
|
11
|
+
type: "literal";
|
|
12
|
+
value: string;
|
|
13
|
+
};
|
|
14
|
+
type Parameter = {
|
|
15
|
+
type: "parameter";
|
|
16
|
+
name: string;
|
|
17
|
+
optional?: boolean;
|
|
18
|
+
regex?: string;
|
|
19
|
+
};
|
|
20
|
+
type Wildcard = {
|
|
21
|
+
type: "wildcard";
|
|
22
|
+
};
|
|
23
|
+
type Slash = {
|
|
24
|
+
type: "slash";
|
|
25
|
+
};
|
|
26
|
+
type QueryParams = {
|
|
27
|
+
type: "query-params";
|
|
28
|
+
value: ReadonlyArray<PathAst.QueryParam>;
|
|
29
|
+
};
|
|
30
|
+
type QueryParam = {
|
|
31
|
+
type: "query-param";
|
|
32
|
+
name: string;
|
|
33
|
+
value: PathAst;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare const literal: (value: string) => PathAst.Literal;
|
|
37
|
+
export declare const parameter: (name: string, optional?: boolean, regex?: string) => PathAst.Parameter;
|
|
38
|
+
export declare const wildcard: () => PathAst.Wildcard;
|
|
39
|
+
export declare const slash: () => PathAst.Slash;
|
|
40
|
+
export declare const queryParams: (value: ReadonlyArray<PathAst.QueryParam>) => PathAst.QueryParams;
|
|
41
|
+
export declare const queryParam: (name: string, value: PathAst) => PathAst.QueryParam;
|
|
42
|
+
export type RouteAst = RouteAst.Path | RouteAst.Transform | RouteAst.Join;
|
|
43
|
+
export declare namespace RouteAst {
|
|
44
|
+
interface Path {
|
|
45
|
+
type: "path";
|
|
46
|
+
path: PathAst;
|
|
47
|
+
}
|
|
48
|
+
interface Transform {
|
|
49
|
+
type: "transform";
|
|
50
|
+
from: RouteAst;
|
|
51
|
+
to: Top;
|
|
52
|
+
transformation: Transformation<any, any, any, any>;
|
|
53
|
+
}
|
|
54
|
+
interface Join {
|
|
55
|
+
type: "join";
|
|
56
|
+
parts: ReadonlyArray<RouteAst>;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export declare const path: (path: PathAst) => RouteAst.Path;
|
|
60
|
+
export declare const transform: (from: RouteAst, to: Top, transformation: Transformation<any, any, any, any>) => RouteAst.Transform;
|
|
61
|
+
export declare const join: (parts: ReadonlyArray<RouteAst>) => RouteAst.Join;
|
|
62
|
+
export type MatchAst = MatchAst.Route | MatchAst.Layer | MatchAst.Layout | MatchAst.Prefixed | MatchAst.Catch;
|
|
63
|
+
export declare namespace MatchAst {
|
|
64
|
+
interface Route {
|
|
65
|
+
type: "route";
|
|
66
|
+
route: RouteAst;
|
|
67
|
+
guard: Guard<any, any, any, any>;
|
|
68
|
+
handler: MatchHandler<any, any, any, any>;
|
|
69
|
+
}
|
|
70
|
+
interface Layer {
|
|
71
|
+
type: "layer";
|
|
72
|
+
matches: ReadonlyArray<MatchAst>;
|
|
73
|
+
deps: ReadonlyArray<AnyLayer>;
|
|
74
|
+
}
|
|
75
|
+
interface Layout {
|
|
76
|
+
type: "layout";
|
|
77
|
+
matches: ReadonlyArray<MatchAst>;
|
|
78
|
+
layout: LayoutType<any, any, any, any, any, any, any>;
|
|
79
|
+
}
|
|
80
|
+
interface Prefixed {
|
|
81
|
+
type: "prefixed";
|
|
82
|
+
matches: ReadonlyArray<MatchAst>;
|
|
83
|
+
prefix: RouteAst;
|
|
84
|
+
}
|
|
85
|
+
interface Catch {
|
|
86
|
+
type: "catch";
|
|
87
|
+
matches: ReadonlyArray<MatchAst>;
|
|
88
|
+
f: (cause: RefSubject<Cause<any>>) => Fx<any, any, any>;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export declare const route: (route: RouteAst, handler: MatchHandler<any, any, any, any>, guard?: Guard<any, any, any, any>) => MatchAst.Route;
|
|
92
|
+
export declare const layer: (matches: ReadonlyArray<MatchAst>, deps: ReadonlyArray<AnyLayer>) => MatchAst.Layer;
|
|
93
|
+
export declare const layout: (matches: ReadonlyArray<MatchAst>, layout: LayoutType<any, any, any, any, any, any, any>) => MatchAst.Layout;
|
|
94
|
+
export declare const prefixed: (matches: ReadonlyArray<MatchAst>, prefix: RouteAst) => MatchAst.Prefixed;
|
|
95
|
+
export declare const catchCause: (matches: ReadonlyArray<MatchAst>, f: (cause: RefSubject<Cause<any>>) => Fx<any, any, any>) => MatchAst.Catch;
|
|
96
|
+
//# sourceMappingURL=AST.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AST.d.ts","sourceRoot":"","sources":["../src/AST.ts"],"names":[],"mappings":"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"}
|
package/dist/AST.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { succeedSome } from "effect/Effect";
|
|
2
|
+
export const literal = (value) => ({ type: "literal", value });
|
|
3
|
+
export const parameter = (name, optional, regex) => ({
|
|
4
|
+
type: "parameter",
|
|
5
|
+
name,
|
|
6
|
+
...(optional ? { optional } : {}),
|
|
7
|
+
...(regex ? { regex } : {}),
|
|
8
|
+
});
|
|
9
|
+
export const wildcard = () => ({ type: "wildcard" });
|
|
10
|
+
export const slash = () => ({ type: "slash" });
|
|
11
|
+
export const queryParams = (value) => ({
|
|
12
|
+
type: "query-params",
|
|
13
|
+
value,
|
|
14
|
+
});
|
|
15
|
+
export const queryParam = (name, value) => ({
|
|
16
|
+
type: "query-param",
|
|
17
|
+
name,
|
|
18
|
+
value,
|
|
19
|
+
});
|
|
20
|
+
export const path = (path) => ({ type: "path", path });
|
|
21
|
+
export const transform = (from, to, transformation) => ({
|
|
22
|
+
type: "transform",
|
|
23
|
+
from,
|
|
24
|
+
to,
|
|
25
|
+
transformation,
|
|
26
|
+
});
|
|
27
|
+
export const join = (parts) => ({ type: "join", parts });
|
|
28
|
+
export const route = (route, handler, guard = succeedSome) => ({ type: "route", route, guard, handler });
|
|
29
|
+
export const layer = (matches, deps) => ({ type: "layer", matches, deps });
|
|
30
|
+
export const layout = (matches, layout) => ({ type: "layout", matches, layout });
|
|
31
|
+
export const prefixed = (matches, prefix) => ({ type: "prefixed", matches, prefix });
|
|
32
|
+
export const catchCause = (matches, f) => ({ type: "catch", matches, f });
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
4
|
+
import { Navigation } from "@typed/navigation/Navigation";
|
|
5
|
+
import { type Route } from "./Route.js";
|
|
6
|
+
export interface CurrentRouteTree {
|
|
7
|
+
readonly route: Route<string, any>;
|
|
8
|
+
readonly parent?: CurrentRouteTree | undefined;
|
|
9
|
+
}
|
|
10
|
+
declare const CurrentRoute_base: ServiceMap.ServiceClass<CurrentRoute, "@typed/router/CurrentRoute", CurrentRouteTree> & {
|
|
11
|
+
readonly make: Effect.Effect<CurrentRouteTree, never, Navigation>;
|
|
12
|
+
};
|
|
13
|
+
export declare class CurrentRoute extends CurrentRoute_base {
|
|
14
|
+
static readonly Default: Layer.Layer<CurrentRoute, never, Navigation>;
|
|
15
|
+
static readonly extend: (route: Route.Any) => Layer.Layer<CurrentRoute, never, never>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=CurrentRoute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CurrentRoute.d.ts","sourceRoot":"","sources":["../src/CurrentRoute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAS,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD;;;;AAED,qBAAa,YAAa,SAAQ,iBAKjC;IACC,MAAM,CAAC,QAAQ,CAAC,OAAO,+CAAiD;IAExE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAI,OAAO,KAAK,CAAC,GAAG,6CAUtC;CACL"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
4
|
+
import { Navigation } from "@typed/navigation/Navigation";
|
|
5
|
+
import { Parse } from "./Route.js";
|
|
6
|
+
export class CurrentRoute extends ServiceMap.Service()("@typed/router/CurrentRoute", {
|
|
7
|
+
make: Effect.map(Navigation.base, (base) => ({ route: Parse(base) })),
|
|
8
|
+
}) {
|
|
9
|
+
static Default = Layer.effect(CurrentRoute, CurrentRoute.make);
|
|
10
|
+
static extend = (route) => Layer.unwrap(Effect.gen(function* () {
|
|
11
|
+
const services = yield* Effect.services();
|
|
12
|
+
const parent = ServiceMap.getOrUndefined(services, CurrentRoute);
|
|
13
|
+
return Layer.succeed(CurrentRoute, {
|
|
14
|
+
route,
|
|
15
|
+
parent,
|
|
16
|
+
});
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import type * as Arr from "effect/Array";
|
|
2
|
+
import * as Cause from "effect/Cause";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Option from "effect/Option";
|
|
6
|
+
import { type Pipeable } from "effect/Pipeable";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import * as Scope from "effect/Scope";
|
|
9
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
10
|
+
import * as Stream from "effect/Stream";
|
|
11
|
+
import type { ExcludeTag, ExtractTag, NoInfer, Tags } from "effect/Types";
|
|
12
|
+
import type * as Fx from "@typed/fx/Fx/Fx";
|
|
13
|
+
import { RefSubject } from "@typed/fx/RefSubject";
|
|
14
|
+
import type { MatchAst } from "./AST.js";
|
|
15
|
+
import { CurrentRoute } from "./CurrentRoute.js";
|
|
16
|
+
import { type Route } from "./Route.js";
|
|
17
|
+
import type { Router } from "./Router.js";
|
|
18
|
+
export type Layout<Params, A, E, R, B, E2, R2> = (params: LayoutParams<Params, A, E, R>) => Fx.Fx<B, E2, R2>;
|
|
19
|
+
export type LayoutParams<Params, A, E, R> = {
|
|
20
|
+
readonly params: RefSubject.RefSubject<Params>;
|
|
21
|
+
readonly content: Fx.Fx<A, E, R>;
|
|
22
|
+
};
|
|
23
|
+
export type CatchHandler<E, A, E2, R2> = (cause: RefSubject.RefSubject<Cause.Cause<E>>) => Fx.Fx<A, E2, R2>;
|
|
24
|
+
export type AnyLayer = Layer.Layer<any, any, any> | Layer.Layer<never, any, any> | Layer.Layer<any, never, any> | Layer.Layer<any, any, never> | Layer.Layer<never, never, never> | Layer.Layer<any, never, never> | Layer.Layer<never, any, never> | Layer.Layer<never, never, any>;
|
|
25
|
+
type AnyServiceMap = ServiceMap.ServiceMap<any> | ServiceMap.ServiceMap<never>;
|
|
26
|
+
type AnyDependency = AnyLayer | AnyServiceMap;
|
|
27
|
+
type AnyLayout = Layout<any, any, any, any, any, any, any>;
|
|
28
|
+
type AnyCatch = CatchHandler<any, any, any, any>;
|
|
29
|
+
type AnyGuard = GuardType<any, any, any, any>;
|
|
30
|
+
type AnyMatchHandler = (params: RefSubject.RefSubject<any>) => Fx.Fx<any, any, any>;
|
|
31
|
+
type DependencyProvided<D> = D extends Layer.Layer<infer Provided, any, any> ? Provided : D extends ServiceMap.ServiceMap<infer Provided> ? Provided : never;
|
|
32
|
+
type DependencyError<D> = D extends Layer.Layer<any, infer E, any> ? E : never;
|
|
33
|
+
type DependencyRequirements<D> = D extends Layer.Layer<any, any, infer R> ? R : never;
|
|
34
|
+
type LayerSuccess<L> = L extends Layer.Layer<infer Provided, any, any> ? Provided : never;
|
|
35
|
+
type LayerError<L> = L extends Layer.Layer<any, infer E, any> ? E : never;
|
|
36
|
+
type LayerServices<L> = L extends Layer.Layer<any, any, infer R> ? R : never;
|
|
37
|
+
export type GuardType<I, O, E = never, R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;
|
|
38
|
+
export interface AsGuard<I, O, E = never, R = never> {
|
|
39
|
+
readonly asGuard: () => GuardType<I, O, E, R>;
|
|
40
|
+
}
|
|
41
|
+
export type GuardInput<I, O, E = never, R = never> = GuardType<I, O, E, R> | AsGuard<I, O, E, R>;
|
|
42
|
+
type GuardOutput<G> = G extends GuardType<any, infer O, any, any> ? O : G extends AsGuard<any, infer O, any, any> ? O : never;
|
|
43
|
+
type GuardError<G> = G extends GuardType<any, any, infer E, any> ? E : G extends AsGuard<any, any, infer E, any> ? E : never;
|
|
44
|
+
type GuardServices<G> = G extends GuardType<any, any, any, infer R> ? R : G extends AsGuard<any, any, any, infer R> ? R : never;
|
|
45
|
+
type MatchOptions<Rt extends Route.Any, B, E2, R2, D, LB, LE2, LR2, C> = {
|
|
46
|
+
readonly route: Rt;
|
|
47
|
+
readonly handler: MatchHandlerReturnValue<B, E2, R2> | ((params: RefSubject.RefSubject<Route.Type<Rt>>) => MatchHandlerReturnValue<B, E2, R2>);
|
|
48
|
+
readonly dependencies?: D;
|
|
49
|
+
readonly layout?: Layout<Route.Type<Rt>, B, E2, R2, LB, LE2, LR2>;
|
|
50
|
+
readonly catch?: C;
|
|
51
|
+
};
|
|
52
|
+
type MatchHandlerReturnValue<A, E, R> = Fx.Fx<A, E, R> | Stream.Stream<A, E, R> | Effect.Effect<A, E, R> | A;
|
|
53
|
+
type MatchHandlerOptions<Params, B, E2, R2, D, LB, LE2, LR2, C> = {
|
|
54
|
+
readonly handler: MatchHandlerReturnValue<B, E2, R2> | ((params: RefSubject.RefSubject<Params>) => MatchHandlerReturnValue<B, E2, R2>);
|
|
55
|
+
readonly dependencies?: D;
|
|
56
|
+
readonly layout?: Layout<Params, B, E2, R2, LB, LE2, LR2>;
|
|
57
|
+
readonly catch?: C;
|
|
58
|
+
};
|
|
59
|
+
type ApplyDependencies<E, R, D> = D extends ReadonlyArray<infer Dep> ? {
|
|
60
|
+
readonly e: E | DependencyError<Dep>;
|
|
61
|
+
readonly r: Exclude<R, DependencyProvided<Dep>> | DependencyRequirements<Dep>;
|
|
62
|
+
} : {
|
|
63
|
+
readonly e: E;
|
|
64
|
+
readonly r: R;
|
|
65
|
+
};
|
|
66
|
+
type ApplyCatch<A, E, R, C> = C extends CatchHandler<any, infer CA, infer CE, infer CR> ? {
|
|
67
|
+
readonly a: A | CA;
|
|
68
|
+
readonly e: CE;
|
|
69
|
+
readonly r: R | CR;
|
|
70
|
+
} : {
|
|
71
|
+
readonly a: A;
|
|
72
|
+
readonly e: E;
|
|
73
|
+
readonly r: R;
|
|
74
|
+
};
|
|
75
|
+
type ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, GE, GR> = ApplyCatch<LB, ApplyDependencies<E2 | GE | LE2, R2 | GR | LR2, D>["e"], ApplyDependencies<E2 | GE | LE2, R2 | GR | LR2, D>["r"], C>;
|
|
76
|
+
export interface Matcher<A, E = never, R = never> extends Pipeable {
|
|
77
|
+
readonly cases: ReadonlyArray<MatchAst>;
|
|
78
|
+
match<Rt extends Route.Any, B, E2 = never, R2 = never>(route: Rt, handler: (params: RefSubject.RefSubject<Route.Type<Rt>>) => MatchHandlerReturnValue<B, E2, R2>): Matcher<A | B, E | E2, R | R2 | Scope.Scope>;
|
|
79
|
+
match<Rt extends Route.Any, B, E2 = never, R2 = never>(route: Rt, handler: Fx.Fx<B, E2, R2> | Effect.Effect<B, E2, R2> | Stream.Stream<B, E2, R2>): Matcher<A | B, E | E2, R | R2 | Scope.Scope>;
|
|
80
|
+
match<Rt extends Route.Any, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(route: Rt, options: MatchHandlerOptions<Route.Type<Rt>, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<A | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["a"], E | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["e"], R | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["r"] | Scope.Scope>;
|
|
81
|
+
match<Rt extends Route.Any, const B>(route: Rt, handler: B): Matcher<A | B, E, R | Scope.Scope>;
|
|
82
|
+
match<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never>(route: Rt, guard: G, handler: (params: RefSubject.RefSubject<GuardOutput<G>>) => MatchHandlerReturnValue<B, E2, R2>): Matcher<A | B, E | E2 | GuardError<G>, R | R2 | GuardServices<G> | Scope.Scope>;
|
|
83
|
+
match<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never>(route: Rt, guard: G, handler: Fx.Fx<B, E2, R2> | Effect.Effect<B, E2, R2> | Stream.Stream<B, E2, R2>): Matcher<A | B, E | E2 | GuardError<G>, R | R2 | GuardServices<G> | Scope.Scope>;
|
|
84
|
+
match<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(route: Rt, guard: G, options: MatchHandlerOptions<GuardOutput<G>, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<A | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, GuardError<G>, GuardServices<G>>["a"], E | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, GuardError<G>, GuardServices<G>>["e"], R | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, GuardError<G>, GuardServices<G>>["r"] | Scope.Scope>;
|
|
85
|
+
match<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B>(route: Rt, guard: G, handler: B): Matcher<A | B, E | GuardError<G>, R | GuardServices<G> | Scope.Scope>;
|
|
86
|
+
match<Rt extends Route.Any, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(options: MatchOptions<Rt, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<A | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["a"], E | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["e"], R | ComputeMatchResult<E2, R2, D, LB, LE2, LR2, C, never, never>["r"] | Scope.Scope>;
|
|
87
|
+
readonly prefix: <Rt extends Route.Any>(route: Rt) => Matcher<A, E, R>;
|
|
88
|
+
readonly provide: <Layers extends readonly [AnyLayer, ...AnyLayer[]]>(...layers: Layers) => Matcher<A, E | LayerError<Layers[number]>, Exclude<R, LayerSuccess<Layers[number]>> | LayerServices<Layers[number]>>;
|
|
89
|
+
readonly provideService: <Id, S>(tag: ServiceMap.Service<Id, S>, service: S) => Matcher<A, E, Exclude<R, Id>>;
|
|
90
|
+
readonly provideServices: <R2>(services: ServiceMap.ServiceMap<R2>) => Matcher<A, E, Exclude<R, R2>>;
|
|
91
|
+
readonly catchCause: <B, E2, R2>(f: CatchHandler<E, B, E2, R2>) => Matcher<A | B, E2, R | R2>;
|
|
92
|
+
readonly catch: <B, E2, R2>(f: (e: E) => Fx.Fx<B, E2, R2>) => Matcher<A | B, E2, R | R2>;
|
|
93
|
+
readonly catchTag: <const K extends Tags<E> | Arr.NonEmptyReadonlyArray<Tags<E>>, B, E2, R2>(tag: K, f: (e: ExtractTag<NoInfer<E>, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>) => Fx.Fx<B, E2, R2>) => Matcher<A | B, E2 | ExcludeTag<E, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>, R | R2>;
|
|
94
|
+
readonly layout: <B, E2, R2>(layout: Layout<any, A, E, R, B, E2, R2>) => Matcher<B, E | E2, R | R2>;
|
|
95
|
+
/** Merge this matcher with one or more others. Combined matcher matches all routes; each matcher's layouts/provide apply only to its own routes. */
|
|
96
|
+
readonly merge: <const Others extends ReadonlyArray<Matcher.Any>>(...others: Others) => Matcher<A | Matcher.MergeSuccess<Others>, E | Matcher.MergeError<Others>, R | Matcher.MergeServices<Others>>;
|
|
97
|
+
}
|
|
98
|
+
export declare namespace Matcher {
|
|
99
|
+
type Any = Matcher<any, any, any> | Matcher<any, never, any> | Matcher<any, any, never> | Matcher<any, never, never>;
|
|
100
|
+
type Success<T> = [T] extends [Matcher<infer A, infer _E, infer _R>] ? A : never;
|
|
101
|
+
type Error<T> = [T] extends [Matcher<infer _A, infer E, infer _R>] ? E : never;
|
|
102
|
+
type Services<T> = [T] extends [Matcher<infer _A, infer _E, infer R>] ? R : never;
|
|
103
|
+
/** Union of Success types from each matcher in a tuple. */
|
|
104
|
+
type MergeSuccess<Matchers extends ReadonlyArray<Matcher.Any>> = Success<Matchers[number]>;
|
|
105
|
+
/** Union of Error types from each matcher in a tuple. */
|
|
106
|
+
type MergeError<Matchers extends ReadonlyArray<Matcher.Any>> = Error<Matchers[number]>;
|
|
107
|
+
/** Union of Services types from each matcher in a tuple. */
|
|
108
|
+
type MergeServices<Matchers extends ReadonlyArray<Matcher.Any>> = Services<Matchers[number]>;
|
|
109
|
+
}
|
|
110
|
+
export type MatchHandler<Params, A, E, R> = Fx.Fx<A, E, R> | Stream.Stream<A, E, R> | Effect.Effect<A, E, R> | A | ((params: RefSubject.RefSubject<Params>) => Fx.Fx<A, E, R> | Stream.Stream<A, E, R> | Effect.Effect<A, E, R> | A);
|
|
111
|
+
export declare const empty: Matcher<never>;
|
|
112
|
+
export declare const match: {
|
|
113
|
+
<Rt extends Route.Any, B, E2 = never, R2 = never>(route: Rt, handler: (params: RefSubject.RefSubject<Route.Type<Rt>, never, never>) => MatchHandlerReturnValue<B, E2, R2>): Matcher<B, E2, Scope.Scope | R2>;
|
|
114
|
+
<Rt extends Route.Any, B, E2 = never, R2 = never>(route: Rt, handler: Fx.Fx<B, E2, R2> | Effect.Effect<B, E2, R2> | Stream.Stream<B, E2, R2>): Matcher<B, E2, Scope.Scope | R2>;
|
|
115
|
+
<Rt extends Route.Any, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(route: Rt, options: MatchHandlerOptions<Route.Type<Rt>, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["a"], ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["e"], Scope.Scope | ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["r"]>;
|
|
116
|
+
<Rt extends Route.Any, const B>(route: Rt, handler: B): Matcher<B, never, Scope.Scope>;
|
|
117
|
+
<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never>(route: Rt, guard: G, handler: (params: RefSubject.RefSubject<GuardOutput<G>, never, never>) => MatchHandlerReturnValue<B, E2, R2>): Matcher<B, E2 | GuardError<G>, Scope.Scope | R2 | GuardServices<G>>;
|
|
118
|
+
<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never>(route: Rt, guard: G, handler: Fx.Fx<B, E2, R2> | Effect.Effect<B, E2, R2> | Stream.Stream<B, E2, R2>): Matcher<B, E2 | GuardError<G>, Scope.Scope | R2 | GuardServices<G>>;
|
|
119
|
+
<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(route: Rt, guard: G, options: MatchHandlerOptions<GuardOutput<G>, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<ApplyCatch<LB, ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["e"], ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["r"], C>["a"], ApplyCatch<LB, ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["e"], ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["r"], C>["e"], Scope.Scope | ApplyCatch<LB, ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["e"], ApplyDependencies<E2 | LE2 | GuardError<G>, R2 | LR2 | GuardServices<G>, D>["r"], C>["r"]>;
|
|
120
|
+
<Rt extends Route.Any, G extends GuardInput<Route.Type<Rt>, any, any, any>, B>(route: Rt, guard: G, handler: B): Matcher<B, GuardError<G>, Scope.Scope | GuardServices<G>>;
|
|
121
|
+
<Rt extends Route.Any, B, E2 = never, R2 = never, D extends ReadonlyArray<AnyDependency> | undefined = undefined, LB = B, LE2 = never, LR2 = never, C extends CatchHandler<any, any, any, any> | undefined = undefined>(options: MatchOptions<Rt, B, E2, R2, D, LB, LE2, LR2, C>): Matcher<ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["a"], ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["e"], Scope.Scope | ApplyCatch<LB, ApplyDependencies<E2 | LE2, R2 | LR2, D>["e"], ApplyDependencies<E2 | LE2, R2 | LR2, D>["r"], C>["r"]>;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Merge multiple matchers into one. Each matcher's layouts and provide apply only to its own routes.
|
|
125
|
+
* Use this so directory layouts (e.g. api/_layout) and directory dependencies apply only to routes under that directory.
|
|
126
|
+
*/
|
|
127
|
+
export declare function merge<const Matchers extends ReadonlyArray<Matcher.Any>>(...matchers: Matchers): Matcher<Matcher.MergeSuccess<Matchers>, Matcher.MergeError<Matchers>, Matcher.MergeServices<Matchers>>;
|
|
128
|
+
declare const RouteGuardError_base: Schema.ErrorClass<RouteGuardError, Schema.Struct<{
|
|
129
|
+
readonly _tag: Schema.tag<"RouteGuardError">;
|
|
130
|
+
readonly path: Schema.String;
|
|
131
|
+
readonly causes: Schema.$Array<Schema.Unknown>;
|
|
132
|
+
}>, Cause.YieldableError>;
|
|
133
|
+
export declare class RouteGuardError extends RouteGuardError_base {
|
|
134
|
+
}
|
|
135
|
+
declare const RouteNotFound_base: Schema.ErrorClass<RouteNotFound, Schema.Struct<{
|
|
136
|
+
readonly _tag: Schema.tag<"RouteNotFound">;
|
|
137
|
+
readonly path: Schema.String;
|
|
138
|
+
}>, Cause.YieldableError>;
|
|
139
|
+
export declare class RouteNotFound extends RouteNotFound_base {
|
|
140
|
+
}
|
|
141
|
+
declare const RouteDecodeError_base: Schema.ErrorClass<RouteDecodeError, Schema.Struct<{
|
|
142
|
+
readonly _tag: Schema.tag<"RouteDecodeError">;
|
|
143
|
+
readonly path: Schema.String;
|
|
144
|
+
readonly cause: Schema.String;
|
|
145
|
+
}>, Cause.YieldableError>;
|
|
146
|
+
export declare class RouteDecodeError extends RouteDecodeError_base {
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @internal
|
|
150
|
+
*/
|
|
151
|
+
export type CompiledEntry = {
|
|
152
|
+
readonly route: Route.Any;
|
|
153
|
+
readonly guard: AnyGuard;
|
|
154
|
+
readonly handler: AnyMatchHandler;
|
|
155
|
+
readonly layers: ReadonlyArray<AnyLayer>;
|
|
156
|
+
readonly layouts: ReadonlyArray<AnyLayout>;
|
|
157
|
+
readonly catches: ReadonlyArray<AnyCatch>;
|
|
158
|
+
readonly decode: (input: unknown) => Effect.Effect<any, Schema.SchemaError, any>;
|
|
159
|
+
};
|
|
160
|
+
export declare function run<M extends Matcher.Any>(matcher: M): Fx.Fx<Matcher.Success<M>, Matcher.Error<M> | RouteNotFound | RouteDecodeError | RouteGuardError, Matcher.Services<M> | Router | CurrentRoute | Scope.Scope>;
|
|
161
|
+
type InputSucces<T> = [Matcher.Success<T> | Fx.Fx.Success<T>] extends [infer A] ? A : never;
|
|
162
|
+
type InputError<T> = [Matcher.Error<T> | Fx.Fx.Error<T>] extends [infer E] ? E : never;
|
|
163
|
+
type InputServices<T> = [Matcher.Services<T> | Fx.Fx.Services<T>] extends [infer R] ? R : never;
|
|
164
|
+
export declare const catchCause: {
|
|
165
|
+
<I extends Fx.Fx.Any | Matcher.Any, B, E2 = never, R2 = never>(f: (cause: RefSubject.RefSubject<Cause.Cause<InputError<I> | RouteNotFound | RouteDecodeError | RouteGuardError>>) => Fx.Fx<B, E2, R2>): (input: I) => Fx.Fx<InputSucces<I> | B, E2, InputServices<I> | R2 | Router | Scope.Scope>;
|
|
166
|
+
<I extends Fx.Fx.Any | Matcher.Any, B, E2 = never, R2 = never>(input: I, f: (cause: RefSubject.RefSubject<Cause.Cause<InputError<I> | RouteNotFound | RouteDecodeError | RouteGuardError>>) => Fx.Fx<B, E2, R2>): Fx.Fx<InputSucces<I> | B, E2, InputServices<I> | R2 | Router | Scope.Scope>;
|
|
167
|
+
};
|
|
168
|
+
export declare const catch_: {
|
|
169
|
+
<I extends Fx.Fx.Any | Matcher.Any, B, E2, R2>(f: (e: InputError<I>) => Fx.Fx<B, E2, R2>): (input: I) => Fx.Fx<InputSucces<I> | B, E2, InputServices<I> | R2 | Router | Scope.Scope>;
|
|
170
|
+
};
|
|
171
|
+
export { catch_ as catch };
|
|
172
|
+
export declare const catchTag: {
|
|
173
|
+
<I extends Fx.Fx.Any | Matcher.Any, const K extends Tags<E> | Arr.NonEmptyReadonlyArray<Tags<E>>, E, B, E2, R2>(k: K, f: (e: InputError<I>) => Fx.Fx<B, E2, R2>): (input: I) => Fx.Fx<InputSucces<I> | B, E2, InputServices<I> | R2 | Router | Scope.Scope>;
|
|
174
|
+
<I extends Fx.Fx.Any | Matcher.Any, const K extends Tags<InputError<I>> | Arr.NonEmptyReadonlyArray<Tags<InputError<I>>>, B, E2, R2>(input: I, k: K, f: (e: ExtractTag<InputError<I>, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>) => Fx.Fx<B, E2, R2>): Fx.Fx<InputSucces<I> | B, E2 | ExcludeTag<InputError<I>, K extends Arr.NonEmptyReadonlyArray<string> ? K[number] : K>, InputServices<I> | R2 | Router | Scope.Scope>;
|
|
175
|
+
};
|
|
176
|
+
export declare const redirectTo: (path: string) => <I extends Fx.Fx.Any | Matcher.Any>(input: I) => Fx.Fx<InputSucces<I>, never, Router | Scope.Scope | InputServices<I>>;
|
|
177
|
+
/**
|
|
178
|
+
* Normalize dependency input (ServiceMap | Layer | Array of either) into a single Layer.
|
|
179
|
+
* Use with `.provide(normalizeDependencyInput(deps))`.
|
|
180
|
+
*/
|
|
181
|
+
export declare function normalizeDependencyInput(input: AnyDependency | ReadonlyArray<AnyDependency>): AnyLayer;
|
|
182
|
+
/**
|
|
183
|
+
* @internal
|
|
184
|
+
*/
|
|
185
|
+
export declare function compile(cases: ReadonlyArray<MatchAst>): ReadonlyArray<CompiledEntry>;
|
|
186
|
+
/**
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
export declare function makeLayerManager(memoMap: Layer.MemoMap, rootScope: Scope.Scope, fiberId: number): {
|
|
190
|
+
prepare: (desired: ReadonlyArray<AnyLayer>) => Effect.Effect<{
|
|
191
|
+
services: ServiceMap.ServiceMap<never>;
|
|
192
|
+
commit: Effect.Effect<void, never, never>;
|
|
193
|
+
rollback: Effect.Effect<void, never, never>;
|
|
194
|
+
}, any, any>;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
export declare function makeLayoutManager(rootScope: Scope.Scope, fiberId: number): {
|
|
200
|
+
apply: (layouts: ReadonlyArray<AnyLayout>, paramsValue: any, inner: Fx.Fx<any, any, any>, services: ServiceMap.ServiceMap<any>) => Effect.Effect<Fx.Fx<any, any, any>, never, never>;
|
|
201
|
+
updateParams: (layouts: ReadonlyArray<AnyLayout>, paramsValue: any) => Effect.Effect<void, never, never>;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
export declare function makeCatchManager(rootScope: Scope.Scope, fiberId: number): {
|
|
207
|
+
apply: (catches: ReadonlyArray<AnyCatch>, inner: Fx.Fx<any, any, any>, services: ServiceMap.ServiceMap<any>) => Effect.Effect<Fx.Fx<any, any, any>, never, never>;
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=Matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Matcher.d.ts","sourceRoot":"","sources":["../src/Matcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAS1E,OAAO,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAC/C,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAClC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEtB,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;IAC1C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CACvC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KACzC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEtB,MAAM,MAAM,QAAQ,GAChB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAC5B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAChC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAC9B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAC9B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAEnC,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/E,KAAK,aAAa,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC9C,KAAK,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3D,KAAK,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjD,KAAK,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9C,KAAK,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpF,KAAK,kBAAkB,CAAC,CAAC,IACvB,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAC3C,QAAQ,GACR,CAAC,SAAS,UAAU,CAAC,UAAU,CAAC,MAAM,QAAQ,CAAC,GAC7C,QAAQ,GACR,KAAK,CAAC;AACd,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC/E,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEtF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC;AAC1F,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1E,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE7E,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAClD,KAAK,EAAE,CAAC,KACL,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAC/C;AACD,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjG,KAAK,WAAW,CAAC,CAAC,IAChB,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACvC,CAAC,GACD,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACvC,CAAC,GACD,KAAK,CAAC;AACd,KAAK,UAAU,CAAC,CAAC,IACf,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACvC,CAAC,GACD,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GACvC,CAAC,GACD,KAAK,CAAC;AACd,KAAK,aAAa,CAAC,CAAC,IAClB,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GACvC,CAAC,GACD,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GACvC,CAAC,GACD,KAAK,CAAC;AAEd,KAAK,YAAY,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI;IACvE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IACnB,QAAQ,CAAC,OAAO,EACZ,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAChC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACd,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACtB,CAAC,CAAC;AAEN,KAAK,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI;IAChE,QAAQ,CAAC,OAAO,EACZ,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAC5B,CAAC,SAAS,aAAa,CAAC,MAAM,GAAG,CAAC,GAC9B;IACE,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACrC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;CAC/E,GACD;IAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEvC,KAAK,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IACxB,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,GACrD;IAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;CAAE,GAC1D;IAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEtD,KAAK,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,UAAU,CACtE,EAAE,EACF,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EACvD,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EACvD,CAAC,CACF,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAE,SAAQ,QAAQ;IAChE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAGxC,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EACnD,KAAK,EAAE,EAAE,EACT,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAC7F,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGhD,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EACnD,KAAK,EAAE,EAAE,EACT,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAC9E,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGhD,KAAK,CACH,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,EACD,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9D,EAAE,GAAG,CAAC,EACN,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,KAAK,EACX,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,EAElE,KAAK,EAAE,EAAE,EACT,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAC1E,OAAO,CACR,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EACrE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EACrE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CACpF,CAAC;IAGF,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGhG,KAAK,CACH,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnD,CAAC,EACD,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EAEV,KAAK,EAAE,EAAE,EACT,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAC7F,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGnF,KAAK,CACH,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnD,CAAC,EACD,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EAEV,KAAK,EAAE,EAAE,EACT,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAC9E,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGnF,KAAK,CACH,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnD,CAAC,EACD,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9D,EAAE,GAAG,CAAC,EACN,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,KAAK,EACX,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,EAElE,KAAK,EAAE,EAAE,EACT,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAC1E,OAAO,CACR,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACxF,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACtF,CAAC,GACD,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GACpF,KAAK,CAAC,KAAK,CACd,CAAC;IAGF,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAChF,KAAK,EAAE,EAAE,EACT,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAGzE,KAAK,CACH,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,EACD,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,GAAG,SAAS,EAC9D,EAAE,GAAG,CAAC,EACN,GAAG,GAAG,KAAK,EACX,GAAG,GAAG,KAAK,EACX,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS,EAElE,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GACvD,OAAO,CACR,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EACrE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EACrE,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CACpF,CAAC;IAEF,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvE,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,SAAS,SAAS,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,EAClE,GAAG,MAAM,EAAE,MAAM,KACd,OAAO,CACV,CAAC,EACD,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAC9B,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CACzE,CAAC;IAEF,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC,EAC7B,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAC9B,OAAO,EAAE,CAAC,KACP,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnC,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAC3B,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,KAChC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9F,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzF,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACzF,GAAG,EAAE,CAAC,EACN,CAAC,EAAE,CACD,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KACnF,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAClB,OAAO,CACV,CAAC,GAAG,CAAC,EACL,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC/E,CAAC,GAAG,EAAE,CACP,CAAC;IAEF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EACzB,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KACpC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhC,oJAAoJ;IACpJ,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAC9D,GAAG,MAAM,EAAE,MAAM,KACd,OAAO,CACV,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAChC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAC9B,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAClC,CAAC;CACH;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAY,GAAG,GACX,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GACtB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GACxB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,KAAY,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxF,KAAY,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtF,KAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAEzF,2DAA2D;IAC3D,KAAY,YAAY,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAClG,yDAAyD;IACzD,KAAY,UAAU,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9F,4DAA4D;IAC5D,KAAY,aAAa,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAC/E,QAAQ,CAAC,MAAM,CAAC,CACjB,CAAC;CACH;AAED,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IACpC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACd,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACtB,CAAC,GACD,CAAC,CACC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,KAClC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAoV/E,eAAO,MAAM,KAAK,EAAE,OAAO,CAAC,KAAK,CAAuB,CAAC;AACzD,eAAO,MAAM,KAAK;KA9gBV,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE;KAMvC,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE;KAO3C,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,EACD,EAAE,UACF,EAAE,UACF,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,cAClD,EAAE,MACF,GAAG,UACH,GAAG,UACH,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;KAWlD,EAAE,SAAS,KAAK,CAAC,GAAG,QAAQ,CAAC;KAIjC,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,oDACD,CAAC,EACD,EAAE,UACF,EAAE;KASF,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,oDACD,CAAC,EACD,EAAE,UACF,EAAE;KASF,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,oDACD,CAAC,EACD,EAAE,UACF,EAAE,UACF,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,cAClD,EAAE,MACF,GAAG,UACH,GAAG,UACH,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;KAclD,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,oDAAoD,CAAC;KAQhF,EAAE,SAAS,KAAK,CAAC,GAAG,EACpB,CAAC,EACD,EAAE,UACF,EAAE,UACF,CAAC,SAAS,aAAa,CAAC,aAAa,CAAC,GAAG,SAAS,cAClD,EAAE,MACF,GAAG,UACH,GAAG,UACH,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;CAyad,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EACrE,GAAG,QAAQ,EAAE,QAAQ,GACpB,OAAO,CACR,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC9B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC5B,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAChC,CAgCA;;;;;;AAED,qBAAa,eAAgB,SAAQ,oBAMnC;CAAG;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAGjC;CAAG;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;AAEL;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;CAClF,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EACvC,OAAO,EAAE,CAAC,GACT,EAAE,CAAC,EAAE,CACN,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAClB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,gBAAgB,GAAG,eAAe,EACrE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC,KAAK,CAC1D,CA8IA;AAED,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5F,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACvF,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhG,eAAO,MAAM,UAAU,EAAE;IACvB,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAC3D,CAAC,EAAE,CACD,KAAK,EAAE,UAAU,CAAC,UAAU,CAC1B,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAChF,KACE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACpB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAE7F,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAC3D,KAAK,EAAE,CAAC,EACR,CAAC,EAAE,CACD,KAAK,EAAE,UAAU,CAAC,UAAU,CAC1B,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAChF,KACE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACpB,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAyBhF,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAC3C,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACxC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;CAmB9F,CAAC;AAEF,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;AAE3B,eAAO,MAAM,QAAQ,EAAE;IACrB,CACE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EACjC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC5D,CAAC,EACD,CAAC,EACD,EAAE,EACF,EAAE,EAEF,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACxC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAE7F,CACE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EACjC,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EACpF,CAAC,EACD,EAAE,EACF,EAAE,EAEF,KAAK,EAAE,CAAC,EACR,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CACD,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KACtF,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACpB,EAAE,CAAC,EAAE,CACN,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAClB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC3F,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAC7C,CAAC;CAkCH,CAAC;AAEF,eAAO,MAAM,UAAU,GACpB,MAAM,MAAM,MACZ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAChC,OAAO,CAAC,KACP,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CASpE,CAAC;AAgCN;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,GAClD,QAAQ,CAIV;AAoBD;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CA+DpF;AAeD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM;uBAMpE,aAAa,CAAC,QAAQ,CAAC;;;;;EAqElD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM;qBA0B5D,aAAa,CAAC,SAAS,CAAC,eACpB,GAAG,SACT,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,YACjB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;4BA6BP,aAAa,CAAC,SAAS,CAAC,eAAe,GAAG;EAW1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM;qBA0B3D,aAAa,CAAC,QAAQ,CAAC,SACzB,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,YACjB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;EA4CvC"}
|