From e29b244aeab08ea36fb385c7beb2ad0560217039 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 13 Oct 2024 10:37:19 +0800 Subject: =?UTF-8?q?bump:=20@babel/cli=207.25.6=20=E2=86=92=207.25.7,=20@ba?= =?UTF-8?q?bel/core=207.25.2=20=E2=86=92=207.25.8,=20@babel/preset-env=207?= =?UTF-8?q?.25.4=20=E2=86=92=207.25.8,=20postcss=208.4.41=20=E2=86=92=208.?= =?UTF-8?q?4.47,=20swup=204.7.0=20=E2=86=92=204.8.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node_modules/swup/src/modules/Hooks.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'node_modules/swup/src/modules/Hooks.ts') diff --git a/node_modules/swup/src/modules/Hooks.ts b/node_modules/swup/src/modules/Hooks.ts index 36af2bf7..e3fb459c 100644 --- a/node_modules/swup/src/modules/Hooks.ts +++ b/node_modules/swup/src/modules/Hooks.ts @@ -49,6 +49,10 @@ export type HookArguments = HookDefinitions[T]; export type HookName = keyof HookDefinitions; +export type HookNameWithModifier = `${HookName}.${HookModifier}`; + +type HookModifier = 'once' | 'before' | 'replace'; + /** A generic hook handler. */ export type HookHandler = ( /** Context about the current visit. */ @@ -71,6 +75,12 @@ export type Handlers = { [K in HookName]: HookHandler[]; }; +export type HookInitOptions = { + [K in HookName as K | `${K}.${HookModifier}`]: HookHandler; +} & { + [K in HookName as K | `${K}.${HookModifier}.${HookModifier}`]: HookHandler; +}; + /** Unregister a previously registered hook handler. */ export type HookUnregister = () => void; @@ -516,7 +526,7 @@ export class Hooks { handler = [{ id: 0, hook, handler: defaultHandler }]; if (replaced) { const index = replace.length - 1; - const replacingHandler = replace[index].handler; + const { handler: replacingHandler, once } = replace[index]; const createDefaultHandler = (index: number): HookDefaultHandler | undefined => { const next = replace[index - 1]; if (next) { @@ -527,9 +537,7 @@ export class Hooks { } }; const nestedDefaultHandler = createDefaultHandler(index); - handler = [ - { id: 0, hook, handler: replacingHandler, defaultHandler: nestedDefaultHandler } - ]; + handler = [{ id: 0, hook, once, handler: replacingHandler, defaultHandler: nestedDefaultHandler }]; // prettier-ignore } } @@ -570,4 +578,14 @@ export class Hooks { new CustomEvent(`swup:${hook}`, { detail, bubbles: true }) ); } + + /** + * Parse a hook name into the name and any modifiers. + * @param hook Name of the hook. + */ + parseName(hook: HookName | HookNameWithModifier): [HookName, Partial] { + const [name, ...modifiers] = hook.split('.'); + const options = modifiers.reduce((acc, mod) => ({ ...acc, [mod]: true }), {}); + return [name as HookName, options]; + } } -- cgit v1.2.3