@typed/router 0.1.4 → 0.2.0

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.
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.getBasePath = exports.getCurrentPath = exports.getCurrentPathFromLocation = exports.live = exports.makeRouter = exports.redirectTo = exports.redirect = exports.Redirect = exports.provideContext = exports.currentPath = exports.outlet = exports.Router = void 0;
27
+ /* eslint-disable @typescript-eslint/ban-types */
28
+ const Function_1 = require("@effect/data/Function");
29
+ const Option = __importStar(require("@effect/data/Option"));
30
+ const Effect = __importStar(require("@effect/io/Effect"));
31
+ const Runtime = __importStar(require("@effect/io/Runtime"));
32
+ const Context = __importStar(require("@typed/context"));
33
+ const dom_1 = require("@typed/dom");
34
+ const Fx = __importStar(require("@typed/fx"));
35
+ const html_1 = require("@typed/html");
36
+ const Path = __importStar(require("@typed/path"));
37
+ const Route = __importStar(require("@typed/route"));
38
+ exports.Router = Object.assign(function makeRouter(route, currentPath, parent = Option.none()) {
39
+ const outlet = Fx.RefSubject.unsafeMake(() => null);
40
+ const createPath = (other, ...[params]) => Effect.gen(function* ($) {
41
+ const path = yield* $(currentPath.get);
42
+ const baseParams = yield* $(route.match(path));
43
+ if (Option.isNone(baseParams)) {
44
+ return yield* $(Effect.dieMessage(`Can not create path when the parent can not be matched.
45
+ Parent Route: ${route.path}
46
+ Current Route: ${other.path}
47
+ Current Path: ${path}`));
48
+ }
49
+ return route.concat(other).make({ ...baseParams.value, ...params });
50
+ });
51
+ const router = {
52
+ route,
53
+ currentPath,
54
+ params: (0, Function_1.pipe)(currentPath, Fx.switchMapEffect(route.match), Fx.compact, Fx.skipRepeats),
55
+ outlet,
56
+ createPath: createPath,
57
+ define: (other) => makeRouter(route.concat(other), currentPath, Option.some(router)),
58
+ provideContext: (env) => provideContext(env)(router),
59
+ parent,
60
+ };
61
+ return router;
62
+ }, Context.Tag('@typed/router/Router'));
63
+ exports.outlet = html_1.RenderContext.withFx(({ environment }) => exports.Router.withFx((r) => environment === 'browser'
64
+ ? r.outlet
65
+ : (0, Function_1.pipe)(r.outlet, Fx.skipUntil((x) => x !== null), Fx.take(1))));
66
+ exports.currentPath = exports.Router.withFx((r) => r.currentPath);
67
+ function provideContext(environment) {
68
+ return (router) => {
69
+ const provided = {
70
+ ...router,
71
+ params: (0, Function_1.pipe)(router.params, Fx.provideContext(environment)),
72
+ route: Route.provideContext(environment)(router.route),
73
+ createPath: ((other, ...params) => Effect.provideContext(environment)(router.createPath(other, ...params))),
74
+ provideContext: (env) => provideContext(env)(provided),
75
+ };
76
+ return provided;
77
+ };
78
+ }
79
+ exports.provideContext = provideContext;
80
+ var Redirect;
81
+ (function (Redirect) {
82
+ Redirect.make = (path) => ({ _tag: 'Redirect', path });
83
+ Redirect.is = (r) => typeof r === 'object' && r !== null && '_tag' in r && r._tag === 'Redirect';
84
+ })(Redirect = exports.Redirect || (exports.Redirect = {}));
85
+ function redirect(path) {
86
+ return Effect.fail(Redirect.make(path));
87
+ }
88
+ exports.redirect = redirect;
89
+ redirect.fx = (path) => Fx.fail(Redirect.make(path));
90
+ const redirectTo = (route, ...[params]) => (0, Function_1.pipe)(exports.Router.withEffect((r) => r.createPath(route, params)), Effect.flatMap(redirect));
91
+ exports.redirectTo = redirectTo;
92
+ exports.redirectTo.fx = (route, ...params) => (0, Function_1.pipe)(exports.Router.withEffect((r) => r.createPath(route, params)), Fx.fromEffect, Fx.switchMap(redirect.fx));
93
+ // TOOD: Add support for reading <base> tag for default Router path.
94
+ const makeRouter = (currentPath) => Effect.gen(function* ($) {
95
+ const history = yield* $(dom_1.History.get);
96
+ const location = yield* $(dom_1.Location.get);
97
+ if (!currentPath) {
98
+ currentPath = Fx.RefSubject.unsafeMake(() => getCurrentPathFromLocation(location));
99
+ }
100
+ // Patch history events to emit an event when the path changes
101
+ const historyEvents = yield* $(patchHistory);
102
+ // Update the current path when events occur:
103
+ // - popstate
104
+ // - hashchange
105
+ // - history events
106
+ yield* $((0, Function_1.pipe)(Fx.mergeAll((0, dom_1.addWindowListener)('popstate'), (0, dom_1.addWindowListener)('hashchange'), historyEvents),
107
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
108
+ Fx.switchMapEffect(() => currentPath.set(getCurrentPathFromLocation(location))), Fx.forkScoped));
109
+ // Listen to path changes and update the current history location, if necessary
110
+ yield* $((0, Function_1.pipe)(currentPath, Fx.skipRepeats, Fx.observe((path) => Effect.sync(() => {
111
+ if (path !== getCurrentPathFromLocation(location)) {
112
+ history.pushState({}, '', path);
113
+ }
114
+ })), Effect.forkScoped));
115
+ // Find the configured base path
116
+ const document = yield* $(dom_1.Document.get);
117
+ const base = document.querySelector('base');
118
+ const baseHref = base ? getBasePathFromHref(base.href) : '/';
119
+ // Make our base router
120
+ return (0, exports.Router)(Route.Route(baseHref), currentPath);
121
+ });
122
+ exports.makeRouter = makeRouter;
123
+ const live = (currentPath) => exports.Router.layerScoped((0, exports.makeRouter)(currentPath));
124
+ exports.live = live;
125
+ function getCurrentPathFromLocation(location) {
126
+ return location.pathname + location.search + location.hash;
127
+ }
128
+ exports.getCurrentPathFromLocation = getCurrentPathFromLocation;
129
+ exports.getCurrentPath = exports.Router.withEffect((r) => r.currentPath.get);
130
+ exports.getBasePath = exports.Router.with((r) => {
131
+ const routers = [r];
132
+ let current = r;
133
+ while (Option.isSome(current.parent)) {
134
+ current = current.parent.value;
135
+ routers.push(current);
136
+ }
137
+ return routers.reduceRight((acc, r) => Path.pathJoin(r.route.path, acc), '');
138
+ });
139
+ const patchHistory = Effect.gen(function* ($) {
140
+ const history = yield* $(dom_1.History.get);
141
+ const historyEvents = Fx.Subject.unsafeMake();
142
+ const runtime = yield* $(Effect.runtime());
143
+ const cleanup = patchHistory_(history, () => Runtime.runFork(runtime)(historyEvents.event()));
144
+ // unpatch history upon finalization
145
+ yield* $(Effect.addFinalizer(() => Effect.sync(cleanup)));
146
+ return historyEvents;
147
+ });
148
+ function patchHistory_(history, sendEvent) {
149
+ const pushState = history.pushState.bind(history);
150
+ const replaceState = history.replaceState.bind(history);
151
+ const go = history.go.bind(history);
152
+ const back = history.back.bind(history);
153
+ const forward = history.forward.bind(history);
154
+ history.pushState = function (state, title, url) {
155
+ pushState(state, title, url);
156
+ sendEvent();
157
+ };
158
+ history.replaceState = function (state, title, url) {
159
+ replaceState(state, title, url);
160
+ sendEvent();
161
+ };
162
+ history.go = function (delta) {
163
+ go(delta);
164
+ sendEvent();
165
+ };
166
+ history.back = function () {
167
+ back();
168
+ sendEvent();
169
+ };
170
+ history.forward = function () {
171
+ forward();
172
+ sendEvent();
173
+ };
174
+ // Reset history to original state
175
+ return () => {
176
+ history.pushState = pushState;
177
+ history.replaceState = replaceState;
178
+ history.go = go;
179
+ history.back = back;
180
+ history.forward = forward;
181
+ };
182
+ }
183
+ function getBasePathFromHref(href) {
184
+ try {
185
+ const url = new URL(href);
186
+ return getCurrentPathFromLocation(url);
187
+ }
188
+ catch {
189
+ return href;
190
+ }
191
+ }
192
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router.ts"],"names":[],"mappings":"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"}