@typed/router 0.0.4 → 0.0.5
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/Link.d.ts.map +1 -1
- package/dist/Link.js +15 -12
- package/dist/Link.js.map +1 -1
- package/dist/RouteMatcher.d.ts.map +1 -1
- package/dist/RouteMatcher.js +14 -16
- package/dist/RouteMatcher.js.map +1 -1
- package/dist/router.d.ts +2 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +16 -2
- package/dist/router.js.map +1 -1
- package/package.json +8 -8
- package/src/Link.ts +16 -15
- package/src/RouteMatcher.ts +15 -17
- package/src/router.ts +20 -3
- package/tsconfig.build.tsbuildinfo +1 -1
package/dist/Link.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAsB,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,wBAAgB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EACnD,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GACzB,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAsB,IAAI,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,wBAAgB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EACnD,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GACzB,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAmBjC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CACjB,KAAK,EAAE,UAAU,GAAG;QAAE,aAAa,EAAE,iBAAiB,CAAA;KAAE,KACrD,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;CACvC"}
|
package/dist/Link.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import * as Effect from '@effect/io/Effect';
|
|
2
|
+
import * as Fx from '@typed/fx';
|
|
2
3
|
import { EventHandler, html } from '@typed/html';
|
|
3
4
|
import { Router } from './router.js';
|
|
4
5
|
export function Link(props) {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
return Fx.gen(function* ($) {
|
|
7
|
+
const router = yield* $(Router.get);
|
|
8
|
+
const clickHandler = (event) => Effect.gen(function* ($) {
|
|
9
|
+
yield* $(router.currentPath.set(props.href));
|
|
10
|
+
if (props.onClick) {
|
|
11
|
+
yield* $(props.onClick(event));
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return html `<a
|
|
15
|
+
class=${props.className}
|
|
16
|
+
href="${props.href}"
|
|
17
|
+
onclick=${EventHandler.preventDefault(clickHandler)}
|
|
18
|
+
>${props.label}</a
|
|
19
|
+
>`;
|
|
11
20
|
});
|
|
12
|
-
return html `<a
|
|
13
|
-
class=${props.className}
|
|
14
|
-
href="${props.href}"
|
|
15
|
-
onclick=${EventHandler.preventDefault(clickHandler)}
|
|
16
|
-
>${props.label}</a
|
|
17
|
-
>`;
|
|
18
21
|
}
|
|
19
22
|
//# sourceMappingURL=Link.js.map
|
package/dist/Link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Link.js","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAqB,MAAM,aAAa,CAAA;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,UAAU,IAAI,CAClB,KAA0B;IAE1B,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,YAAY,GAAG,CAAC,KAAwD,EAAE,EAAE,CAChF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YAE5C,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;aAC/B;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO,IAAI,CAAA;cACD,KAAK,CAAC,SAAS;cACf,KAAK,CAAC,IAAI;gBACR,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC;SAChD,KAAK,CAAC,KAAK;MACd,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAGzC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"RouteMatcher.d.ts","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/RouteMatcher.js
CHANGED
|
@@ -5,9 +5,8 @@ import { pipe } from '@fp-ts/data/Function';
|
|
|
5
5
|
import * as Option from '@fp-ts/data/Option';
|
|
6
6
|
import * as Fx from '@typed/fx';
|
|
7
7
|
import { RenderContext } from '@typed/html';
|
|
8
|
-
import * as Route from '@typed/route';
|
|
9
8
|
import { RouteMatch } from './RouteMatch.js';
|
|
10
|
-
import {
|
|
9
|
+
import { redirectTo, Router } from './router.js';
|
|
11
10
|
export function RouteMatcher(routes) {
|
|
12
11
|
const matcher = {
|
|
13
12
|
routes,
|
|
@@ -24,9 +23,8 @@ export function RouteMatcher(routes) {
|
|
|
24
23
|
notFound: (f, options = {}) => Router.withFx((router) => Fx.gen(function* ($) {
|
|
25
24
|
const { environment } = yield* $(RenderContext.get);
|
|
26
25
|
// Create stable references to the route matchers
|
|
27
|
-
const matchers = Array.from(routes.values()).map((v) => [v, runRouteMatch(router, v)]);
|
|
28
|
-
const renderFallback =
|
|
29
|
-
const fallbackMatch = RouteMatch(Route.base, () => renderFallback, options?.layout);
|
|
26
|
+
const matchers = Array.from(routes.values()).map((v) => [{ ...v, route: router.route.concat(v.route) }, runRouteMatch(router, v)]);
|
|
27
|
+
const renderFallback = Fx.switchMap(f)(router.currentPath);
|
|
30
28
|
let previousFiber;
|
|
31
29
|
let previousLayout;
|
|
32
30
|
let previousRender;
|
|
@@ -37,14 +35,14 @@ export function RouteMatcher(routes) {
|
|
|
37
35
|
});
|
|
38
36
|
// This function helps us to ensure shared layouts are only rendered once
|
|
39
37
|
// and the outlet content is changed
|
|
40
|
-
const verifyShouldRerender = (
|
|
38
|
+
const verifyShouldRerender = (render, layout) => Effect.gen(function* ($) {
|
|
41
39
|
const previous = samplePreviousValues();
|
|
42
40
|
// Update the previous values
|
|
43
41
|
previousRender = render;
|
|
44
|
-
previousLayout =
|
|
42
|
+
previousLayout = layout;
|
|
45
43
|
previousFiber = undefined;
|
|
46
44
|
// Skip rerendering if the render function is the same
|
|
47
|
-
if (previous.render === render) {
|
|
45
|
+
if (previous.render === render && previous.layout === layout) {
|
|
48
46
|
return Option.none;
|
|
49
47
|
}
|
|
50
48
|
// Interrupt the previous fiber if it exists
|
|
@@ -52,10 +50,10 @@ export function RouteMatcher(routes) {
|
|
|
52
50
|
yield* $(Fiber.interrupt(previous.fiber));
|
|
53
51
|
}
|
|
54
52
|
// If we have a layout, we need to render it and use the route outlet.
|
|
55
|
-
if (
|
|
53
|
+
if (layout) {
|
|
56
54
|
// Render into the route outlet
|
|
57
55
|
previousFiber = yield* $(pipe(render, Fx.observe(router.outlet.set), Effect.forkScoped));
|
|
58
|
-
return Option.some(
|
|
56
|
+
return Option.some(layout);
|
|
59
57
|
}
|
|
60
58
|
// If we don't have a layout, but we did, we need to clear the outlet
|
|
61
59
|
if (previous.layout) {
|
|
@@ -65,19 +63,19 @@ export function RouteMatcher(routes) {
|
|
|
65
63
|
return Option.some(render);
|
|
66
64
|
});
|
|
67
65
|
return pipe(router.currentPath, environment === 'browser' ? Fx.skipRepeats : Fx.take(1), Fx.switchMapEffect((path) => Effect.gen(function* ($) {
|
|
68
|
-
yield* $(Effect.logDebug(`[@typed/router] Matching path: ${path}
|
|
66
|
+
yield* $(Effect.logDebug(`[@typed/router] Matching path: ${path}`));
|
|
69
67
|
// Attempt to find the best match
|
|
70
68
|
for (const [match, render] of matchers) {
|
|
71
|
-
yield* $(Effect.logDebug(`[@typed/router] Matching against: ${match.route.path}
|
|
69
|
+
yield* $(Effect.logDebug(`[@typed/router] Matching against: ${match.route.path}`));
|
|
72
70
|
const result = yield* $(match.route.match(path));
|
|
73
71
|
if (Option.isSome(result)) {
|
|
74
|
-
yield* $(Effect.logDebug(`[@typed/router] Matched against: ${match.route.path}
|
|
75
|
-
return yield* $(verifyShouldRerender(
|
|
72
|
+
yield* $(Effect.logDebug(`[@typed/router] Matched against: ${match.route.path}`));
|
|
73
|
+
return yield* $(verifyShouldRerender(render, match.layout));
|
|
76
74
|
}
|
|
77
75
|
}
|
|
78
|
-
yield* $(Effect.logDebug(`[@typed/router] Rendering fallback
|
|
76
|
+
yield* $(Effect.logDebug(`[@typed/router] Rendering fallback`));
|
|
79
77
|
// If we didn't find a match, render the not found page
|
|
80
|
-
return yield* $(verifyShouldRerender(
|
|
78
|
+
return yield* $(verifyShouldRerender(renderFallback, options.layout));
|
|
81
79
|
})), Fx.compact, Fx.skipRepeats, // Stable render references are used to avoid mounting the same component twice
|
|
82
80
|
Fx.switchLatest);
|
|
83
81
|
})),
|
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,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;
|
|
1
|
+
{"version":3,"file":"RouteMatcher.js","sourceRoot":"","sources":["../src/RouteMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as Effect from '@effect/io/Effect';
|
|
|
2
2
|
import * as Layer from '@effect/io/Layer';
|
|
3
3
|
import * as Scope from '@effect/io/Scope';
|
|
4
4
|
import * as Context from '@typed/context';
|
|
5
|
-
import { Location, History } from '@typed/dom';
|
|
5
|
+
import { Document, Location, History } from '@typed/dom';
|
|
6
6
|
import * as Fx from '@typed/fx';
|
|
7
7
|
import * as html from '@typed/html';
|
|
8
8
|
import { RenderContext } from '@typed/html';
|
|
@@ -63,5 +63,5 @@ export declare const redirectTo: {
|
|
|
63
63
|
};
|
|
64
64
|
export declare const makeRouter: (currentPath?: Fx.RefSubject<string>) => Effect.Effect<Location | History | Window | Document | Scope.Scope, never, Router>;
|
|
65
65
|
export declare const live: (currentPath?: Fx.RefSubject<string>) => Layer.Layer<Location | History | Window | Document, never, Router<never, string>>;
|
|
66
|
-
export declare function getCurrentPath(location: Location | HTMLAnchorElement): string;
|
|
66
|
+
export declare function getCurrentPath(location: Location | HTMLAnchorElement | URL): string;
|
|
67
67
|
//# sourceMappingURL=router.d.ts.map
|
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,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAGzC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as Effect from '@effect/io/Effect';
|
|
|
3
3
|
import { pipe } from '@fp-ts/data/Function';
|
|
4
4
|
import * as Option from '@fp-ts/data/Option';
|
|
5
5
|
import * as Context from '@typed/context';
|
|
6
|
-
import { Location, History, addWindowListener } from '@typed/dom';
|
|
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 Route from '@typed/route';
|
|
@@ -58,6 +58,7 @@ export function redirect(path) {
|
|
|
58
58
|
redirect.fx = (path) => Fx.fail(Redirect.make(path));
|
|
59
59
|
export const redirectTo = (route, ...[params]) => pipe(Router.withEffect((r) => r.createPath(route, params)), Effect.flatMap(redirect));
|
|
60
60
|
redirectTo.fx = (route, ...params) => pipe(Router.withEffect((r) => r.createPath(route, params)), Fx.fromEffect, Fx.switchMap(redirect.fx));
|
|
61
|
+
// TOOD: Add support for reading <base> tag for default Router path.
|
|
61
62
|
export const makeRouter = (currentPath) => Effect.gen(function* ($) {
|
|
62
63
|
const history = yield* $(History.get);
|
|
63
64
|
const location = yield* $(Location.get);
|
|
@@ -79,8 +80,12 @@ export const makeRouter = (currentPath) => Effect.gen(function* ($) {
|
|
|
79
80
|
history.pushState({}, '', path);
|
|
80
81
|
}
|
|
81
82
|
})), Effect.forkScoped));
|
|
83
|
+
// Find the configured base path
|
|
84
|
+
const document = yield* $(Document.get);
|
|
85
|
+
const base = document.querySelector('base');
|
|
86
|
+
const baseHref = base ? getBasePath(base.href) : '/';
|
|
82
87
|
// Make our base router
|
|
83
|
-
return Router(Route.
|
|
88
|
+
return Router(Route.Route(baseHref), currentPath);
|
|
84
89
|
});
|
|
85
90
|
export const live = (currentPath) => Router.layerSoped(makeRouter(currentPath));
|
|
86
91
|
export function getCurrentPath(location) {
|
|
@@ -120,4 +125,13 @@ function patchHistory_(history, sendEvent) {
|
|
|
120
125
|
sendEvent();
|
|
121
126
|
};
|
|
122
127
|
}
|
|
128
|
+
function getBasePath(href) {
|
|
129
|
+
try {
|
|
130
|
+
const url = new URL(href);
|
|
131
|
+
return getCurrentPath(url);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return href;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
123
137
|
//# sourceMappingURL=router.js.map
|
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,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;
|
|
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.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@effect/io": "~0.0.52",
|
|
25
25
|
"@fp-ts/data": "~0.0.36",
|
|
26
|
-
"@typed/context": "0.0.
|
|
27
|
-
"@typed/dom": "8.0.
|
|
28
|
-
"@typed/fx": "1.0.
|
|
29
|
-
"@typed/html": "3.0.
|
|
30
|
-
"@typed/path": "0.0.
|
|
31
|
-
"@typed/route": "0.0.
|
|
26
|
+
"@typed/context": "0.0.5",
|
|
27
|
+
"@typed/dom": "8.0.4",
|
|
28
|
+
"@typed/fx": "1.0.4",
|
|
29
|
+
"@typed/html": "3.0.4",
|
|
30
|
+
"@typed/path": "0.0.4",
|
|
31
|
+
"@typed/route": "0.0.4"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "9352897c6d28b36665c1e5306150fffcf6afc587",
|
|
34
34
|
"publishConfig": {
|
|
35
35
|
"access": "public"
|
|
36
36
|
}
|
package/src/Link.ts
CHANGED
|
@@ -7,23 +7,24 @@ import { Router } from './router.js'
|
|
|
7
7
|
export function Link<R = never, E = never, R2 = never>(
|
|
8
8
|
props: LinkProps<R, E, R2>,
|
|
9
9
|
): Fx.Fx<R | R2 | Router, E, Hole> {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
return Fx.gen(function* ($) {
|
|
11
|
+
const router = yield* $(Router.get)
|
|
12
|
+
const clickHandler = (event: MouseEvent & { currentTarget: HTMLAnchorElement }) =>
|
|
13
|
+
Effect.gen(function* ($) {
|
|
14
|
+
yield* $(router.currentPath.set(props.href))
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
if (props.onClick) {
|
|
17
|
+
yield* $(props.onClick(event))
|
|
18
|
+
}
|
|
19
|
+
})
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
href="${props.href}"
|
|
24
|
-
onclick=${EventHandler.preventDefault(clickHandler)}
|
|
25
|
-
>${props.label}</a
|
|
26
|
-
>`
|
|
21
|
+
return html`<a
|
|
22
|
+
class=${props.className}
|
|
23
|
+
href="${props.href}"
|
|
24
|
+
onclick=${EventHandler.preventDefault(clickHandler)}
|
|
25
|
+
>${props.label}</a
|
|
26
|
+
>`
|
|
27
|
+
})
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
export interface LinkProps<R, E, R2> {
|
package/src/RouteMatcher.ts
CHANGED
|
@@ -12,7 +12,7 @@ import * as Path from '@typed/path'
|
|
|
12
12
|
import * as Route from '@typed/route'
|
|
13
13
|
|
|
14
14
|
import { RouteMatch } from './RouteMatch.js'
|
|
15
|
-
import {
|
|
15
|
+
import { Redirect, redirectTo, Router } from './router.js'
|
|
16
16
|
|
|
17
17
|
export interface RouteMatcher<R = never, E = never> {
|
|
18
18
|
// Where things are actually stored immutably
|
|
@@ -118,11 +118,11 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
118
118
|
const { environment } = yield* $(RenderContext.get)
|
|
119
119
|
// Create stable references to the route matchers
|
|
120
120
|
const matchers = Array.from(routes.values()).map(
|
|
121
|
-
(v) =>
|
|
121
|
+
(v) =>
|
|
122
|
+
[{ ...v, route: router.route.concat(v.route) }, runRouteMatch(router, v)] as const,
|
|
122
123
|
)
|
|
123
124
|
|
|
124
|
-
const renderFallback =
|
|
125
|
-
const fallbackMatch = RouteMatch(Route.base, () => renderFallback, options?.layout)
|
|
125
|
+
const renderFallback = Fx.switchMap(f)(router.currentPath)
|
|
126
126
|
|
|
127
127
|
let previousFiber: Fiber.RuntimeFiber<any, any> | undefined
|
|
128
128
|
let previousLayout: Fx.Fx<any, any, html.Renderable> | undefined
|
|
@@ -137,19 +137,19 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
137
137
|
// This function helps us to ensure shared layouts are only rendered once
|
|
138
138
|
// and the outlet content is changed
|
|
139
139
|
const verifyShouldRerender = (
|
|
140
|
-
match: RouteMatch<any, any, any>,
|
|
141
140
|
render: Fx.Fx<any, any, html.Renderable>,
|
|
141
|
+
layout?: Fx.Fx<any, any, html.Renderable>,
|
|
142
142
|
): Effect.Effect<any, any, Option.Option<Fx.Fx<any, any, html.Renderable>>> =>
|
|
143
143
|
Effect.gen(function* ($) {
|
|
144
144
|
const previous = samplePreviousValues()
|
|
145
145
|
|
|
146
146
|
// Update the previous values
|
|
147
147
|
previousRender = render
|
|
148
|
-
previousLayout =
|
|
148
|
+
previousLayout = layout
|
|
149
149
|
previousFiber = undefined
|
|
150
150
|
|
|
151
151
|
// Skip rerendering if the render function is the same
|
|
152
|
-
if (previous.render === render) {
|
|
152
|
+
if (previous.render === render && previous.layout === layout) {
|
|
153
153
|
return Option.none
|
|
154
154
|
}
|
|
155
155
|
|
|
@@ -159,13 +159,13 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
// If we have a layout, we need to render it and use the route outlet.
|
|
162
|
-
if (
|
|
162
|
+
if (layout) {
|
|
163
163
|
// Render into the route outlet
|
|
164
164
|
previousFiber = yield* $(
|
|
165
165
|
pipe(render, Fx.observe(router.outlet.set), Effect.forkScoped),
|
|
166
166
|
)
|
|
167
167
|
|
|
168
|
-
return Option.some(
|
|
168
|
+
return Option.some(layout)
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
// If we don't have a layout, but we did, we need to clear the outlet
|
|
@@ -182,29 +182,27 @@ export function RouteMatcher<R, E>(routes: RouteMatcher<R, E>['routes']): RouteM
|
|
|
182
182
|
environment === 'browser' ? Fx.skipRepeats : Fx.take(1),
|
|
183
183
|
Fx.switchMapEffect((path) =>
|
|
184
184
|
Effect.gen(function* ($) {
|
|
185
|
-
yield* $(Effect.logDebug(`[@typed/router] Matching path: ${path}
|
|
185
|
+
yield* $(Effect.logDebug(`[@typed/router] Matching path: ${path}`))
|
|
186
186
|
|
|
187
187
|
// Attempt to find the best match
|
|
188
188
|
for (const [match, render] of matchers) {
|
|
189
|
-
yield* $(
|
|
190
|
-
Effect.logDebug(`[@typed/router] Matching against: ${match.route.path}.`),
|
|
191
|
-
)
|
|
189
|
+
yield* $(Effect.logDebug(`[@typed/router] Matching against: ${match.route.path}`))
|
|
192
190
|
|
|
193
191
|
const result = yield* $(match.route.match(path))
|
|
194
192
|
|
|
195
193
|
if (Option.isSome(result)) {
|
|
196
194
|
yield* $(
|
|
197
|
-
Effect.logDebug(`[@typed/router] Matched against: ${match.route.path}
|
|
195
|
+
Effect.logDebug(`[@typed/router] Matched against: ${match.route.path}`),
|
|
198
196
|
)
|
|
199
197
|
|
|
200
|
-
return yield* $(verifyShouldRerender(
|
|
198
|
+
return yield* $(verifyShouldRerender(render, match.layout))
|
|
201
199
|
}
|
|
202
200
|
}
|
|
203
201
|
|
|
204
|
-
yield* $(Effect.logDebug(`[@typed/router] Rendering fallback
|
|
202
|
+
yield* $(Effect.logDebug(`[@typed/router] Rendering fallback`))
|
|
205
203
|
|
|
206
204
|
// If we didn't find a match, render the not found page
|
|
207
|
-
return yield* $(verifyShouldRerender(
|
|
205
|
+
return yield* $(verifyShouldRerender(renderFallback, options.layout))
|
|
208
206
|
}),
|
|
209
207
|
),
|
|
210
208
|
Fx.compact,
|
package/src/router.ts
CHANGED
|
@@ -5,7 +5,7 @@ import * as Scope from '@effect/io/Scope'
|
|
|
5
5
|
import { pipe } from '@fp-ts/data/Function'
|
|
6
6
|
import * as Option from '@fp-ts/data/Option'
|
|
7
7
|
import * as Context from '@typed/context'
|
|
8
|
-
import { Location, History, addWindowListener } from '@typed/dom'
|
|
8
|
+
import { Document, Location, History, addWindowListener } from '@typed/dom'
|
|
9
9
|
import * as Fx from '@typed/fx'
|
|
10
10
|
import * as html from '@typed/html'
|
|
11
11
|
import { RenderContext } from '@typed/html'
|
|
@@ -179,6 +179,8 @@ redirectTo.fx = <R, P extends string>(
|
|
|
179
179
|
Fx.switchMap(redirect.fx),
|
|
180
180
|
)
|
|
181
181
|
|
|
182
|
+
// TOOD: Add support for reading <base> tag for default Router path.
|
|
183
|
+
|
|
182
184
|
export const makeRouter = (
|
|
183
185
|
currentPath?: Fx.RefSubject<string>,
|
|
184
186
|
): Effect.Effect<Location | History | Window | Document | Scope.Scope, never, Router> =>
|
|
@@ -222,8 +224,13 @@ export const makeRouter = (
|
|
|
222
224
|
),
|
|
223
225
|
)
|
|
224
226
|
|
|
227
|
+
// Find the configured base path
|
|
228
|
+
const document = yield* $(Document.get)
|
|
229
|
+
const base = document.querySelector('base')
|
|
230
|
+
const baseHref = base ? getBasePath(base.href) : '/'
|
|
231
|
+
|
|
225
232
|
// Make our base router
|
|
226
|
-
return Router(Route.
|
|
233
|
+
return Router(Route.Route(baseHref), currentPath) as Router
|
|
227
234
|
})
|
|
228
235
|
|
|
229
236
|
export const live = (
|
|
@@ -231,7 +238,7 @@ export const live = (
|
|
|
231
238
|
): Layer.Layer<Location | History | Window | Document, never, Router<never, string>> =>
|
|
232
239
|
Router.layerSoped(makeRouter(currentPath))
|
|
233
240
|
|
|
234
|
-
export function getCurrentPath(location: Location | HTMLAnchorElement) {
|
|
241
|
+
export function getCurrentPath(location: Location | HTMLAnchorElement | URL) {
|
|
235
242
|
return location.pathname + location.search + location.hash
|
|
236
243
|
}
|
|
237
244
|
|
|
@@ -277,3 +284,13 @@ function patchHistory_(history: History, sendEvent: () => void) {
|
|
|
277
284
|
sendEvent()
|
|
278
285
|
}
|
|
279
286
|
}
|
|
287
|
+
|
|
288
|
+
function getBasePath(href: string) {
|
|
289
|
+
try {
|
|
290
|
+
const url = new URL(href)
|
|
291
|
+
|
|
292
|
+
return getCurrentPath(url)
|
|
293
|
+
} catch {
|
|
294
|
+
return href
|
|
295
|
+
}
|
|
296
|
+
}
|