@equinor/fusion-framework-module-navigation 7.0.0-next.2 → 7.0.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.
- package/CHANGELOG.md +42 -19
- package/README.md +97 -614
- package/dist/esm/NavigationConfigurator.js +29 -6
- package/dist/esm/NavigationConfigurator.js.map +1 -1
- package/dist/esm/NavigationProvider.js +57 -23
- package/dist/esm/NavigationProvider.js.map +1 -1
- package/dist/esm/events.js +20 -3
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/BaseHistory.js +23 -6
- package/dist/esm/lib/BaseHistory.js.map +1 -1
- package/dist/esm/lib/BrowserHistoryStack.js +5 -6
- package/dist/esm/lib/BrowserHistoryStack.js.map +1 -1
- package/dist/esm/lib/MemoryHistory.js +13 -6
- package/dist/esm/lib/MemoryHistory.js.map +1 -1
- package/dist/esm/lib/MemoryStack.js +1 -0
- package/dist/esm/lib/MemoryStack.js.map +1 -1
- package/dist/esm/lib/ProxyHistory.js +114 -0
- package/dist/esm/lib/ProxyHistory.js.map +1 -0
- package/dist/esm/lib/create-history.js +7 -13
- package/dist/esm/lib/create-history.js.map +1 -1
- package/dist/esm/lib/index.js +10 -0
- package/dist/esm/lib/index.js.map +1 -1
- package/dist/esm/lib/state/history.flows.js +7 -12
- package/dist/esm/lib/state/history.flows.js.map +1 -1
- package/dist/esm/lib/state/history.reducer.js +8 -4
- package/dist/esm/lib/state/history.reducer.js.map +1 -1
- package/dist/esm/lib/state/history.state.js +9 -3
- package/dist/esm/lib/state/history.state.js.map +1 -1
- package/dist/esm/lib/utils/resolve-browser-location.js +2 -2
- package/dist/esm/lib/utils/resolve-browser-location.js.map +1 -1
- package/dist/esm/module.js +4 -4
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/NavigationConfigurator.d.ts +10 -1
- package/dist/types/NavigationConfigurator.interface.d.ts +25 -5
- package/dist/types/NavigationProvider.d.ts +57 -23
- package/dist/types/NavigationProvider.interface.d.ts +20 -7
- package/dist/types/events.d.ts +20 -3
- package/dist/types/index.d.ts +24 -1
- package/dist/types/lib/BaseHistory.d.ts +23 -6
- package/dist/types/lib/BrowserHistoryStack.d.ts +5 -6
- package/dist/types/lib/MemoryHistory.d.ts +5 -5
- package/dist/types/lib/ProxyHistory.d.ts +68 -0
- package/dist/types/lib/create-history.d.ts +7 -13
- package/dist/types/lib/index.d.ts +10 -0
- package/dist/types/lib/state/history.flows.d.ts +6 -11
- package/dist/types/lib/state/history.reducer.d.ts +8 -4
- package/dist/types/lib/state/history.state.d.ts +9 -3
- package/dist/types/lib/types.d.ts +39 -8
- package/dist/types/version.d.ts +1 -1
- package/package.json +12 -13
- package/src/NavigationConfigurator.interface.ts +28 -5
- package/src/NavigationConfigurator.ts +47 -15
- package/src/NavigationProvider.interface.ts +20 -7
- package/src/NavigationProvider.ts +57 -23
- package/src/__tests__/ProxyHistory.test.ts +149 -0
- package/src/events.ts +20 -3
- package/src/index.ts +25 -1
- package/src/lib/BaseHistory.ts +23 -6
- package/src/lib/BrowserHistoryStack.ts +5 -6
- package/src/lib/MemoryHistory.ts +13 -6
- package/src/lib/MemoryStack.ts +1 -0
- package/src/lib/ProxyHistory.ts +144 -0
- package/src/lib/create-history.ts +7 -13
- package/src/lib/index.ts +11 -0
- package/src/lib/state/history.flows.ts +7 -12
- package/src/lib/state/history.reducer.ts +8 -4
- package/src/lib/state/history.state.ts +9 -3
- package/src/lib/types.ts +39 -8
- package/src/lib/utils/resolve-browser-location.ts +2 -2
- package/src/module.ts +4 -4
- package/src/version.ts +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { of } from 'rxjs';
|
|
2
|
+
import { of, from } from 'rxjs';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
3
4
|
import { BaseConfigBuilder, } from '@equinor/fusion-framework-module';
|
|
4
5
|
import { createHistory } from './lib/create-history';
|
|
6
|
+
import { ProxyHistory } from './lib/ProxyHistory';
|
|
5
7
|
/**
|
|
6
8
|
* Zod schema for navigation module configuration validation.
|
|
7
9
|
*
|
|
@@ -51,13 +53,16 @@ export class NavigationConfigurator extends BaseConfigBuilder {
|
|
|
51
53
|
this.setHistory(async (args) => {
|
|
52
54
|
const history = args.ref?.navigation?.history;
|
|
53
55
|
if (history) {
|
|
54
|
-
|
|
56
|
+
// Wrap the provided history in a ProxyHistory to ensure the module can manage its own teardowns without affecting the original instance.
|
|
57
|
+
return new ProxyHistory(history);
|
|
55
58
|
}
|
|
56
59
|
if (typeof window !== 'undefined') {
|
|
57
60
|
return createHistory('browser');
|
|
58
61
|
}
|
|
59
62
|
return createHistory('memory');
|
|
60
|
-
}
|
|
63
|
+
},
|
|
64
|
+
// Don't wrap the default history in a ProxyHistory since it's already owned by the module and will be properly disposed.
|
|
65
|
+
{ proxy: false });
|
|
61
66
|
}
|
|
62
67
|
/**
|
|
63
68
|
* @deprecated Use `setBasename()` method instead
|
|
@@ -93,12 +98,30 @@ export class NavigationConfigurator extends BaseConfigBuilder {
|
|
|
93
98
|
/**
|
|
94
99
|
* Sets a custom history instance for the navigation module.
|
|
95
100
|
*
|
|
101
|
+
* By default the resolved history is wrapped in a {@link ProxyHistory} so the
|
|
102
|
+
* module gets its own disposable handle without owning (or accidentally
|
|
103
|
+
* disposing) the original instance. Set `proxy` to `false` to use the
|
|
104
|
+
* history as-is.
|
|
105
|
+
*
|
|
96
106
|
* @param historyOrCallback - History instance or configuration callback
|
|
107
|
+
* @param options - Optional settings for history wrapping
|
|
108
|
+
* @param options.proxy - Wrap the history in a {@link ProxyHistory} (default: `true`)
|
|
97
109
|
* @returns The configurator instance for method chaining
|
|
98
110
|
*/
|
|
99
|
-
setHistory(historyOrCallback) {
|
|
100
|
-
const
|
|
101
|
-
|
|
111
|
+
setHistory(historyOrCallback, options) {
|
|
112
|
+
const { proxy = true } = options ?? {};
|
|
113
|
+
const resolve = typeof historyOrCallback === 'function'
|
|
114
|
+
? historyOrCallback
|
|
115
|
+
: // Normalize a direct instance to a callback for consistent handling.
|
|
116
|
+
async () => historyOrCallback;
|
|
117
|
+
if (proxy) {
|
|
118
|
+
// Wrap each emitted history in a ProxyHistory so dispose only tears down
|
|
119
|
+
// proxy-owned listeners/blockers, never the underlying history itself.
|
|
120
|
+
this._set('history', (args) => from(resolve(args)).pipe(map((history) => (history ? new ProxyHistory(history) : undefined))));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this._set('history', resolve);
|
|
124
|
+
}
|
|
102
125
|
return this;
|
|
103
126
|
}
|
|
104
127
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationConfigurator.js","sourceRoot":"","sources":["../../src/NavigationConfigurator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAwB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"NavigationConfigurator.js","sourceRoot":"","sources":["../../src/NavigationConfigurator.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,17 +20,23 @@ import { pathToString } from './lib/utils';
|
|
|
20
20
|
const normalizePathname = (path) => path.replace(/\/+/g, '/').replace(/\/$/, '');
|
|
21
21
|
/**
|
|
22
22
|
* Navigation provider implementation.
|
|
23
|
-
*
|
|
23
|
+
*
|
|
24
|
+
* Manages routing and navigation state with automatic basename localization.
|
|
25
|
+
* Wraps a {@link History} instance to expose observable state, path localization,
|
|
26
|
+
* and router creation.
|
|
24
27
|
*
|
|
25
28
|
* @remarks
|
|
26
|
-
*
|
|
27
|
-
* -
|
|
28
|
-
* -
|
|
29
|
-
* -
|
|
30
|
-
* - Handles navigation actions (push, replace, createHref, etc.)
|
|
29
|
+
* - Emits localized paths (basename removed) to consumers via {@link NavigationProvider.state$ | state$}
|
|
30
|
+
* - Internally prefixes paths with the basename before forwarding to the history stack
|
|
31
|
+
* - Creates routers compatible with Remix / React Router via {@link NavigationProvider.createRouter | createRouter}
|
|
32
|
+
* - Dispatches {@link NavigatedEvent} and telemetry on navigation changes
|
|
31
33
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const provider = new NavigationProvider({ version, config });
|
|
37
|
+
* provider.push('/users');
|
|
38
|
+
* console.log(provider.path.pathname); // '/users'
|
|
39
|
+
* ```
|
|
34
40
|
*/
|
|
35
41
|
export class NavigationProvider extends BaseModuleProvider {
|
|
36
42
|
#history;
|
|
@@ -40,13 +46,18 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
40
46
|
#event;
|
|
41
47
|
/**
|
|
42
48
|
* Observable stream of navigation state updates.
|
|
43
|
-
*
|
|
49
|
+
*
|
|
50
|
+
* Emits localized paths (with basename removed) and filters to only
|
|
51
|
+
* paths within the basename scope. Late subscribers receive the last
|
|
52
|
+
* emitted value immediately.
|
|
44
53
|
*/
|
|
45
54
|
get state$() {
|
|
46
55
|
return this.#state$;
|
|
47
56
|
}
|
|
48
57
|
/**
|
|
49
|
-
* Gets the basename.
|
|
58
|
+
* Gets the basename prefix configured for this provider.
|
|
59
|
+
*
|
|
60
|
+
* @returns The basename string, or an empty string if none is configured
|
|
50
61
|
*/
|
|
51
62
|
get basename() {
|
|
52
63
|
return this.#basename ?? '';
|
|
@@ -64,20 +75,26 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
64
75
|
return this.#history;
|
|
65
76
|
}
|
|
66
77
|
/**
|
|
67
|
-
* Gets the history instance.
|
|
78
|
+
* Gets the underlying history instance.
|
|
79
|
+
*
|
|
80
|
+
* @returns The {@link History} instance used for navigation
|
|
68
81
|
*/
|
|
69
82
|
get history() {
|
|
70
83
|
return this.#history;
|
|
71
84
|
}
|
|
72
85
|
/**
|
|
73
|
-
* Gets the current localized path
|
|
86
|
+
* Gets the current localized path with the basename prefix removed.
|
|
87
|
+
*
|
|
88
|
+
* @returns A {@link Path} object representing the current location without basename
|
|
74
89
|
*/
|
|
75
90
|
get path() {
|
|
76
91
|
return this._localizePath(this.#history.location);
|
|
77
92
|
}
|
|
78
93
|
/**
|
|
94
|
+
* Creates a new {@link NavigationProvider}.
|
|
95
|
+
*
|
|
79
96
|
* @param args - Configuration arguments containing module config
|
|
80
|
-
* @throws {Error} If no history is provided in the configuration
|
|
97
|
+
* @throws {Error} If no history instance is provided in the configuration
|
|
81
98
|
*/
|
|
82
99
|
constructor(args) {
|
|
83
100
|
super(args);
|
|
@@ -152,10 +169,10 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
152
169
|
/**
|
|
153
170
|
* Creates a router instance from route configuration.
|
|
154
171
|
*
|
|
155
|
-
* @deprecated Use `@equinor/fusion-framework-react-router` instead
|
|
172
|
+
* @deprecated Use `@equinor/fusion-framework-react-router` instead.
|
|
156
173
|
*
|
|
157
|
-
* @param routes - Route configuration objects compatible with
|
|
158
|
-
* @returns A configured and initialized
|
|
174
|
+
* @param routes - Route configuration objects compatible with Remix/React Router
|
|
175
|
+
* @returns A configured and initialized {@link Router} instance with basename applied
|
|
159
176
|
*/
|
|
160
177
|
createRouter(routes) {
|
|
161
178
|
this.#telemetry?.trackEvent({
|
|
@@ -175,17 +192,25 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
175
192
|
return router;
|
|
176
193
|
}
|
|
177
194
|
/**
|
|
178
|
-
* Creates a localized href string
|
|
195
|
+
* Creates a localized href string including the basename prefix.
|
|
179
196
|
*
|
|
180
|
-
* @param to -
|
|
197
|
+
* @param to - Path or location to resolve (defaults to current path)
|
|
198
|
+
* @returns Fully-qualified href string with basename included
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```ts
|
|
202
|
+
* // basename = '/apps/my-app'
|
|
203
|
+
* provider.createHref('/users'); // '/apps/my-app/users'
|
|
204
|
+
* ```
|
|
181
205
|
*/
|
|
182
206
|
createHref(to) {
|
|
183
207
|
return this.#history.createHref(this._createToPath(to ?? this.path));
|
|
184
208
|
}
|
|
185
209
|
/**
|
|
186
|
-
* Creates a full URL object
|
|
210
|
+
* Creates a full {@link URL} object including the basename prefix.
|
|
187
211
|
*
|
|
188
|
-
* @param to -
|
|
212
|
+
* @param to - Path or location to resolve (defaults to current path)
|
|
213
|
+
* @returns A {@link URL} instance representing the resolved navigation target
|
|
189
214
|
*/
|
|
190
215
|
createURL(to) {
|
|
191
216
|
return this.#history.createURL(this._createToPath(to ?? this.path));
|
|
@@ -223,13 +248,19 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
223
248
|
this.#history.pop();
|
|
224
249
|
}
|
|
225
250
|
/**
|
|
226
|
-
* Checks
|
|
251
|
+
* Checks whether a pathname falls within the configured basename scope.
|
|
252
|
+
*
|
|
253
|
+
* @param pathname - The pathname to check
|
|
254
|
+
* @returns `true` if the pathname starts with the basename (or no basename is set)
|
|
227
255
|
*/
|
|
228
256
|
_isWithinBasenameScope(pathname) {
|
|
229
257
|
return this.#basename ? pathname.startsWith(this.#basename) : true;
|
|
230
258
|
}
|
|
231
259
|
/**
|
|
232
|
-
* Localizes a path by
|
|
260
|
+
* Localizes a path by stripping the basename prefix from the pathname.
|
|
261
|
+
*
|
|
262
|
+
* @param location - The full path to localize
|
|
263
|
+
* @returns A new {@link Path} with the basename removed from the pathname
|
|
233
264
|
*/
|
|
234
265
|
_localizePath(location) {
|
|
235
266
|
const { pathname, search, hash } = location;
|
|
@@ -240,7 +271,10 @@ export class NavigationProvider extends BaseModuleProvider {
|
|
|
240
271
|
};
|
|
241
272
|
}
|
|
242
273
|
/**
|
|
243
|
-
* Creates a full path object from a target location,
|
|
274
|
+
* Creates a full path object from a target location, prepending the basename prefix.
|
|
275
|
+
*
|
|
276
|
+
* @param to - The target location (string path or partial {@link Path} object)
|
|
277
|
+
* @returns A partial {@link Path} with basename prepended to the pathname
|
|
244
278
|
*/
|
|
245
279
|
_createToPath(to) {
|
|
246
280
|
// Parse the 'to' parameter into path components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationProvider.js","sourceRoot":"","sources":["../../src/NavigationProvider.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,OAAO,EAA4B,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EACL,kBAAkB,GAEnB,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EACL,cAAc,EACd,cAAc,GAEf,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;;;;;;;;;;GAWG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAEzF
|
|
1
|
+
{"version":3,"file":"NavigationProvider.js","sourceRoot":"","sources":["../../src/NavigationProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/events.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { FrameworkEvent } from '@equinor/fusion-framework-module-event';
|
|
2
2
|
/**
|
|
3
3
|
* Event emitted before navigation occurs.
|
|
4
|
-
* Can be canceled by calling `preventDefault()
|
|
4
|
+
* Can be canceled by calling `preventDefault()` to block the navigation.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* eventProvider.addEventListener('onNavigate', (event) => {
|
|
9
|
+
* if (hasUnsavedChanges) {
|
|
10
|
+
* event.preventDefault();
|
|
11
|
+
* }
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
5
14
|
*/
|
|
6
15
|
export class NavigateEvent extends FrameworkEvent {
|
|
7
16
|
constructor(detail, source) {
|
|
@@ -12,8 +21,16 @@ export class NavigateEvent extends FrameworkEvent {
|
|
|
12
21
|
}
|
|
13
22
|
}
|
|
14
23
|
/**
|
|
15
|
-
* Event emitted after navigation
|
|
16
|
-
* Contains the navigation action and
|
|
24
|
+
* Event emitted after navigation completes.
|
|
25
|
+
* Contains the navigation action type and both current and previous locations.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* eventProvider.addEventListener('onNavigated', (event) => {
|
|
30
|
+
* const { action, current, previous } = event.detail;
|
|
31
|
+
* console.log(`${action}: ${previous.location.pathname} → ${current.location.pathname}`);
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
17
34
|
*/
|
|
18
35
|
export class NavigatedEvent extends FrameworkEvent {
|
|
19
36
|
constructor(detail, source) {
|
package/dist/esm/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,wCAAwC,CAAC;AAejG
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,wCAAwC,CAAC;AAejG;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,aAAc,SAAQ,cAElC;IACC,YAAY,MAA2B,EAAE,MAA2B;QAClE,KAAK,CAAC,YAAY,EAAE;YAClB,MAAM;YACN,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF;AAcD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,cAAe,SAAQ,cAEnC;IACC,YAAY,MAA4B,EAAE,MAA2B;QACnE,KAAK,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @equinor/fusion-framework-module-navigation
|
|
3
|
+
*
|
|
4
|
+
* Navigation module for Fusion Framework providing routing and navigation capabilities.
|
|
5
|
+
*
|
|
6
|
+
* Manages observable navigation state with automatic basename localization,
|
|
7
|
+
* so consumers work with clean paths while the underlying history receives
|
|
8
|
+
* full paths including the basename prefix.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* Supports browser, hash, and memory history types. Integrates with
|
|
12
|
+
* `@remix-run/router` for router creation and is compatible with
|
|
13
|
+
* industry-standard routers (Remix / React Router).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { enableNavigation, createHistory } from '@equinor/fusion-framework-module-navigation';
|
|
18
|
+
*
|
|
19
|
+
* enableNavigation(configurator, '/apps/my-app');
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
1
24
|
export { NavigationConfigurator } from './NavigationConfigurator';
|
|
2
25
|
export { module, moduleKey } from './module';
|
|
3
26
|
export { enableNavigation } from './enable-navigation';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAoB,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,aAAa,EACb,cAAc,GAGf,MAAM,UAAU,CAAC"}
|
|
@@ -3,8 +3,10 @@ import { filter } from 'rxjs/operators';
|
|
|
3
3
|
import { Action } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* Abstract base class for history implementations.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* Provides common state management, navigation logic, and subscription
|
|
8
|
+
* lifecycle that is shared across different history backends (browser,
|
|
9
|
+
* hash, memory).
|
|
8
10
|
*/
|
|
9
11
|
export class BaseHistory {
|
|
10
12
|
// Subscriptions for cleanup
|
|
@@ -12,13 +14,17 @@ export class BaseHistory {
|
|
|
12
14
|
// internal state
|
|
13
15
|
#state;
|
|
14
16
|
/**
|
|
15
|
-
* Gets the current location.
|
|
17
|
+
* Gets the current location in the history stack.
|
|
18
|
+
*
|
|
19
|
+
* @returns The current {@link Location} including pathname, search, hash, state, and key
|
|
16
20
|
*/
|
|
17
21
|
get location() {
|
|
18
22
|
return this.#state.subject.value.current.location;
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
|
-
* Gets the current action.
|
|
25
|
+
* Gets the current navigation action type.
|
|
26
|
+
*
|
|
27
|
+
* @returns The most recent {@link Action} (`Pop`, `Push`, or `Replace`)
|
|
22
28
|
*/
|
|
23
29
|
get action() {
|
|
24
30
|
return this.#state.subject.value.current.action;
|
|
@@ -37,7 +43,9 @@ export class BaseHistory {
|
|
|
37
43
|
return this.#state.subject.action$;
|
|
38
44
|
}
|
|
39
45
|
/**
|
|
40
|
-
* Checks
|
|
46
|
+
* Checks whether there are any active navigation blockers.
|
|
47
|
+
*
|
|
48
|
+
* @returns `true` if one or more blockers are registered
|
|
41
49
|
*/
|
|
42
50
|
get hasBlockers() {
|
|
43
51
|
return this.#state.subject.value.blockers.length > 0;
|
|
@@ -47,18 +55,27 @@ export class BaseHistory {
|
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* Creates a valid href string for a given path.
|
|
58
|
+
*
|
|
59
|
+
* @param to - Target path or partial path object
|
|
60
|
+
* @returns Fully-qualified href string
|
|
50
61
|
*/
|
|
51
62
|
createHref(to) {
|
|
52
63
|
return this.createURL(to).href;
|
|
53
64
|
}
|
|
54
65
|
/**
|
|
55
|
-
* Creates a URL object for a given path.
|
|
66
|
+
* Creates a {@link URL} object for a given path.
|
|
67
|
+
*
|
|
68
|
+
* @param to - Target path or partial path object
|
|
69
|
+
* @returns Resolved {@link URL} instance
|
|
56
70
|
*/
|
|
57
71
|
createURL(to) {
|
|
58
72
|
return this.#state.stack.createURL(to);
|
|
59
73
|
}
|
|
60
74
|
/**
|
|
61
75
|
* Encodes a location by properly URL-encoding the pathname.
|
|
76
|
+
*
|
|
77
|
+
* @param to - Target path or partial path object
|
|
78
|
+
* @returns A {@link Path} with URL-encoded components
|
|
62
79
|
*/
|
|
63
80
|
encodeLocation(to) {
|
|
64
81
|
return this.#state.stack.createURL(to);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseHistory.js","sourceRoot":"","sources":["../../../src/lib/BaseHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAIxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAWjC
|
|
1
|
+
{"version":3,"file":"BaseHistory.js","sourceRoot":"","sources":["../../../src/lib/BaseHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { pathToString, resolvePath, resolveWindowLocation } from './utils';
|
|
2
2
|
/**
|
|
3
|
-
* Browser history stack implementation using native
|
|
3
|
+
* Browser history stack implementation using the native History API.
|
|
4
4
|
*
|
|
5
|
-
* Manages navigation state
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Manages navigation state via `pushState` / `replaceState` and stores
|
|
6
|
+
* location state in `history.state`. This is the default stack for
|
|
7
|
+
* pathname-based (non-hash) routing.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```ts
|
|
11
11
|
* const stack = new BrowserHistoryStack(window);
|
|
12
|
-
* stack.push({ pathname: '/users',
|
|
13
|
-
* // Updates URL to /users and adds entry to history
|
|
12
|
+
* stack.push({ pathname: '/users', search: '', hash: '', key: 'abc', state: null });
|
|
14
13
|
* ```
|
|
15
14
|
*/
|
|
16
15
|
export class BrowserHistoryStack {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserHistoryStack.js","sourceRoot":"","sources":["../../../src/lib/BrowserHistoryStack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG3E
|
|
1
|
+
{"version":3,"file":"BrowserHistoryStack.js","sourceRoot":"","sources":["../../../src/lib/BrowserHistoryStack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAG3E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,mBAAmB;IAIQ;IAHtC;;OAEG;IACH,YAAsC,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEzD;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QAChB,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,QAAkB;QAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,QAAkB;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,QAAkB,EAAE,MAA0B;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;OAEG;IACI,EAAE,CAAC,KAAa;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,EAAM;QACrB,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAES,mBAAmB,CAAC,EAAM;QAClC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -9,16 +9,23 @@ import { createHistoryReducer, createStore } from './state';
|
|
|
9
9
|
const defaultInitialLocation = {
|
|
10
10
|
delta: 0,
|
|
11
11
|
action: Action.Pop,
|
|
12
|
-
location: {
|
|
12
|
+
location: {
|
|
13
|
+
pathname: '/',
|
|
14
|
+
search: '',
|
|
15
|
+
hash: '',
|
|
16
|
+
key: 'unknown',
|
|
17
|
+
state: null,
|
|
18
|
+
unstable_mask: undefined,
|
|
19
|
+
},
|
|
13
20
|
};
|
|
14
21
|
/**
|
|
15
22
|
* Memory history implementation using in-memory storage.
|
|
16
23
|
*
|
|
17
|
-
*
|
|
18
|
-
* - Testing
|
|
19
|
-
* - SSR
|
|
20
|
-
* - Widgets
|
|
21
|
-
* - Node.js
|
|
24
|
+
* Does not touch browser APIs, making it suitable for:
|
|
25
|
+
* - **Testing** — deterministic navigation state without a DOM
|
|
26
|
+
* - **SSR** — server-side rendering where `window` is unavailable
|
|
27
|
+
* - **Widgets** — embedded apps that must not alter the host page URL
|
|
28
|
+
* - **Node.js** — any environment without browser history APIs
|
|
22
29
|
*/
|
|
23
30
|
export class MemoryHistory extends BaseHistory {
|
|
24
31
|
constructor(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryHistory.js","sourceRoot":"","sources":["../../../src/lib/MemoryHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,sBAAsB,GAAqB;IAC/C,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,MAAM,CAAC,GAAG;IAClB,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"MemoryHistory.js","sourceRoot":"","sources":["../../../src/lib/MemoryHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE5D;;GAEG;AACH,MAAM,sBAAsB,GAAqB;IAC/C,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,MAAM,CAAC,GAAG;IAClB,QAAQ,EAAE;QACR,QAAQ,EAAE,GAAG;QACb,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,SAAS;KACzB;CACF,CAAC;AAYF;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,YAAmB,OAA8B;QAC/C,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,eAAe,IAAI,sBAAsB,CAAC;QAE1D,0CAA0C;QAC1C,MAAM,YAAY,GAAkB;YAClC,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC;YACpC,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzF,0CAA0C;QAC1C,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EACL,oBAAoB,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAC9D,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,EAAM;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryStack.js","sourceRoot":"","sources":["../../../src/lib/MemoryStack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAC7B,QAAQ,CAAW;IAEnB;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,YAAY,OAAwC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,eAAe,IAAI;YAC1C,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"MemoryStack.js","sourceRoot":"","sources":["../../../src/lib/MemoryStack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAC7B,QAAQ,CAAW;IAEnB;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,YAAY,OAAwC;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,eAAe,IAAI;YAC1C,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,EAAE;YACP,aAAa,EAAE,SAAS;SACzB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,QAAkB;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,EAAE,CAAC,KAAa,EAAE,KAA8B;QAC9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC1D,0CAA0C;QAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,CAAC;QAE9F,gDAAgD;QAChD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YACvD,CAAC;YACD,OAAO;QACT,CAAC;QAED,kDAAkD;QAClD,MAAM,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC;QACtC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,CAAC;aAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,EAAM;QACd,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Subscription } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* A lightweight proxy that delegates every {@link History} operation to an
|
|
4
|
+
* underlying target instance.
|
|
5
|
+
*
|
|
6
|
+
* Use this when you need to pass a conforming `History` object whose backing
|
|
7
|
+
* implementation can be swapped or is not yet available at construction time,
|
|
8
|
+
* or when you want a thin indirection layer without subclassing
|
|
9
|
+
* {@link BaseHistory}.
|
|
10
|
+
*
|
|
11
|
+
* The proxy does **not** own the underlying history; disposing it only tears
|
|
12
|
+
* down subscriptions and blockers registered through the proxy itself.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const browser = createHistory('browser');
|
|
17
|
+
* const proxy = new ProxyHistory(browser);
|
|
18
|
+
* proxy.push('/dashboard'); // delegates to browser.push
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class ProxyHistory {
|
|
22
|
+
/** The underlying history instance all calls are forwarded to. */
|
|
23
|
+
#target;
|
|
24
|
+
/** Teardowns owned by this proxy, cleaned up on dispose. */
|
|
25
|
+
#teardowns = new Subscription();
|
|
26
|
+
/**
|
|
27
|
+
* @param target - The history instance to delegate all operations to
|
|
28
|
+
*/
|
|
29
|
+
constructor(target) {
|
|
30
|
+
this.#target = target;
|
|
31
|
+
}
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
get state$() {
|
|
34
|
+
return this.#target.state$;
|
|
35
|
+
}
|
|
36
|
+
/** @inheritdoc */
|
|
37
|
+
get action$() {
|
|
38
|
+
return this.#target.action$;
|
|
39
|
+
}
|
|
40
|
+
/** @inheritdoc */
|
|
41
|
+
get action() {
|
|
42
|
+
return this.#target.action;
|
|
43
|
+
}
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
get location() {
|
|
46
|
+
return this.#target.location;
|
|
47
|
+
}
|
|
48
|
+
/** @inheritdoc */
|
|
49
|
+
createHref(to) {
|
|
50
|
+
return this.#target.createHref(to);
|
|
51
|
+
}
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
createURL(to) {
|
|
54
|
+
return this.#target.createURL(to);
|
|
55
|
+
}
|
|
56
|
+
/** @inheritdoc */
|
|
57
|
+
encodeLocation(to) {
|
|
58
|
+
return this.#target.encodeLocation(to);
|
|
59
|
+
}
|
|
60
|
+
/** @inheritdoc */
|
|
61
|
+
push(to, state) {
|
|
62
|
+
this.#target.push(to, state);
|
|
63
|
+
}
|
|
64
|
+
/** @inheritdoc */
|
|
65
|
+
replace(to, state) {
|
|
66
|
+
this.#target.replace(to, state);
|
|
67
|
+
}
|
|
68
|
+
/** @inheritdoc */
|
|
69
|
+
navigate(to, options) {
|
|
70
|
+
this.#target.navigate(to, options);
|
|
71
|
+
}
|
|
72
|
+
/** @inheritdoc */
|
|
73
|
+
go(delta) {
|
|
74
|
+
this.#target.go(delta);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Triggers a POP action on the underlying history to notify framework
|
|
78
|
+
* listeners (e.g. React Router) after programmatic navigation.
|
|
79
|
+
*
|
|
80
|
+
* Delegates to the target's `pop()` when it is a {@link BaseHistory}
|
|
81
|
+
* instance; otherwise this is a no-op.
|
|
82
|
+
*/
|
|
83
|
+
pop() {
|
|
84
|
+
if ('pop' in this.#target && typeof this.#target.pop === 'function') {
|
|
85
|
+
this.#target.pop();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** @inheritdoc */
|
|
89
|
+
listen(listener) {
|
|
90
|
+
const unlisten = this.#target.listen(listener);
|
|
91
|
+
this.#teardowns.add(unlisten);
|
|
92
|
+
return () => {
|
|
93
|
+
unlisten();
|
|
94
|
+
this.#teardowns.remove(unlisten);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** @inheritdoc */
|
|
98
|
+
block(blocker) {
|
|
99
|
+
const unblock = this.#target.block(blocker);
|
|
100
|
+
this.#teardowns.add(unblock);
|
|
101
|
+
return () => {
|
|
102
|
+
unblock();
|
|
103
|
+
this.#teardowns.remove(unblock);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Disposes all listeners and blockers registered through this proxy.
|
|
108
|
+
* Does **not** dispose the underlying history.
|
|
109
|
+
*/
|
|
110
|
+
[Symbol.dispose]() {
|
|
111
|
+
this.#teardowns.unsubscribe();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=ProxyHistory.js.map
|