@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.
- package/dist/DOM.d.ts +12 -0
- package/dist/DOM.d.ts.map +1 -0
- package/dist/DOM.js +89 -0
- package/dist/DOM.js.map +1 -0
- package/dist/Memory.d.ts +10 -0
- package/dist/Memory.d.ts.map +1 -0
- package/dist/Memory.js +55 -0
- package/dist/Memory.js.map +1 -0
- package/dist/Navigation.d.ts +117 -0
- package/dist/Navigation.d.ts.map +1 -0
- package/dist/Navigation.js +36 -0
- package/dist/Navigation.js.map +1 -0
- package/dist/_makeServerWindow.d.ts +16 -0
- package/dist/_makeServerWindow.d.ts.map +1 -0
- package/dist/_makeServerWindow.js +9 -0
- package/dist/_makeServerWindow.js.map +1 -0
- package/dist/cjs/DOM.d.ts +12 -0
- package/dist/cjs/DOM.d.ts.map +1 -0
- package/dist/cjs/DOM.js +118 -0
- package/dist/cjs/DOM.js.map +1 -0
- package/dist/cjs/Memory.d.ts +10 -0
- package/dist/cjs/Memory.d.ts.map +1 -0
- package/dist/cjs/Memory.js +82 -0
- package/dist/cjs/Memory.js.map +1 -0
- package/dist/cjs/Navigation.d.ts +117 -0
- package/dist/cjs/Navigation.d.ts.map +1 -0
- package/dist/cjs/Navigation.js +69 -0
- package/dist/cjs/Navigation.js.map +1 -0
- package/dist/cjs/_makeServerWindow.d.ts +16 -0
- package/dist/cjs/_makeServerWindow.d.ts.map +1 -0
- package/dist/cjs/_makeServerWindow.js +36 -0
- package/dist/cjs/_makeServerWindow.js.map +1 -0
- package/dist/cjs/constant.d.ts +2 -0
- package/dist/cjs/constant.d.ts.map +1 -0
- package/dist/cjs/constant.js +30 -0
- package/dist/cjs/constant.js.map +1 -0
- package/dist/cjs/dom-intent.d.ts +29 -0
- package/dist/cjs/dom-intent.d.ts.map +1 -0
- package/dist/cjs/dom-intent.js +173 -0
- package/dist/cjs/dom-intent.js.map +1 -0
- package/dist/cjs/history.d.ts +31 -0
- package/dist/cjs/history.d.ts.map +1 -0
- package/dist/cjs/history.js +115 -0
- package/dist/cjs/history.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/json.d.ts +13 -0
- package/dist/cjs/json.d.ts.map +1 -0
- package/dist/cjs/json.js +24 -0
- package/dist/cjs/json.js.map +1 -0
- package/dist/cjs/memory-intent.d.ts +28 -0
- package/dist/cjs/memory-intent.d.ts.map +1 -0
- package/dist/cjs/memory-intent.js +149 -0
- package/dist/cjs/memory-intent.js.map +1 -0
- package/dist/cjs/model.d.ts +22 -0
- package/dist/cjs/model.d.ts.map +1 -0
- package/dist/cjs/model.js +48 -0
- package/dist/cjs/model.js.map +1 -0
- package/dist/cjs/shared-intent.d.ts +15 -0
- package/dist/cjs/shared-intent.d.ts.map +1 -0
- package/dist/cjs/shared-intent.js +82 -0
- package/dist/cjs/shared-intent.js.map +1 -0
- package/dist/cjs/storage.d.ts +19 -0
- package/dist/cjs/storage.d.ts.map +1 -0
- package/dist/cjs/storage.js +101 -0
- package/dist/cjs/storage.js.map +1 -0
- package/dist/cjs/util.d.ts +5 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +39 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/constant.d.ts +2 -0
- package/dist/constant.d.ts.map +1 -0
- package/dist/constant.js +4 -0
- package/dist/constant.js.map +1 -0
- package/dist/dom-intent.d.ts +29 -0
- package/dist/dom-intent.d.ts.map +1 -0
- package/dist/dom-intent.js +141 -0
- package/dist/dom-intent.js.map +1 -0
- package/dist/history.d.ts +31 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +88 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/intent.d.ts +31 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +157 -0
- package/dist/intent.js.map +1 -0
- package/dist/json.d.ts +13 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +17 -0
- package/dist/json.js.map +1 -0
- package/dist/memory-intent.d.ts +28 -0
- package/dist/memory-intent.d.ts.map +1 -0
- package/dist/memory-intent.js +117 -0
- package/dist/memory-intent.js.map +1 -0
- package/dist/model.d.ts +22 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +21 -0
- package/dist/model.js.map +1 -0
- package/dist/shared-intent.d.ts +15 -0
- package/dist/shared-intent.d.ts.map +1 -0
- package/dist/shared-intent.js +51 -0
- package/dist/shared-intent.js.map +1 -0
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +73 -0
- package/dist/storage.js.map +1 -0
- package/dist/tsconfig.cjs.build.tsbuildinfo +1 -0
- package/dist/util.d.ts +5 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +12 -0
- package/dist/util.js.map +1 -0
- package/eslintrc.json +3 -0
- package/package.json +38 -0
- package/project.json +43 -0
- package/src/DOM.test.ts +704 -0
- package/src/DOM.ts +165 -0
- package/src/Memory.test.ts +464 -0
- package/src/Memory.ts +102 -0
- package/src/Navigation.ts +192 -0
- package/src/_makeServerWindow.ts +28 -0
- package/src/constant.ts +5 -0
- package/src/dom-intent.ts +276 -0
- package/src/history.ts +141 -0
- package/src/index.ts +3 -0
- package/src/json.ts +31 -0
- package/src/memory-intent.ts +221 -0
- package/src/model.ts +54 -0
- package/src/shared-intent.ts +120 -0
- package/src/storage.ts +101 -0
- package/src/util.ts +20 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.cjs.build.json +22 -0
- package/tsconfig.json +27 -0
- package/vite.config.js +3 -0
|
@@ -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.memory = void 0;
|
|
27
|
+
const Function_1 = require("@effect/data/Function");
|
|
28
|
+
const Option = __importStar(require("@effect/data/Option"));
|
|
29
|
+
const Effect = __importStar(require("@effect/io/Effect"));
|
|
30
|
+
const Navigation_js_1 = require("./Navigation.js");
|
|
31
|
+
const memory_intent_js_1 = require("./memory-intent.js");
|
|
32
|
+
const model_js_1 = require("./model.js");
|
|
33
|
+
const util_js_1 = require("./util.js");
|
|
34
|
+
function memory(options) {
|
|
35
|
+
return Navigation_js_1.Navigation.layerScoped(Effect.gen(function* ($) {
|
|
36
|
+
const initial = {
|
|
37
|
+
key: options.initialKey ?? (yield* $(util_js_1.createKey)),
|
|
38
|
+
url: options.initialUrl,
|
|
39
|
+
state: options.initialState,
|
|
40
|
+
};
|
|
41
|
+
const initialEvent = {
|
|
42
|
+
destination: initial,
|
|
43
|
+
hashChange: false,
|
|
44
|
+
navigationType: Navigation_js_1.NavigationType.Push,
|
|
45
|
+
};
|
|
46
|
+
const model = yield* $((0, model_js_1.makeModel)([initialEvent], 0));
|
|
47
|
+
const intent = (0, memory_intent_js_1.makeIntent)(model, options);
|
|
48
|
+
// Used to ensure ordering of navigation events
|
|
49
|
+
const lock = Effect.unsafeMakeSemaphore(1).withPermits(1);
|
|
50
|
+
const handleNavigationError = (depth) => (error) => Effect.gen(function* ($) {
|
|
51
|
+
if (depth >= 50) {
|
|
52
|
+
throw new Error('Too many redirects. You may have an infinite loop of onNavigation handlers that are redirecting.');
|
|
53
|
+
}
|
|
54
|
+
switch (error._tag) {
|
|
55
|
+
case 'NoSuchElementException':
|
|
56
|
+
case 'CancelNavigation':
|
|
57
|
+
return yield* $(model.currentEntry.get);
|
|
58
|
+
case 'RedirectNavigation':
|
|
59
|
+
return yield* $(Effect.catchAll(intent.navigate(error.url, error), handleNavigationError(depth + 1)));
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const catchNavigationError = (effect) => Effect.catchAll(effect, handleNavigationError(0));
|
|
63
|
+
// Construct our service
|
|
64
|
+
const navigation = {
|
|
65
|
+
back: lock(catchNavigationError(intent.back)),
|
|
66
|
+
base: '/',
|
|
67
|
+
canGoBack: model.canGoBack,
|
|
68
|
+
canGoForward: model.canGoForward,
|
|
69
|
+
currentEntry: model.currentEntry,
|
|
70
|
+
entries: model.entries,
|
|
71
|
+
forward: lock(catchNavigationError(intent.forward)),
|
|
72
|
+
goTo: (n) => (0, Function_1.pipe)(n, intent.goTo, Effect.catchAll((a) => (0, Function_1.pipe)(a, handleNavigationError(0), Effect.map(Option.some))), lock),
|
|
73
|
+
navigate: (url, options) => (0, Function_1.pipe)(intent.navigate(url, options), catchNavigationError, lock),
|
|
74
|
+
onNavigation: (handler, options) => (0, Function_1.pipe)(intent.onNavigation(handler, options), catchNavigationError, Effect.asUnit),
|
|
75
|
+
onNavigationEnd: (handler, options) => Effect.asUnit(intent.onNavigationEnd(handler, options)),
|
|
76
|
+
reload: lock(catchNavigationError(intent.reload)),
|
|
77
|
+
};
|
|
78
|
+
return navigation;
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
exports.memory = memory;
|
|
82
|
+
//# sourceMappingURL=Memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Memory.js","sourceRoot":"","sources":["../../src/Memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as Brand from '@effect/data/Brand';
|
|
2
|
+
import { Option } from '@effect/data/Option';
|
|
3
|
+
import * as Cause from '@effect/io/Cause';
|
|
4
|
+
import * as Effect from '@effect/io/Effect';
|
|
5
|
+
import * as Scope from '@effect/io/Scope';
|
|
6
|
+
import * as Context from '@typed/context';
|
|
7
|
+
import * as Fx from '@typed/fx';
|
|
8
|
+
export interface Navigation {
|
|
9
|
+
/**
|
|
10
|
+
* Base path for all navigation entries.
|
|
11
|
+
*/
|
|
12
|
+
readonly base: string;
|
|
13
|
+
/**
|
|
14
|
+
* The list of navigation entries that are currently kept in-memory and
|
|
15
|
+
* saved within Local/Session Storage.
|
|
16
|
+
*/
|
|
17
|
+
readonly entries: Fx.Computed<never, never, readonly Destination[]>;
|
|
18
|
+
/**
|
|
19
|
+
* The currently focused navigation entry.
|
|
20
|
+
*/
|
|
21
|
+
readonly currentEntry: Fx.Computed<never, never, Destination>;
|
|
22
|
+
/**
|
|
23
|
+
* Navigate to a new URL. NavigateOptions can be used to control how the
|
|
24
|
+
* navigation is handled via history.pushState or history.replaceState,
|
|
25
|
+
* set/update the state of the navigation entry, or provide a key to use
|
|
26
|
+
* for the navigation entry.
|
|
27
|
+
*/
|
|
28
|
+
readonly navigate: (url: string, options?: NavigateOptions) => Effect.Effect<never, never, Destination>;
|
|
29
|
+
/**
|
|
30
|
+
* Subscribe to navigation events. Any handler can cancel the or redirect
|
|
31
|
+
* the navigation by failing with a CancelNavigation or RedirectNavigation
|
|
32
|
+
* error.
|
|
33
|
+
*/
|
|
34
|
+
readonly onNavigation: <R>(handler: (event: NavigationEvent) => Effect.Effect<R, NavigationError, void>, options?: OnNavigationOptions) => Effect.Effect<R | Scope.Scope, never, void>;
|
|
35
|
+
/**
|
|
36
|
+
* Subscribe to navigation events after they have been commited.
|
|
37
|
+
*/
|
|
38
|
+
readonly onNavigationEnd: <R>(handler: (event: NavigationEvent) => Effect.Effect<R, never, void>, options?: OnNavigationOptions) => Effect.Effect<R | Scope.Scope, never, void>;
|
|
39
|
+
/**
|
|
40
|
+
* Returns true if there is a previous navigation entry to navigate to.
|
|
41
|
+
*/
|
|
42
|
+
readonly canGoBack: Fx.Computed<never, never, boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Navigate to the previous navigation entry. If you're on the first entry
|
|
45
|
+
* then this will do nothing.
|
|
46
|
+
*/
|
|
47
|
+
readonly back: Effect.Effect<never, never, Destination>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns true if there is a next navigation entry to navigate to after you have gone back.
|
|
50
|
+
*/
|
|
51
|
+
readonly canGoForward: Fx.Computed<never, never, boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Navigate to the next navigation entry. If you're on the last entry then
|
|
54
|
+
* this will do nothing.
|
|
55
|
+
*/
|
|
56
|
+
readonly forward: Effect.Effect<never, never, Destination>;
|
|
57
|
+
/**
|
|
58
|
+
* Reload the current navigation entry.
|
|
59
|
+
*/
|
|
60
|
+
readonly reload: Effect.Effect<never, never, Destination>;
|
|
61
|
+
/**
|
|
62
|
+
* Navigate to a specific navigation entry by key. If the key does not
|
|
63
|
+
* exist then this will do nothing visible to the user and return Option.none().
|
|
64
|
+
*/
|
|
65
|
+
readonly goTo: (key: DestinationKey) => Effect.Effect<never, never, Option<Destination>>;
|
|
66
|
+
}
|
|
67
|
+
export declare const Navigation: Context.Tag<Navigation, Navigation>;
|
|
68
|
+
export declare const navigate: (url: string, options?: NavigateOptions) => Effect.Effect<Navigation, never, Destination>;
|
|
69
|
+
export declare const onNavigation: <R>(handler: (event: NavigationEvent) => Effect.Effect<R, never, void>) => Effect.Effect<Scope.Scope | Navigation | R, never, void>;
|
|
70
|
+
export declare const canGoBack: Effect.Effect<Navigation, Cause.NoSuchElementException, boolean> & Fx.Fx<Navigation, never, boolean>;
|
|
71
|
+
export declare const back: Effect.Effect<Navigation, never, Destination>;
|
|
72
|
+
export declare const canGoForward: Effect.Effect<Navigation, Cause.NoSuchElementException, boolean> & Fx.Fx<Navigation, never, boolean>;
|
|
73
|
+
export declare const forward: Effect.Effect<Navigation, never, Destination>;
|
|
74
|
+
export declare const reload: Effect.Effect<Navigation, never, Destination>;
|
|
75
|
+
export interface NavigateOptions {
|
|
76
|
+
readonly state?: unknown;
|
|
77
|
+
readonly history?: 'push' | 'replace';
|
|
78
|
+
readonly key?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface NavigationEvent {
|
|
81
|
+
readonly destination: Destination;
|
|
82
|
+
readonly hashChange: boolean;
|
|
83
|
+
readonly navigationType: NavigationType;
|
|
84
|
+
}
|
|
85
|
+
export declare function NavigationEvent(destination: Destination, hashChange: boolean, navigationType: NavigationType): NavigationEvent;
|
|
86
|
+
export interface Destination {
|
|
87
|
+
readonly key: DestinationKey;
|
|
88
|
+
readonly url: URL;
|
|
89
|
+
readonly state: unknown;
|
|
90
|
+
}
|
|
91
|
+
export type DestinationKey = string & Brand.Brand<'DestinationKey'>;
|
|
92
|
+
export declare const DestinationKey: Brand.Brand.Constructor<DestinationKey>;
|
|
93
|
+
export declare function Destination(key: DestinationKey, url: URL, state?: unknown): Destination;
|
|
94
|
+
export declare enum NavigationType {
|
|
95
|
+
Push = "push",
|
|
96
|
+
Reload = "reload",
|
|
97
|
+
Replace = "replace",
|
|
98
|
+
Back = "back",
|
|
99
|
+
Forward = "forward"
|
|
100
|
+
}
|
|
101
|
+
export type NavigationError = CancelNavigation | RedirectNavigation;
|
|
102
|
+
export interface CancelNavigation {
|
|
103
|
+
readonly _tag: 'CancelNavigation';
|
|
104
|
+
}
|
|
105
|
+
export declare const cancelNavigation: Effect.Effect<never, CancelNavigation, never>;
|
|
106
|
+
export declare function isCancelNavigation(error: NavigationError): error is CancelNavigation;
|
|
107
|
+
export interface RedirectNavigation extends NavigateOptions {
|
|
108
|
+
readonly _tag: 'RedirectNavigation';
|
|
109
|
+
readonly url: string;
|
|
110
|
+
}
|
|
111
|
+
export declare const redirect: (url: string, options?: NavigateOptions) => Effect.Effect<never, RedirectNavigation, never>;
|
|
112
|
+
export declare function isRedirectNavigation(error: NavigationError): error is RedirectNavigation;
|
|
113
|
+
export interface OnNavigationOptions {
|
|
114
|
+
readonly passive?: boolean;
|
|
115
|
+
}
|
|
116
|
+
export declare const getCurrentUrl: Effect.Effect<Navigation, Cause.NoSuchElementException, URL>;
|
|
117
|
+
//# sourceMappingURL=Navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Navigation.d.ts","sourceRoot":"","sources":["../../src/Navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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.getCurrentUrl = exports.isRedirectNavigation = exports.redirect = exports.isCancelNavigation = exports.cancelNavigation = exports.NavigationType = exports.Destination = exports.DestinationKey = exports.NavigationEvent = exports.reload = exports.forward = exports.canGoForward = exports.back = exports.canGoBack = exports.onNavigation = exports.navigate = exports.Navigation = void 0;
|
|
27
|
+
const Brand = __importStar(require("@effect/data/Brand"));
|
|
28
|
+
const Effect = __importStar(require("@effect/io/Effect"));
|
|
29
|
+
const Context = __importStar(require("@typed/context"));
|
|
30
|
+
exports.Navigation = Context.Tag('Navigation');
|
|
31
|
+
const navigate = (url, options) => exports.Navigation.withEffect((n) => n.navigate(url, options));
|
|
32
|
+
exports.navigate = navigate;
|
|
33
|
+
const onNavigation = (handler) => exports.Navigation.withEffect((n) => n.onNavigation(handler));
|
|
34
|
+
exports.onNavigation = onNavigation;
|
|
35
|
+
exports.canGoBack = Object.assign(exports.Navigation.withEffect((n) => n.canGoBack), exports.Navigation.withFx((n) => n.canGoBack));
|
|
36
|
+
exports.back = exports.Navigation.withEffect((n) => n.back);
|
|
37
|
+
exports.canGoForward = Object.assign(exports.Navigation.withEffect((n) => n.canGoForward), exports.Navigation.withFx((n) => n.canGoForward));
|
|
38
|
+
exports.forward = exports.Navigation.withEffect((n) => n.forward);
|
|
39
|
+
exports.reload = exports.Navigation.withEffect((n) => n.reload);
|
|
40
|
+
function NavigationEvent(destination, hashChange, navigationType) {
|
|
41
|
+
return { destination, hashChange, navigationType };
|
|
42
|
+
}
|
|
43
|
+
exports.NavigationEvent = NavigationEvent;
|
|
44
|
+
exports.DestinationKey = Brand.nominal();
|
|
45
|
+
function Destination(key, url, state) {
|
|
46
|
+
return { key, url, state };
|
|
47
|
+
}
|
|
48
|
+
exports.Destination = Destination;
|
|
49
|
+
var NavigationType;
|
|
50
|
+
(function (NavigationType) {
|
|
51
|
+
NavigationType["Push"] = "push";
|
|
52
|
+
NavigationType["Reload"] = "reload";
|
|
53
|
+
NavigationType["Replace"] = "replace";
|
|
54
|
+
NavigationType["Back"] = "back";
|
|
55
|
+
NavigationType["Forward"] = "forward";
|
|
56
|
+
})(NavigationType || (exports.NavigationType = NavigationType = {}));
|
|
57
|
+
exports.cancelNavigation = Effect.fail({ _tag: 'CancelNavigation' });
|
|
58
|
+
function isCancelNavigation(error) {
|
|
59
|
+
return error._tag === 'CancelNavigation';
|
|
60
|
+
}
|
|
61
|
+
exports.isCancelNavigation = isCancelNavigation;
|
|
62
|
+
const redirect = (url, options = {}) => Effect.fail({ _tag: 'RedirectNavigation', url, ...options });
|
|
63
|
+
exports.redirect = redirect;
|
|
64
|
+
function isRedirectNavigation(error) {
|
|
65
|
+
return error._tag === 'RedirectNavigation';
|
|
66
|
+
}
|
|
67
|
+
exports.isRedirectNavigation = isRedirectNavigation;
|
|
68
|
+
exports.getCurrentUrl = exports.Navigation.withEffect((n) => n.currentEntry.map((d) => d.url));
|
|
69
|
+
//# 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,16 @@
|
|
|
1
|
+
import type { Window, GlobalThis } from '@typed/dom';
|
|
2
|
+
import * as happyDom from 'happy-dom';
|
|
3
|
+
export interface ServerWindowOptions {
|
|
4
|
+
readonly url: string;
|
|
5
|
+
readonly innerWidth?: number;
|
|
6
|
+
readonly innerHeight?: number;
|
|
7
|
+
readonly settings?: {
|
|
8
|
+
readonly disableJavaScriptEvaluation: boolean;
|
|
9
|
+
readonly disableJavaScriptFileLoading: boolean;
|
|
10
|
+
readonly disableCSSFileLoading: boolean;
|
|
11
|
+
readonly enableFileSystemHttpRequests: boolean;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function makeServerWindow(options?: ServerWindowOptions): Window & GlobalThis & Pick<InstanceType<typeof happyDom.Window>, 'happyDOM'>;
|
|
15
|
+
export declare const html5Doctype = "<!DOCTYPE html>";
|
|
16
|
+
//# sourceMappingURL=_makeServerWindow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_makeServerWindow.d.ts","sourceRoot":"","sources":["../../src/_makeServerWindow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AAErC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IAEpB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAA;QAC7C,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAA;QAC9C,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAA;QACvC,QAAQ,CAAC,4BAA4B,EAAE,OAAO,CAAA;KAC/C,CAAA;CACF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAO9E;AAED,eAAO,MAAM,YAAY,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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.html5Doctype = exports.makeServerWindow = void 0;
|
|
27
|
+
const happyDom = __importStar(require("happy-dom"));
|
|
28
|
+
function makeServerWindow(options) {
|
|
29
|
+
const win = new happyDom.Window({
|
|
30
|
+
...options,
|
|
31
|
+
});
|
|
32
|
+
return win;
|
|
33
|
+
}
|
|
34
|
+
exports.makeServerWindow = makeServerWindow;
|
|
35
|
+
exports.html5Doctype = '<!DOCTYPE html>';
|
|
36
|
+
//# sourceMappingURL=_makeServerWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_makeServerWindow.js","sourceRoot":"","sources":["../../src/_makeServerWindow.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAAqC;AAerC,SAAgB,gBAAgB,CAC9B,OAA6B;IAE7B,MAAM,GAAG,GACP,IAAI,QAAQ,CAAC,MAAM,CAAC;QAClB,GAAG,OAAO;KACX,CAAQ,CAAA;IAEX,OAAO,GAAG,CAAA;AACZ,CAAC;AATD,4CASC;AAEY,QAAA,YAAY,GAAG,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../src/constant.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,EAAE,GAAkD,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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.ServiceId = void 0;
|
|
27
|
+
const Global = __importStar(require("@effect/data/Global"));
|
|
28
|
+
const id = '@typed/navigation/ServiceId';
|
|
29
|
+
exports.ServiceId = Global.globalValue(id, () => Symbol.for(id));
|
|
30
|
+
//# sourceMappingURL=constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/constant.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA6C;AAE7C,MAAM,EAAE,GAAG,6BAA6B,CAAA;AAE3B,QAAA,SAAS,GAAQ,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 { History, Location } from '@typed/dom';
|
|
5
|
+
import type { DomNavigationOptions } from './DOM.js';
|
|
6
|
+
import { Destination, NavigateOptions, NavigationError, NavigationEvent } from './Navigation.js';
|
|
7
|
+
import { Model } from './model.js';
|
|
8
|
+
import { Notify, NotifyEnd, Save, makeOnNavigation, makeOnNavigationEnd } from './shared-intent.js';
|
|
9
|
+
export type DomIntent = {
|
|
10
|
+
readonly back: (skipHistory: boolean) => ReturnType<ReturnType<typeof makeGo>>;
|
|
11
|
+
readonly forward: (skipHistory: boolean) => ReturnType<ReturnType<typeof makeGo>>;
|
|
12
|
+
readonly push: ReturnType<typeof makePush>;
|
|
13
|
+
readonly replace: ReturnType<typeof makeReplace>;
|
|
14
|
+
readonly navigate: (url: string, options?: NavigateOptions) => ReturnType<ReturnType<typeof makePush | typeof makeReplace>>;
|
|
15
|
+
readonly notify: Notify;
|
|
16
|
+
readonly go: ReturnType<typeof makeGo>;
|
|
17
|
+
readonly goTo: (key: string) => Effect.Effect<Storage | History, Cause.NoSuchElementException | NavigationError, Option<Destination>>;
|
|
18
|
+
readonly reload: ReturnType<typeof makeReload>;
|
|
19
|
+
readonly onNavigation: ReturnType<typeof makeOnNavigation>;
|
|
20
|
+
readonly onNavigationEnd: ReturnType<typeof makeOnNavigationEnd>;
|
|
21
|
+
};
|
|
22
|
+
export declare const makeIntent: (model: Model, base: string, options: DomNavigationOptions) => DomIntent;
|
|
23
|
+
export type Intent = ReturnType<typeof makeIntent>;
|
|
24
|
+
export declare const makeSave: (model: Model) => (event: NavigationEvent) => Effect.Effect<Storage, Cause.NoSuchElementException, void>;
|
|
25
|
+
export declare const makeReload: (model: Model, notify: Notify, save: Save<Storage>) => Effect.Effect<Storage | Location, NavigationError | Cause.NoSuchElementException, Destination>;
|
|
26
|
+
export declare const makeReplace: (model: Model, notify: Notify, notifyEnd: NotifyEnd, save: Save<Storage>, base: string) => (url: string, options?: NavigateOptions, skipHistory?: boolean) => Effect.Effect<Storage | History | Location, NavigationError | Cause.NoSuchElementException, Destination>;
|
|
27
|
+
export declare const makePush: (model: Model, notify: Notify, notifyEnd: NotifyEnd, save: Save<Storage>, base: string, maxEntries: number) => (url: string, options?: NavigateOptions, skipHistory?: boolean) => Effect.Effect<Storage | History | Location, NavigationError | Cause.NoSuchElementException, Destination>;
|
|
28
|
+
export declare const makeGo: (model: Model, notify: Notify, notifyEnd: NotifyEnd, save: Save<Storage>) => (delta: number, skipHistory?: boolean) => Effect.Effect<Storage | History, NavigationError | Cause.NoSuchElementException, Destination>;
|
|
29
|
+
//# sourceMappingURL=dom-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-intent.d.ts","sourceRoot":"","sources":["../../src/dom-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;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EAEhB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EACL,MAAM,EACN,SAAS,EACT,IAAI,EAIJ,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;AAO3B,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,UAAU,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAA;IAE9E,QAAQ,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,UAAU,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAA;IAEjF,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,CAChB,OAAO,GAAG,OAAO,EACjB,KAAK,CAAC,sBAAsB,GAAG,eAAe,EAC9C,MAAM,CAAC,WAAW,CAAC,CACpB,CAAA;IAED,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,eAAO,MAAM,UAAU,UACd,KAAK,QACN,MAAM,WACH,oBAAoB,KAC5B,SAuBF,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAElD,eAAO,MAAM,QAAQ,UACX,KAAK,aACL,eAAe,KAAG,aAAa,CAAC,OAAO,EAAE,MAAM,sBAAsB,EAAE,IAAI,CAgB/E,CAAA;AAEN,eAAO,MAAM,UAAU,UAAW,KAAK,UAAU,MAAM,QAAQ,KAAK,OAAO,CAAC,mGAexE,CAAA;AAEJ,eAAO,MAAM,WAAW,UACd,KAAK,UAAU,MAAM,aAAa,SAAS,QAAQ,KAAK,OAAO,CAAC,QAAQ,MAAM,WAChF,MAAM,YAAW,eAAe,oIA0ClC,CAAA;AAEN,eAAO,MAAM,QAAQ,UAEV,KAAK,UACJ,MAAM,aACH,SAAS,QACd,KAAK,OAAO,CAAC,QACb,MAAM,cACA,MAAM,WAEd,MAAM,YAAW,eAAe,oIAgDlC,CAAA;AAEN,eAAO,MAAM,MAAM,UACT,KAAK,UAAU,MAAM,aAAa,SAAS,QAAQ,KAAK,OAAO,CAAC,aAChE,MAAM,yHAmCV,CAAA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
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 dom_1 = require("@typed/dom");
|
|
29
|
+
const Navigation_js_1 = require("./Navigation.js");
|
|
30
|
+
const constant_js_1 = require("./constant.js");
|
|
31
|
+
const json_js_1 = require("./json.js");
|
|
32
|
+
const shared_intent_js_1 = require("./shared-intent.js");
|
|
33
|
+
const storage_js_1 = require("./storage.js");
|
|
34
|
+
const util_js_1 = require("./util.js");
|
|
35
|
+
// Roughly the number of History entries in a browser anyways
|
|
36
|
+
const DEFAULT_MAX_ENTRIES = 50;
|
|
37
|
+
const makeIntent = (model, base, options) => {
|
|
38
|
+
const maxEntries = Math.abs(options.maxEntries ?? DEFAULT_MAX_ENTRIES);
|
|
39
|
+
const notify = (0, shared_intent_js_1.makeNotify)(model);
|
|
40
|
+
const notifyEnd = (0, shared_intent_js_1.makeNotifyEnd)(model);
|
|
41
|
+
const save = (0, exports.makeSave)(model);
|
|
42
|
+
const go = (0, exports.makeGo)(model, notify, notifyEnd, save);
|
|
43
|
+
const replace = (0, exports.makeReplace)(model, notify, notifyEnd, save, base);
|
|
44
|
+
const push = (0, exports.makePush)(model, notify, notifyEnd, save, base, maxEntries);
|
|
45
|
+
return {
|
|
46
|
+
back: (skipHistory) => go(-1, skipHistory),
|
|
47
|
+
forward: (skipHistory) => go(1, skipHistory),
|
|
48
|
+
push,
|
|
49
|
+
replace,
|
|
50
|
+
navigate: (url, options = {}) => options.history === 'replace' ? replace(url, options) : push(url, options),
|
|
51
|
+
notify,
|
|
52
|
+
go: go,
|
|
53
|
+
goTo: (0, shared_intent_js_1.makeGoTo)(model, go),
|
|
54
|
+
reload: (0, exports.makeReload)(model, notify, save),
|
|
55
|
+
onNavigation: (0, shared_intent_js_1.makeOnNavigation)(model),
|
|
56
|
+
onNavigationEnd: (0, shared_intent_js_1.makeOnNavigationEnd)(model),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.makeIntent = makeIntent;
|
|
60
|
+
const makeSave = (model) => (event) => Effect.gen(function* ($) {
|
|
61
|
+
const events = yield* $(model.events);
|
|
62
|
+
const index = yield* $(model.index);
|
|
63
|
+
// Save to storage
|
|
64
|
+
yield* $((0, storage_js_1.saveToStorage)(events, index));
|
|
65
|
+
// Update current entry
|
|
66
|
+
yield* $(model.currentEntry.set(event.destination));
|
|
67
|
+
// Update canGoBack
|
|
68
|
+
yield* $(model.canGoBack.set(index > 0));
|
|
69
|
+
// Update canGoForward
|
|
70
|
+
yield* $(model.canGoForward.set(index < events.length - 1));
|
|
71
|
+
});
|
|
72
|
+
exports.makeSave = makeSave;
|
|
73
|
+
const makeReload = (model, notify, save) => Effect.gen(function* ($) {
|
|
74
|
+
const i = yield* $(model.index.get);
|
|
75
|
+
const e = yield* $(model.events);
|
|
76
|
+
const event = e[i];
|
|
77
|
+
const reloadEvent = { ...event, navigationType: Navigation_js_1.NavigationType.Reload };
|
|
78
|
+
yield* $(notify(reloadEvent));
|
|
79
|
+
yield* $(save(reloadEvent));
|
|
80
|
+
const location = yield* $(dom_1.Location);
|
|
81
|
+
location.reload();
|
|
82
|
+
return event.destination;
|
|
83
|
+
});
|
|
84
|
+
exports.makeReload = makeReload;
|
|
85
|
+
const makeReplace = (model, notify, notifyEnd, save, base) => (url, options = {}, skipHistory = false) => Effect.gen(function* ($) {
|
|
86
|
+
const location = yield* $(dom_1.Location);
|
|
87
|
+
const entry = yield* $(model.currentEntry.get);
|
|
88
|
+
const destination = {
|
|
89
|
+
key: entry.key,
|
|
90
|
+
url: (0, util_js_1.getUrl)(url, base, location.origin),
|
|
91
|
+
state: options.state,
|
|
92
|
+
};
|
|
93
|
+
const event = {
|
|
94
|
+
destination,
|
|
95
|
+
hashChange: entry.url.hash !== destination.url.hash,
|
|
96
|
+
navigationType: Navigation_js_1.NavigationType.Replace,
|
|
97
|
+
};
|
|
98
|
+
yield* $(notify(event));
|
|
99
|
+
if (!skipHistory) {
|
|
100
|
+
const history = yield* $(dom_1.History);
|
|
101
|
+
history.replaceState.call(constant_js_1.ServiceId, { state: options.state, event: (0, json_js_1.encodeEvent)(event) }, '', url);
|
|
102
|
+
}
|
|
103
|
+
const currentIndex = yield* $(model.index);
|
|
104
|
+
yield* $(model.events.update((entries) => {
|
|
105
|
+
const updated = entries.slice(0);
|
|
106
|
+
updated[currentIndex] = event;
|
|
107
|
+
return updated;
|
|
108
|
+
}));
|
|
109
|
+
yield* $(save(event));
|
|
110
|
+
yield* $(notifyEnd(event));
|
|
111
|
+
return destination;
|
|
112
|
+
});
|
|
113
|
+
exports.makeReplace = makeReplace;
|
|
114
|
+
const makePush = (model, notify, notifyEnd, save, base, maxEntries) => (url, options = {}, skipHistory = false) => Effect.gen(function* ($) {
|
|
115
|
+
const location = yield* $(dom_1.Location);
|
|
116
|
+
const entry = yield* $(model.currentEntry.get);
|
|
117
|
+
const destination = {
|
|
118
|
+
key: yield* $(util_js_1.createKey),
|
|
119
|
+
url: (0, util_js_1.getUrl)(url, base, location.origin),
|
|
120
|
+
state: options.state,
|
|
121
|
+
};
|
|
122
|
+
const event = {
|
|
123
|
+
destination,
|
|
124
|
+
hashChange: entry.url.hash !== destination.url.hash,
|
|
125
|
+
navigationType: Navigation_js_1.NavigationType.Push,
|
|
126
|
+
};
|
|
127
|
+
// Notify event handlers
|
|
128
|
+
yield* $(notify(event));
|
|
129
|
+
if (!skipHistory) {
|
|
130
|
+
const history = yield* $(dom_1.History);
|
|
131
|
+
history.pushState.call(constant_js_1.ServiceId, { state: options.state, event: (0, json_js_1.encodeEvent)(event) }, '', url);
|
|
132
|
+
}
|
|
133
|
+
const currentIndex = yield* $(model.index);
|
|
134
|
+
// Remove all entries after the current index
|
|
135
|
+
// and add the new destination to the end
|
|
136
|
+
yield* $(model.events.update((entries) => {
|
|
137
|
+
const updated = entries.slice(0, currentIndex + 1);
|
|
138
|
+
updated.push(event);
|
|
139
|
+
return updated.slice(-maxEntries);
|
|
140
|
+
}));
|
|
141
|
+
// Update the index to the new destination
|
|
142
|
+
yield* $(model.index.update((i) => i + 1));
|
|
143
|
+
yield* $(save(event));
|
|
144
|
+
yield* $(notifyEnd(event));
|
|
145
|
+
return destination;
|
|
146
|
+
});
|
|
147
|
+
exports.makePush = makePush;
|
|
148
|
+
const makeGo = (model, notify, notifyEnd, save) => (delta, skipHistory = false) => Effect.gen(function* ($) {
|
|
149
|
+
const currentEntries = yield* $(model.events);
|
|
150
|
+
const totalEntries = currentEntries.length;
|
|
151
|
+
const currentIndex = yield* $(model.index);
|
|
152
|
+
// Nothing to do here
|
|
153
|
+
if (delta === 0)
|
|
154
|
+
return currentEntries[currentIndex].destination;
|
|
155
|
+
const nextIndex = delta > 0
|
|
156
|
+
? Math.min(currentIndex + delta, totalEntries - 1)
|
|
157
|
+
: Math.max(currentIndex + delta, 0);
|
|
158
|
+
const nextEntry = currentEntries[nextIndex];
|
|
159
|
+
yield* $(notify({
|
|
160
|
+
...nextEntry,
|
|
161
|
+
navigationType: nextIndex > currentIndex ? Navigation_js_1.NavigationType.Forward : Navigation_js_1.NavigationType.Back,
|
|
162
|
+
}));
|
|
163
|
+
if (!skipHistory) {
|
|
164
|
+
const history = yield* $(dom_1.History);
|
|
165
|
+
history.go.call(constant_js_1.ServiceId, delta);
|
|
166
|
+
}
|
|
167
|
+
yield* $(model.index.set(nextIndex));
|
|
168
|
+
yield* $(save(nextEntry));
|
|
169
|
+
yield* $(notifyEnd(nextEntry));
|
|
170
|
+
return nextEntry.destination;
|
|
171
|
+
});
|
|
172
|
+
exports.makeGo = makeGo;
|
|
173
|
+
//# sourceMappingURL=dom-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-intent.js","sourceRoot":"","sources":["../../src/dom-intent.ts"],"names":[],"mappings":"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"}
|