@typed/navigation 0.18.0 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.nvmrc +1 -0
  2. package/biome.json +39 -0
  3. package/dist/Blocking.d.ts +23 -0
  4. package/dist/Blocking.js +41 -0
  5. package/dist/Blocking.js.map +1 -0
  6. package/dist/Destination.d.ts +11 -0
  7. package/dist/Destination.js +10 -0
  8. package/dist/Destination.js.map +1 -0
  9. package/dist/Error.d.ts +33 -0
  10. package/dist/Error.js +22 -0
  11. package/dist/Error.js.map +1 -0
  12. package/dist/Event.d.ts +45 -0
  13. package/dist/Event.js +17 -0
  14. package/dist/Event.js.map +1 -0
  15. package/dist/Forms.d.ts +79 -0
  16. package/dist/Forms.js +111 -0
  17. package/dist/Forms.js.map +1 -0
  18. package/dist/Handler.d.ts +6 -0
  19. package/dist/Handler.js +2 -0
  20. package/dist/Handler.js.map +1 -0
  21. package/dist/{dts/Layer.d.ts → Layer.d.ts} +11 -8
  22. package/dist/{esm/Layer.js → Layer.js} +2 -2
  23. package/dist/Layer.js.map +1 -0
  24. package/dist/NavigateOptions.d.ts +7 -0
  25. package/dist/NavigateOptions.js +7 -0
  26. package/dist/NavigateOptions.js.map +1 -0
  27. package/dist/Navigation.d.ts +79 -0
  28. package/dist/Navigation.js +49 -0
  29. package/dist/Navigation.js.map +1 -0
  30. package/dist/NavigationType.d.ts +3 -0
  31. package/dist/NavigationType.js +3 -0
  32. package/dist/NavigationType.js.map +1 -0
  33. package/dist/ProposedDestination.d.ts +13 -0
  34. package/dist/ProposedDestination.js +4 -0
  35. package/dist/ProposedDestination.js.map +1 -0
  36. package/dist/Url.d.ts +13 -0
  37. package/dist/Url.js +72 -0
  38. package/dist/Url.js.map +1 -0
  39. package/dist/index.d.ts +12 -0
  40. package/dist/index.js +13 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/internal/fromWindow.d.ts +4 -0
  43. package/dist/{esm/internal → internal}/fromWindow.js +125 -136
  44. package/dist/internal/fromWindow.js.map +1 -0
  45. package/dist/internal/memory.d.ts +6 -0
  46. package/dist/internal/memory.js +59 -0
  47. package/dist/internal/memory.js.map +1 -0
  48. package/dist/{dts/internal → internal}/shared.d.ts +44 -46
  49. package/dist/{esm/internal → internal}/shared.js +121 -168
  50. package/dist/internal/shared.js.map +1 -0
  51. package/package.json +35 -53
  52. package/readme.md +243 -0
  53. package/src/Blocking.ts +65 -65
  54. package/src/Destination.ts +14 -0
  55. package/src/Error.ts +28 -0
  56. package/src/Event.ts +26 -0
  57. package/src/Forms.ts +216 -0
  58. package/src/Handler.ts +16 -0
  59. package/src/Layer.ts +20 -9
  60. package/src/NavigateOptions.ts +9 -0
  61. package/src/Navigation.test.ts +697 -0
  62. package/src/Navigation.ts +135 -472
  63. package/src/NavigationType.ts +5 -0
  64. package/src/ProposedDestination.ts +8 -0
  65. package/src/Url.ts +106 -0
  66. package/src/index.ts +12 -17
  67. package/src/internal/fromWindow.ts +163 -234
  68. package/src/internal/memory.ts +62 -49
  69. package/src/internal/shared.ts +218 -377
  70. package/tsconfig.json +30 -0
  71. package/Blocking/package.json +0 -6
  72. package/LICENSE +0 -21
  73. package/Layer/package.json +0 -6
  74. package/Navigation/package.json +0 -6
  75. package/README.md +0 -5
  76. package/dist/cjs/Blocking.js +0 -58
  77. package/dist/cjs/Blocking.js.map +0 -1
  78. package/dist/cjs/Layer.js +0 -27
  79. package/dist/cjs/Layer.js.map +0 -1
  80. package/dist/cjs/Navigation.js +0 -278
  81. package/dist/cjs/Navigation.js.map +0 -1
  82. package/dist/cjs/index.js +0 -39
  83. package/dist/cjs/index.js.map +0 -1
  84. package/dist/cjs/internal/fromWindow.js +0 -436
  85. package/dist/cjs/internal/fromWindow.js.map +0 -1
  86. package/dist/cjs/internal/memory.js +0 -72
  87. package/dist/cjs/internal/memory.js.map +0 -1
  88. package/dist/cjs/internal/shared.js +0 -525
  89. package/dist/cjs/internal/shared.js.map +0 -1
  90. package/dist/dts/Blocking.d.ts +0 -34
  91. package/dist/dts/Blocking.d.ts.map +0 -1
  92. package/dist/dts/Layer.d.ts.map +0 -1
  93. package/dist/dts/Navigation.d.ts +0 -451
  94. package/dist/dts/Navigation.d.ts.map +0 -1
  95. package/dist/dts/index.d.ts +0 -17
  96. package/dist/dts/index.d.ts.map +0 -1
  97. package/dist/dts/internal/fromWindow.d.ts +0 -12
  98. package/dist/dts/internal/fromWindow.d.ts.map +0 -1
  99. package/dist/dts/internal/memory.d.ts +0 -6
  100. package/dist/dts/internal/memory.d.ts.map +0 -1
  101. package/dist/dts/internal/shared.d.ts.map +0 -1
  102. package/dist/esm/Blocking.js +0 -46
  103. package/dist/esm/Blocking.js.map +0 -1
  104. package/dist/esm/Layer.js.map +0 -1
  105. package/dist/esm/Navigation.js +0 -238
  106. package/dist/esm/Navigation.js.map +0 -1
  107. package/dist/esm/index.js +0 -17
  108. package/dist/esm/index.js.map +0 -1
  109. package/dist/esm/internal/fromWindow.js.map +0 -1
  110. package/dist/esm/internal/memory.js +0 -56
  111. package/dist/esm/internal/memory.js.map +0 -1
  112. package/dist/esm/internal/shared.js.map +0 -1
  113. package/dist/esm/package.json +0 -4
