swup 4.4.1 → 4.4.2
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/Swup.cjs +1 -1
- package/dist/Swup.cjs.map +1 -1
- package/dist/Swup.modern.js +1 -1
- package/dist/Swup.modern.js.map +1 -1
- package/dist/Swup.module.js +1 -1
- package/dist/Swup.module.js.map +1 -1
- package/dist/Swup.umd.js +1 -1
- package/dist/Swup.umd.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modules/Hooks.d.ts +25 -25
- package/dist/types/modules/Hooks.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +13 -8
- package/src/modules/Hooks.ts +37 -37
|
@@ -81,21 +81,21 @@ export interface HookReturnValues {
|
|
|
81
81
|
export type HookArguments<T extends HookName> = HookDefinitions[T];
|
|
82
82
|
export type HookName = keyof HookDefinitions;
|
|
83
83
|
/** A generic hook handler. */
|
|
84
|
-
export type
|
|
84
|
+
export type HookHandler<T extends HookName> = (
|
|
85
85
|
/** Context about the current visit. */
|
|
86
86
|
visit: Visit,
|
|
87
87
|
/** Local arguments passed into the handler. */
|
|
88
88
|
args: HookArguments<T>) => Promise<unknown> | unknown;
|
|
89
89
|
/** A default hook handler with an expected return type. */
|
|
90
|
-
export type
|
|
90
|
+
export type HookDefaultHandler<T extends HookName> = (
|
|
91
91
|
/** Context about the current visit. */
|
|
92
92
|
visit: Visit,
|
|
93
93
|
/** Local arguments passed into the handler. */
|
|
94
94
|
args: HookArguments<T>,
|
|
95
95
|
/** Default handler to be executed. Available if replacing an internal hook handler. */
|
|
96
|
-
defaultHandler?:
|
|
96
|
+
defaultHandler?: HookDefaultHandler<T>) => T extends keyof HookReturnValues ? HookReturnValues[T] : Promise<unknown> | unknown;
|
|
97
97
|
export type Handlers = {
|
|
98
|
-
[K in HookName]:
|
|
98
|
+
[K in HookName]: HookHandler<K>[];
|
|
99
99
|
};
|
|
100
100
|
/** Unregister a previously registered hook handler. */
|
|
101
101
|
export type HookUnregister = () => void;
|
|
@@ -110,13 +110,13 @@ export type HookOptions = {
|
|
|
110
110
|
/** Replace the internal default handler with this hook handler */
|
|
111
111
|
replace?: boolean;
|
|
112
112
|
};
|
|
113
|
-
export type HookRegistration<T extends HookName, H extends
|
|
113
|
+
export type HookRegistration<T extends HookName, H extends HookHandler<T> | HookDefaultHandler<T> = HookHandler<T>> = {
|
|
114
114
|
id: number;
|
|
115
115
|
hook: T;
|
|
116
116
|
handler: H;
|
|
117
|
-
defaultHandler?:
|
|
117
|
+
defaultHandler?: HookDefaultHandler<T>;
|
|
118
118
|
} & HookOptions;
|
|
119
|
-
type HookLedger<T extends HookName> = Map<
|
|
119
|
+
type HookLedger<T extends HookName> = Map<HookHandler<T>, HookRegistration<T>>;
|
|
120
120
|
interface HookRegistry extends Map<HookName, HookLedger<HookName>> {
|
|
121
121
|
get<K extends HookName>(key: K): HookLedger<K> | undefined;
|
|
122
122
|
set<K extends HookName>(key: K, value: HookLedger<K>): this;
|
|
@@ -166,11 +166,11 @@ export declare class Hooks {
|
|
|
166
166
|
* - `replace`: Replace the default handler with this handler
|
|
167
167
|
* @returns A function to unregister the handler
|
|
168
168
|
*/
|
|
169
|
-
on<T extends HookName, O extends HookOptions>(hook: T, handler:
|
|
169
|
+
on<T extends HookName, O extends HookOptions>(hook: T, handler: HookDefaultHandler<T>, options: O & {
|
|
170
170
|
replace: true;
|
|
171
171
|
}): HookUnregister;
|
|
172
|
-
on<T extends HookName, O extends HookOptions>(hook: T, handler:
|
|
173
|
-
on<T extends HookName>(hook: T, handler:
|
|
172
|
+
on<T extends HookName, O extends HookOptions>(hook: T, handler: HookHandler<T>, options: O): HookUnregister;
|
|
173
|
+
on<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister;
|
|
174
174
|
/**
|
|
175
175
|
* Register a new hook handler to run before the default handler.
|
|
176
176
|
* Shortcut for `hooks.on(hook, handler, { before: true })`.
|
|
@@ -180,8 +180,8 @@ export declare class Hooks {
|
|
|
180
180
|
* @returns A function to unregister the handler
|
|
181
181
|
* @see on
|
|
182
182
|
*/
|
|
183
|
-
before<T extends HookName>(hook: T, handler:
|
|
184
|
-
before<T extends HookName>(hook: T, handler:
|
|
183
|
+
before<T extends HookName>(hook: T, handler: HookHandler<T>, options: HookOptions): HookUnregister;
|
|
184
|
+
before<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister;
|
|
185
185
|
/**
|
|
186
186
|
* Register a new hook handler to replace the default handler.
|
|
187
187
|
* Shortcut for `hooks.on(hook, handler, { replace: true })`.
|
|
@@ -191,8 +191,8 @@ export declare class Hooks {
|
|
|
191
191
|
* @returns A function to unregister the handler
|
|
192
192
|
* @see on
|
|
193
193
|
*/
|
|
194
|
-
replace<T extends HookName>(hook: T, handler:
|
|
195
|
-
replace<T extends HookName>(hook: T, handler:
|
|
194
|
+
replace<T extends HookName>(hook: T, handler: HookDefaultHandler<T>, options: HookOptions): HookUnregister;
|
|
195
|
+
replace<T extends HookName>(hook: T, handler: HookDefaultHandler<T>): HookUnregister;
|
|
196
196
|
/**
|
|
197
197
|
* Register a new hook handler to run once.
|
|
198
198
|
* Shortcut for `hooks.on(hook, handler, { once: true })`.
|
|
@@ -201,15 +201,15 @@ export declare class Hooks {
|
|
|
201
201
|
* @param options Any other event options (see `hooks.on()` for details)
|
|
202
202
|
* @see on
|
|
203
203
|
*/
|
|
204
|
-
once<T extends HookName>(hook: T, handler:
|
|
205
|
-
once<T extends HookName>(hook: T, handler:
|
|
204
|
+
once<T extends HookName>(hook: T, handler: HookHandler<T>, options: HookOptions): HookUnregister;
|
|
205
|
+
once<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister;
|
|
206
206
|
/**
|
|
207
207
|
* Unregister a hook handler.
|
|
208
208
|
* @param hook Name of the hook the handler is registered for
|
|
209
209
|
* @param handler The handler function that was registered.
|
|
210
210
|
* If omitted, all handlers for the hook will be removed.
|
|
211
211
|
*/
|
|
212
|
-
off<T extends HookName>(hook: T, handler:
|
|
212
|
+
off<T extends HookName>(hook: T, handler: HookHandler<T> | HookDefaultHandler<T>): void;
|
|
213
213
|
off<T extends HookName>(hook: T): void;
|
|
214
214
|
/**
|
|
215
215
|
* Trigger a hook asynchronously, executing its default handler and all registered handlers.
|
|
@@ -219,7 +219,7 @@ export declare class Hooks {
|
|
|
219
219
|
* @param defaultHandler A default implementation of this hook to execute
|
|
220
220
|
* @returns The resolved return value of the executed default handler
|
|
221
221
|
*/
|
|
222
|
-
call<T extends HookName>(hook: T, args: HookArguments<T>, defaultHandler?:
|
|
222
|
+
call<T extends HookName>(hook: T, args: HookArguments<T>, defaultHandler?: HookDefaultHandler<T>): Promise<Awaited<ReturnType<HookDefaultHandler<T>>>>;
|
|
223
223
|
/**
|
|
224
224
|
* Trigger a hook synchronously, executing its default handler and all registered handlers.
|
|
225
225
|
* Will execute all handlers in order, but will **not** `await` any `Promise`s they return.
|
|
@@ -228,20 +228,20 @@ export declare class Hooks {
|
|
|
228
228
|
* @param defaultHandler A default implementation of this hook to execute
|
|
229
229
|
* @returns The (possibly unresolved) return value of the executed default handler
|
|
230
230
|
*/
|
|
231
|
-
callSync<T extends HookName>(hook: T, args: HookArguments<T>, defaultHandler?:
|
|
231
|
+
callSync<T extends HookName>(hook: T, args: HookArguments<T>, defaultHandler?: HookDefaultHandler<T>): ReturnType<HookDefaultHandler<T>>;
|
|
232
232
|
/**
|
|
233
233
|
* Execute the handlers for a hook, in order, as `Promise`s that will be `await`ed.
|
|
234
234
|
* @param registrations The registrations (handler + options) to execute
|
|
235
235
|
* @param args Arguments to pass to the handler
|
|
236
236
|
*/
|
|
237
|
-
protected run<T extends HookName>(registrations: HookRegistration<T,
|
|
237
|
+
protected run<T extends HookName>(registrations: HookRegistration<T, HookDefaultHandler<T>>[], args: HookArguments<T>): Promise<Awaited<ReturnType<HookDefaultHandler<T>>>[]>;
|
|
238
238
|
protected run<T extends HookName>(registrations: HookRegistration<T>[], args: HookArguments<T>): Promise<unknown[]>;
|
|
239
239
|
/**
|
|
240
240
|
* Execute the handlers for a hook, in order, without `await`ing any returned `Promise`s.
|
|
241
241
|
* @param registrations The registrations (handler + options) to execute
|
|
242
242
|
* @param args Arguments to pass to the handler
|
|
243
243
|
*/
|
|
244
|
-
protected runSync<T extends HookName>(registrations: HookRegistration<T,
|
|
244
|
+
protected runSync<T extends HookName>(registrations: HookRegistration<T, HookDefaultHandler<T>>[], args: HookArguments<T>): ReturnType<HookDefaultHandler<T>>[];
|
|
245
245
|
protected runSync<T extends HookName>(registrations: HookRegistration<T>[], args: HookArguments<T>): unknown[];
|
|
246
246
|
/**
|
|
247
247
|
* Get all registered handlers for a hook, sorted by priority and registration order.
|
|
@@ -250,11 +250,11 @@ export declare class Hooks {
|
|
|
250
250
|
* @returns An object with the handlers sorted into `before` and `after` arrays,
|
|
251
251
|
* as well as a flag indicating if the original handler was replaced
|
|
252
252
|
*/
|
|
253
|
-
protected getHandlers<T extends HookName>(hook: T, defaultHandler?:
|
|
253
|
+
protected getHandlers<T extends HookName>(hook: T, defaultHandler?: HookDefaultHandler<T>): {
|
|
254
254
|
found: boolean;
|
|
255
|
-
before: HookRegistration<T,
|
|
256
|
-
handler: HookRegistration<T,
|
|
257
|
-
after: HookRegistration<T,
|
|
255
|
+
before: HookRegistration<T, HookHandler<T>>[];
|
|
256
|
+
handler: HookRegistration<T, HookDefaultHandler<T>>[];
|
|
257
|
+
after: HookRegistration<T, HookHandler<T>>[];
|
|
258
258
|
replaced: boolean;
|
|
259
259
|
};
|
|
260
260
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hooks.d.ts","sourceRoot":"","sources":["../../../src/modules/Hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAEnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC/B,qBAAqB,EAAE,SAAS,CAAC;IACjC,qBAAqB,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,mBAAmB,EAAE,SAAS,CAAC;IAC/B,oBAAoB,EAAE,SAAS,CAAC;IAChC,oBAAoB,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACxC,kBAAkB,EAAE,SAAS,CAAC;IAC9B,gBAAgB,EAAE,SAAS,CAAC;IAC5B,aAAa,EAAE,SAAS,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IAChC,iBAAiB,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IACtC,gBAAgB,EAAE,SAAS,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IACnE,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,kBAAkB,EAAE;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAC7C,YAAY,EAAE;QAAE,EAAE,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;KAAE,CAAC;IAC1E,WAAW,EAAE,SAAS,CAAC;IACvB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,WAAW,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;IACzE,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,YAAY,EAAE;QAAE,OAAO,EAAE,qBAAqB,CAAA;KAAE,CAAC;IACjD,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAClE,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,WAAW,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;AAE7C,8BAA8B;AAC9B,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Hooks.d.ts","sourceRoot":"","sources":["../../../src/modules/Hooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swup",
|
|
3
3
|
"amdName": "Swup",
|
|
4
|
-
"version": "4.4.
|
|
4
|
+
"version": "4.4.2",
|
|
5
5
|
"description": "Versatile and extensible page transition library for server-rendered websites",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"source": "./src/Swup.ts",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"prettier": "^2.8.2",
|
|
82
82
|
"serve": "^14.2.1",
|
|
83
83
|
"typed-query-selector": "^2.11.0",
|
|
84
|
+
"typescript": "^5.2.2",
|
|
84
85
|
"vitest": "^0.34.3"
|
|
85
86
|
},
|
|
86
87
|
"collective": {
|
package/src/index.ts
CHANGED
|
@@ -14,12 +14,14 @@ import type {
|
|
|
14
14
|
VisitHistory
|
|
15
15
|
} from './modules/Visit.js';
|
|
16
16
|
import type {
|
|
17
|
-
HookArguments,
|
|
18
|
-
HookDefinitions,
|
|
19
17
|
HookName,
|
|
18
|
+
HookDefinitions,
|
|
19
|
+
HookArguments,
|
|
20
|
+
HookReturnValues,
|
|
21
|
+
HookHandler,
|
|
22
|
+
HookDefaultHandler,
|
|
20
23
|
HookOptions,
|
|
21
|
-
HookUnregister
|
|
22
|
-
Handler
|
|
24
|
+
HookUnregister
|
|
23
25
|
} from './modules/Hooks.js';
|
|
24
26
|
import type { Plugin } from './modules/plugins.js';
|
|
25
27
|
|
|
@@ -32,19 +34,22 @@ export type {
|
|
|
32
34
|
Plugin,
|
|
33
35
|
CacheData,
|
|
34
36
|
PageData,
|
|
37
|
+
Path,
|
|
35
38
|
Visit,
|
|
36
39
|
VisitFrom,
|
|
37
40
|
VisitTo,
|
|
38
41
|
VisitAnimation,
|
|
39
42
|
VisitScroll,
|
|
40
43
|
VisitHistory,
|
|
41
|
-
HookArguments,
|
|
42
|
-
HookDefinitions,
|
|
43
44
|
HookName,
|
|
45
|
+
HookDefinitions,
|
|
46
|
+
HookArguments,
|
|
47
|
+
HookReturnValues,
|
|
48
|
+
HookHandler,
|
|
49
|
+
HookHandler as Handler, // backwards compatibility
|
|
50
|
+
HookDefaultHandler,
|
|
44
51
|
HookOptions,
|
|
45
52
|
HookUnregister,
|
|
46
|
-
Handler,
|
|
47
|
-
Path,
|
|
48
53
|
DelegateEvent,
|
|
49
54
|
DelegateEventHandler,
|
|
50
55
|
DelegateEventUnsubscribe
|
package/src/modules/Hooks.ts
CHANGED
|
@@ -50,7 +50,7 @@ export type HookArguments<T extends HookName> = HookDefinitions[T];
|
|
|
50
50
|
export type HookName = keyof HookDefinitions;
|
|
51
51
|
|
|
52
52
|
/** A generic hook handler. */
|
|
53
|
-
export type
|
|
53
|
+
export type HookHandler<T extends HookName> = (
|
|
54
54
|
/** Context about the current visit. */
|
|
55
55
|
visit: Visit,
|
|
56
56
|
/** Local arguments passed into the handler. */
|
|
@@ -58,17 +58,17 @@ export type Handler<T extends HookName> = (
|
|
|
58
58
|
) => Promise<unknown> | unknown;
|
|
59
59
|
|
|
60
60
|
/** A default hook handler with an expected return type. */
|
|
61
|
-
export type
|
|
61
|
+
export type HookDefaultHandler<T extends HookName> = (
|
|
62
62
|
/** Context about the current visit. */
|
|
63
63
|
visit: Visit,
|
|
64
64
|
/** Local arguments passed into the handler. */
|
|
65
65
|
args: HookArguments<T>,
|
|
66
66
|
/** Default handler to be executed. Available if replacing an internal hook handler. */
|
|
67
|
-
defaultHandler?:
|
|
67
|
+
defaultHandler?: HookDefaultHandler<T>
|
|
68
68
|
) => T extends keyof HookReturnValues ? HookReturnValues[T] : Promise<unknown> | unknown;
|
|
69
69
|
|
|
70
70
|
export type Handlers = {
|
|
71
|
-
[K in HookName]:
|
|
71
|
+
[K in HookName]: HookHandler<K>[];
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
/** Unregister a previously registered hook handler. */
|
|
@@ -88,15 +88,15 @@ export type HookOptions = {
|
|
|
88
88
|
|
|
89
89
|
export type HookRegistration<
|
|
90
90
|
T extends HookName,
|
|
91
|
-
H extends
|
|
91
|
+
H extends HookHandler<T> | HookDefaultHandler<T> = HookHandler<T>
|
|
92
92
|
> = {
|
|
93
93
|
id: number;
|
|
94
94
|
hook: T;
|
|
95
95
|
handler: H;
|
|
96
|
-
defaultHandler?:
|
|
96
|
+
defaultHandler?: HookDefaultHandler<T>;
|
|
97
97
|
} & HookOptions;
|
|
98
98
|
|
|
99
|
-
type HookLedger<T extends HookName> = Map<
|
|
99
|
+
type HookLedger<T extends HookName> = Map<HookHandler<T>, HookRegistration<T>>;
|
|
100
100
|
|
|
101
101
|
interface HookRegistry extends Map<HookName, HookLedger<HookName>> {
|
|
102
102
|
get<K extends HookName>(key: K): HookLedger<K> | undefined;
|
|
@@ -209,15 +209,15 @@ export class Hooks {
|
|
|
209
209
|
*/
|
|
210
210
|
|
|
211
211
|
// Overload: replacing default handler
|
|
212
|
-
on<T extends HookName, O extends HookOptions>(hook: T, handler:
|
|
212
|
+
on<T extends HookName, O extends HookOptions>(hook: T, handler: HookDefaultHandler<T>, options: O & { replace: true }): HookUnregister; // prettier-ignore
|
|
213
213
|
// Overload: passed in handler options
|
|
214
|
-
on<T extends HookName, O extends HookOptions>(hook: T, handler:
|
|
214
|
+
on<T extends HookName, O extends HookOptions>(hook: T, handler: HookHandler<T>, options: O): HookUnregister; // prettier-ignore
|
|
215
215
|
// Overload: no handler options
|
|
216
|
-
on<T extends HookName>(hook: T, handler:
|
|
216
|
+
on<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister; // prettier-ignore
|
|
217
217
|
// Implementation
|
|
218
218
|
on<T extends HookName, O extends HookOptions>(
|
|
219
219
|
hook: T,
|
|
220
|
-
handler: O['replace'] extends true ?
|
|
220
|
+
handler: O['replace'] extends true ? HookDefaultHandler<T> : HookHandler<T>,
|
|
221
221
|
options: Partial<O> = {}
|
|
222
222
|
): HookUnregister {
|
|
223
223
|
const ledger = this.get(hook);
|
|
@@ -243,13 +243,13 @@ export class Hooks {
|
|
|
243
243
|
* @see on
|
|
244
244
|
*/
|
|
245
245
|
// Overload: passed in handler options
|
|
246
|
-
before<T extends HookName>(hook: T, handler:
|
|
246
|
+
before<T extends HookName>(hook: T, handler: HookHandler<T>, options: HookOptions): HookUnregister; // prettier-ignore
|
|
247
247
|
// Overload: no handler options
|
|
248
|
-
before<T extends HookName>(hook: T, handler:
|
|
248
|
+
before<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister;
|
|
249
249
|
// Implementation
|
|
250
250
|
before<T extends HookName>(
|
|
251
251
|
hook: T,
|
|
252
|
-
handler:
|
|
252
|
+
handler: HookHandler<T>,
|
|
253
253
|
options: HookOptions = {}
|
|
254
254
|
): HookUnregister {
|
|
255
255
|
return this.on(hook, handler, { ...options, before: true });
|
|
@@ -265,13 +265,13 @@ export class Hooks {
|
|
|
265
265
|
* @see on
|
|
266
266
|
*/
|
|
267
267
|
// Overload: passed in handler options
|
|
268
|
-
replace<T extends HookName>(hook: T, handler:
|
|
268
|
+
replace<T extends HookName>(hook: T, handler: HookDefaultHandler<T>, options: HookOptions): HookUnregister; // prettier-ignore
|
|
269
269
|
// Overload: no handler options
|
|
270
|
-
replace<T extends HookName>(hook: T, handler:
|
|
270
|
+
replace<T extends HookName>(hook: T, handler: HookDefaultHandler<T>): HookUnregister; // prettier-ignore
|
|
271
271
|
// Implementation
|
|
272
272
|
replace<T extends HookName>(
|
|
273
273
|
hook: T,
|
|
274
|
-
handler:
|
|
274
|
+
handler: HookDefaultHandler<T>,
|
|
275
275
|
options: HookOptions = {}
|
|
276
276
|
): HookUnregister {
|
|
277
277
|
return this.on(hook, handler, { ...options, replace: true });
|
|
@@ -286,13 +286,13 @@ export class Hooks {
|
|
|
286
286
|
* @see on
|
|
287
287
|
*/
|
|
288
288
|
// Overload: passed in handler options
|
|
289
|
-
once<T extends HookName>(hook: T, handler:
|
|
289
|
+
once<T extends HookName>(hook: T, handler: HookHandler<T>, options: HookOptions): HookUnregister; // prettier-ignore
|
|
290
290
|
// Overload: no handler options
|
|
291
|
-
once<T extends HookName>(hook: T, handler:
|
|
291
|
+
once<T extends HookName>(hook: T, handler: HookHandler<T>): HookUnregister;
|
|
292
292
|
// Implementation
|
|
293
293
|
once<T extends HookName>(
|
|
294
294
|
hook: T,
|
|
295
|
-
handler:
|
|
295
|
+
handler: HookHandler<T>,
|
|
296
296
|
options: HookOptions = {}
|
|
297
297
|
): HookUnregister {
|
|
298
298
|
return this.on(hook, handler, { ...options, once: true });
|
|
@@ -305,11 +305,11 @@ export class Hooks {
|
|
|
305
305
|
* If omitted, all handlers for the hook will be removed.
|
|
306
306
|
*/
|
|
307
307
|
// Overload: unregister a specific handler
|
|
308
|
-
off<T extends HookName>(hook: T, handler:
|
|
308
|
+
off<T extends HookName>(hook: T, handler: HookHandler<T> | HookDefaultHandler<T>): void;
|
|
309
309
|
// Overload: unregister all handlers
|
|
310
310
|
off<T extends HookName>(hook: T): void;
|
|
311
311
|
// Implementation
|
|
312
|
-
off<T extends HookName>(hook: T, handler?:
|
|
312
|
+
off<T extends HookName>(hook: T, handler?: HookHandler<T> | HookDefaultHandler<T>): void {
|
|
313
313
|
const ledger = this.get(hook);
|
|
314
314
|
if (ledger && handler) {
|
|
315
315
|
const deleted = ledger.delete(handler);
|
|
@@ -332,8 +332,8 @@ export class Hooks {
|
|
|
332
332
|
async call<T extends HookName>(
|
|
333
333
|
hook: T,
|
|
334
334
|
args: HookArguments<T>,
|
|
335
|
-
defaultHandler?:
|
|
336
|
-
): Promise<Awaited<ReturnType<
|
|
335
|
+
defaultHandler?: HookDefaultHandler<T>
|
|
336
|
+
): Promise<Awaited<ReturnType<HookDefaultHandler<T>>>> {
|
|
337
337
|
const { before, handler, after } = this.getHandlers(hook, defaultHandler);
|
|
338
338
|
await this.run(before, args);
|
|
339
339
|
const [result] = await this.run(handler, args);
|
|
@@ -353,8 +353,8 @@ export class Hooks {
|
|
|
353
353
|
callSync<T extends HookName>(
|
|
354
354
|
hook: T,
|
|
355
355
|
args: HookArguments<T>,
|
|
356
|
-
defaultHandler?:
|
|
357
|
-
): ReturnType<
|
|
356
|
+
defaultHandler?: HookDefaultHandler<T>
|
|
357
|
+
): ReturnType<HookDefaultHandler<T>> {
|
|
358
358
|
const { before, handler, after } = this.getHandlers(hook, defaultHandler);
|
|
359
359
|
this.runSync(before, args);
|
|
360
360
|
const [result] = this.runSync(handler, args);
|
|
@@ -369,15 +369,15 @@ export class Hooks {
|
|
|
369
369
|
* @param args Arguments to pass to the handler
|
|
370
370
|
*/
|
|
371
371
|
|
|
372
|
-
// Overload: running
|
|
373
|
-
protected async run<T extends HookName>(registrations: HookRegistration<T,
|
|
372
|
+
// Overload: running HookDefaultHandler: expect HookDefaultHandler return type
|
|
373
|
+
protected async run<T extends HookName>(registrations: HookRegistration<T, HookDefaultHandler<T>>[], args: HookArguments<T>): Promise<Awaited<ReturnType<HookDefaultHandler<T>>>[]>; // prettier-ignore
|
|
374
374
|
// Overload: running user handler: expect no specific type
|
|
375
375
|
protected async run<T extends HookName>(registrations: HookRegistration<T>[], args: HookArguments<T>): Promise<unknown[]>; // prettier-ignore
|
|
376
376
|
// Implementation
|
|
377
377
|
protected async run<T extends HookName, R extends HookRegistration<T>[]>(
|
|
378
378
|
registrations: R,
|
|
379
379
|
args: HookArguments<T>
|
|
380
|
-
): Promise<Awaited<ReturnType<
|
|
380
|
+
): Promise<Awaited<ReturnType<HookDefaultHandler<T>>> | unknown[]> {
|
|
381
381
|
const results = [];
|
|
382
382
|
for (const { hook, handler, defaultHandler, once } of registrations) {
|
|
383
383
|
const result = await runAsPromise(handler, [this.swup.visit, args, defaultHandler]);
|
|
@@ -395,18 +395,18 @@ export class Hooks {
|
|
|
395
395
|
* @param args Arguments to pass to the handler
|
|
396
396
|
*/
|
|
397
397
|
|
|
398
|
-
// Overload: running
|
|
399
|
-
protected runSync<T extends HookName>(registrations: HookRegistration<T,
|
|
398
|
+
// Overload: running HookDefaultHandler: expect HookDefaultHandler return type
|
|
399
|
+
protected runSync<T extends HookName>(registrations: HookRegistration<T, HookDefaultHandler<T>>[], args: HookArguments<T> ): ReturnType<HookDefaultHandler<T>>[]; // prettier-ignore
|
|
400
400
|
// Overload: running user handler: expect no specific type
|
|
401
401
|
protected runSync<T extends HookName>(registrations: HookRegistration<T>[], args: HookArguments<T>): unknown[]; // prettier-ignore
|
|
402
402
|
// Implementation
|
|
403
403
|
protected runSync<T extends HookName, R extends HookRegistration<T>[]>(
|
|
404
404
|
registrations: R,
|
|
405
405
|
args: HookArguments<T>
|
|
406
|
-
): (ReturnType<
|
|
406
|
+
): (ReturnType<HookDefaultHandler<T>> | unknown)[] {
|
|
407
407
|
const results = [];
|
|
408
408
|
for (const { hook, handler, defaultHandler, once } of registrations) {
|
|
409
|
-
const result = (handler as
|
|
409
|
+
const result = (handler as HookDefaultHandler<T>)(this.swup.visit, args, defaultHandler); // prettier-ignore
|
|
410
410
|
results.push(result);
|
|
411
411
|
if (isPromise(result)) {
|
|
412
412
|
console.warn(
|
|
@@ -428,7 +428,7 @@ export class Hooks {
|
|
|
428
428
|
* @returns An object with the handlers sorted into `before` and `after` arrays,
|
|
429
429
|
* as well as a flag indicating if the original handler was replaced
|
|
430
430
|
*/
|
|
431
|
-
protected getHandlers<T extends HookName>(hook: T, defaultHandler?:
|
|
431
|
+
protected getHandlers<T extends HookName>(hook: T, defaultHandler?: HookDefaultHandler<T>) {
|
|
432
432
|
const ledger = this.get(hook);
|
|
433
433
|
if (!ledger) {
|
|
434
434
|
return { found: false, before: [], handler: [], after: [], replaced: false };
|
|
@@ -437,7 +437,7 @@ export class Hooks {
|
|
|
437
437
|
const registrations = Array.from(ledger.values());
|
|
438
438
|
|
|
439
439
|
// Let TypeScript know that replaced handlers are default handlers by filtering to true
|
|
440
|
-
const def = (T: HookRegistration<T>): T is HookRegistration<T,
|
|
440
|
+
const def = (T: HookRegistration<T>): T is HookRegistration<T, HookDefaultHandler<T>> => true; // prettier-ignore
|
|
441
441
|
const sort = this.sortRegistrations;
|
|
442
442
|
|
|
443
443
|
// Filter into before, after, and replace handlers
|
|
@@ -448,13 +448,13 @@ export class Hooks {
|
|
|
448
448
|
|
|
449
449
|
// Define main handler registration
|
|
450
450
|
// Created as HookRegistration[] array to allow passing it into hooks.run() directly
|
|
451
|
-
let handler: HookRegistration<T,
|
|
451
|
+
let handler: HookRegistration<T, HookDefaultHandler<T>>[] = [];
|
|
452
452
|
if (defaultHandler) {
|
|
453
453
|
handler = [{ id: 0, hook, handler: defaultHandler }];
|
|
454
454
|
if (replaced) {
|
|
455
455
|
const index = replace.length - 1;
|
|
456
456
|
const replacingHandler = replace[index].handler;
|
|
457
|
-
const createDefaultHandler = (index: number):
|
|
457
|
+
const createDefaultHandler = (index: number): HookDefaultHandler<T> | undefined => {
|
|
458
458
|
const next = replace[index - 1];
|
|
459
459
|
if (next) {
|
|
460
460
|
return (visit, args) =>
|