@typed/navigation 0.1.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 (141) hide show
  1. package/dist/DOM.d.ts +12 -0
  2. package/dist/DOM.d.ts.map +1 -0
  3. package/dist/DOM.js +89 -0
  4. package/dist/DOM.js.map +1 -0
  5. package/dist/Memory.d.ts +10 -0
  6. package/dist/Memory.d.ts.map +1 -0
  7. package/dist/Memory.js +55 -0
  8. package/dist/Memory.js.map +1 -0
  9. package/dist/Navigation.d.ts +117 -0
  10. package/dist/Navigation.d.ts.map +1 -0
  11. package/dist/Navigation.js +36 -0
  12. package/dist/Navigation.js.map +1 -0
  13. package/dist/_makeServerWindow.d.ts +16 -0
  14. package/dist/_makeServerWindow.d.ts.map +1 -0
  15. package/dist/_makeServerWindow.js +9 -0
  16. package/dist/_makeServerWindow.js.map +1 -0
  17. package/dist/cjs/DOM.d.ts +12 -0
  18. package/dist/cjs/DOM.d.ts.map +1 -0
  19. package/dist/cjs/DOM.js +118 -0
  20. package/dist/cjs/DOM.js.map +1 -0
  21. package/dist/cjs/Memory.d.ts +10 -0
  22. package/dist/cjs/Memory.d.ts.map +1 -0
  23. package/dist/cjs/Memory.js +82 -0
  24. package/dist/cjs/Memory.js.map +1 -0
  25. package/dist/cjs/Navigation.d.ts +117 -0
  26. package/dist/cjs/Navigation.d.ts.map +1 -0
  27. package/dist/cjs/Navigation.js +69 -0
  28. package/dist/cjs/Navigation.js.map +1 -0
  29. package/dist/cjs/_makeServerWindow.d.ts +16 -0
  30. package/dist/cjs/_makeServerWindow.d.ts.map +1 -0
  31. package/dist/cjs/_makeServerWindow.js +36 -0
  32. package/dist/cjs/_makeServerWindow.js.map +1 -0
  33. package/dist/cjs/constant.d.ts +2 -0
  34. package/dist/cjs/constant.d.ts.map +1 -0
  35. package/dist/cjs/constant.js +30 -0
  36. package/dist/cjs/constant.js.map +1 -0
  37. package/dist/cjs/dom-intent.d.ts +29 -0
  38. package/dist/cjs/dom-intent.d.ts.map +1 -0
  39. package/dist/cjs/dom-intent.js +173 -0
  40. package/dist/cjs/dom-intent.js.map +1 -0
  41. package/dist/cjs/history.d.ts +31 -0
  42. package/dist/cjs/history.d.ts.map +1 -0
  43. package/dist/cjs/history.js +115 -0
  44. package/dist/cjs/history.js.map +1 -0
  45. package/dist/cjs/index.d.ts +4 -0
  46. package/dist/cjs/index.d.ts.map +1 -0
  47. package/dist/cjs/index.js +20 -0
  48. package/dist/cjs/index.js.map +1 -0
  49. package/dist/cjs/json.d.ts +13 -0
  50. package/dist/cjs/json.d.ts.map +1 -0
  51. package/dist/cjs/json.js +24 -0
  52. package/dist/cjs/json.js.map +1 -0
  53. package/dist/cjs/memory-intent.d.ts +28 -0
  54. package/dist/cjs/memory-intent.d.ts.map +1 -0
  55. package/dist/cjs/memory-intent.js +149 -0
  56. package/dist/cjs/memory-intent.js.map +1 -0
  57. package/dist/cjs/model.d.ts +22 -0
  58. package/dist/cjs/model.d.ts.map +1 -0
  59. package/dist/cjs/model.js +48 -0
  60. package/dist/cjs/model.js.map +1 -0
  61. package/dist/cjs/shared-intent.d.ts +15 -0
  62. package/dist/cjs/shared-intent.d.ts.map +1 -0
  63. package/dist/cjs/shared-intent.js +82 -0
  64. package/dist/cjs/shared-intent.js.map +1 -0
  65. package/dist/cjs/storage.d.ts +19 -0
  66. package/dist/cjs/storage.d.ts.map +1 -0
  67. package/dist/cjs/storage.js +101 -0
  68. package/dist/cjs/storage.js.map +1 -0
  69. package/dist/cjs/util.d.ts +5 -0
  70. package/dist/cjs/util.d.ts.map +1 -0
  71. package/dist/cjs/util.js +39 -0
  72. package/dist/cjs/util.js.map +1 -0
  73. package/dist/constant.d.ts +2 -0
  74. package/dist/constant.d.ts.map +1 -0
  75. package/dist/constant.js +4 -0
  76. package/dist/constant.js.map +1 -0
  77. package/dist/dom-intent.d.ts +29 -0
  78. package/dist/dom-intent.d.ts.map +1 -0
  79. package/dist/dom-intent.js +141 -0
  80. package/dist/dom-intent.js.map +1 -0
  81. package/dist/history.d.ts +31 -0
  82. package/dist/history.d.ts.map +1 -0
  83. package/dist/history.js +88 -0
  84. package/dist/history.js.map +1 -0
  85. package/dist/index.d.ts +4 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +4 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/intent.d.ts +31 -0
  90. package/dist/intent.d.ts.map +1 -0
  91. package/dist/intent.js +157 -0
  92. package/dist/intent.js.map +1 -0
  93. package/dist/json.d.ts +13 -0
  94. package/dist/json.d.ts.map +1 -0
  95. package/dist/json.js +17 -0
  96. package/dist/json.js.map +1 -0
  97. package/dist/memory-intent.d.ts +28 -0
  98. package/dist/memory-intent.d.ts.map +1 -0
  99. package/dist/memory-intent.js +117 -0
  100. package/dist/memory-intent.js.map +1 -0
  101. package/dist/model.d.ts +22 -0
  102. package/dist/model.d.ts.map +1 -0
  103. package/dist/model.js +21 -0
  104. package/dist/model.js.map +1 -0
  105. package/dist/shared-intent.d.ts +15 -0
  106. package/dist/shared-intent.d.ts.map +1 -0
  107. package/dist/shared-intent.js +51 -0
  108. package/dist/shared-intent.js.map +1 -0
  109. package/dist/storage.d.ts +19 -0
  110. package/dist/storage.d.ts.map +1 -0
  111. package/dist/storage.js +73 -0
  112. package/dist/storage.js.map +1 -0
  113. package/dist/tsconfig.cjs.build.tsbuildinfo +1 -0
  114. package/dist/util.d.ts +5 -0
  115. package/dist/util.d.ts.map +1 -0
  116. package/dist/util.js +12 -0
  117. package/dist/util.js.map +1 -0
  118. package/eslintrc.json +3 -0
  119. package/package.json +38 -0
  120. package/project.json +43 -0
  121. package/src/DOM.test.ts +704 -0
  122. package/src/DOM.ts +165 -0
  123. package/src/Memory.test.ts +464 -0
  124. package/src/Memory.ts +102 -0
  125. package/src/Navigation.ts +192 -0
  126. package/src/_makeServerWindow.ts +28 -0
  127. package/src/constant.ts +5 -0
  128. package/src/dom-intent.ts +276 -0
  129. package/src/history.ts +141 -0
  130. package/src/index.ts +3 -0
  131. package/src/json.ts +31 -0
  132. package/src/memory-intent.ts +221 -0
  133. package/src/model.ts +54 -0
  134. package/src/shared-intent.ts +120 -0
  135. package/src/storage.ts +101 -0
  136. package/src/util.ts +20 -0
  137. package/tsconfig.build.json +4 -0
  138. package/tsconfig.build.tsbuildinfo +1 -0
  139. package/tsconfig.cjs.build.json +22 -0
  140. package/tsconfig.json +27 -0
  141. package/vite.config.js +3 -0