@@ -1,107 +1,104 @@
1
- import * as Equivalence from "@effect/schema/Equivalence";
2
- import * as Context from "@typed/context";
3
- import { Window } from "@typed/dom/Window";
4
- import * as RefSubject from "@typed/fx/RefSubject";
5
- import { GetRandomValues, Uuid } from "@typed/id";
6
- import * as Effect from "effect/Effect";
7
- import * as Option from "effect/Option";
8
- import * as Runtime from "effect/Runtime";
9
- import * as Scope from "effect/Scope";
10
- import * as Schema from "@effect/schema/Schema";
11
- import * as Exit from "effect/Exit";
12
- import { Navigation, NavigationError } from "../Navigation.js";
13
- import { getOriginalState, getUrl, isPatchedState, makeDestination, makeHandlersState, NavigationState, setupFromModelAndIntent } from "./shared.js";
14
- export const fromWindow = Navigation.scoped(Window.withEffect((window) => {
15
- const getRandomValues = (length) => Effect.sync(() => window.crypto.getRandomValues(new Uint8Array(length)));
16
- return Effect.gen(function* () {
17
- const { run, runPromise } = yield* scopedRuntime();
18
- const hasNativeNavigation = !!window.navigation;
19
- const modelAndIntent = yield* hasNativeNavigation
20
- ? setupWithNavigation(window.navigation, runPromise)
21
- : setupWithHistory(window, (event) => run(handleHistoryEvent(event)));
22
- const navigation = setupFromModelAndIntent(modelAndIntent, window.location.origin, getBaseHref(window), getRandomValues, hasNativeNavigation
23
- ? () => getNavigationState(window.navigation)
24
- : undefined);
25
- return navigation;
26
- function handleHistoryEvent(event) {
27
- return Effect.gen(function* () {
28
- if (event._tag === "PushState") {
29
- return yield* navigation.navigate(event.url, {}, event.skipCommit);
30
- }
31
- else if (event._tag === "ReplaceState") {
32
- if (Option.isSome(event.url)) {
33
- return yield* navigation.navigate(event.url.value, { history: "replace", state: event.state }, event.skipCommit);
34
- }
35
- else {
36
- return yield* navigation.updateCurrentEntry(event);
37
- }
38
- }
39
- else if (event._tag === "Traverse") {
40
- const { entries, index } = yield* modelAndIntent.state;
41
- const toIndex = Math.min(Math.max(0, index + event.delta), entries.length - 1);
42
- const to = entries[toIndex];
43
- const result = yield* navigation.traverseTo(to.key, {}, event.skipCommit);
44
- return result;
1
+ import { GetRandomValues, Uuid4 } from '@typed/id';
2
+ import * as LazyRef from '@typed/lazy-ref';
3
+ import { Schema } from 'effect';
4
+ import * as Context from 'effect/Context';
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Exit from 'effect/Exit';
7
+ import * as Layer from 'effect/Layer';
8
+ import * as Option from 'effect/Option';
9
+ import * as Runtime from 'effect/Runtime';
10
+ import * as Scope from 'effect/Scope';
11
+ import { NavigationError } from '../Error.js';
12
+ import { Navigation } from '../Navigation.js';
13
+ import { getOriginalState, getUrl, isPatchedState, makeDestination, makeHandlersState, NavigationState, setupFromModelAndIntent, } from './shared.js';
14
+ export const fromWindow = (window) => Layer.scoped(Navigation, Effect.gen(function* () {
15
+ const getRandomValues = yield* GetRandomValues;
16
+ const { run, runPromise } = yield* scopedRuntime();
17
+ const hasNativeNavigation = !!window.navigation;
18
+ const base = getBaseHref(window);
19
+ const modelAndIntent = yield* hasNativeNavigation
20
+ ? setupWithNavigation(window.navigation, runPromise)
21
+ : setupWithHistory(window, base, (event) => run(handleHistoryEvent(event)));
22
+ const navigation = setupFromModelAndIntent(modelAndIntent, window.location.origin, base, getRandomValues, hasNativeNavigation ? () => getNavigationState(window.navigation) : undefined);
23
+ return navigation;
24
+ function handleHistoryEvent(event) {
25
+ return Effect.gen(function* () {
26
+ if (event._tag === 'PushState') {
27
+ return yield* navigation.navigate(event.url, {}, event.skipCommit);
28
+ }
29
+ else if (event._tag === 'ReplaceState') {
30
+ if (Option.isSome(event.url)) {
31
+ return yield* navigation.navigate(event.url.value, { history: 'replace', state: event.state }, event.skipCommit);
45
32
  }
46
33
  else {
47
- yield* navigation.traverseTo(event.key, {}, event.skipCommit);
48
- return yield* navigation.updateCurrentEntry({
49
- state: event.state
50
- });
34
+ return yield* navigation.updateCurrentEntry(event);
51
35
  }
52
- });
53
- }
54
- }).pipe(GetRandomValues.provide(getRandomValues));
36
+ }
37
+ else if (event._tag === 'Traverse') {
38
+ const { entries, index } = yield* modelAndIntent.state;
39
+ const toIndex = Math.min(Math.max(0, index + event.delta), entries.length - 1);
40
+ const to = entries[toIndex];
41
+ const result = yield* navigation.traverseTo(to.key, {}, event.skipCommit);
42
+ return result;
43
+ }
44
+ else {
45
+ yield* navigation.traverseTo(event.key, {}, event.skipCommit);
46
+ return yield* navigation.updateCurrentEntry({
47
+ state: event.state,
48
+ });
49
+ }
50
+ });
51
+ }
55
52
  }));
56
53
  function getBaseHref(window) {
57
- const base = window.document.querySelector("base");
58
- return base ? base.href : "/";
54
+ const base = window.document.querySelector('base');
55
+ return base ? base.href : '/';
59
56
  }
60
57
  const getNavigationState = (navigation) => {
61
58
  const entries = navigation.entries().map(nativeEntryToDestination);
59
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
62
60
  const { index } = navigation.currentEntry;
63
61
  return {
64
62
  entries,
65
63
  index,
66
- transition: Option.none()
64
+ transition: Option.none(),
67
65
  };
68
66
  };
69
67
  function setupWithNavigation(navigation, runPromise) {
70
68
  return Effect.gen(function* () {
71
- const state = yield* RefSubject.fromEffect(Effect.sync(() => getNavigationState(navigation)), {
72
- eq: Equivalence.make(Schema.typeSchema(Schema.typeSchema(NavigationState)))
69
+ const state = yield* LazyRef.fromEffect(Effect.sync(() => getNavigationState(navigation)), {
70
+ eq: Schema.equivalence(Schema.typeSchema(NavigationState)),
73
71
  });
74
- const canGoBack = RefSubject.map(state, (s) => s.index > 0);
75
- const canGoForward = RefSubject.map(state, (s) => s.index < s.entries.length - 1);
76
- const { beforeHandlers, formDataHandlers, handlers } = yield* makeHandlersState();
77
- const commit = (to, event) => Effect.gen(function* (_) {
72
+ const { beforeHandlers, handlers } = yield* makeHandlersState;
73
+ const commit = (to, event) => Effect.gen(function* () {
78
74
  const { key, state, url } = to;
79
75
  const { info, type } = event;
80
- if (type === "push" || type === "replace") {
81
- yield* _(Effect.promise(() => navigation.navigate(url.toString(), {
76
+ if (type === 'push' || type === 'replace') {
77
+ yield* Effect.promise(() => navigation.navigate(url.toString(), {
82
78
  history: type,
83
79
  state,
84
- info
85
- }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
80
+ info,
81
+ }).committed);
86
82
  }
87
- else if (event.type === "reload") {
88
- yield* _(Effect.promise(() => navigation.reload({ state, info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
83
+ else if (event.type === 'reload') {
84
+ yield* Effect.promise(() => navigation.reload({ state, info }).committed);
89
85
  }
90
86
  else {
91
- yield* _(Effect.promise(() => navigation.traverseTo(key, { info }).committed), Effect.catchAllDefect((error) => Effect.fail(new NavigationError({ error }))));
87
+ yield* Effect.promise(() => navigation.traverseTo(key, { info }).committed);
92
88
  }
93
- });
89
+ }).pipe(Effect.catchAllDefect((cause) => new NavigationError({ cause })));
94
90
  const runHandlers = (native) => Effect.gen(function* () {
95
91
  const eventHandlers = yield* handlers;
96
92
  const matches = [];
97
93
  const event = {
98
94
  type: native.navigationType,
95
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
99
96
  destination: nativeEntryToDestination(navigation.currentEntry),
100
- info: native.info
97
+ info: native.info,
101
98
  };
102
99
  for (const [handler, ctx] of eventHandlers) {
103
100
  const match = yield* Effect.provide(handler(event), ctx);
104
- if (Option.isSome(match)) {
101
+ if (match !== undefined && Option.isSome(match)) {
105
102
  matches.push(Effect.provide(match.value, ctx));
106
103
  }
107
104
  }
@@ -109,31 +106,29 @@ function setupWithNavigation(navigation, runPromise) {
109
106
  yield* Effect.all(matches);
110
107
  }
111
108
  });
112
- navigation.addEventListener("navigate", (ev) => {
109
+ navigation.addEventListener('navigate', (ev) => {
113
110
  if (shouldNotIntercept(ev))
114
111
  return;
115
112
  ev.intercept({
116
- handler: () => runPromise(runHandlers(ev))
113
+ handler: () => runPromise(runHandlers(ev)),
117
114
  });
118
115
  });
119
116
  return {
120
117
  state,
121
- canGoBack,
122
- canGoForward,
123
118
  beforeHandlers,
124
119
  handlers,
125
- formDataHandlers,
126
- commit
120
+ commit,
127
121
  };
128
122
  });
129
123
  }
130
124
  function nativeEntryToDestination(entry) {
131
125
  return {
132
- id: Uuid(entry.id),
133
- key: Uuid(entry.key),
126
+ id: Uuid4.make(entry.id),
127
+ key: Uuid4.make(entry.key),
128
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
134
129
  url: new URL(entry.url),
135
130
  state: entry.getState(),
136
- sameDocument: entry.sameDocument
131
+ sameDocument: entry.sameDocument,
137
132
  };
138
133
  }
139
134
  function shouldNotIntercept(navigationEvent) {
@@ -148,36 +143,34 @@ function shouldNotIntercept(navigationEvent) {
148
143
  // let that go to the server.
149
144
  !!navigationEvent.formData);
150
145
  }
151
- function setupWithHistory(window, onEvent) {
146
+ function setupWithHistory(window, base, onEvent) {
152
147
  return Effect.gen(function* () {
153
148
  const { location } = window;
154
- const { getHistoryState, original: history, unpatch } = patchHistory(window, onEvent);
149
+ const { getHistoryState, original: history, unpatch } = patchHistory(window, onEvent, base);
155
150
  yield* Effect.addFinalizer(() => unpatch);
156
- const state = yield* RefSubject.fromEffect(Effect.suspend(() => Effect.map(makeDestination(new URL(location.href), getHistoryState(), location.origin), (destination) => ({
151
+ const state = yield* LazyRef.fromEffect(Effect.suspend(() => Effect.map(makeDestination(new URL(location.href), getHistoryState(), location.origin), (destination) => ({
157
152
  entries: [destination],
158
153
  index: 0,
159
- transition: Option.none()
160
- }))), { eq: Equivalence.make(Schema.typeSchema(NavigationState)) });
161
- const canGoBack = RefSubject.map(state, (s) => s.index > 0);
162
- const canGoForward = RefSubject.map(state, (s) => s.index < s.entries.length - 1);
163
- const { beforeHandlers, formDataHandlers, handlers } = yield* makeHandlersState();
154
+ transition: Option.none(),
155
+ }))), { eq: Schema.equivalence(Schema.typeSchema(NavigationState)) });
156
+ const { beforeHandlers, handlers } = yield* makeHandlersState;
164
157
  const commit = ({ id, key, state, url }, event) => Effect.sync(() => {
165
158
  const { type } = event;
166
- if (type === "push") {
159
+ if (type === 'push') {
167
160
  history.pushState({
168
161
  __typed__navigation__id__: id,
169
162
  __typed__navigation__key__: key,
170
- __typed__navigation__state__: state
171
- }, "", url);
163
+ __typed__navigation__state__: state,
164
+ }, '', url);
172
165
  }
173
- else if (type === "replace") {
166
+ else if (type === 'replace') {
174
167
  history.replaceState({
175
168
  __typed__navigation__id__: id,
176
169
  __typed__navigation__key__: key,
177
- __typed__navigation__state__: state
178
- }, "", url);
170
+ __typed__navigation__state__: state,
171
+ }, '', url);
179
172
  }
180
- else if (event.type === "reload") {
173
+ else if (event.type === 'reload') {
181
174
  location.reload();
182
175
  }
183
176
  else {
@@ -185,31 +178,28 @@ function setupWithHistory(window, onEvent) {
185
178
  history.replaceState({
186
179
  __typed__navigation__id__: id,
187
180
  __typed__navigation__key__: key,
188
- __typed__navigation__state__: state
189
- }, "", window.location.href);
181
+ __typed__navigation__state__: state,
182
+ }, '', window.location.href);
190
183
  }
191
184
  });
192
185
  return {
193
186
  state,
194
- canGoBack,
195
- canGoForward,
196
187
  beforeHandlers,
197
188
  handlers,
198
- formDataHandlers,
199
- commit
189
+ commit,
200
190
  };
201
191
  });
202
192
  }
203
- function patchHistory(window, onEvent) {
193
+ function patchHistory(window, onEvent, base) {
204
194
  const { history, location } = window;
205
- const stateDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(history), "state") ||
206
- Object.getOwnPropertyDescriptor(history, "state");
195
+ const stateDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(history), 'state') ||
196
+ Object.getOwnPropertyDescriptor(history, 'state');
207
197
  const methods = {
208
198
  pushState: history.pushState.bind(history),
209
199
  replaceState: history.replaceState.bind(history),
210
200
  go: history.go.bind(history),
211
201
  back: history.back.bind(history),
212
- forward: history.forward.bind(history)
202
+ forward: history.forward.bind(history),
213
203
  };
214
204
  const getStateDescriptor = stateDescriptor?.get?.bind(history);
215
205
  const getHistoryState = () => getStateDescriptor?.();
@@ -232,73 +222,73 @@ function patchHistory(window, onEvent) {
232
222
  },
233
223
  replaceState(data, _, url) {
234
224
  return methods.replaceState(data, _, url?.toString());
235
- }
225
+ },
236
226
  };
237
227
  history.pushState = (state, _, url) => {
238
228
  if (url) {
239
229
  onEvent({
240
- _tag: "PushState",
230
+ _tag: 'PushState',
241
231
  state,
242
- url: getUrl(location.origin, url),
243
- skipCommit: false
232
+ url: getUrl(location.origin, url, base),
233
+ skipCommit: false,
244
234
  });
245
235
  }
246
236
  else {
247
237
  onEvent({
248
- _tag: "ReplaceState",
238
+ _tag: 'ReplaceState',
249
239
  state,
250
240
  url: Option.none(),
251
- skipCommit: false
241
+ skipCommit: false,
252
242
  });
253
243
  }
254
244
  };
255
245
  history.replaceState = (state, _, url) => {
256
246
  onEvent({
257
- _tag: "ReplaceState",
247
+ _tag: 'ReplaceState',
258
248
  state,
259
- url: url ? Option.some(getUrl(location.origin, url)) : Option.none(),
260
- skipCommit: false
249
+ url: url ? Option.some(getUrl(location.origin, url, base)) : Option.none(),
250
+ skipCommit: false,
261
251
  });
262
252
  };
263
253
  history.go = (delta) => {
264
254
  if (delta && delta !== 0) {
265
- onEvent({ _tag: "Traverse", delta, skipCommit: false });
255
+ onEvent({ _tag: 'Traverse', delta, skipCommit: false });
266
256
  }
267
257
  };
268
258
  history.back = () => {
269
- onEvent({ _tag: "Traverse", delta: -1, skipCommit: false });
259
+ onEvent({ _tag: 'Traverse', delta: -1, skipCommit: false });
270
260
  };
271
261
  history.forward = () => {
272
- onEvent({ _tag: "Traverse", delta: 1, skipCommit: false });
262
+ onEvent({ _tag: 'Traverse', delta: 1, skipCommit: false });
273
263
  };
274
264
  const onHashChange = (ev) => {
275
265
  onEvent({
276
- _tag: "ReplaceState",
266
+ _tag: 'ReplaceState',
277
267
  state: history.state,
278
268
  url: Option.some(new URL(ev.newURL)),
279
- skipCommit: false
269
+ skipCommit: false,
280
270
  });
281
271
  };
282
- window.addEventListener("hashchange", onHashChange, { capture: true });
272
+ window.addEventListener('hashchange', onHashChange, { capture: true });
283
273
  const onPopState = (ev) => {
284
274
  if (isPatchedState(ev.state)) {
285
275
  onEvent({
286
- _tag: "TraverseTo",
276
+ _tag: 'TraverseTo',
287
277
  key: ev.state.__typed__navigation__key__,
288
278
  state: ev.state.__typed__navigation__state__,
289
- skipCommit: true
279
+ skipCommit: true,
290
280
  });
291
281
  }
292
282
  else {
293
283
  onEvent({
294
- _tag: "ReplaceState",
284
+ _tag: 'ReplaceState',
295
285
  state: ev.state,
296
286
  url: Option.some(new URL(location.href)),
297
- skipCommit: true
287
+ skipCommit: true,
298
288
  });
299
289
  }
300
290
  };
301
- window.addEventListener("popstate", onPopState, { capture: true });
291
+ window.addEventListener('popstate', onPopState, { capture: true });
302
292
  const unpatch = Effect.sync(() => {
303
293
  history.pushState = original.pushState;
304
294
  history.replaceState = original.replaceState;
@@ -307,18 +297,17 @@ function patchHistory(window, onEvent) {
307
297
  history.forward = original.forward;
308
298
  if (stateDescriptor) {
309
299
  try {
310
- Object.defineProperty(history, "state", stateDescriptor);
300
+ Object.defineProperty(history, 'state', stateDescriptor);
311
301
  }
312
302
  catch {
313
303
  // We tried, but it didn't work
314
304
  }
315
305
  }
316
- window.removeEventListener("hashchange", onHashChange);
317
- window.removeEventListener("popstate", onPopState);
306
+ window.removeEventListener('hashchange', onHashChange);
307
+ window.removeEventListener('popstate', onPopState);
318
308
  });
319
- Object.defineProperty(history, "state", {
309
+ Object.defineProperty(history, 'state', {
320
310
  get() {
321
- console.log("here");
322
311
  return getOriginalState(getStateDescriptor?.() ?? history.state);
323
312
  },
324
313
  set(value) {
@@ -326,7 +315,7 @@ function patchHistory(window, onEvent) {
326
315
  if (isPatchedState(value)) {
327
316
  // The setter is not actually modifying the history.state
328
317
  // We need to call the original replaceState to update the actual state
329
- original.replaceState.call(history, value, "", location.href);
318
+ original.replaceState.call(history, value, '', location.href);
330
319
  }
331
320
  else {
332
321
  // The setter is not actually modifying the history.state
@@ -334,17 +323,17 @@ function patchHistory(window, onEvent) {
334
323
  original.replaceState.call(history, {
335
324
  __typed__navigation__id__,
336
325
  __typed__navigation__key__,
337
- __typed__navigation__state__: value
338
- }, "", location.href);
326
+ __typed__navigation__state__: value,
327
+ }, '', location.href);
339
328
  }
340
329
  return value;
341
- }
330
+ },
342
331
  });
343
332
  return {
344
333
  getHistoryState,
345
334
  original,
346
335
  patched: history,
347
- unpatch
336
+ unpatch,
348
337
  };
349
338
  }
350
339
  function scopedRuntime() {
@@ -355,14 +344,14 @@ function scopedRuntime() {
355
344
  const fiber = runFork(effect, { scope });
356
345
  fiber.addObserver(Exit.match({
357
346
  onFailure: (cause) => reject(Runtime.makeFiberFailure(cause)),
358
- onSuccess: resolve
347
+ onSuccess: resolve,
359
348
  }));
360
349
  });
361
350
  return {
362
351
  runtime,
363
352
  scope: Context.unsafeGet(runtime.context, Scope.Scope),
364
353
  run: (eff) => runFork(eff, { scope }),
365
- runPromise
354
+ runPromise,
366
355
  };
367
356
  });
368
357
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromWindow.js","sourceRoot":"","sources":["../../src/internal/fromWindow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { GetRandomValues } from '@typed/id';
2
+ import * as Layer from 'effect/Layer';
3
+ import type { InitialMemoryOptions, MemoryOptions } from '../Layer.js';
4
+ import { Navigation } from '../Navigation.js';
5
+ export declare const memory: (options: MemoryOptions) => Layer.Layer<Navigation, never, GetRandomValues>;
6
+ export declare function initialMemory(options: InitialMemoryOptions): Layer.Layer<Navigation, never, GetRandomValues>;
@@ -0,0 +1,59 @@
1
+ import { GetRandomValues } from '@typed/id';
2
+ import * as LazyRef from '@typed/lazy-ref';
3
+ import { Schema } from 'effect';
4
+ import * as Effect from 'effect/Effect';
5
+ import * as Layer from 'effect/Layer';
6
+ import * as Option from 'effect/Option';
7
+ import { Navigation } from '../Navigation.js';
8
+ import { getOriginFromUrl, getUrl, makeDestination, makeHandlersState, NavigationState, setupFromModelAndIntent, } from './shared';
9
+ export const memory = (options) => Layer.scoped(Navigation, Effect.gen(function* () {
10
+ const getRandomValues = yield* GetRandomValues;
11
+ const modelAndIntent = yield* setupMemory(options);
12
+ const current = options.entries[options.currentIndex ?? 0];
13
+ const origin = options.origin ?? getOriginFromUrl(current.url);
14
+ const base = options.base ?? '/';
15
+ return setupFromModelAndIntent(modelAndIntent, origin, base, getRandomValues);
16
+ }));
17
+ export function initialMemory(options) {
18
+ return Layer.unwrapEffect(Effect.gen(function* () {
19
+ const origin = getOriginFromUrl(options.url);
20
+ const base = options.base ?? '/';
21
+ const destination = yield* makeDestination(getUrl(origin, options.url, base), options.state, origin);
22
+ return memory({
23
+ ...options,
24
+ origin,
25
+ base,
26
+ entries: [destination],
27
+ currentIndex: 0,
28
+ });
29
+ }));
30
+ }
31
+ const eq = Schema.equivalence(Schema.typeSchema(NavigationState));
32
+ const clampNavigationState = (maxEntries) => (state) => {
33
+ const entries = state.entries.slice(-maxEntries);
34
+ const index = Math.min(Math.max(0, state.index), entries.length - 1);
35
+ return {
36
+ entries,
37
+ index,
38
+ transition: state.transition,
39
+ };
40
+ };
41
+ function setupMemory(options) {
42
+ return Effect.gen(function* () {
43
+ const maxEntries = options.maxEntries ?? 50;
44
+ const state = LazyRef.transform(yield* LazyRef.of({
45
+ entries: options.entries,
46
+ index: options.currentIndex ?? options.entries.length - 1,
47
+ transition: Option.none(),
48
+ }, { eq }), clampNavigationState(maxEntries), clampNavigationState(maxEntries));
49
+ const { beforeHandlers, handlers } = yield* makeHandlersState;
50
+ const commit = options.commit ?? (() => Effect.void);
51
+ return {
52
+ state,
53
+ beforeHandlers,
54
+ handlers,
55
+ commit,
56
+ };
57
+ });
58
+ }
59
+ //# 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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"}