@typed/navigation 0.5.3 → 0.6.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.
Files changed (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/cjs/Blocking.js +53 -0
  4. package/dist/cjs/Blocking.js.map +1 -0
  5. package/dist/cjs/Layer.js +27 -0
  6. package/dist/cjs/Layer.js.map +1 -0
  7. package/dist/cjs/Navigation.js +184 -62
  8. package/dist/cjs/Navigation.js.map +1 -1
  9. package/dist/cjs/index.js +36 -17
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/internal/fromWindow.js +376 -0
  12. package/dist/cjs/internal/fromWindow.js.map +1 -0
  13. package/dist/cjs/internal/memory.js +67 -0
  14. package/dist/cjs/internal/memory.js.map +1 -0
  15. package/dist/cjs/internal/shared.js +403 -0
  16. package/dist/cjs/internal/shared.js.map +1 -0
  17. package/dist/dts/Blocking.d.ts +33 -0
  18. package/dist/dts/Blocking.d.ts.map +1 -0
  19. package/dist/dts/Layer.d.ts +44 -0
  20. package/dist/dts/Layer.d.ts.map +1 -0
  21. package/dist/dts/Navigation.d.ts +377 -0
  22. package/dist/dts/Navigation.d.ts.map +1 -0
  23. package/dist/dts/index.d.ts +17 -0
  24. package/dist/dts/index.d.ts.map +1 -0
  25. package/dist/dts/internal/fromWindow.d.ts +12 -0
  26. package/dist/dts/internal/fromWindow.d.ts.map +1 -0
  27. package/dist/dts/internal/memory.d.ts +6 -0
  28. package/dist/dts/internal/memory.d.ts.map +1 -0
  29. package/dist/dts/internal/shared.d.ts +139 -0
  30. package/dist/dts/internal/shared.d.ts.map +1 -0
  31. package/dist/esm/Blocking.js +39 -0
  32. package/dist/esm/Blocking.js.map +1 -0
  33. package/dist/esm/Layer.js +18 -0
  34. package/dist/esm/Layer.js.map +1 -0
  35. package/dist/esm/Navigation.js +166 -0
  36. package/dist/esm/Navigation.js.map +1 -0
  37. package/dist/esm/index.js +17 -0
  38. package/dist/esm/index.js.map +1 -0
  39. package/dist/esm/internal/fromWindow.js +273 -0
  40. package/dist/esm/internal/fromWindow.js.map +1 -0
  41. package/dist/esm/internal/memory.js +54 -0
  42. package/dist/esm/internal/memory.js.map +1 -0
  43. package/dist/esm/internal/shared.js +336 -0
  44. package/dist/esm/internal/shared.js.map +1 -0
  45. package/dist/esm/package.json +4 -0
  46. package/package.json +52 -32
  47. package/src/Blocking.ts +102 -0
  48. package/src/Layer.ts +53 -0
  49. package/src/Navigation.ts +342 -159
  50. package/src/index.ts +17 -3
  51. package/src/internal/fromWindow.ts +421 -0
  52. package/src/internal/memory.ts +79 -0
  53. package/src/internal/shared.ts +514 -0
  54. package/dist/DOM.d.ts +0 -12
  55. package/dist/DOM.d.ts.map +0 -1
  56. package/dist/DOM.js +0 -87
  57. package/dist/DOM.js.map +0 -1
  58. package/dist/Memory.d.ts +0 -10
  59. package/dist/Memory.d.ts.map +0 -1
  60. package/dist/Memory.js +0 -55
  61. package/dist/Memory.js.map +0 -1
  62. package/dist/Navigation.d.ts +0 -116
  63. package/dist/Navigation.d.ts.map +0 -1
  64. package/dist/Navigation.js +0 -36
  65. package/dist/Navigation.js.map +0 -1
  66. package/dist/_makeServerWindow.d.ts +0 -16
  67. package/dist/_makeServerWindow.d.ts.map +0 -1
  68. package/dist/_makeServerWindow.js +0 -9
  69. package/dist/_makeServerWindow.js.map +0 -1
  70. package/dist/cjs/DOM.d.ts +0 -12
  71. package/dist/cjs/DOM.d.ts.map +0 -1
  72. package/dist/cjs/DOM.js +0 -116
  73. package/dist/cjs/DOM.js.map +0 -1
  74. package/dist/cjs/Memory.d.ts +0 -10
  75. package/dist/cjs/Memory.d.ts.map +0 -1
  76. package/dist/cjs/Memory.js +0 -82
  77. package/dist/cjs/Memory.js.map +0 -1
  78. package/dist/cjs/Navigation.d.ts +0 -116
  79. package/dist/cjs/Navigation.d.ts.map +0 -1
  80. package/dist/cjs/_makeServerWindow.d.ts +0 -16
  81. package/dist/cjs/_makeServerWindow.d.ts.map +0 -1
  82. package/dist/cjs/_makeServerWindow.js +0 -36
  83. package/dist/cjs/_makeServerWindow.js.map +0 -1
  84. package/dist/cjs/constant.d.ts +0 -2
  85. package/dist/cjs/constant.d.ts.map +0 -1
  86. package/dist/cjs/constant.js +0 -30
  87. package/dist/cjs/constant.js.map +0 -1
  88. package/dist/cjs/dom-intent.d.ts +0 -28
  89. package/dist/cjs/dom-intent.d.ts.map +0 -1
  90. package/dist/cjs/dom-intent.js +0 -172
  91. package/dist/cjs/dom-intent.js.map +0 -1
  92. package/dist/cjs/history.d.ts +0 -31
  93. package/dist/cjs/history.d.ts.map +0 -1
  94. package/dist/cjs/history.js +0 -131
  95. package/dist/cjs/history.js.map +0 -1
  96. package/dist/cjs/index.d.ts +0 -4
  97. package/dist/cjs/index.d.ts.map +0 -1
  98. package/dist/cjs/json.d.ts +0 -13
  99. package/dist/cjs/json.d.ts.map +0 -1
  100. package/dist/cjs/json.js +0 -24
  101. package/dist/cjs/json.js.map +0 -1
  102. package/dist/cjs/memory-intent.d.ts +0 -27
  103. package/dist/cjs/memory-intent.d.ts.map +0 -1
  104. package/dist/cjs/memory-intent.js +0 -156
  105. package/dist/cjs/memory-intent.js.map +0 -1
  106. package/dist/cjs/model.d.ts +0 -22
  107. package/dist/cjs/model.d.ts.map +0 -1
  108. package/dist/cjs/model.js +0 -48
  109. package/dist/cjs/model.js.map +0 -1
  110. package/dist/cjs/shared-intent.d.ts +0 -14
  111. package/dist/cjs/shared-intent.d.ts.map +0 -1
  112. package/dist/cjs/shared-intent.js +0 -82
  113. package/dist/cjs/shared-intent.js.map +0 -1
  114. package/dist/cjs/storage.d.ts +0 -19
  115. package/dist/cjs/storage.d.ts.map +0 -1
  116. package/dist/cjs/storage.js +0 -101
  117. package/dist/cjs/storage.js.map +0 -1
  118. package/dist/cjs/util.d.ts +0 -5
  119. package/dist/cjs/util.d.ts.map +0 -1
  120. package/dist/cjs/util.js +0 -39
  121. package/dist/cjs/util.js.map +0 -1
  122. package/dist/constant.d.ts +0 -2
  123. package/dist/constant.d.ts.map +0 -1
  124. package/dist/constant.js +0 -4
  125. package/dist/constant.js.map +0 -1
  126. package/dist/dom-intent.d.ts +0 -28
  127. package/dist/dom-intent.d.ts.map +0 -1
  128. package/dist/dom-intent.js +0 -140
  129. package/dist/dom-intent.js.map +0 -1
  130. package/dist/history.d.ts +0 -31
  131. package/dist/history.d.ts.map +0 -1
  132. package/dist/history.js +0 -104
  133. package/dist/history.js.map +0 -1
  134. package/dist/index.d.ts +0 -4
  135. package/dist/index.d.ts.map +0 -1
  136. package/dist/index.js +0 -4
  137. package/dist/index.js.map +0 -1
  138. package/dist/intent.d.ts +0 -31
  139. package/dist/intent.d.ts.map +0 -1
  140. package/dist/intent.js +0 -157
  141. package/dist/intent.js.map +0 -1
  142. package/dist/json.d.ts +0 -13
  143. package/dist/json.d.ts.map +0 -1
  144. package/dist/json.js +0 -17
  145. package/dist/json.js.map +0 -1
  146. package/dist/memory-intent.d.ts +0 -27
  147. package/dist/memory-intent.d.ts.map +0 -1
  148. package/dist/memory-intent.js +0 -124
  149. package/dist/memory-intent.js.map +0 -1
  150. package/dist/model.d.ts +0 -22
  151. package/dist/model.d.ts.map +0 -1
  152. package/dist/model.js +0 -21
  153. package/dist/model.js.map +0 -1
  154. package/dist/shared-intent.d.ts +0 -14
  155. package/dist/shared-intent.d.ts.map +0 -1
  156. package/dist/shared-intent.js +0 -51
  157. package/dist/shared-intent.js.map +0 -1
  158. package/dist/storage.d.ts +0 -19
  159. package/dist/storage.d.ts.map +0 -1
  160. package/dist/storage.js +0 -73
  161. package/dist/storage.js.map +0 -1
  162. package/dist/tsconfig.cjs.build.tsbuildinfo +0 -1
  163. package/dist/util.d.ts +0 -5
  164. package/dist/util.d.ts.map +0 -1
  165. package/dist/util.js +0 -12
  166. package/dist/util.js.map +0 -1
  167. package/eslintrc.json +0 -3
  168. package/project.json +0 -46
  169. package/src/DOM.test.ts +0 -699
  170. package/src/DOM.ts +0 -163
  171. package/src/Memory.test.ts +0 -464
  172. package/src/Memory.ts +0 -102
  173. package/src/_makeServerWindow.ts +0 -28
  174. package/src/dom-intent.ts +0 -268
  175. package/src/history.ts +0 -165
  176. package/src/json.ts +0 -31
  177. package/src/memory-intent.ts +0 -224
  178. package/src/model.ts +0 -54
  179. package/src/shared-intent.ts +0 -117
  180. package/src/storage.ts +0 -101
  181. package/src/util.ts +0 -20
  182. package/tsconfig.build.json +0 -4
  183. package/tsconfig.build.tsbuildinfo +0 -1
  184. package/tsconfig.cjs.build.json +0 -22
  185. package/tsconfig.json +0 -27
  186. package/vite.config.mjs +0 -3
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { ParseResult } from "@effect/schema";
5
+ import * as Schema from "@effect/schema/Schema";
6
+ import { Tagged } from "@typed/context";
7
+ import * as Computed from "@typed/fx/Computed";
8
+ import * as IdSchema from "@typed/id/Schema";
9
+ import { Data, Effect } from "effect";
10
+ /**
11
+ * @since 1.0.0
12
+ */
13
+ export const Navigation = Tagged("@typed/navigation/Navigation");
14
+ const urlSchema_ = Schema.instanceOf(URL).pipe(Schema.equivalence((a, b) => a.href === b.href));
15
+ const urlSchema = Schema.string.pipe(Schema.transformOrFail(urlSchema_, (s) => Effect.suspend(() => {
16
+ try {
17
+ return Effect.succeed(new URL(s));
18
+ }
19
+ catch {
20
+ return Effect.fail(ParseResult.parseError([ParseResult.type(urlSchema_.ast, s, `Expected a URL`)]));
21
+ }
22
+ }), (url) => Effect.succeed(url.toString())));
23
+ /**
24
+ * @since 1.0.0
25
+ */
26
+ export const Destination = Schema.struct({
27
+ id: IdSchema.uuid,
28
+ key: IdSchema.uuid,
29
+ url: urlSchema,
30
+ state: Schema.unknown,
31
+ sameDocument: Schema.boolean
32
+ });
33
+ /**
34
+ * @since 1.0.0
35
+ */
36
+ export const ProposedDestination = Destination.pipe(Schema.omit("id", "key"));
37
+ /**
38
+ * @since 1.0.0
39
+ */
40
+ export const NavigationType = Schema.literal("push", "replace", "reload", "traverse");
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ export const Transition = Schema.struct({
45
+ type: NavigationType,
46
+ from: Destination,
47
+ to: Schema.union(ProposedDestination, Destination)
48
+ });
49
+ /**
50
+ * @since 1.0.0
51
+ */
52
+ export const BeforeNavigationEvent = Schema.struct({
53
+ type: NavigationType,
54
+ from: Destination,
55
+ delta: Schema.number,
56
+ to: Schema.union(ProposedDestination, Destination),
57
+ info: Schema.unknown
58
+ });
59
+ /**
60
+ * @since 1.0.0
61
+ */
62
+ export const NavigationEvent = Schema.struct({
63
+ type: NavigationType,
64
+ destination: Destination,
65
+ info: Schema.unknown
66
+ });
67
+ /**
68
+ * @since 1.0.0
69
+ */
70
+ export class NavigationError extends Data.TaggedError("NavigationError") {
71
+ }
72
+ /**
73
+ * @since 1.0.0
74
+ */
75
+ export class RedirectError extends Data.TaggedError("RedirectError") {
76
+ }
77
+ /**
78
+ * @since 1.0.0
79
+ */
80
+ export class CancelNavigation extends Data.TaggedError("CancelNavigation") {
81
+ }
82
+ /**
83
+ * @since 1.0.0
84
+ */
85
+ export const cancelNavigation = new CancelNavigation();
86
+ /**
87
+ * @since 1.0.0
88
+ */
89
+ export function redirectToPath(path, options) {
90
+ return new RedirectError({ path, options });
91
+ }
92
+ /**
93
+ * @since 1.0.0
94
+ */
95
+ export function isNavigationError(e) {
96
+ return e instanceof NavigationError;
97
+ }
98
+ /**
99
+ * @since 1.0.0
100
+ */
101
+ export function isRedirectError(e) {
102
+ return e instanceof RedirectError;
103
+ }
104
+ /**
105
+ * @since 1.0.0
106
+ */
107
+ export function isCancelNavigation(e) {
108
+ return e instanceof CancelNavigation;
109
+ }
110
+ /**
111
+ * @since 1.0.0
112
+ */
113
+ export const navigate = (url, options) => Navigation.withEffect((n) => n.navigate(url, options));
114
+ /**
115
+ * @since 1.0.0
116
+ */
117
+ export const back = (opts) => Navigation.withEffect((n) => n.back(opts));
118
+ /**
119
+ * @since 1.0.0
120
+ */
121
+ export const forward = (opts) => Navigation.withEffect((n) => n.forward(opts));
122
+ /**
123
+ * @since 1.0.0
124
+ */
125
+ export const traverseTo = (key, opts) => Navigation.withEffect((n) => n.traverseTo(key, opts));
126
+ /**
127
+ * @since 1.0.0
128
+ */
129
+ export const updateCurrentEntry = (opts) => Navigation.withEffect((n) => n.updateCurrentEntry(opts));
130
+ /**
131
+ * @since 1.0.0
132
+ */
133
+ export const reload = (opts) => Navigation.withEffect((n) => n.reload(opts));
134
+ /**
135
+ * @since 1.0.0
136
+ */
137
+ export const CurrentEntry = Computed.fromTag(Navigation, (nav) => nav.currentEntry);
138
+ /**
139
+ * @since 1.0.0
140
+ */
141
+ export function getCurrentPathFromUrl(location) {
142
+ return location.pathname + location.search + location.hash;
143
+ }
144
+ /**
145
+ * @since 1.0.0
146
+ */
147
+ export const CurrentPath = CurrentEntry.map((d) => getCurrentPathFromUrl(d.url));
148
+ /**
149
+ * @since 1.0.0
150
+ */
151
+ export const CurrentEntries = Computed.fromTag(Navigation, (n) => n.entries);
152
+ /**
153
+ * @since 1.0.0
154
+ */
155
+ export const CanGoForward = Computed.fromTag(Navigation, (n) => n.canGoForward);
156
+ /**
157
+ * @since 1.0.0
158
+ */
159
+ export const CanGoBack = Computed.fromTag(Navigation, (n) => n.canGoBack);
160
+ /**
161
+ * @since 1.0.0
162
+ */
163
+ export function handleRedirect(error) {
164
+ return navigate(error.path, error.options);
165
+ }
166
+ //# sourceMappingURL=Navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Navigation.js","sourceRoot":"","sources":["../../src/Navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Re-exports of other modules
3
+ * @since 1.0.0
4
+ */
5
+ /**
6
+ * @since 1.0.0
7
+ */
8
+ export * from "./Blocking";
9
+ /**
10
+ * @since 1.0.0
11
+ */
12
+ export * from "./Layer";
13
+ /**
14
+ * @since 1.0.0
15
+ */
16
+ export * from "./Navigation";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,cAAc,YAAY,CAAA;AAC1B;;GAEG;AACH,cAAc,SAAS,CAAA;AACvB;;GAEG;AACH,cAAc,cAAc,CAAA"}
@@ -0,0 +1,273 @@
1
+ import { Window } from "@typed/dom/Window";
2
+ import { scopedRuntime } from "@typed/fx/internal/helpers";
3
+ import * as RefSubject from "@typed/fx/RefSubject";
4
+ import { GetRandomValues, Uuid } from "@typed/id";
5
+ import { Effect, Option } from "effect";
6
+ import { Navigation, NavigationError } from "../Navigation";
7
+ import { getOriginalState, getUrl, isPatchedState, makeDestination, makeHandlersState, setupFromModelAndIntent } from "./shared";
8
+ export const fromWindow = Navigation.scoped(Window.withEffect((window) => {
9
+ const getRandomValues = (length) => Effect.sync(() => window.crypto.getRandomValues(new Uint8Array(length)));
10
+ return Effect.gen(function* (_) {
11
+ const { run, runPromise } = yield* _(scopedRuntime());
12
+ const hasNativeNavigation = !!window.navigation;
13
+ const modelAndIntent = yield* _(hasNativeNavigation
14
+ ? setupWithNavigation(window.navigation, runPromise)
15
+ : setupWithHistory(window, (event) => run(handleHistoryEvent(event))));
16
+ const navigation = setupFromModelAndIntent(modelAndIntent, window.location.origin, getBaseHref(window), getRandomValues, hasNativeNavigation ? () => getNavigationState(window.navigation) : undefined);
17
+ return navigation;
18
+ function handleHistoryEvent(event) {
19
+ return Effect.gen(function* (_) {
20
+ if (event._tag === "PushState") {
21
+ return yield* _(navigation.navigate(event.url, {}, event.skipCommit));
22
+ }
23
+ else if (event._tag === "ReplaceState") {
24
+ if (Option.isSome(event.url)) {
25
+ return yield* _(navigation.navigate(event.url.value, { history: "replace", state: event.state }, event.skipCommit));
26
+ }
27
+ else {
28
+ return yield* _(navigation.updateCurrentEntry(event));
29
+ }
30
+ }
31
+ else if (event._tag === "Traverse") {
32
+ const { entries, index } = yield* _(modelAndIntent.state);
33
+ const toIndex = Math.min(Math.max(0, index + event.delta), entries.length - 1);
34
+ const to = entries[toIndex];
35
+ return yield* _(navigation.traverseTo(to.key, {}, event.skipCommit));
36
+ }
37
+ else {
38
+ yield* _(navigation.traverseTo(event.key, {}, event.skipCommit));
39
+ return yield* _(navigation.updateCurrentEntry({ state: event.state }));
40
+ }
41
+ });
42
+ }
43
+ }).pipe(GetRandomValues.provide(getRandomValues));
44
+ }));
45
+ function getBaseHref(window) {
46
+ const base = window.document.querySelector("base");
47
+ return base ? base.href : "/";
48
+ }
49
+ const getNavigationState = (navigation) => {
50
+ const entries = navigation.entries().map(nativeEntryToDestination);
51
+ const { index } = navigation.currentEntry;
52
+ return {
53
+ entries,
54
+ index,
55
+ transition: Option.none()
56
+ };
57
+ };
58
+ function setupWithNavigation(navigation, runPromise) {
59
+ return Effect.gen(function* (_) {
60
+ const state = yield* _(RefSubject.fromEffect(Effect.sync(() => getNavigationState(navigation))));
61
+ const canGoBack = state.map((s) => s.index > 0);
62
+ const canGoForward = state.map((s) => s.index < s.entries.length - 1);
63
+ const { beforeHandlers, handlers } = yield* _(makeHandlersState());
64
+ const commit = (to, event) => Effect.gen(function* (_) {
65
+ const { key, state, url } = to;
66
+ const { info, type } = event;
67
+ if (type === "push" || type === "replace") {
68
+ yield* _(Effect.promise(() => navigation.navigate(url.toString(), { history: type, state, info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
69
+ }
70
+ else if (event.type === "reload") {
71
+ yield* _(Effect.promise(() => navigation.reload({ state, info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
72
+ }
73
+ else {
74
+ yield* _(Effect.promise(() => navigation.traverseTo(key, { info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
75
+ }
76
+ });
77
+ const runHandlers = (native) => Effect.gen(function* (_) {
78
+ const eventHandlers = yield* _(handlers);
79
+ const matches = [];
80
+ const event = {
81
+ type: native.navigationType,
82
+ destination: nativeEntryToDestination(navigation.currentEntry),
83
+ info: native.info
84
+ };
85
+ for (const [handler, ctx] of eventHandlers) {
86
+ const match = yield* _(handler(event), Effect.provide(ctx));
87
+ if (Option.isSome(match)) {
88
+ matches.push(Effect.provide(match.value, ctx));
89
+ }
90
+ }
91
+ if (matches.length > 0) {
92
+ yield* _(Effect.all(matches));
93
+ }
94
+ });
95
+ navigation.addEventListener("navigate", (ev) => {
96
+ if (shouldNotIntercept(ev))
97
+ return;
98
+ ev.intercept({
99
+ handler: () => runPromise(runHandlers(ev))
100
+ });
101
+ });
102
+ return {
103
+ state,
104
+ canGoBack,
105
+ canGoForward,
106
+ beforeHandlers,
107
+ handlers,
108
+ commit
109
+ };
110
+ });
111
+ }
112
+ function nativeEntryToDestination(entry) {
113
+ return {
114
+ id: Uuid(entry.id),
115
+ key: Uuid(entry.key),
116
+ url: new URL(entry.url),
117
+ state: entry.getState(),
118
+ sameDocument: entry.sameDocument
119
+ };
120
+ }
121
+ function shouldNotIntercept(navigationEvent) {
122
+ return (!navigationEvent.canIntercept ||
123
+ // If this is just a hashChange,
124
+ // just let the browser handle scrolling to the content.
125
+ navigationEvent.hashChange ||
126
+ // If this is a download,
127
+ // let the browser perform the download.
128
+ !!navigationEvent.downloadRequest ||
129
+ // If this is a form submission,
130
+ // let that go to the server.
131
+ !!navigationEvent.formData);
132
+ }
133
+ function setupWithHistory(window, onEvent) {
134
+ return Effect.gen(function* (_) {
135
+ const { location } = window;
136
+ const { original: history, unpatch } = patchHistory(window, onEvent);
137
+ yield* _(Effect.addFinalizer(() => unpatch));
138
+ const state = yield* _(RefSubject.fromEffect(Effect.suspend(() => Effect.map(makeDestination(new URL(location.href), history.state, location.origin), (destination) => ({ entries: [destination], index: 0, transition: Option.none() })))));
139
+ const canGoBack = state.map((s) => s.index > 0);
140
+ const canGoForward = state.map((s) => s.index < s.entries.length - 1);
141
+ const { beforeHandlers, handlers } = yield* _(makeHandlersState());
142
+ const commit = ({ id, key, state, url }, event) => Effect.sync(() => {
143
+ const { type } = event;
144
+ if (type === "push") {
145
+ history.pushState({ id, key, originalHistoryState: state }, "", url);
146
+ }
147
+ else if (type === "replace") {
148
+ history.replaceState({ id, key, originalHistoryState: state }, "", url);
149
+ }
150
+ else if (event.type === "reload") {
151
+ location.reload();
152
+ }
153
+ else {
154
+ history.go(event.delta);
155
+ }
156
+ });
157
+ return {
158
+ state,
159
+ canGoBack,
160
+ canGoForward,
161
+ beforeHandlers,
162
+ handlers,
163
+ commit
164
+ };
165
+ });
166
+ }
167
+ function patchHistory(window, onEvent) {
168
+ const { history, location } = window;
169
+ const stateDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(history), "state");
170
+ const methods = {
171
+ pushState: history.pushState.bind(history),
172
+ replaceState: history.replaceState.bind(history),
173
+ go: history.go.bind(history),
174
+ back: history.back.bind(history),
175
+ forward: history.forward.bind(history)
176
+ };
177
+ const getState = stateDescriptor?.get?.bind(history);
178
+ const original = {
179
+ get length() {
180
+ return history.length;
181
+ },
182
+ get scrollRestoration() {
183
+ return history.scrollRestoration;
184
+ },
185
+ set scrollRestoration(mode) {
186
+ history.scrollRestoration = mode;
187
+ },
188
+ get state() {
189
+ return getState?.() ?? history.state;
190
+ },
191
+ ...methods,
192
+ pushState(data, _, url) {
193
+ if (!stateDescriptor) {
194
+ ;
195
+ history.state = data;
196
+ }
197
+ return methods.pushState(data, _, url);
198
+ },
199
+ replaceState(data, _, url) {
200
+ if (!stateDescriptor) {
201
+ ;
202
+ history.state = data;
203
+ }
204
+ return methods.replaceState(data, _, url);
205
+ }
206
+ };
207
+ history.pushState = (state, _, url) => {
208
+ if (url) {
209
+ onEvent({ _tag: "PushState", state, url: getUrl(location.origin, url), skipCommit: false });
210
+ }
211
+ else {
212
+ onEvent({ _tag: "ReplaceState", state, url: Option.none(), skipCommit: false });
213
+ }
214
+ };
215
+ history.replaceState = (state, _, url) => {
216
+ onEvent({
217
+ _tag: "ReplaceState",
218
+ state,
219
+ url: url ? Option.some(getUrl(location.origin, url)) : Option.none(),
220
+ skipCommit: false
221
+ });
222
+ };
223
+ history.go = (delta) => {
224
+ if (delta && delta !== 0) {
225
+ onEvent({ _tag: "Traverse", delta, skipCommit: false });
226
+ }
227
+ };
228
+ history.back = () => {
229
+ onEvent({ _tag: "Traverse", delta: -1, skipCommit: false });
230
+ };
231
+ history.forward = () => {
232
+ onEvent({ _tag: "Traverse", delta: 1, skipCommit: false });
233
+ };
234
+ // In a proper browser this will allow patching to hide the id/key's associated with the state
235
+ if (stateDescriptor) {
236
+ Object.defineProperty(history, "state", {
237
+ get() {
238
+ return getOriginalState(stateDescriptor.get.call(history));
239
+ }
240
+ });
241
+ }
242
+ const onHashChange = () => {
243
+ onEvent({ _tag: "ReplaceState", state: history.state, url: Option.some(new URL(location.href)), skipCommit: false });
244
+ };
245
+ window.addEventListener("hashchange", onHashChange, { capture: true });
246
+ const onPopState = (ev) => {
247
+ if (isPatchedState(ev.state)) {
248
+ onEvent({ _tag: "TraverseTo", key: ev.state.key, state: ev.state.originalHistoryState, skipCommit: true });
249
+ }
250
+ else {
251
+ onEvent({ _tag: "ReplaceState", state: ev.state, url: Option.some(new URL(location.href)), skipCommit: true });
252
+ }
253
+ };
254
+ window.addEventListener("popstate", onPopState, { capture: true });
255
+ const unpatch = Effect.sync(() => {
256
+ history.pushState = original.pushState;
257
+ history.replaceState = original.replaceState;
258
+ history.go = original.go;
259
+ history.back = original.back;
260
+ history.forward = original.forward;
261
+ if (stateDescriptor) {
262
+ Object.defineProperty(history, "state", stateDescriptor);
263
+ }
264
+ window.removeEventListener("hashchange", onHashChange);
265
+ window.removeEventListener("popstate", onPopState);
266
+ });
267
+ return {
268
+ original,
269
+ patched: history,
270
+ unpatch
271
+ };
272
+ }
273
+ //# sourceMappingURL=fromWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromWindow.js","sourceRoot":"","sources":["../../../src/internal/fromWindow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import * as RefSubject from "@typed/fx/RefSubject";
2
+ import { GetRandomValues, getRandomValues } from "@typed/id";
3
+ import { Effect, Option } from "effect";
4
+ import { Navigation } from "../Navigation";
5
+ import { getOriginFromUrl, getUrl, makeDestination, makeHandlersState, setupFromModelAndIntent } from "./shared";
6
+ export const memory = (options) => Navigation.scoped(Effect.gen(function* (_) {
7
+ const getRandomValues = yield* _(GetRandomValues);
8
+ const modelAndIntent = yield* _(setupMemory(options));
9
+ const current = options.entries[options.currentIndex ?? 0];
10
+ const origin = options.origin ?? getOriginFromUrl(current.url);
11
+ const base = options.base ?? "/";
12
+ return setupFromModelAndIntent(modelAndIntent, origin, base, getRandomValues);
13
+ }).pipe(Effect.provide(getRandomValues)));
14
+ export function initialMemory(options) {
15
+ return Navigation.scoped(Effect.gen(function* (_) {
16
+ const getRandomValues = yield* _(GetRandomValues);
17
+ const origin = options.origin ?? getOriginFromUrl(options.url);
18
+ const base = options.base ?? "/";
19
+ const destination = yield* _(makeDestination(getUrl(origin, options.url), options.state, origin));
20
+ const memoryOptions = {
21
+ entries: [destination],
22
+ origin,
23
+ base,
24
+ currentIndex: 0,
25
+ maxEntries: options.maxEntries
26
+ };
27
+ const modelAndIntent = yield* _(setupMemory(memoryOptions));
28
+ return setupFromModelAndIntent(modelAndIntent, origin, base, getRandomValues);
29
+ }).pipe(Effect.provide(getRandomValues)));
30
+ }
31
+ function setupMemory(options) {
32
+ return Effect.gen(function* (_) {
33
+ const state = yield* _(RefSubject.fromEffect(Effect.sync(() => {
34
+ return {
35
+ entries: options.entries,
36
+ index: options.currentIndex ?? options.entries.length - 1,
37
+ transition: Option.none()
38
+ };
39
+ })));
40
+ const canGoBack = state.map((s) => s.index > 0);
41
+ const canGoForward = state.map((s) => s.index < s.entries.length - 1);
42
+ const { beforeHandlers, handlers } = yield* _(makeHandlersState());
43
+ const commit = options.commit ?? (() => Effect.unit);
44
+ return {
45
+ state,
46
+ canGoBack,
47
+ canGoForward,
48
+ beforeHandlers,
49
+ handlers,
50
+ commit
51
+ };
52
+ });
53
+ }
54
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/internal/memory.ts"],"names":[],"mappings":"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"}