UNPKG

@virtualstate/navigation

Version:

Native JavaScript [navigation](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API) implementation

33 lines 1.81 kB
import { NavigationTransitionNavigationType, NavigationTransitionWait, NavigationIntercept, } from "./navigation-transition.js"; import { InvalidStateError } from "./navigation-errors.js"; export const NavigationTransitionPlanNavigationSymbol = Symbol.for("@virtualstate/navigation/transition/plan/Navigation"); export const NavigationTransitionPlanWhile = Symbol.for("@virtualstate/navigation/transition/plan/while"); export const NavigationTransitionPlanWait = Symbol.for("@virtualstate/navigation/transition/plan/wait"); export function plan(options) { const { transition, currentPlan, constructNavigation, finishedTransitions } = options; const nextPlan = { [NavigationTransitionPlanNavigationSymbol]: currentPlan?.[NavigationTransitionPlanNavigationSymbol] ?? constructNavigation(), transitions: [], ...currentPlan, knownTransitions: new Set(currentPlan?.knownTransitions ?? []), [NavigationTransitionPlanWhile]: transition[NavigationIntercept], [NavigationTransitionPlanWait]: transition[NavigationTransitionWait], }; if (nextPlan.knownTransitions.has(transition)) { throw new InvalidStateError("Transition already found in plan, this may lead to unexpected behaviour, please raise an issue at "); } nextPlan.knownTransitions.add(transition); if (transition[NavigationTransitionNavigationType] === "traverse") { nextPlan.transitions.push(transition); } else { // Reset on non traversal nextPlan.transitions = [].concat([transition]); } nextPlan.transitions = nextPlan.transitions // Remove finished transitions .filter((transition) => finishedTransitions?.has(transition)); return nextPlan; } //# sourceMappingURL=navigation-transition-planner.js.map