@typed/router 0.0.13 → 0.0.15
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/dist/RouteMatch.d.ts +3 -3
- package/dist/RouteMatch.d.ts.map +1 -1
- package/dist/RouteMatch.js +4 -3
- package/dist/RouteMatch.js.map +1 -1
- package/dist/RouteMatcher.d.ts +2 -2
- package/dist/RouteMatcher.d.ts.map +1 -1
- package/dist/RouteMatcher.js +8 -8
- package/dist/RouteMatcher.js.map +1 -1
- package/dist/router.d.ts +3 -3
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +11 -11
- package/dist/router.js.map +1 -1
- package/package.json +9 -9
- package/src/RouteMatch.ts +9 -9
- package/src/RouteMatcher.ts +12 -16
- package/src/router.ts +12 -12
- package/tsconfig.build.tsbuildinfo +1 -1
package/dist/RouteMatch.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as Layer from '@effect/io/Layer';
|
|
2
|
-
import
|
|
2
|
+
import * as Context from '@typed/context';
|
|
3
3
|
import * as Fx from '@typed/fx';
|
|
4
4
|
import type * as html from '@typed/html';
|
|
5
5
|
import type * as Path from '@typed/path';
|
|
@@ -8,9 +8,9 @@ export interface RouteMatch<R, E, P extends string> {
|
|
|
8
8
|
readonly route: Route.Route<R, P>;
|
|
9
9
|
readonly layout?: Fx.Fx<R, E, html.Renderable>;
|
|
10
10
|
readonly match: (params: Fx.Fx<never, never, Path.ParamsOf<P>>) => Fx.Fx<R, E, html.Renderable>;
|
|
11
|
-
readonly
|
|
11
|
+
readonly provideContext: (environment: Context.Context<R>) => RouteMatch<never, E, P>;
|
|
12
12
|
readonly provideService: <S>(tag: Context.Tag<S>, service: S) => RouteMatch<Exclude<R, S>, E, P>;
|
|
13
|
-
readonly
|
|
13
|
+
readonly provideSomeLayer: <R2, S>(layer: Layer.Layer<R2, never, S>) => RouteMatch<R2 | Exclude<R, S>, E, P>;
|
|
14
14
|
}
|
|
15
15
|
export declare function RouteMatch<R, P extends string, R2, E2, R3, E3>(route: Route.Route<R, P>, match: (params: Fx.Fx<never, never, Path.ParamsOf<P>>) => Fx.Fx<R2, E2, html.Renderable>, layout?: Fx.Fx<R3, E3, html.Renderable>): RouteMatch<R | R2 | R3, E2 | E3, P>;
|
|
16
16
|
//# sourceMappingURL=RouteMatch.d.ts.map
|
package/dist/RouteMatch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatch.d.ts","sourceRoot":"","sources":["../src/RouteMatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"RouteMatch.d.ts","sourceRoot":"","sources":["../src/RouteMatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,MAAM;IAChD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEjC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAE9C,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAE/F,QAAQ,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAErF,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAEhG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,EAC/B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAC7B,UAAU,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAC1C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC5D,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EACxF,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,GACtC,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CA0BrC"}
|
package/dist/RouteMatch.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { flow } from '@fp-ts/
|
|
1
|
+
import { flow } from '@fp-ts/core/Function';
|
|
2
|
+
import * as Context from '@typed/context';
|
|
2
3
|
import * as Fx from '@typed/fx';
|
|
3
4
|
import * as Route from '@typed/route';
|
|
4
5
|
export function RouteMatch(route, match, layout) {
|
|
@@ -6,9 +7,9 @@ export function RouteMatch(route, match, layout) {
|
|
|
6
7
|
route,
|
|
7
8
|
match,
|
|
8
9
|
layout,
|
|
9
|
-
|
|
10
|
+
provideContext: (env) => RouteMatch(Route.provideContext(env)(route), flow(match, Fx.contramapContext(Context.merge(env))), layout ? Fx.provideContext(env)(layout) : undefined),
|
|
10
11
|
provideService: (tag, service) => RouteMatch(Route.provideService(tag, service)(route), flow(match, Fx.provideService(tag)(service)), layout ? Fx.provideService(tag)(service)(layout) : undefined),
|
|
11
|
-
|
|
12
|
+
provideSomeLayer: (layer) => RouteMatch(Route.provideSomeLayer(layer)(route), flow(match, Fx.provideSomeLayer(layer)), layout ? Fx.provideSomeLayer(layer)(layout) : undefined),
|
|
12
13
|
};
|
|
13
14
|
return routeMatch;
|
|
14
15
|
}
|
package/dist/RouteMatch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatch.js","sourceRoot":"","sources":["../src/RouteMatch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"RouteMatch.js","sourceRoot":"","sources":["../src/RouteMatch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAG/B,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAkBrC,MAAM,UAAU,UAAU,CACxB,KAAwB,EACxB,KAAwF,EACxF,MAAuC;IAEvC,MAAM,UAAU,GAAwC;QACtD,KAAK;QACL,KAAK;QACL,MAAM;QACN,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CACtB,UAAU,CACR,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAChC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EACpD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CACpD;QACH,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAC/B,UAAU,CACR,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,EACzC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAC7D;QACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,UAAU,CACR,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACpC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EACvC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CACxD;KACJ,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
package/dist/RouteMatcher.d.ts
CHANGED
|
@@ -13,9 +13,9 @@ export interface RouteMatcher<R = never, E = never> {
|
|
|
13
13
|
readonly matchFx: <R2, P extends string, R3, E3>(route: Route.Route<R2, P>, f: (params: Fx.Fx<never, never, Path.ParamsOf<P>>) => Fx.Fx<R3, E3, html.Renderable>) => RouteMatcher<R | R2, E | E3>;
|
|
14
14
|
readonly matchEffect: <R2, P extends string, R3, E3>(route: Route.Route<R2, P>, f: (params: Path.ParamsOf<P>) => Effect.Effect<R3, E3, html.Renderable>) => RouteMatcher<R | R2, E | E3>;
|
|
15
15
|
readonly withLayout: <R2, E2>(fx: Fx.Fx<R2, E2, html.Renderable>) => RouteMatcher<R | R2, E | E2>;
|
|
16
|
-
readonly
|
|
16
|
+
readonly provideContext: <R2>(environment: Context.Context<R2>) => RouteMatcher<Exclude<R, R2>, E>;
|
|
17
17
|
readonly provideService: <R2>(tag: Context.Tag<R2>, service: R2) => RouteMatcher<Exclude<R, R2>, E>;
|
|
18
|
-
readonly
|
|
18
|
+
readonly provideSomeLayer: <R2, S>(layer: Layer.Layer<R2, never, S>) => RouteMatcher<Exclude<R, S> | R2, E>;
|
|
19
19
|
readonly notFound: <R2, E2, R3 = never, E3 = never>(f: (path: string) => Fx.Fx<R2, E2, html.Renderable>, options?: FallbackOptions<R3, E3>) => Fx.Fx<Router | R | R2 | R3, E | E2 | E3, html.Renderable>;
|
|
20
20
|
readonly notFoundEffect: <R2, E2, R3 = never, E3 = never>(f: (path: string) => Effect.Effect<R2, E2, html.Renderable>, options?: FallbackOptions<R3, E3>) => Fx.Fx<Router | R | R2 | R3, E | E2 | E3, html.Renderable>;
|
|
21
21
|
readonly redirectTo: <R2, P extends string>(route: Route.Route<R2, P>, ...params: [keyof Path.ParamsOf<P>] extends [never] ? [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAG9C,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AAExC,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAc,MAAM,EAAE,MAAM,aAAa,CAAA;AAE1D,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IAEhD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAI9E,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EAC3C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACzB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KAC5D,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAEjC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EAC7C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACzB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KACjF,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAEjC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EACjD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACzB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KACpE,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAIjC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAIjG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/RouteMatcher.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import * as Cause from '@effect/io/Cause';
|
|
3
3
|
import * as Effect from '@effect/io/Effect';
|
|
4
4
|
import * as Fiber from '@effect/io/Fiber';
|
|
5
|
-
import { pipe } from '@fp-ts/
|
|
6
|
-
import * as Option from '@fp-ts/
|
|
5
|
+
import { pipe } from '@fp-ts/core/Function';
|
|
6
|
+
import * as Option from '@fp-ts/core/Option';
|
|
7
7
|
import * as Fx from '@typed/fx';
|
|
8
8
|
import { RenderContext } from '@typed/html';
|
|
9
9
|
import { RouteMatch } from './RouteMatch.js';
|
|
@@ -18,9 +18,9 @@ export function RouteMatcher(routes) {
|
|
|
18
18
|
k,
|
|
19
19
|
RouteMatch(match.route, match.match, match.layout ?? layout),
|
|
20
20
|
]))),
|
|
21
|
-
|
|
21
|
+
provideContext: (environment) => RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.provideContext(environment)]))),
|
|
22
22
|
provideService: (tag, service) => RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.provideService(tag, service)]))),
|
|
23
|
-
|
|
23
|
+
provideSomeLayer: (layer) => RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.provideSomeLayer(layer)]))),
|
|
24
24
|
notFound: (f, options = {}) => Router.withFx((router) => Fx.gen(function* ($) {
|
|
25
25
|
const { environment } = yield* $(RenderContext.get);
|
|
26
26
|
// Create stable references to the route matchers
|
|
@@ -45,7 +45,7 @@ export function RouteMatcher(routes) {
|
|
|
45
45
|
previousFiber = undefined;
|
|
46
46
|
// Skip rerendering if the render function is the same
|
|
47
47
|
if (previous.render === render && previous.layout === layout) {
|
|
48
|
-
return Option.none;
|
|
48
|
+
return Option.none();
|
|
49
49
|
}
|
|
50
50
|
// Interrupt the previous fiber if it exists
|
|
51
51
|
if (previous.render !== render && previous.fiber) {
|
|
@@ -87,7 +87,7 @@ export function RouteMatcher(routes) {
|
|
|
87
87
|
})),
|
|
88
88
|
notFoundEffect: (f) => matcher.notFound((path) => Fx.fromEffect(f(path))),
|
|
89
89
|
redirectTo: ((route, ...params) => matcher.notFound(() => redirectTo.fx(route, ...params))),
|
|
90
|
-
run: Fx.suspend(() => matcher.
|
|
90
|
+
run: Fx.suspend(() => matcher.notFound(() => Fx.succeed(null))),
|
|
91
91
|
};
|
|
92
92
|
return matcher;
|
|
93
93
|
}
|
|
@@ -98,9 +98,9 @@ export function RouteMatcher(routes) {
|
|
|
98
98
|
export const { matchFx, match, matchEffect } = RouteMatcher(new Map());
|
|
99
99
|
function runRouteMatch(router, { route, match }) {
|
|
100
100
|
return Fx.gen(function* ($) {
|
|
101
|
-
const env = yield* $(Effect.
|
|
101
|
+
const env = yield* $(Effect.context());
|
|
102
102
|
const nestedRouter = router.define(route);
|
|
103
|
-
const params = pipe(nestedRouter.params, Fx.
|
|
103
|
+
const params = pipe(nestedRouter.params, Fx.provideContext(env));
|
|
104
104
|
const render = pipe(match(params), Router.provideFx(nestedRouter));
|
|
105
105
|
return render;
|
|
106
106
|
});
|
package/dist/RouteMatcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAI3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Effect from '@effect/io/Effect';
|
|
2
2
|
import type * as Layer from '@effect/io/Layer';
|
|
3
3
|
import type * as Scope from '@effect/io/Scope';
|
|
4
|
-
import * as Option from '@fp-ts/
|
|
4
|
+
import * as Option from '@fp-ts/core/Option';
|
|
5
5
|
import * as Context from '@typed/context';
|
|
6
6
|
import { Document, Location, History } from '@typed/dom';
|
|
7
7
|
import * as Fx from '@typed/fx';
|
|
@@ -40,7 +40,7 @@ export interface Router<out R = never, in out P extends string = string> {
|
|
|
40
40
|
/**
|
|
41
41
|
* Provide all the resources needed for a Router
|
|
42
42
|
*/
|
|
43
|
-
readonly
|
|
43
|
+
readonly provideContext: (environment: Context.Context<R>) => Router<never, P>;
|
|
44
44
|
/**
|
|
45
45
|
* The parent router if one exists
|
|
46
46
|
*/
|
|
@@ -49,7 +49,7 @@ export interface Router<out R = never, in out P extends string = string> {
|
|
|
49
49
|
export declare const Router: (<R = never, P extends string = string>(route: Route.Route<R, P>, currentPath: Fx.RefSubject<string>, parent?: Option.Option<Router<any, string>>) => Router<R, P>) & Context.Tag<Router<never, string>>;
|
|
50
50
|
export declare const outlet: Fx.Fx<RenderContext | Router, never, html.Renderable>;
|
|
51
51
|
export declare const currentPath: Fx.Fx<Router, never, string>;
|
|
52
|
-
export declare function
|
|
52
|
+
export declare function provideContext<R>(environment: Context.Context<R>): <P extends string>(router: Router<R, P>) => Router<never, P>;
|
|
53
53
|
export interface Redirect {
|
|
54
54
|
readonly _tag: 'Redirect';
|
|
55
55
|
readonly path: string;
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,MAAM,WAAW,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEjC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAE3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAElD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE/C;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EACrF,KAAK,EAAE,EAAE,EACT,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAC9C,MAAM,CAAC,MAAM,CAChB,CAAC,EACD,KAAK,EACL,IAAI,CAAC,QAAQ,CACX;QAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAAC,CAC9F,CACF,CAAA;IAED;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,SAAS,MAAM,EACxC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9C;;OAEG;IACH,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
2
|
import * as Effect from '@effect/io/Effect';
|
|
3
|
-
import { pipe } from '@fp-ts/
|
|
4
|
-
import * as Option from '@fp-ts/
|
|
3
|
+
import { pipe } from '@fp-ts/core/Function';
|
|
4
|
+
import * as Option from '@fp-ts/core/Option';
|
|
5
5
|
import * as Context from '@typed/context';
|
|
6
6
|
import { Document, Location, History, addWindowListener } from '@typed/dom';
|
|
7
7
|
import * as Fx from '@typed/fx';
|
|
8
8
|
import { RenderContext } from '@typed/html';
|
|
9
9
|
import * as Path from '@typed/path';
|
|
10
10
|
import * as Route from '@typed/route';
|
|
11
|
-
export const Router = Object.assign(function makeRouter(route, currentPath, parent = Option.none) {
|
|
11
|
+
export const Router = Object.assign(function makeRouter(route, currentPath, parent = Option.none()) {
|
|
12
12
|
const outlet = Fx.RefSubject.unsafeMake(() => null);
|
|
13
13
|
const createPath = (other, ...[params]) => Effect.gen(function* ($) {
|
|
14
14
|
const path = yield* $(currentPath.get);
|
|
@@ -28,23 +28,23 @@ export const Router = Object.assign(function makeRouter(route, currentPath, pare
|
|
|
28
28
|
outlet,
|
|
29
29
|
createPath: createPath,
|
|
30
30
|
define: (other) => makeRouter(route.concat(other), currentPath, Option.some(router)),
|
|
31
|
-
|
|
31
|
+
provideContext: (env) => provideContext(env)(router),
|
|
32
32
|
parent,
|
|
33
33
|
};
|
|
34
34
|
return router;
|
|
35
|
-
}, Context.Tag());
|
|
35
|
+
}, Context.Tag('@typed/router/Router'));
|
|
36
36
|
export const outlet = RenderContext.withFx(({ environment }) => Router.withFx((r) => environment === 'browser'
|
|
37
37
|
? r.outlet
|
|
38
38
|
: pipe(r.outlet, Fx.skipUntil((x) => x !== null), Fx.take(1))));
|
|
39
39
|
export const currentPath = Router.withFx((r) => r.currentPath);
|
|
40
|
-
export function
|
|
40
|
+
export function provideContext(environment) {
|
|
41
41
|
return (router) => {
|
|
42
42
|
const provided = {
|
|
43
43
|
...router,
|
|
44
|
-
params: pipe(router.params, Fx.
|
|
45
|
-
route: Route.
|
|
46
|
-
createPath: ((other, ...params) => Effect.
|
|
47
|
-
|
|
44
|
+
params: pipe(router.params, Fx.provideContext(environment)),
|
|
45
|
+
route: Route.provideContext(environment)(router.route),
|
|
46
|
+
createPath: ((other, ...params) => Effect.provideContext(environment)(router.createPath(other, ...params))),
|
|
47
|
+
provideContext: (env) => provideContext(env)(provided),
|
|
48
48
|
};
|
|
49
49
|
return provided;
|
|
50
50
|
};
|
|
@@ -107,7 +107,7 @@ const patchHistory = Effect.gen(function* ($) {
|
|
|
107
107
|
const history = yield* $(History.get);
|
|
108
108
|
const historyEvents = Fx.Subject.unsafeMake();
|
|
109
109
|
const runtime = yield* $(Effect.runtime());
|
|
110
|
-
const cleanup = patchHistory_(history, () => runtime.
|
|
110
|
+
const cleanup = patchHistory_(history, () => runtime.unsafeFork(historyEvents.event()));
|
|
111
111
|
// unpatch history upon finalization
|
|
112
112
|
yield* $(Effect.addFinalizer(() => Effect.sync(cleanup)));
|
|
113
113
|
return historyEvents;
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAG3C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAuDrC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,CACrD,KAAwB,EACxB,WAAkC,EAClC,SAA6C,MAAM,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typed/router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -21,16 +21,16 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@effect/io": "
|
|
25
|
-
"@fp-ts/
|
|
26
|
-
"@typed/context": "0.0.
|
|
27
|
-
"@typed/dom": "8.0.
|
|
28
|
-
"@typed/fx": "1.0.
|
|
29
|
-
"@typed/html": "3.0.
|
|
24
|
+
"@effect/io": "0.1.3",
|
|
25
|
+
"@fp-ts/core": "0.1.1",
|
|
26
|
+
"@typed/context": "0.0.12",
|
|
27
|
+
"@typed/dom": "8.0.12",
|
|
28
|
+
"@typed/fx": "1.0.11",
|
|
29
|
+
"@typed/html": "3.0.12",
|
|
30
30
|
"@typed/path": "0.0.6",
|
|
31
|
-
"@typed/route": "0.0.
|
|
31
|
+
"@typed/route": "0.0.10"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "13a5ec0fe1b8bf1365a2010415927bebbdd7d320",
|
|
34
34
|
"publishConfig": {
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
package/src/RouteMatch.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
2
|
import type * as Layer from '@effect/io/Layer'
|
|
3
|
-
import { flow } from '@fp-ts/
|
|
4
|
-
import
|
|
3
|
+
import { flow } from '@fp-ts/core/Function'
|
|
4
|
+
import * as Context from '@typed/context'
|
|
5
5
|
import * as Fx from '@typed/fx'
|
|
6
6
|
import type * as html from '@typed/html'
|
|
7
7
|
import type * as Path from '@typed/path'
|
|
@@ -14,11 +14,11 @@ export interface RouteMatch<R, E, P extends string> {
|
|
|
14
14
|
|
|
15
15
|
readonly match: (params: Fx.Fx<never, never, Path.ParamsOf<P>>) => Fx.Fx<R, E, html.Renderable>
|
|
16
16
|
|
|
17
|
-
readonly
|
|
17
|
+
readonly provideContext: (environment: Context.Context<R>) => RouteMatch<never, E, P>
|
|
18
18
|
|
|
19
19
|
readonly provideService: <S>(tag: Context.Tag<S>, service: S) => RouteMatch<Exclude<R, S>, E, P>
|
|
20
20
|
|
|
21
|
-
readonly
|
|
21
|
+
readonly provideSomeLayer: <R2, S>(
|
|
22
22
|
layer: Layer.Layer<R2, never, S>,
|
|
23
23
|
) => RouteMatch<R2 | Exclude<R, S>, E, P>
|
|
24
24
|
}
|
|
@@ -32,11 +32,11 @@ export function RouteMatch<R, P extends string, R2, E2, R3, E3>(
|
|
|
32
32
|
route,
|
|
33
33
|
match,
|
|
34
34
|
layout,
|
|
35
|
-
|
|
35
|
+
provideContext: (env) =>
|
|
36
36
|
RouteMatch(
|
|
37
|
-
Route.
|
|
38
|
-
flow(match, Fx.
|
|
39
|
-
layout ? Fx.
|
|
37
|
+
Route.provideContext(env)(route),
|
|
38
|
+
flow(match, Fx.contramapContext(Context.merge(env))),
|
|
39
|
+
layout ? Fx.provideContext(env)(layout) : undefined,
|
|
40
40
|
),
|
|
41
41
|
provideService: (tag, service) =>
|
|
42
42
|
RouteMatch(
|
|
@@ -44,7 +44,7 @@ export function RouteMatch<R, P extends string, R2, E2, R3, E3>(
|
|
|
44
44
|
flow(match, Fx.provideService(tag)(service)),
|
|
45
45
|
layout ? Fx.provideService(tag)(service)(layout) : undefined,
|
|
46
46
|
),
|
|
47
|
-
|
|
47
|
+
provideSomeLayer: (layer) =>
|
|
48
48
|
RouteMatch(
|
|
49
49
|
Route.provideSomeLayer(layer)(route),
|
|
50
50
|
flow(match, Fx.provideSomeLayer(layer)),
|
package/src/RouteMatcher.ts
CHANGED
|
@@ -3,8 +3,8 @@ import * as Cause from '@effect/io/Cause'
|
|
|
3
3
|
import * as Effect from '@effect/io/Effect'
|
|
4
4
|
import * as Fiber from '@effect/io/Fiber'
|
|
5
5
|
import type * as Layer from '@effect/io/Layer'
|
|
6
|
-
import { pipe } from '@fp-ts/
|
|
7
|
-
import * as Option from '@fp-ts/
|
|
6
|
+
import { pipe } from '@fp-ts/core/Function'
|
|
7
|
+
import * as Option from '@fp-ts/core/Option'
|
|
8
8
|
import type * as Context from '@typed/context'
|
|
9
9
|
import * as Fx from '@typed/fx'
|
|
10
10
|
import type * as html from '@typed/html'
|
|
@@ -42,16 +42,14 @@ export interface RouteMatcher<R = never, E = never> {
|
|
|
42
42
|
|
|
43
43
|
// Provide resources
|
|
44
44
|
|
|
45
|
-
readonly
|
|
46
|
-
environment: Context.Context<R2>,
|
|
47
|
-
) => RouteMatcher<Exclude<R, R2>, E>
|
|
45
|
+
readonly provideContext: <R2>(environment: Context.Context<R2>) => RouteMatcher<Exclude<R, R2>, E>
|
|
48
46
|
|
|
49
47
|
readonly provideService: <R2>(
|
|
50
48
|
tag: Context.Tag<R2>,
|
|
51
49
|
service: R2,
|
|
52
50
|
) => RouteMatcher<Exclude<R, R2>, E>
|
|
53
51
|
|
|
54
|
-
readonly
|
|
52
|
+
readonly provideSomeLayer: <R2, S>(
|
|
55
53
|
layer: Layer.Layer<R2, never, S>,
|
|
56
54
|
) => RouteMatcher<Exclude<R, S> | R2, E>
|
|
57
55
|
|
|
@@ -100,16 +98,14 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
100
98
|
]),
|
|
101
99
|
),
|
|
102
100
|
),
|
|
103
|
-
|
|
104
|
-
RouteMatcher(
|
|
105
|
-
new Map(Array.from(routes).map(([k, v]) => [k, v.provideEnvironment(environment)])),
|
|
106
|
-
),
|
|
101
|
+
provideContext: (environment) =>
|
|
102
|
+
RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.provideContext(environment)]))),
|
|
107
103
|
provideService: (tag, service) =>
|
|
108
104
|
RouteMatcher(
|
|
109
105
|
new Map(Array.from(routes).map(([k, v]) => [k, v.provideService(tag, service)])),
|
|
110
106
|
),
|
|
111
|
-
|
|
112
|
-
RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.
|
|
107
|
+
provideSomeLayer: (layer) =>
|
|
108
|
+
RouteMatcher(new Map(Array.from(routes).map(([k, v]) => [k, v.provideSomeLayer(layer)]))),
|
|
113
109
|
notFound: <R2, E2, R3, E3>(
|
|
114
110
|
f: (path: string) => Fx.Fx<R2, E2, html.Renderable>,
|
|
115
111
|
options: FallbackOptions<R3, E3> = {},
|
|
@@ -152,7 +148,7 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
152
148
|
|
|
153
149
|
// Skip rerendering if the render function is the same
|
|
154
150
|
if (previous.render === render && previous.layout === layout) {
|
|
155
|
-
return Option.none
|
|
151
|
+
return Option.none()
|
|
156
152
|
}
|
|
157
153
|
|
|
158
154
|
// Interrupt the previous fiber if it exists
|
|
@@ -227,7 +223,7 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
227
223
|
notFoundEffect: (f) => matcher.notFound((path) => Fx.fromEffect(f(path))),
|
|
228
224
|
redirectTo: ((route, ...params) =>
|
|
229
225
|
matcher.notFound(() => redirectTo.fx(route, ...params))) as RouteMatcher<R, E>['redirectTo'],
|
|
230
|
-
run: Fx.suspend(() => matcher.
|
|
226
|
+
run: Fx.suspend(() => matcher.notFound(() => Fx.succeed(null))),
|
|
231
227
|
}
|
|
232
228
|
|
|
233
229
|
return matcher
|
|
@@ -249,9 +245,9 @@ function runRouteMatch<R, E, P extends string>(
|
|
|
249
245
|
{ route, match }: RouteMatch<R, E, P>,
|
|
250
246
|
): Fx.Fx<R, E, html.Renderable> {
|
|
251
247
|
return Fx.gen(function* ($) {
|
|
252
|
-
const env = yield* $(Effect.
|
|
248
|
+
const env = yield* $(Effect.context<R>())
|
|
253
249
|
const nestedRouter = router.define(route)
|
|
254
|
-
const params = pipe(nestedRouter.params, Fx.
|
|
250
|
+
const params = pipe(nestedRouter.params, Fx.provideContext(env))
|
|
255
251
|
const render = pipe(
|
|
256
252
|
match(params as unknown as Fx.Fx<never, never, Path.ParamsOf<P>>),
|
|
257
253
|
Router.provideFx(nestedRouter as Router),
|
package/src/router.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import * as Effect from '@effect/io/Effect'
|
|
3
3
|
import type * as Layer from '@effect/io/Layer'
|
|
4
4
|
import type * as Scope from '@effect/io/Scope'
|
|
5
|
-
import { pipe } from '@fp-ts/
|
|
6
|
-
import * as Option from '@fp-ts/
|
|
5
|
+
import { pipe } from '@fp-ts/core/Function'
|
|
6
|
+
import * as Option from '@fp-ts/core/Option'
|
|
7
7
|
import * as Context from '@typed/context'
|
|
8
8
|
import { Document, Location, History, addWindowListener } from '@typed/dom'
|
|
9
9
|
import * as Fx from '@typed/fx'
|
|
@@ -57,7 +57,7 @@ export interface Router<out R = never, in out P extends string = string> {
|
|
|
57
57
|
/**
|
|
58
58
|
* Provide all the resources needed for a Router
|
|
59
59
|
*/
|
|
60
|
-
readonly
|
|
60
|
+
readonly provideContext: (environment: Context.Context<R>) => Router<never, P>
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
63
|
* The parent router if one exists
|
|
@@ -68,7 +68,7 @@ export interface Router<out R = never, in out P extends string = string> {
|
|
|
68
68
|
export const Router = Object.assign(function makeRouter<R = never, P extends string = string>(
|
|
69
69
|
route: Route.Route<R, P>,
|
|
70
70
|
currentPath: Fx.RefSubject<string>,
|
|
71
|
-
parent: Option.Option<Router<any, string>> = Option.none,
|
|
71
|
+
parent: Option.Option<Router<any, string>> = Option.none(),
|
|
72
72
|
): Router<R, P> {
|
|
73
73
|
const outlet = Fx.RefSubject.unsafeMake((): html.Renderable => null)
|
|
74
74
|
|
|
@@ -108,13 +108,13 @@ export const Router = Object.assign(function makeRouter<R = never, P extends str
|
|
|
108
108
|
createPath: createPath as Router<R, P>['createPath'],
|
|
109
109
|
define: <R2, Path2 extends string>(other: Route.Route<R2, Path2>) =>
|
|
110
110
|
makeRouter(route.concat(other), currentPath, Option.some(router as any)),
|
|
111
|
-
|
|
111
|
+
provideContext: (env) => provideContext(env)(router),
|
|
112
112
|
parent,
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
return router
|
|
116
116
|
},
|
|
117
|
-
Context.Tag<Router>())
|
|
117
|
+
Context.Tag<Router>('@typed/router/Router'))
|
|
118
118
|
|
|
119
119
|
export const outlet: Fx.Fx<RenderContext | Router, never, html.Renderable> = RenderContext.withFx(
|
|
120
120
|
({ environment }) =>
|
|
@@ -131,18 +131,18 @@ export const outlet: Fx.Fx<RenderContext | Router, never, html.Renderable> = Ren
|
|
|
131
131
|
|
|
132
132
|
export const currentPath: Fx.Fx<Router, never, string> = Router.withFx((r) => r.currentPath)
|
|
133
133
|
|
|
134
|
-
export function
|
|
134
|
+
export function provideContext<R>(environment: Context.Context<R>) {
|
|
135
135
|
return <P extends string>(router: Router<R, P>): Router<never, P> => {
|
|
136
136
|
const provided: Router<never, P> = {
|
|
137
137
|
...router,
|
|
138
|
-
params: pipe(router.params, Fx.
|
|
139
|
-
route: Route.
|
|
138
|
+
params: pipe(router.params, Fx.provideContext(environment)),
|
|
139
|
+
route: Route.provideContext(environment)(router.route),
|
|
140
140
|
createPath: ((other, ...params) =>
|
|
141
|
-
Effect.
|
|
141
|
+
Effect.provideContext<R>(environment)(router.createPath(other, ...params))) as Router<
|
|
142
142
|
never,
|
|
143
143
|
P
|
|
144
144
|
>['createPath'],
|
|
145
|
-
|
|
145
|
+
provideContext: (env) => provideContext(env)(provided),
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
return provided
|
|
@@ -267,7 +267,7 @@ const patchHistory = Effect.gen(function* ($) {
|
|
|
267
267
|
const history = yield* $(History.get)
|
|
268
268
|
const historyEvents = Fx.Subject.unsafeMake<never, void>()
|
|
269
269
|
const runtime = yield* $(Effect.runtime<never>())
|
|
270
|
-
const cleanup = patchHistory_(history, () => runtime.
|
|
270
|
+
const cleanup = patchHistory_(history, () => runtime.unsafeFork(historyEvents.event()))
|
|
271
271
|
|
|
272
272
|
// unpatch history upon finalization
|
|
273
273
|
yield* $(Effect.addFinalizer(() => Effect.sync(cleanup)))
|