@@ -0,0 +1,31 @@
1
+ import * as Cause from '@effect/io/Cause';
2
+ import * as Effect from '@effect/io/Effect';
3
+ import * as Scope from '@effect/io/Scope';
4
+ import { History } from '@typed/dom';
5
+ import * as Fx from '@typed/fx';
6
+ import { Destination, NavigationError } from './Navigation.js';
7
+ import { DomIntent } from './dom-intent.js';
8
+ export type HistoryEvent = PushStateEvent | ReplaceStateEvent | GoEvent | BackEvent | ForwardEvent;
9
+ export interface PushStateEvent {
10
+ readonly _tag: 'PushState';
11
+ readonly state: unknown;
12
+ readonly url: string;
13
+ }
14
+ export interface ReplaceStateEvent {
15
+ readonly _tag: 'ReplaceState';
16
+ readonly state: unknown;
17
+ readonly url: string;
18
+ }
19
+ export interface GoEvent {
20
+ readonly _tag: 'Go';
21
+ readonly delta: number;
22
+ }
23
+ export interface BackEvent {
24
+ readonly _tag: 'Back';
25
+ }
26
+ export interface ForwardEvent {
27
+ readonly _tag: 'Forward';
28
+ }
29
+ export declare const patchHistory: Effect.Effect<History | Scope.Scope, never, Fx.Subject<never, HistoryEvent>>;
30
+ export declare function onHistoryEvent(event: HistoryEvent, intent: DomIntent): Effect.Effect<History | Location | Storage, Cause.NoSuchElementException | NavigationError, Destination>;
31
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAA;AAElG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CACtC,OAAO,GAAG,KAAK,CAAC,KAAK,EACrB,KAAK,EACL,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAe/B,CAAA;AA6DF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,GAChB,MAAM,CAAC,MAAM,CACd,OAAO,GAAG,QAAQ,GAAG,OAAO,EAC5B,KAAK,CAAC,sBAAsB,GAAG,eAAe,EAC9C,WAAW,CACZ,CAeA"}
@@ -0,0 +1,115 @@
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.onHistoryEvent = exports.patchHistory = void 0;
27
+ const Effect = __importStar(require("@effect/io/Effect"));
28
+ const Fiber = __importStar(require("@effect/io/Fiber"));
29
+ const Runtime = __importStar(require("@effect/io/Runtime"));
30
+ const dom_1 = require("@typed/dom");
31
+ const Fx = __importStar(require("@typed/fx"));
32
+ const constant_js_1 = require("./constant.js");
33
+ exports.patchHistory = Effect.gen(function* ($) {
34
+ const history = yield* $(dom_1.History);
35
+ const scope = yield* $(Effect.scope);
36
+ const historyEvents = Fx.makeSubject();
37
+ const runtime = yield* $(Effect.runtime());
38
+ const runFork = Runtime.runFork(runtime);
39
+ const cleanup = patchHistory_(history, (event) => runFork(Effect.flatMap(Effect.forkIn(historyEvents.event(event), scope), Fiber.join)));
40
+ // unpatch history upon finalization
41
+ yield* $(Effect.addFinalizer(() => Effect.sync(cleanup)));
42
+ return historyEvents;
43
+ });
44
+ function patchHistory_(history, sendEvent) {
45
+ const pushState = history.pushState.bind(history);
46
+ const replaceState = history.replaceState.bind(history);
47
+ const go = history.go.bind(history);
48
+ const back = history.back.bind(history);
49
+ const forward = history.forward.bind(history);
50
+ history.pushState = function (state, title, url) {
51
+ pushState(state, title, url);
52
+ if (url && this !== constant_js_1.ServiceId)
53
+ sendEvent({ _tag: 'PushState', state, url: url.toString() });
54
+ };
55
+ history.replaceState = function (state, title, url) {
56
+ replaceState(state, title, url);
57
+ if (url && this !== constant_js_1.ServiceId)
58
+ sendEvent({ _tag: 'ReplaceState', state, url: url.toString() });
59
+ };
60
+ history.go = function (delta) {
61
+ if (!delta)
62
+ return;
63
+ go(delta);
64
+ if (this !== constant_js_1.ServiceId)
65
+ sendEvent({ _tag: 'Go', delta });
66
+ };
67
+ history.back = function () {
68
+ back();
69
+ if (this !== constant_js_1.ServiceId)
70
+ sendEvent({ _tag: 'Back' });
71
+ };
72
+ history.forward = function () {
73
+ forward();
74
+ if (this !== constant_js_1.ServiceId)
75
+ sendEvent({ _tag: 'Forward' });
76
+ };
77
+ const stateDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(history), 'state');
78
+ Object.defineProperty(history, 'state', {
79
+ ...stateDescriptor,
80
+ get() {
81
+ return stateDescriptor?.get?.()?.state;
82
+ },
83
+ });
84
+ Object.defineProperty(history, 'originalState', {
85
+ ...stateDescriptor,
86
+ });
87
+ // Reset history to original state
88
+ return () => {
89
+ history.pushState = pushState;
90
+ history.replaceState = replaceState;
91
+ history.go = go;
92
+ history.back = back;
93
+ history.forward = forward;
94
+ if (stateDescriptor)
95
+ Object.defineProperty(history, 'state', stateDescriptor);
96
+ };
97
+ }
98
+ function onHistoryEvent(event, intent) {
99
+ return Effect.gen(function* ($) {
100
+ switch (event._tag) {
101
+ case 'PushState':
102
+ return yield* $(intent.push(event.url, { state: event.state }, true));
103
+ case 'ReplaceState':
104
+ return yield* $(intent.replace(event.url, { state: event.state }, true));
105
+ case 'Back':
106
+ return yield* $(intent.back(true));
107
+ case 'Forward':
108
+ return yield* $(intent.forward(true));
109
+ case 'Go':
110
+ return yield* $(intent.go(event.delta, true));
111
+ }
112
+ });
113
+ }
114
+ exports.onHistoryEvent = onHistoryEvent;
115
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './Navigation.js';
2
+ export * from './DOM.js';
3
+ export * from './Memory.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA"}
@@ -0,0 +1,20 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Navigation.js"), exports);
18
+ __exportStar(require("./DOM.js"), exports);
19
+ __exportStar(require("./Memory.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,2CAAwB;AACxB,8CAA2B"}
@@ -0,0 +1,13 @@
1
+ import { Destination, NavigationEvent } from './Navigation.js';
2
+ export type NavigationEventJson = {
3
+ readonly [K in keyof NavigationEvent]: NavigationEvent[K] extends Destination ? DestinationJson : NavigationEvent[K];
4
+ };
5
+ type DestinationJson = {
6
+ readonly [K in keyof Destination]: Destination[K] extends URL ? string : Destination[K];
7
+ };
8
+ export declare const decodeDestination: (d: DestinationJson) => Destination;
9
+ export declare const decodeNavigationEvent: (event: NavigationEventJson) => NavigationEvent;
10
+ export declare const encodeEvent: (event: NavigationEvent) => NavigationEventJson;
11
+ export declare const encodeDestination: (destination: Destination) => DestinationJson;
12
+ export {};
13
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,CAAC,IAAI,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,WAAW,GACzE,eAAe,GACf,eAAe,CAAC,CAAC,CAAC;CACvB,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE,CAAC,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;CACxF,CAAA;AAED,eAAO,MAAM,iBAAiB,MAAO,eAAe,KAAG,WAGrD,CAAA;AAEF,eAAO,MAAM,qBAAqB,UAAW,mBAAmB,KAAG,eAGjE,CAAA;AAEF,eAAO,MAAM,WAAW,UAAW,eAAe,KAAG,mBAGnD,CAAA;AAEF,eAAO,MAAM,iBAAiB,gBAAiB,WAAW,KAAG,eAG3D,CAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeDestination = exports.encodeEvent = exports.decodeNavigationEvent = exports.decodeDestination = void 0;
4
+ const decodeDestination = (d) => ({
5
+ ...d,
6
+ url: new URL(d.url),
7
+ });
8
+ exports.decodeDestination = decodeDestination;
9
+ const decodeNavigationEvent = (event) => ({
10
+ ...event,
11
+ destination: (0, exports.decodeDestination)(event.destination),
12
+ });
13
+ exports.decodeNavigationEvent = decodeNavigationEvent;
14
+ const encodeEvent = (event) => ({
15
+ ...event,
16
+ destination: (0, exports.encodeDestination)(event.destination),
17
+ });
18
+ exports.encodeEvent = encodeEvent;
19
+ const encodeDestination = (destination) => ({
20
+ ...destination,
21
+ url: destination.url.href,
22
+ });
23
+ exports.encodeDestination = encodeDestination;
24
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":";;;AAYO,MAAM,iBAAiB,GAAG,CAAC,CAAkB,EAAe,EAAE,CAAC,CAAC;IACrE,GAAG,CAAC;IACJ,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;CACpB,CAAC,CAAA;AAHW,QAAA,iBAAiB,qBAG5B;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAmB,EAAE,CAAC,CAAC;IACrF,GAAG,KAAK;IACR,WAAW,EAAE,IAAA,yBAAiB,EAAC,KAAK,CAAC,WAAW,CAAC;CAClD,CAAC,CAAA;AAHW,QAAA,qBAAqB,yBAGhC;AAEK,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAuB,EAAE,CAAC,CAAC;IAC3E,GAAG,KAAK;IACR,WAAW,EAAE,IAAA,yBAAiB,EAAC,KAAK,CAAC,WAAW,CAAC;CAClD,CAAC,CAAA;AAHW,QAAA,WAAW,eAGtB;AAEK,MAAM,iBAAiB,GAAG,CAAC,WAAwB,EAAmB,EAAE,CAAC,CAAC;IAC/E,GAAG,WAAW;IACd,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI;CAC1B,CAAC,CAAA;AAHW,QAAA,iBAAiB,qBAG5B"}
@@ -0,0 +1,28 @@
1
+ import { Option } from '@effect/data/Option';
2
+ import * as Cause from '@effect/io/Cause';
3
+ import * as Effect from '@effect/io/Effect';
4
+ import type { MemoryNavigationOptions } from './Memory.js';
5
+ import { Destination, NavigateOptions, NavigationError, NavigationEvent } from './Navigation.js';
6
+ import { Model } from './model.js';
7
+ import { Notify, Save, makeOnNavigation, makeOnNavigationEnd } from './shared-intent.js';
8
+ export type MemoryIntent = {
9
+ readonly back: ReturnType<ReturnType<typeof makeGo>>;
10
+ readonly forward: ReturnType<ReturnType<typeof makeGo>>;
11
+ readonly push: ReturnType<typeof makePush>;
12
+ readonly replace: ReturnType<typeof makeReplace>;
13
+ readonly navigate: (url: string, options?: NavigateOptions) => ReturnType<ReturnType<typeof makePush | typeof makeReplace>>;
14
+ readonly notify: Notify;
15
+ readonly go: ReturnType<typeof makeGo>;
16
+ readonly goTo: (key: string) => Effect.Effect<never, Cause.NoSuchElementException | NavigationError, Option<Destination>>;
17
+ readonly reload: ReturnType<typeof makeReload>;
18
+ readonly onNavigation: ReturnType<typeof makeOnNavigation>;
19
+ readonly onNavigationEnd: ReturnType<typeof makeOnNavigationEnd>;
20
+ };
21
+ export declare function makeIntent(model: Model, options: MemoryNavigationOptions): MemoryIntent;
22
+ export type Intent = ReturnType<typeof makeIntent>;
23
+ export declare const makeSave: (model: Model) => (event: NavigationEvent) => Effect.Effect<never, Cause.NoSuchElementException, void>;
24
+ export declare const makeReload: (model: Model, notify: Notify, save: Save<never>) => Effect.Effect<never, NavigationError | Cause.NoSuchElementException, Destination>;
25
+ export declare const makeReplace: (model: Model, notify: Notify, save: Save<never>, base: string, origin: string) => (url: string, options?: NavigateOptions) => Effect.Effect<never, NavigationError | Cause.NoSuchElementException, Destination>;
26
+ export declare const makePush: (model: Model, notify: Notify, save: Save<never>, base: string, origin: string, maxEntries: number) => (url: string, options?: NavigateOptions) => Effect.Effect<never, NavigationError | Cause.NoSuchElementException, Destination>;
27
+ export declare const makeGo: (model: Model, notify: Notify, save: Save<never>) => (delta: number) => Effect.Effect<never, NavigationError | Cause.NoSuchElementException, Destination>;
28
+ //# sourceMappingURL=memory-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-intent.d.ts","sourceRoot":"","sources":["../../src/memory-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EAEhB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EACL,MAAM,EACN,IAAI,EAGJ,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAM3B,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAA;IAEpD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAA;IAEvD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAA;IAE1C,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA;IAEhD,QAAQ,CAAC,QAAQ,EAAE,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,KACtB,UAAU,CAAC,UAAU,CAAC,OAAO,QAAQ,GAAG,OAAO,WAAW,CAAC,CAAC,CAAA;IAEjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;IAEtC,QAAQ,CAAC,IAAI,EAAE,CACb,GAAG,EAAE,MAAM,KACR,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,sBAAsB,GAAG,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IAE9F,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;IAE9C,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAA;IAE1D,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;CACjE,CAAA;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAwBvF;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAElD,eAAO,MAAM,QAAQ,EAAE,CACrB,KAAK,EAAE,KAAK,KACT,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAclF,CAAA;AAEN,eAAO,MAAM,UAAU,UAAW,KAAK,UAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,sFAWtE,CAAA;AAEJ,eAAO,MAAM,WAAW,UACd,KAAK,UAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,QAAQ,MAAM,UAAU,MAAM,WACxE,MAAM,YAAW,eAAe,sFA6BlC,CAAA;AAEN,eAAO,MAAM,QAAQ,UAEV,KAAK,UACJ,MAAM,QACR,KAAK,KAAK,CAAC,QACX,MAAM,UACJ,MAAM,cACF,MAAM,WAEd,MAAM,YAAW,eAAe,sFAmClC,CAAA;AAEN,eAAO,MAAM,MAAM,UAAW,KAAK,UAAU,MAAM,QAAQ,KAAK,KAAK,CAAC,aAAa,MAAM,sFA2BrF,CAAA"}
@@ -0,0 +1,149 @@
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.makeGo = exports.makePush = exports.makeReplace = exports.makeReload = exports.makeSave = exports.makeIntent = void 0;
27
+ const Effect = __importStar(require("@effect/io/Effect"));
28
+ const Navigation_js_1 = require("./Navigation.js");
29
+ const shared_intent_js_1 = require("./shared-intent.js");
30
+ const util_js_1 = require("./util.js");
31
+ // Roughly the number of History entries in a browser anyways
32
+ const DEFAULT_MAX_ENTRIES = 50;
33
+ function makeIntent(model, options) {
34
+ const { origin } = options.initialUrl;
35
+ const base = options.base ?? '/';
36
+ const maxEntries = Math.abs(options.maxEntries ?? DEFAULT_MAX_ENTRIES);
37
+ const notify = (0, shared_intent_js_1.makeNotify)(model);
38
+ const save = (0, exports.makeSave)(model);
39
+ const go = (0, exports.makeGo)(model, notify, save);
40
+ const replace = (0, exports.makeReplace)(model, notify, save, base, origin);
41
+ const push = (0, exports.makePush)(model, notify, save, base, origin, maxEntries);
42
+ return {
43
+ back: go(-1),
44
+ forward: go(1),
45
+ push,
46
+ replace,
47
+ navigate: (url, options = {}) => options.history === 'replace' ? replace(url, options) : push(url, options),
48
+ go: go,
49
+ goTo: (0, shared_intent_js_1.makeGoTo)(model, go),
50
+ reload: (0, exports.makeReload)(model, notify, save),
51
+ onNavigation: (0, shared_intent_js_1.makeOnNavigation)(model),
52
+ onNavigationEnd: (0, shared_intent_js_1.makeOnNavigationEnd)(model),
53
+ notify,
54
+ };
55
+ }
56
+ exports.makeIntent = makeIntent;
57
+ const makeSave = (model) => (event) => Effect.gen(function* ($) {
58
+ const events = yield* $(model.events);
59
+ const index = yield* $(model.index);
60
+ // Update current entry
61
+ yield* $(model.currentEntry.set(event.destination));
62
+ // Update canGoBack
63
+ yield* $(model.canGoBack.set(index > 0));
64
+ // Update canGoForward
65
+ yield* $(model.canGoForward.set(index < events.length - 1));
66
+ });
67
+ exports.makeSave = makeSave;
68
+ const makeReload = (model, notify, save) => Effect.gen(function* ($) {
69
+ const i = yield* $(model.index.get);
70
+ const e = yield* $(model.events);
71
+ const event = e[i];
72
+ const reloadEvent = { ...event, navigationType: Navigation_js_1.NavigationType.Reload };
73
+ yield* $(notify(reloadEvent));
74
+ yield* $(save(reloadEvent));
75
+ return event.destination;
76
+ });
77
+ exports.makeReload = makeReload;
78
+ const makeReplace = (model, notify, save, base, origin) => (url, options = {}) => Effect.gen(function* ($) {
79
+ const entry = yield* $(model.currentEntry.get);
80
+ const destination = {
81
+ key: entry.key,
82
+ url: (0, util_js_1.getUrl)(url, base, origin),
83
+ state: options.state,
84
+ };
85
+ const event = {
86
+ destination,
87
+ hashChange: entry.url.hash !== destination.url.hash,
88
+ navigationType: Navigation_js_1.NavigationType.Replace,
89
+ };
90
+ yield* $(notify(event));
91
+ const currentIndex = yield* $(model.index);
92
+ yield* $(model.events.update((entries) => {
93
+ const updated = entries.slice(0);
94
+ updated[currentIndex] = event;
95
+ return updated;
96
+ }));
97
+ yield* $(save(event));
98
+ return destination;
99
+ });
100
+ exports.makeReplace = makeReplace;
101
+ const makePush = (model, notify, save, base, origin, maxEntries) => (url, options = {}) => Effect.gen(function* ($) {
102
+ const entry = yield* $(model.currentEntry.get);
103
+ const destination = {
104
+ key: yield* $(util_js_1.createKey),
105
+ url: (0, util_js_1.getUrl)(url, base, origin),
106
+ state: options.state,
107
+ };
108
+ const event = {
109
+ destination,
110
+ hashChange: entry.url.hash !== destination.url.hash,
111
+ navigationType: Navigation_js_1.NavigationType.Push,
112
+ };
113
+ // Notify event handlers
114
+ yield* $(notify(event));
115
+ const currentIndex = yield* $(model.index);
116
+ // Remove all entries after the current index
117
+ // and add the new destination to the end
118
+ yield* $(model.events.update((entries) => {
119
+ const updated = entries.slice(0, currentIndex + 1);
120
+ updated.push(event);
121
+ return updated.slice(-maxEntries);
122
+ }));
123
+ // Update the index to the new destination
124
+ yield* $(model.index.update((i) => i + 1));
125
+ yield* $(save(event));
126
+ return destination;
127
+ });
128
+ exports.makePush = makePush;
129
+ const makeGo = (model, notify, save) => (delta) => Effect.gen(function* ($) {
130
+ const currentEntries = yield* $(model.events);
131
+ const totalEntries = currentEntries.length;
132
+ const currentIndex = yield* $(model.index);
133
+ // Nothing to do here
134
+ if (delta === 0)
135
+ return currentEntries[currentIndex].destination;
136
+ const nextIndex = delta > 0
137
+ ? Math.min(currentIndex + delta, totalEntries - 1)
138
+ : Math.max(currentIndex + delta, 0);
139
+ const nextEntry = currentEntries[nextIndex];
140
+ yield* $(notify({
141
+ ...nextEntry,
142
+ navigationType: nextIndex > currentIndex ? Navigation_js_1.NavigationType.Forward : Navigation_js_1.NavigationType.Back,
143
+ }));
144
+ yield* $(model.index.set(nextIndex));
145
+ yield* $(save(nextEntry));
146
+ return nextEntry.destination;
147
+ });
148
+ exports.makeGo = makeGo;
149
+ //# sourceMappingURL=memory-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-intent.js","sourceRoot":"","sources":["../../src/memory-intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as Effect from '@effect/io/Effect';
2
+ import * as Scope from '@effect/io/Scope';
3
+ import * as Fx from '@typed/fx';
4
+ import { Destination, NavigationError, NavigationEvent, OnNavigationOptions } from './Navigation.js';
5
+ export interface Model {
6
+ readonly onNavigationHandlers: Set<readonly [
7
+ (event: NavigationEvent) => Effect.Effect<never, NavigationError, unknown>,
8
+ OnNavigationOptions?
9
+ ]>;
10
+ readonly onNavigationEndHandlers: Set<readonly [
11
+ (event: NavigationEvent) => Effect.Effect<never, never, unknown>,
12
+ OnNavigationOptions?
13
+ ]>;
14
+ readonly events: Fx.RefSubject<never, readonly NavigationEvent[]>;
15
+ readonly index: Fx.RefSubject<never, number>;
16
+ readonly entries: Fx.Computed<never, never, Destination[]>;
17
+ readonly currentEntry: Fx.RefSubject<never, Destination>;
18
+ readonly canGoBack: Fx.RefSubject<never, boolean>;
19
+ readonly canGoForward: Fx.RefSubject<never, boolean>;
20
+ }
21
+ export declare const makeModel: (initialEntries: readonly NavigationEvent[], initialIndex: number) => Effect.Effect<Scope.Scope, never, Model>;
22
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,WAAW,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAEpG,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAChC,SAAS;QACP,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC;QAC1E,mBAAmB,CAAC;KACrB,CACF,CAAA;IACD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CACnC,SAAS;QACP,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;QAChE,mBAAmB,CAAC;KACrB,CACF,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC,CAAA;IACjE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IAC1D,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACxD,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACjD,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;CACrD;AAED,eAAO,MAAM,SAAS,mBACJ,SAAS,eAAe,EAAE,gBAC5B,MAAM,KACnB,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAuBtC,CAAA"}
@@ -0,0 +1,48 @@
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.makeModel = void 0;
27
+ const Effect = __importStar(require("@effect/io/Effect"));
28
+ const Fx = __importStar(require("@typed/fx"));
29
+ const makeModel = (initialEntries, initialIndex) => Effect.gen(function* ($) {
30
+ const events = yield* $(Fx.makeRef(Effect.succeed(initialEntries)));
31
+ const index = yield* $(Fx.makeRef(Effect.succeed(initialIndex)));
32
+ const entries = events.map((es) => es.map((e) => e.destination));
33
+ const currentEntry = yield* $(Fx.makeRef(Effect.succeed(initialEntries[initialIndex].destination)));
34
+ const canGoBack = yield* $(Fx.makeRef(Effect.succeed(initialIndex > 0)));
35
+ const canGoForward = yield* $(Fx.makeRef(Effect.succeed(initialIndex < initialEntries.length - 1)));
36
+ return {
37
+ onNavigationHandlers: new Set(),
38
+ onNavigationEndHandlers: new Set(),
39
+ events,
40
+ index,
41
+ entries,
42
+ currentEntry,
43
+ canGoBack,
44
+ canGoForward,
45
+ };
46
+ });
47
+ exports.makeModel = makeModel;
48
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA2C;AAE3C,8CAA+B;AAyBxB,MAAM,SAAS,GAAG,CACvB,cAA0C,EAC1C,YAAoB,EACsB,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IAChE,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAC3B,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CACrE,CAAA;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACxE,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAC3B,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACrE,CAAA;IAED,OAAO;QACL,oBAAoB,EAAE,IAAI,GAAG,EAAE;QAC/B,uBAAuB,EAAE,IAAI,GAAG,EAAE;QAClC,MAAM;QACN,KAAK;QACL,OAAO;QACP,YAAY;QACZ,SAAS;QACT,YAAY;KACb,CAAA;AACH,CAAC,CAAC,CAAA;AA1BS,QAAA,SAAS,aA0BlB"}
@@ -0,0 +1,15 @@
1
+ import * as Option from '@effect/data/Option';
2
+ import * as Cause from '@effect/io/Cause';
3
+ import * as Effect from '@effect/io/Effect';
4
+ import * as Scope from '@effect/io/Scope';
5
+ import { Destination, NavigationError, NavigationEvent, OnNavigationOptions } from './Navigation.js';
6
+ import { Model } from './model.js';
7
+ export type Notify = (event: NavigationEvent) => Effect.Effect<never, NavigationError, void>;
8
+ export type NotifyEnd = (event: NavigationEvent) => Effect.Effect<never, never, void>;
9
+ export type Save<R> = (event: NavigationEvent) => Effect.Effect<R, Cause.NoSuchElementException, void>;
10
+ export declare const makeNotify: (model: Model) => (event: NavigationEvent) => Effect.Effect<never, NavigationError, void>;
11
+ export declare const makeOnNavigation: (model: Model) => <R>(handler: (event: NavigationEvent) => Effect.Effect<R, NavigationError, unknown>, options?: OnNavigationOptions) => Effect.Effect<Scope.Scope | R, NavigationError, void>;
12
+ export declare const makeNotifyEnd: (model: Model) => (event: NavigationEvent) => Effect.Effect<never, never, void>;
13
+ export declare const makeOnNavigationEnd: (model: Model) => <R>(handler: (event: NavigationEvent) => Effect.Effect<R, never, unknown>, options?: OnNavigationOptions) => Effect.Effect<Scope.Scope | R, never, void>;
14
+ export declare const makeGoTo: <R, E>(model: Model, go: (delta: number, skipHistory?: boolean) => Effect.Effect<R, E, Destination>) => (key: string) => Effect.Effect<R, Cause.NoSuchElementException | E, Option.Option<Destination>>;
15
+ //# sourceMappingURL=shared-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-intent.d.ts","sourceRoot":"","sources":["../../src/shared-intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACpG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAA;AAC5F,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AAErF,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CACpB,KAAK,EAAE,eAAe,KACnB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;AAGzD,eAAO,MAAM,UAAU,UAAW,KAAK,aAAa,eAAe,gDAW/D,CAAA;AAEJ,eAAO,MAAM,gBAAgB,UACnB,KAAK,0BAEM,eAAe,2DACtB,mBAAmB,0DAsB5B,CAAA;AAGL,eAAO,MAAM,aAAa,UAAW,KAAK,aAAa,eAAe,sCAWlE,CAAA;AAEJ,eAAO,MAAM,mBAAmB,UACtB,KAAK,0BAEM,eAAe,iDACtB,mBAAmB,gDAsB5B,CAAA;AAEL,eAAO,MAAM,QAAQ,gBAEV,KAAK,cACA,MAAM,gBAAgB,OAAO,gDAErC,MAAM,mFAeR,CAAA"}
@@ -0,0 +1,82 @@
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.makeGoTo = exports.makeOnNavigationEnd = exports.makeNotifyEnd = exports.makeOnNavigation = exports.makeNotify = void 0;
27
+ const Option = __importStar(require("@effect/data/Option"));
28
+ const Effect = __importStar(require("@effect/io/Effect"));
29
+ // Anytime there are changes to the model, we need to notify all event handlers
30
+ const makeNotify = (model) => (event) => Effect.gen(function* ($) {
31
+ // Notify event handlers
32
+ if (model.onNavigationHandlers.size > 0)
33
+ yield* $(Effect.forEach(model.onNavigationHandlers, ([handler, options]) => (options?.passive ? Effect.fork(handler(event)) : handler(event)), { discard: true }));
34
+ });
35
+ exports.makeNotify = makeNotify;
36
+ const makeOnNavigation = (model) => (handler, options) => Effect.uninterruptibleMask((restore) => Effect.gen(function* ($) {
37
+ const context = yield* $(Effect.context());
38
+ const handler_ = (event) => restore(Effect.provideContext(handler(event), context));
39
+ const entry = [handler_, options];
40
+ model.onNavigationHandlers.add(entry);
41
+ yield* $(Effect.addFinalizer(() => Effect.sync(() => model.onNavigationHandlers.delete(entry))));
42
+ // Send the latest navigation event on subscription
43
+ const events = yield* $(model.events);
44
+ const index = yield* $(model.index);
45
+ const event = events[index];
46
+ yield* $(restore(handler(event)));
47
+ }));
48
+ exports.makeOnNavigation = makeOnNavigation;
49
+ // Anytime there are changes to the model, we need to notify all event handlers
50
+ const makeNotifyEnd = (model) => (event) => Effect.gen(function* ($) {
51
+ // Notify event handlers
52
+ if (model.onNavigationEndHandlers.size > 0)
53
+ yield* $(Effect.forEach(model.onNavigationEndHandlers, ([handler, options]) => (options?.passive ? Effect.fork(handler(event)) : handler(event)), { discard: true }));
54
+ });
55
+ exports.makeNotifyEnd = makeNotifyEnd;
56
+ const makeOnNavigationEnd = (model) => (handler, options) => Effect.uninterruptibleMask((restore) => Effect.gen(function* ($) {
57
+ const context = yield* $(Effect.context());
58
+ const handler_ = (event) => restore(Effect.provideContext(handler(event), context));
59
+ const entry = [handler_, options];
60
+ model.onNavigationEndHandlers.add(entry);
61
+ yield* $(Effect.addFinalizer(() => Effect.sync(() => model.onNavigationEndHandlers.delete(entry))));
62
+ // Send the latest navigation event on subscription
63
+ const events = yield* $(model.events);
64
+ const index = yield* $(model.index);
65
+ const event = events[index];
66
+ yield* $(restore(handler(event)));
67
+ }));
68
+ exports.makeOnNavigationEnd = makeOnNavigationEnd;
69
+ const makeGoTo = (model, go) => (key) => Effect.gen(function* ($) {
70
+ const entries = yield* $(model.entries);
71
+ const currentIndex = yield* $(model.index);
72
+ const nextIndex = entries.findIndex((destination) => destination.key === key);
73
+ if (nextIndex === -1)
74
+ return Option.none();
75
+ const delta = nextIndex - currentIndex;
76
+ if (delta !== 0) {
77
+ return Option.some(yield* $(go(delta)));
78
+ }
79
+ return Option.some(entries[nextIndex]);
80
+ });
81
+ exports.makeGoTo = makeGoTo;
82
+ //# sourceMappingURL=shared-intent.js.map