@lytjs/router 6.5.0 → 6.6.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/README.md +463 -465
- package/dist/index.cjs +1062 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +284 -0
- package/dist/index.d.ts +284 -0
- package/dist/index.mjs +1050 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +55 -55
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/matcher.ts","../src/location.ts","../src/composables/useRouter.ts","../src/router.ts","../src/history.ts","../src/composables/useRoute.ts","../src/composables/useLink.ts","../src/components/RouterView.ts","../src/components/RouterLink.ts"],"names":["NavigationFailureType","path","query","hash","base","computed"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/router - Core type definitions\n */\n\nimport type { Signal } from '@lytjs/reactivity';\n\ntype App = { provide?: unknown; config?: { globalProperties?: Record<string, unknown> } };\n\ntype Component = unknown;\n\nexport type RouteRecordName = string | symbol;\n\nexport type RouteParams = Record<string, string | string[]>;\n\nexport type LocationQuery = Record<string, string | string[] | null>;\n\nexport function locationQueryToSearchParams(query: LocationQuery): URLSearchParams {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n for (const v of value) {\n if (v !== null) {\n searchParams.append(key, v);\n }\n }\n } else {\n searchParams.append(key, value);\n }\n }\n return searchParams;\n}\n\nexport type RouteMeta = Record<string | number | symbol, unknown>;\n\nexport interface RouteRecordRaw {\n path: string;\n name?: RouteRecordName;\n component?: Component | (() => Promise<Component>);\n children?: RouteRecordRaw[];\n redirect?: string | RouteLocationRaw | ((to: RouteLocationNormalized) => RouteLocationRaw);\n alias?: string | string[];\n meta?: RouteMeta;\n beforeEnter?: NavigationGuard;\n props?:\n | boolean\n | Record<string, unknown>\n | ((to: RouteLocationNormalized) => Record<string, unknown>);\n}\n\nexport interface RouteRecordNormalized {\n path: string;\n name: RouteRecordName | null;\n meta: RouteMeta;\n children: RouteRecordNormalized[];\n aliasOf?: RouteRecordNormalized;\n beforeEnter?: NavigationGuard | undefined;\n props:\n | boolean\n | Record<string, unknown>\n | ((to: RouteLocationNormalized) => Record<string, unknown>);\n component?: Component | (() => Promise<Component>);\n components?: Record<string, Component | (() => Promise<Component>)>;\n}\n\n// ===== Route Location =====\n\nexport interface RouteLocationNormalized {\n name: RouteRecordName | null;\n path: string;\n fullPath: string;\n query: LocationQuery;\n hash: string;\n params: RouteParams;\n matched: RouteRecordNormalized[];\n meta: RouteMeta;\n redirectedFrom?: RouteLocationNormalized;\n}\n\nexport type RouteLocationRaw =\n | string\n | {\n path?: string;\n name?: RouteRecordName | null;\n params?: RouteParams;\n query?: LocationQuery;\n hash?: string;\n };\n\n// ===== Navigation Guards =====\n\nexport interface NavigationGuardNext {\n (): void;\n (error: Error): void;\n (location: RouteLocationRaw): void;\n (valid: boolean): void;\n}\n\nexport type NavigationGuardReturn = void | Error | RouteLocationRaw | boolean | undefined;\n\nexport type NavigationGuard = (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: NavigationGuardNext,\n) => NavigationGuardReturn;\n\nexport interface NavigationFailure {\n type: NavigationFailureType;\n from: RouteLocationNormalized;\n to: RouteLocationNormalized;\n}\n\nexport enum NavigationFailureType {\n aborted = 1,\n cancelled = 2,\n duplicated = 4,\n}\n\n// ===== Router =====\n\nexport type RouterScrollBehavior = (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n savedPosition: { left: number; top: number } | null,\n) => { left: number; top: number } | void | false;\n\nexport interface RouterOptions {\n history: RouterHistory;\n routes: RouteRecordRaw[];\n scrollBehavior?: RouterScrollBehavior;\n strict?: boolean;\n}\n\nexport interface Router {\n readonly currentRoute: Signal<RouteLocationNormalized>;\n readonly options: RouterOptions;\n push(to: RouteLocationRaw): Promise<NavigationFailure | void>;\n replace(to: RouteLocationRaw): Promise<NavigationFailure | void>;\n go(delta: number): void;\n back(): void;\n forward(): void;\n beforeEach(guard: NavigationGuard): () => void;\n afterEach(\n hook: (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n failure?: NavigationFailure,\n ) => void,\n ): () => void;\n beforeResolve(guard: NavigationGuard): () => void;\n install(app: App): void;\n isReady(): Promise<void>;\n resolveName(name: string | symbol, params?: RouteParams): { path: string } | null;\n}\n\nexport type HistoryState = Record<string, unknown>;\n\nexport interface NavigationInfo {\n type: 'push' | 'replace' | 'pop';\n direction: 'back' | 'forward' | 'unknown';\n delta: number;\n}\n\nexport interface RouterHistory {\n readonly location: RouteLocationNormalized;\n readonly state: HistoryState | null;\n base: string;\n push(to: RouteLocationRaw): Promise<NavigationFailure | void>;\n replace(to: RouteLocationRaw): Promise<NavigationFailure | void>;\n go(delta: number): void;\n listen(\n callback: (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n info: NavigationInfo,\n ) => void,\n ): () => void;\n destroy(): void;\n}\n","/**\n * @lytjs/router - Route path matching\n *\n * Lightweight path-to-regexp style matcher for route resolution.\n * Supports: static paths, named params (:id), wildcard (*), optional params (:id?)\n */\n\nimport type { RouteParams, RouteRecordRaw, RouteRecordNormalized, LocationQuery } from './types';\n\n// ===== Token Types =====\n\nexport interface TokenStatic {\n type: 'static';\n value: string;\n}\n\nexport interface TokenParam {\n type: 'param';\n name: string;\n repeatable: boolean;\n optional: boolean;\n}\n\nexport interface TokenWildcard {\n type: 'wildcard';\n value: string;\n}\n\nexport type PathToken = TokenStatic | TokenParam | TokenWildcard;\n\n// ===== Path Tokenizer =====\n\nconst PARAM_RE = /^:(\\w+)(\\??)?(\\.\\.\\.)?$/;\nconst WILDCARD_RE = /^\\*$/;\n\n/**\n * Tokenize a path segment string into tokens\n */\nexport function tokenizePath(path: string): PathToken[] {\n const segments = path.split('/');\n const tokens: PathToken[] = [];\n\n for (const segment of segments) {\n if (!segment) continue;\n\n const paramMatch = segment.match(PARAM_RE);\n if (paramMatch) {\n const [, name, optional, repeatable] = paramMatch;\n if (name) {\n tokens.push({\n type: 'param',\n name,\n repeatable: repeatable === '...',\n optional: optional === '?',\n });\n }\n continue;\n }\n\n if (WILDCARD_RE.test(segment)) {\n tokens.push({ type: 'wildcard', value: '*' });\n continue;\n }\n\n tokens.push({ type: 'static', value: segment });\n }\n\n return tokens;\n}\n\n// ===== Path Scoring =====\n\n/**\n * Score a route record for ranking (higher = more specific)\n */\nexport function scoreRoute(tokens: PathToken[]): number {\n let score = 0;\n for (const token of tokens) {\n switch (token.type) {\n case 'static':\n score += 3;\n break;\n case 'param':\n score += token.optional ? 1 : 2;\n break;\n case 'wildcard':\n score += 0;\n break;\n }\n }\n return score;\n}\n\n// ===== Path Matching =====\n\nexport interface PathMatchResult {\n matched: boolean;\n params: RouteParams;\n path: string;\n score: number;\n}\n\n/**\n * Match a pathname against a tokenized route\n */\nexport function matchPath(\n pathname: string,\n tokens: PathToken[],\n strict: boolean = false,\n): PathMatchResult {\n const pathSegments = pathname.split('/').filter(Boolean);\n const params: RouteParams = {};\n let matched = true;\n let i = 0;\n\n for (const token of tokens) {\n if (i >= pathSegments.length) {\n if (token.type === 'param' && token.optional) continue;\n if (token.type === 'wildcard') continue;\n matched = false;\n break;\n }\n\n const segment = pathSegments[i];\n\n switch (token.type) {\n case 'static':\n if (segment !== token.value) {\n matched = false;\n }\n i++;\n break;\n\n case 'param':\n if (token.repeatable) {\n params[token.name] = pathSegments.slice(i);\n i = pathSegments.length;\n } else if (segment !== undefined) {\n params[token.name] = segment;\n i++;\n }\n break;\n\n case 'wildcard':\n params[token.value] = pathSegments.slice(i).join('/');\n i = pathSegments.length;\n break;\n }\n\n if (!matched) break;\n }\n\n // Check if all path segments were consumed\n if (matched && i < pathSegments.length) {\n matched = false;\n }\n\n // In non-strict mode, trailing slash is ok\n if (!strict && matched && pathSegments.length === 0 && tokens.length === 0) {\n matched = true;\n }\n\n return {\n matched,\n params,\n path: '/' + pathSegments.slice(0, i).join('/'),\n score: scoreRoute(tokens),\n };\n}\n\n// ===== Route Record Normalization =====\n\nexport interface RouteRecordMatcher {\n record: RouteRecordNormalized;\n tokens: PathToken[];\n score: number;\n children: RouteRecordMatcher[];\n parent?: RouteRecordMatcher;\n}\n\n/**\n * Normalize a raw route record into a flat matcher tree\n */\nexport function normalizeRouteRecord(\n record: RouteRecordRaw,\n parent?: RouteRecordMatcher,\n): RouteRecordMatcher {\n const tokens = tokenizePath(record.path);\n\n // Build full path for nested routes\n const fullPath = parent\n ? parent.record.path + (record.path.startsWith('/') ? record.path : '/' + record.path)\n : record.path;\n\n const normalized: RouteRecordNormalized = {\n path: fullPath,\n name: record.name ?? null,\n meta: record.meta ?? {},\n children: [],\n beforeEnter: record.beforeEnter,\n props: record.props ?? false,\n component: record.component,\n components:\n 'components' in record\n ? (record as { components?: Record<string, unknown> }).components\n : undefined,\n };\n\n const matcher: RouteRecordMatcher = {\n record: normalized,\n tokens,\n score: scoreRoute(tokens),\n children: [],\n parent,\n };\n\n if (record.children) {\n for (const child of record.children) {\n const childMatcher = normalizeRouteRecord(child, matcher);\n matcher.children.push(childMatcher);\n normalized.children.push(childMatcher.record);\n }\n }\n\n return matcher;\n}\n\n/**\n * Build a flat list of all matchers from the tree\n * For nested routes, combines parent and child tokens for matching\n */\nexport function flattenMatchers(matchers: RouteRecordMatcher[]): RouteRecordMatcher[] {\n const result: RouteRecordMatcher[] = [];\n\n function walk(matcher: RouteRecordMatcher, parentTokens: PathToken[] = []) {\n // Combine parent tokens with current tokens for proper matching\n const combinedTokens = [...parentTokens, ...matcher.tokens];\n\n // Create a copy with combined tokens for matching\n const matcherWithCombinedTokens: RouteRecordMatcher = {\n ...matcher,\n tokens: combinedTokens,\n };\n\n result.push(matcherWithCombinedTokens);\n\n for (const child of matcher.children) {\n walk(child, combinedTokens);\n }\n }\n\n for (const matcher of matchers) {\n walk(matcher);\n }\n\n return result;\n}\n\n// ===== URL Utilities =====\n\n/**\n * Parse a query string into a LocationQuery object\n */\nexport function parseQuery(queryString: string): LocationQuery {\n const query: LocationQuery = {};\n if (!queryString) return query;\n\n const search = queryString.startsWith('?') ? queryString.slice(1) : queryString;\n const pairs = search.split('&');\n\n for (const pair of pairs) {\n if (!pair) continue;\n const [key, value] = pair.split('=');\n const decodedKey = decodeURIComponent(key!);\n const decodedValue = value !== undefined ? decodeURIComponent(value) : undefined;\n\n if (decodedKey in query) {\n const existing = query[decodedKey];\n if (Array.isArray(existing)) {\n if (decodedValue !== undefined) {\n existing.push(decodedValue);\n }\n } else if (decodedValue !== undefined) {\n if (existing === null) {\n query[decodedKey] = [decodedValue as string];\n } else {\n query[decodedKey] = [existing as string, decodedValue as string];\n }\n }\n } else if (decodedValue !== undefined) {\n query[decodedKey] = decodedValue;\n } else {\n query[decodedKey] = null;\n }\n }\n\n return query;\n}\n\n/**\n * Stringify a LocationQuery object back to a query string\n */\nexport function stringifyQuery(query: LocationQuery): string {\n const pairs: string[] = [];\n\n for (const [key, value] of Object.entries(query)) {\n if (value === null || value === undefined) {\n pairs.push(encodeURIComponent(key));\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const v of value) {\n pairs.push(`${encodeURIComponent(key)}=${v === null ? '' : encodeURIComponent(v)}`);\n }\n } else {\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n }\n\n return pairs.length ? `?${pairs.join('&')}` : '';\n}\n\n/**\n * Resolve a full path from path, query, and hash\n */\nexport function resolveFullPath(\n path: string,\n query: LocationQuery = {},\n hash: string = '',\n): string {\n const queryString = stringifyQuery(query);\n const hashString = hash.startsWith('#') ? hash : hash ? `#${hash}` : '';\n return `${path}${queryString}${hashString}`;\n}\n\n/**\n * Parse a full path into path, query, and hash\n */\nexport function parseFullPath(fullPath: string): {\n path: string;\n query: LocationQuery;\n hash: string;\n} {\n const hashIndex = fullPath.indexOf('#');\n const queryIndex = fullPath.indexOf('?');\n\n let path: string;\n let queryString: string = '';\n let hash: string = '';\n\n if (hashIndex > -1) {\n hash = fullPath.slice(hashIndex);\n path = fullPath.slice(0, hashIndex);\n } else {\n path = fullPath;\n }\n\n if (queryIndex > -1) {\n queryString = path.slice(queryIndex);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path || '/',\n query: parseQuery(queryString),\n hash: hash.replace(/^#/, ''),\n };\n}\n","/**\n * @lytjs/router - Location utilities\n */\n\nimport type {\n RouteLocationNormalized,\n RouteLocationRaw,\n LocationQuery,\n RouteParams,\n} from './types';\nimport { parseFullPath, resolveFullPath } from './matcher';\n\n/**\n * Resolve a raw location to a normalized location\n */\nexport function resolveLocation(\n raw: RouteLocationRaw,\n currentLocation?: RouteLocationNormalized,\n router?: {\n resolveName: (name: string | symbol, params?: RouteParams) => { path: string } | null;\n },\n): { path: string; query: LocationQuery; hash: string; params?: RouteParams } {\n if (typeof raw === 'string') {\n const { path, query, hash } = parseFullPath(raw);\n return { path, query, hash };\n }\n\n const { name, path, query = {}, hash = '', params } = raw;\n\n // name-based resolution\n if (name !== undefined && name !== null && router) {\n const resolved = router.resolveName(name, params);\n if (resolved) {\n return {\n path: resolved.path,\n query,\n hash,\n params,\n };\n }\n }\n\n if (path !== undefined) {\n const { path: parsedPath, query: parsedQuery, hash: parsedHash } = parseFullPath(path);\n return {\n path: parsedPath,\n query: { ...parsedQuery, ...query },\n hash: hash || parsedHash,\n params,\n };\n }\n\n return {\n path: currentLocation?.path || '/',\n query,\n hash,\n params,\n };\n}\n\nexport interface RouteLocationSimplified {\n path: string;\n query: LocationQuery;\n hash: string;\n params?: RouteParams;\n}\n\n/**\n * Check if two locations are the same\n */\nexport function isSameRouteLocation(\n a: RouteLocationNormalized | RouteLocationSimplified | undefined,\n b: RouteLocationNormalized | RouteLocationSimplified | undefined,\n): boolean {\n if (!a || !b) return false;\n return (\n a.path === b.path && a.hash === b.hash && JSON.stringify(a.query) === JSON.stringify(b.query)\n );\n}\n\n/**\n * Create a normalized route location\n */\nexport function createRouteLocation(\n path: string,\n query: LocationQuery = {},\n hash: string = '',\n params: RouteParams = {},\n): RouteLocationNormalized {\n return {\n name: null,\n path,\n fullPath: resolveFullPath(path, query, hash),\n query,\n hash,\n params,\n matched: [],\n meta: {},\n };\n}\n","/**\n * @lytjs/router - useRouter composable\n */\n\nimport type { Router } from '../types';\n\nlet currentRouter: Router | null = null;\n\n/**\n * Set the active router instance (called during install)\n */\nexport function setCurrentRouter(router: Router): void {\n currentRouter = router;\n}\n\n/**\n * Get the current router instance\n */\nexport function useRouter(): Router {\n if (!currentRouter) {\n throw new Error(\n '[@lytjs/router] No active router instance. ' +\n 'Make sure to call app.use(router) before using useRouter().',\n );\n }\n return currentRouter;\n}\n","/**\n * @lytjs/router - createRouter implementation\n *\n * Core router with navigation, guard pipeline, and route matching.\n */\n\nimport type {\n Router,\n RouterOptions,\n RouteLocationNormalized,\n RouteLocationRaw,\n NavigationGuard,\n NavigationFailure,\n NavigationGuardNext,\n RouteParams,\n} from './types';\nimport { NavigationFailureType, locationQueryToSearchParams } from './types';\nimport { signal } from '@lytjs/reactivity';\nimport {\n normalizeRouteRecord,\n flattenMatchers,\n matchPath,\n type RouteRecordMatcher,\n} from './matcher';\nimport { resolveLocation, isSameRouteLocation } from './location';\nimport { setCurrentRouter } from './composables/useRouter';\n\n/**\n * Create a router instance\n */\nexport function createRouter(options: RouterOptions): Router {\n // Build the matcher tree from route records\n const matchers = options.routes.map((route) => normalizeRouteRecord(route));\n const flatMatchers = flattenMatchers(matchers);\n\n // Current route state\n const currentRoute = signal<RouteLocationNormalized>({\n name: null,\n path: '/',\n fullPath: '/',\n query: {},\n hash: '',\n params: {},\n matched: [],\n meta: {},\n });\n\n // Navigation guard queues\n const beforeEachGuards: NavigationGuard[] = [];\n const beforeResolveGuards: NavigationGuard[] = [];\n const afterEachHooks: Array<\n (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n failure?: NavigationFailure,\n ) => void\n > = [];\n\n // Ready state\n let readyResolve: (() => void) | null = null;\n const readyPromise = new Promise<void>((resolve) => {\n readyResolve = resolve;\n });\n\n // Pending navigation\n let pendingNavigation: Promise<NavigationFailure | void> | null = null;\n\n /**\n * Resolve a route location by matching against all route records\n */\n function resolveRoute(path: string): {\n matched: RouteRecordMatcher[];\n params: Record<string, string | string[]>;\n meta: Record<string | number | symbol, unknown>;\n } {\n let bestMatch: RouteRecordMatcher | null = null;\n let bestScore = -1;\n let bestParams: Record<string, string | string[]> = {};\n\n for (const matcher of flatMatchers) {\n const result = matchPath(path, matcher.tokens, options.strict);\n\n if (result.matched && result.score > bestScore) {\n bestScore = result.score;\n bestMatch = matcher;\n bestParams = result.params;\n }\n }\n\n if (!bestMatch) {\n return { matched: [], params: {}, meta: {} };\n }\n\n // Build the matched chain (parent -> child)\n const matched: RouteRecordMatcher[] = [];\n let current: RouteRecordMatcher | undefined = bestMatch;\n while (current) {\n matched.unshift(current);\n current = current.parent;\n }\n\n // Merge meta from all matched records\n const meta: Record<string | number | symbol, unknown> = {};\n for (const m of matched) {\n Object.assign(meta, m.record.meta);\n }\n\n return { matched, params: bestParams, meta };\n }\n\n /**\n * Resolve a route name to a path\n */\n function resolveName(name: string | symbol, params?: RouteParams): { path: string } | null {\n for (const matcher of flatMatchers) {\n if (matcher.record.name === name) {\n let path = matcher.record.path;\n // Replace params in path\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n const paramValue = Array.isArray(value) ? value.join('/') : value;\n path = path.replace(`:${key}`, paramValue);\n }\n }\n return { path };\n }\n }\n return null;\n }\n\n /**\n * Navigate to a new route\n */\n async function navigate(\n to: RouteLocationRaw,\n replace: boolean = false,\n ): Promise<NavigationFailure | void> {\n // Check for duplicate navigation\n const resolved = resolveLocation(to, currentRoute(), { resolveName });\n const targetPath = resolved.path;\n\n // Check for name-based navigation with unknown route name\n if (\n typeof to !== 'string' &&\n to.name !== null &&\n to.name !== undefined &&\n !resolveName(to.name, to.params)\n ) {\n return {\n type: NavigationFailureType.aborted,\n from: currentRoute(),\n to: currentRoute(),\n };\n }\n\n // Resolve the route\n const { matched, params, meta } = resolveRoute(targetPath);\n\n if (matched.length === 0) {\n return {\n type: NavigationFailureType.aborted,\n from: currentRoute(),\n to: currentRoute(),\n };\n }\n\n // Build the target location\n const lastMatched = matched[matched.length - 1];\n const targetLocation: RouteLocationNormalized = {\n name: lastMatched?.record?.name ?? null,\n path: targetPath,\n fullPath:\n resolved.path +\n (Object.keys(resolved.query).length\n ? '?' + locationQueryToSearchParams(resolved.query).toString()\n : '') +\n (resolved.hash ? `#${resolved.hash}` : ''),\n query: resolved.query,\n hash: resolved.hash,\n params,\n matched: matched.map((m) => m.record),\n meta,\n };\n\n // Check for same route navigation\n if (isSameRouteLocation(currentRoute(), targetLocation)) {\n return {\n type: NavigationFailureType.duplicated,\n from: currentRoute(),\n to: targetLocation,\n };\n }\n\n const from = currentRoute();\n\n // Run navigation guards (pass fromMatched for beforeRouteLeave)\n const fromMatched = currentRoute()\n .matched.map((record) => {\n // Find the corresponding matcher for the from route records\n return flatMatchers.find((m) => m.record === record);\n })\n .filter((m): m is RouteRecordMatcher => m !== undefined);\n\n const failure = await runGuardSequence(targetLocation, from, matched, fromMatched);\n if (failure) {\n return failure;\n }\n\n // Commit navigation\n if (replace) {\n await options.history.replace(targetLocation);\n } else {\n await options.history.push(targetLocation);\n }\n\n currentRoute.set(targetLocation);\n\n // Handle scroll behavior\n if (options.scrollBehavior) {\n const savedPosition = replace ? null : null; // Would come from history.state\n const scrollPosition = options.scrollBehavior(targetLocation, from, savedPosition);\n if (scrollPosition) {\n // Use requestAnimationFrame for smooth scrolling\n if (typeof window !== 'undefined') {\n window.scrollTo(scrollPosition);\n }\n }\n }\n\n // Run afterEach hooks\n for (const hook of afterEachHooks) {\n hook(targetLocation, from);\n }\n\n return;\n }\n\n /**\n * Run the full navigation guard sequence\n */\n async function runGuardSequence(\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n matched: RouteRecordMatcher[],\n fromMatched: RouteRecordMatcher[],\n ): Promise<NavigationFailure | void> {\n // 1. in-component beforeRouteLeave guards (from current matched components)\n for (const matcher of fromMatched) {\n const component = matcher.record.component as Record<string, unknown> | undefined;\n if (component && component.beforeRouteLeave) {\n const result = await (\n component.beforeRouteLeave as (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: NavigationGuardNext,\n ) => unknown\n )(to, from, noop as NavigationGuardNext);\n if (result === false || result instanceof Error) {\n return { type: NavigationFailureType.aborted, from, to };\n }\n if (typeof result === 'string' || (typeof result === 'object' && result !== null)) {\n return navigate(result, true);\n }\n }\n }\n\n // 2. global beforeEach guards\n for (const guard of beforeEachGuards) {\n const result = await guard(to, from, noop as NavigationGuardNext);\n if (result === false || result instanceof Error) {\n return {\n type: NavigationFailureType.aborted,\n from,\n to,\n };\n }\n if (typeof result === 'string' || (typeof result === 'object' && result !== null)) {\n // Redirect\n return navigate(result, true);\n }\n }\n\n // 3. route record beforeEnter guards\n for (const matcher of matched) {\n if (matcher.record.beforeEnter) {\n const result = await matcher.record.beforeEnter(to, from, noop as NavigationGuardNext);\n if (result === false || result instanceof Error) {\n return {\n type: NavigationFailureType.aborted,\n from,\n to,\n };\n }\n if (typeof result === 'string' || (typeof result === 'object' && result !== null)) {\n return navigate(result, true);\n }\n }\n }\n\n // 4. global beforeResolve guards\n for (const guard of beforeResolveGuards) {\n const result = await guard(to, from, noop as NavigationGuardNext);\n if (result === false || result instanceof Error) {\n return {\n type: NavigationFailureType.aborted,\n from,\n to,\n };\n }\n if (typeof result === 'string' || (typeof result === 'object' && result !== null)) {\n return navigate(result, true);\n }\n }\n\n return;\n }\n\n // No-op function for guard next() callback\n function noop() {}\n\n // Listen to history changes (popstate/hashchange)\n options.history.listen((to, _from, info) => {\n if (info.type === 'pop') {\n // Re-resolve the route for the new location\n const { matched, params, meta } = resolveRoute(to.path);\n const newLocation: RouteLocationNormalized = {\n ...to,\n params,\n matched: matched.map((m) => m.record),\n meta: { ...meta, ...to.meta },\n };\n currentRoute.set(newLocation);\n }\n });\n\n const router: Router = {\n currentRoute,\n options,\n resolveName,\n\n async push(to) {\n if (pendingNavigation) return pendingNavigation;\n try {\n pendingNavigation = navigate(to, false);\n return await pendingNavigation;\n } finally {\n pendingNavigation = null;\n }\n },\n\n async replace(to) {\n if (pendingNavigation) return pendingNavigation;\n try {\n pendingNavigation = navigate(to, true);\n return await pendingNavigation;\n } finally {\n pendingNavigation = null;\n }\n },\n\n go(delta) {\n options.history.go(delta);\n },\n\n back() {\n this.go(-1);\n },\n\n forward() {\n this.go(1);\n },\n\n beforeEach(guard) {\n beforeEachGuards.push(guard);\n return () => {\n const index = beforeEachGuards.indexOf(guard);\n if (index > -1) beforeEachGuards.splice(index, 1);\n };\n },\n\n afterEach(hook) {\n afterEachHooks.push(hook);\n return () => {\n const index = afterEachHooks.indexOf(hook);\n if (index > -1) afterEachHooks.splice(index, 1);\n };\n },\n\n beforeResolve(guard) {\n beforeResolveGuards.push(guard);\n return () => {\n const index = beforeResolveGuards.indexOf(guard);\n if (index > -1) beforeResolveGuards.splice(index, 1);\n };\n },\n\n install(app: {\n config?: { globalProperties?: Record<string, unknown> };\n provide?: (key: string, value: unknown) => void;\n }) {\n setCurrentRouter(router);\n\n if (app.config?.globalProperties) {\n app.config.globalProperties.$router = router;\n }\n\n if (app.provide) {\n app.provide('__lytjs_router__', router);\n }\n\n // Initial navigation\n const initialLocation = options.history.location;\n const { matched, params, meta } = resolveRoute(initialLocation.path);\n currentRoute.set({\n ...initialLocation,\n params,\n matched: matched.map((m) => m.record),\n meta: { ...meta, ...initialLocation.meta },\n });\n\n readyResolve?.();\n },\n\n async isReady() {\n return readyPromise;\n },\n };\n\n return router;\n}\n","/**\n * @lytjs/router - History implementations\n *\n * Provides three history modes:\n * - createWebHistory: HTML5 History API\n * - createWebHashHistory: hash-based routing\n * - createMemoryHistory: in-memory (SSR/testing)\n */\n\nimport type {\n RouterHistory,\n RouteLocationNormalized,\n RouteLocationRaw,\n NavigationFailure,\n NavigationInfo,\n HistoryState,\n} from './types';\nimport { createRouteLocation } from './location';\nimport { parseFullPath, resolveFullPath } from './matcher';\n\n// ===== Base History =====\n\ntype HistoryListener = (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n info: NavigationInfo,\n) => void;\n\nfunction createBaseHistory(base: string): {\n listeners: HistoryListener[];\n currentLocation: RouteLocationNormalized;\n pushState(location: RouteLocationNormalized, data?: HistoryState): void;\n replaceState(location: RouteLocationNormalized, data?: HistoryState): void;\n triggerListeners(\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n info: NavigationInfo,\n ): void;\n} {\n const listeners: HistoryListener[] = [];\n const currentLocation = createRouteLocation(base);\n\n return {\n listeners,\n currentLocation,\n pushState(location, _data) {\n currentLocation.path = location.path;\n currentLocation.fullPath = location.fullPath;\n currentLocation.query = location.query;\n currentLocation.hash = location.hash;\n currentLocation.params = location.params;\n currentLocation.matched = location.matched;\n currentLocation.meta = location.meta;\n currentLocation.name = location.name;\n },\n replaceState(location, _data) {\n currentLocation.path = location.path;\n currentLocation.fullPath = location.fullPath;\n currentLocation.query = location.query;\n currentLocation.hash = location.hash;\n currentLocation.params = location.params;\n currentLocation.matched = location.matched;\n currentLocation.meta = location.meta;\n currentLocation.name = location.name;\n },\n triggerListeners(to, from, info) {\n for (const listener of listeners) {\n listener(to, from, info);\n }\n },\n };\n}\n\n// ===== Web History (HTML5 History API) =====\n\n/**\n * Create a Web History implementation using the HTML5 History API\n */\nexport function createWebHistory(base: string = ''): RouterHistory {\n const normalizedBase = base.startsWith('/') ? base : `/${base}`;\n const { listeners, currentLocation, pushState, replaceState, triggerListeners } =\n createBaseHistory(normalizedBase);\n\n // Initialize from current browser URL\n function getCurrentUrl(): string {\n const { pathname, search, hash } = window.location;\n const path = pathname.startsWith(normalizedBase)\n ? pathname.slice(normalizedBase.length) || '/'\n : pathname;\n return `${path}${search}${hash}`;\n }\n\n // Set initial location from browser\n const initialUrl = getCurrentUrl();\n const { path, query, hash } = parseFullPath(initialUrl);\n currentLocation.path = path;\n currentLocation.fullPath = initialUrl;\n currentLocation.query = query;\n currentLocation.hash = hash;\n\n let popStateHandler: ((e: PopStateEvent) => void) | null = null;\n\n function setupListeners() {\n popStateHandler = (e: PopStateEvent) => {\n const url = getCurrentUrl();\n const { path, query, hash } = parseFullPath(url);\n const to = createRouteLocation(path, query, hash);\n\n const from = { ...currentLocation };\n pushState(to, e.state);\n triggerListeners(to, from, { type: 'pop', direction: 'unknown', delta: 0 });\n };\n\n window.addEventListener('popstate', popStateHandler);\n }\n\n function destroy() {\n if (popStateHandler) {\n window.removeEventListener('popstate', popStateHandler);\n popStateHandler = null;\n }\n listeners.length = 0;\n }\n\n function push(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const routeLocation = typeof to === 'string' ? parseFullPath(to) : to;\n const path = routeLocation.path || '/';\n const query = routeLocation.query || {};\n const hash = routeLocation.hash || '';\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n pushState(location);\n window.history.pushState(\n { ...window.history.state, current: fullPath },\n '',\n `${normalizedBase}${fullPath}`,\n );\n triggerListeners(location, from, { type: 'push', direction: 'forward', delta: 1 });\n\n return Promise.resolve();\n }\n\n function replace(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const routeLocation = typeof to === 'string' ? parseFullPath(to) : to;\n const path = routeLocation.path || '/';\n const query = routeLocation.query || {};\n const hash = routeLocation.hash || '';\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n replaceState(location);\n window.history.replaceState(\n { ...window.history.state, current: fullPath },\n '',\n `${normalizedBase}${fullPath}`,\n );\n triggerListeners(location, from, { type: 'replace', direction: 'unknown', delta: 0 });\n\n return Promise.resolve();\n }\n\n function go(delta: number) {\n window.history.go(delta);\n }\n\n function listen(callback: HistoryListener): () => void {\n listeners.push(callback);\n return () => {\n const index = listeners.indexOf(callback);\n if (index > -1) listeners.splice(index, 1);\n };\n }\n\n // Auto-setup listeners on creation\n setupListeners();\n\n return {\n get location() {\n return currentLocation;\n },\n get state() {\n return window.history.state;\n },\n base: normalizedBase,\n push,\n replace,\n go,\n listen,\n destroy,\n };\n}\n\n// ===== Hash History =====\n\n/**\n * Create a Hash History implementation using hashchange events\n */\nexport function createWebHashHistory(base: string = ''): RouterHistory {\n const normalizedBase = base.startsWith('/') ? base : `/${base}`;\n const { listeners, currentLocation, pushState, replaceState, triggerListeners } =\n createBaseHistory(normalizedBase);\n\n function getHash(): string {\n // Get the hash value without the leading '#'\n const href = window.location.href;\n const hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.slice(hashIndex + 1);\n }\n\n function getCurrentUrl(): string {\n const hash = getHash();\n // Remove base prefix from hash if present\n if (normalizedBase !== '/' && hash.startsWith(normalizedBase)) {\n return hash.slice(normalizedBase.length) || '/';\n }\n return hash || '/';\n }\n\n // Set initial location from browser hash\n const initialUrl = getCurrentUrl();\n const { path, query, hash } = parseFullPath(initialUrl);\n currentLocation.path = path;\n currentLocation.fullPath = initialUrl;\n currentLocation.query = query;\n currentLocation.hash = hash;\n\n let hashChangeHandler: (() => void) | null = null;\n\n function setupListeners() {\n hashChangeHandler = () => {\n const url = getCurrentUrl();\n const { path, query, hash } = parseFullPath(url);\n const to = createRouteLocation(path, query, hash);\n\n const from = { ...currentLocation };\n pushState(to);\n triggerListeners(to, from, { type: 'pop', direction: 'unknown', delta: 0 });\n };\n\n window.addEventListener('hashchange', hashChangeHandler);\n }\n\n function destroy() {\n if (hashChangeHandler) {\n window.removeEventListener('hashchange', hashChangeHandler);\n hashChangeHandler = null;\n }\n listeners.length = 0;\n }\n\n function push(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const routeLocation = typeof to === 'string' ? parseFullPath(to) : to;\n const path = routeLocation.path || '/';\n const query = routeLocation.query || {};\n const hash = routeLocation.hash || '';\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n pushState(location);\n window.location.hash = `${normalizedBase}${fullPath}`;\n triggerListeners(location, from, { type: 'push', direction: 'forward', delta: 1 });\n\n return Promise.resolve();\n }\n\n function replace(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const routeLocation = typeof to === 'string' ? parseFullPath(to) : to;\n const path = routeLocation.path || '/';\n const query = routeLocation.query || {};\n const hash = routeLocation.hash || '';\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n replaceState(location);\n const url = window.location.href;\n const hashIndex = url.indexOf('#');\n const base = hashIndex === -1 ? url : url.slice(0, hashIndex);\n window.location.replace(`${base}#${normalizedBase}${fullPath}`);\n triggerListeners(location, from, { type: 'replace', direction: 'unknown', delta: 0 });\n\n return Promise.resolve();\n }\n\n function go(delta: number) {\n window.history.go(delta);\n }\n\n function listen(callback: HistoryListener): () => void {\n listeners.push(callback);\n return () => {\n const index = listeners.indexOf(callback);\n if (index > -1) listeners.splice(index, 1);\n };\n }\n\n setupListeners();\n\n return {\n get location() {\n return currentLocation;\n },\n get state() {\n return null;\n },\n base: normalizedBase,\n push,\n replace,\n go,\n listen,\n destroy,\n };\n}\n\n// ===== Memory History (SSR / Testing) =====\n\n/**\n * Create an in-memory history implementation for SSR and testing\n */\nexport function createMemoryHistory(initial: string = '/'): RouterHistory {\n const { listeners, currentLocation, pushState, replaceState, triggerListeners } =\n createBaseHistory('/');\n\n const entries: string[] = [initial];\n let currentIndex = 0;\n\n // Set initial location\n const { path, query, hash } = parseFullPath(initial);\n currentLocation.path = path;\n currentLocation.fullPath = initial;\n currentLocation.query = query;\n currentLocation.hash = hash;\n\n function push(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const { path, query, hash } =\n typeof to === 'string'\n ? parseFullPath(to)\n : { path: to.path || '/', query: to.query || {}, hash: to.hash || '' };\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n pushState(location);\n\n // Discard forward entries (standard browser behavior)\n entries.splice(currentIndex + 1);\n entries.push(fullPath);\n currentIndex = entries.length - 1;\n\n triggerListeners(location, from, { type: 'push', direction: 'forward', delta: 1 });\n return Promise.resolve();\n }\n\n function replace(to: RouteLocationRaw): Promise<NavigationFailure | void> {\n const { path, query, hash } =\n typeof to === 'string'\n ? parseFullPath(to)\n : { path: to.path || '/', query: to.query || {}, hash: to.hash || '' };\n\n const fullPath = resolveFullPath(path, query, hash);\n const from = { ...currentLocation };\n const location = createRouteLocation(path, query, hash);\n\n replaceState(location);\n entries[currentIndex] = fullPath;\n\n triggerListeners(location, from, { type: 'replace', direction: 'unknown', delta: 0 });\n return Promise.resolve();\n }\n\n function go(delta: number) {\n const nextIndex = currentIndex + delta;\n if (nextIndex >= 0 && nextIndex < entries.length) {\n const from = { ...currentLocation };\n currentIndex = nextIndex;\n\n const { path, query, hash } = parseFullPath(entries[currentIndex] as string);\n const to = createRouteLocation(path, query, hash);\n pushState(to);\n\n triggerListeners(to, from, {\n type: 'pop',\n direction: delta < 0 ? 'back' : 'forward',\n delta,\n });\n }\n }\n\n function listen(callback: HistoryListener): () => void {\n listeners.push(callback);\n return () => {\n const index = listeners.indexOf(callback);\n if (index > -1) listeners.splice(index, 1);\n };\n }\n\n function destroy() {\n listeners.length = 0;\n }\n\n return {\n get location() {\n return currentLocation;\n },\n get state() {\n return null;\n },\n base: '',\n push,\n replace,\n go,\n listen,\n destroy,\n };\n}\n","/**\n * @lytjs/router - useRoute composable\n */\n\nimport type { Signal } from '@lytjs/reactivity';\nimport type { RouteLocationNormalized } from '../types';\nimport { useRouter } from './useRouter';\n\n/**\n * Get the current route location (reactive)\n * Returns a Signal that can be called to get the current route value\n */\nexport function useRoute(): Signal<RouteLocationNormalized> {\n const router = useRouter();\n return router.currentRoute;\n}\n","/**\n * @lytjs/router - useLink composable\n *\n * Provides reactive navigation link state for building custom RouterLink components.\n */\n\nimport type { RouteLocationRaw, RouteLocationNormalized } from '../types';\nimport { locationQueryToSearchParams } from '../types';\nimport { useRouter } from './useRouter';\nimport { useRoute } from './useRoute';\nimport { computedSignal as computed } from '@lytjs/reactivity';\nimport { resolveLocation, isSameRouteLocation } from '../location';\n\nexport interface UseLinkOptions {\n to: RouteLocationRaw;\n replace?: boolean;\n activeClass?: string;\n exactActiveClass?: string;\n}\n\nexport function useLink(options: UseLinkOptions) {\n const router = useRouter();\n const route = useRoute();\n\n const targetLocation = computed(() => {\n return resolveLocation(options.to, route());\n });\n\n const isActive = computed(() => {\n const target = targetLocation();\n return route().path.startsWith(target.path);\n });\n\n const isExactActive = computed(() => {\n return isSameRouteLocation(route() as RouteLocationNormalized, targetLocation());\n });\n\n const href = computed(() => {\n const loc = targetLocation();\n const path = loc.path;\n const query = Object.keys(loc.query).length\n ? '?' + locationQueryToSearchParams(loc.query).toString()\n : '';\n const hash = loc.hash ? `#${loc.hash}` : '';\n return path + query + hash;\n });\n\n function navigate(e?: MouseEvent) {\n if (e) {\n if (e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) return;\n if (e.defaultPrevented) return;\n e.preventDefault();\n }\n\n if (options.replace) {\n router.replace(options.to);\n } else {\n router.push(options.to);\n }\n }\n\n return {\n route: targetLocation,\n href,\n isActive,\n isExactActive,\n navigate,\n };\n}\n","/**\n * @lytjs/router - RouterView component\n *\n * Renders the matched component for the current route.\n * Supports nested routes by rendering child RouterView.\n */\n\nimport type { RouteLocationNormalized } from '../types';\nimport { useRoute } from '../composables/useRoute';\nimport { computedSignal as computed } from '@lytjs/reactivity';\n\nexport interface RouterViewProps {\n name?: string;\n route?: RouteLocationNormalized;\n}\n\n/**\n * RouterView component\n * Renders the matched component for the current route.\n * Supports named views via the `name` prop and props passing from route records.\n */\nexport const RouterView = {\n name: 'RouterView',\n\n props: {\n name: {\n type: String,\n default: 'default',\n },\n },\n\n setup(props: RouterViewProps) {\n const route = useRoute();\n\n const matchedComponent = computed(() => {\n const currentRoute = route();\n const matched = currentRoute.matched;\n // Find the matched record for this view depth\n for (const record of matched) {\n if (record.components && record.components[props.name!]) {\n return { component: record.components[props.name!], record };\n }\n if (record.component && props.name === 'default') {\n return { component: record.component, record };\n }\n }\n return null;\n });\n\n return () => {\n const matched = matchedComponent();\n if (!matched) return null;\n\n const { component, record } = matched;\n // Resolve lazy component\n const resolvedComponent = typeof component === 'function' ? component() : component;\n\n // Compute props from route record\n let routeProps: Record<string, unknown> = {};\n const currentRoute = route();\n if (record.props) {\n if (typeof record.props === 'function') {\n routeProps = record.props(currentRoute);\n } else if (typeof record.props === 'object') {\n routeProps = record.props;\n } else if (record.props === true) {\n routeProps = currentRoute.params;\n }\n }\n\n // Return the component vnode\n if (\n resolvedComponent &&\n typeof resolvedComponent === 'object' &&\n 'setup' in resolvedComponent\n ) {\n // Component object - return it for the renderer\n return { ...resolvedComponent, props: { ...routeProps, ...resolvedComponent.props } };\n }\n\n return resolvedComponent;\n };\n },\n};\n","/**\n * @lytjs/router - RouterLink component\n *\n * Renders an anchor tag that navigates to the target route.\n */\n\nimport type { RouteLocationNormalized } from '../types';\nimport { locationQueryToSearchParams } from '../types';\nimport { useRouter } from '../composables/useRouter';\nimport { useRoute } from '../composables/useRoute';\nimport { computedSignal as computed } from '@lytjs/reactivity';\nimport { resolveLocation, isSameRouteLocation } from '../location';\n\nexport interface RouterLinkProps {\n to: string;\n replace?: boolean;\n activeClass?: string;\n exactActiveClass?: string;\n ariaCurrentValue?: string;\n}\n\n/**\n * RouterLink component\n * Renders an anchor tag that navigates to the target route.\n * Supports active state detection and aria-current attribute.\n */\nexport const RouterLink = {\n name: 'RouterLink',\n\n props: {\n to: {\n type: String,\n required: true,\n },\n replace: {\n type: Boolean,\n default: false,\n },\n activeClass: {\n type: String,\n default: 'router-link-active',\n },\n exactActiveClass: {\n type: String,\n default: 'router-link-exact-active',\n },\n ariaCurrentValue: {\n type: String,\n default: 'page',\n },\n },\n\n setup(\n props: RouterLinkProps,\n {\n slots,\n }: {\n slots?: {\n default?: (props?: unknown) => unknown;\n [key: string]: ((props?: unknown) => unknown) | undefined;\n };\n },\n ) {\n const router = useRouter();\n const route = useRoute();\n\n const targetLocation = computed(() => {\n return resolveLocation(props.to, route());\n });\n\n const isActive = computed(() => {\n const target = targetLocation();\n return route().path.startsWith(target.path);\n });\n\n const isExactActive = computed(() => {\n return isSameRouteLocation(route() as RouteLocationNormalized, targetLocation());\n });\n\n const href = computed(() => {\n const loc = targetLocation();\n const path = loc.path;\n const query = Object.keys(loc.query).length\n ? '?' + locationQueryToSearchParams(loc.query).toString()\n : '';\n const hash = loc.hash ? `#${loc.hash}` : '';\n return path + query + hash;\n });\n\n function handleClick(event: MouseEvent) {\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n if (event.defaultPrevented) return;\n if (event.button !== undefined && event.button !== 0) return;\n\n event.preventDefault();\n\n if (props.replace) {\n router.replace(props.to);\n } else {\n router.push(props.to);\n }\n }\n\n return () => {\n const classes: string[] = [];\n if (isActive()) classes.push(props.activeClass!);\n if (isExactActive()) classes.push(props.exactActiveClass!);\n\n const linkData = {\n tag: 'a',\n props: {\n href: href(),\n class: classes.join(' '),\n 'aria-current': isExactActive() ? props.ariaCurrentValue : undefined,\n onClick: handleClick,\n },\n children: slots?.default\n ? slots.default({ isActive: isActive(), isExactActive: isExactActive() })\n : null,\n };\n\n return linkData;\n };\n },\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@lytjs/router",
|
|
3
|
-
"version": "6.
|
|
4
|
-
"description": "LytJS declarative routing system with support for nested routes, navigation guards, and history modes",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.cjs",
|
|
7
|
-
"module": "./dist/index.mjs",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"import": "./dist/index.mjs",
|
|
13
|
-
"require": "./dist/index.cjs"
|
|
14
|
-
},
|
|
15
|
-
"./package.json": "./package.json"
|
|
16
|
-
},
|
|
17
|
-
"files": [
|
|
18
|
-
"dist"
|
|
19
|
-
],
|
|
20
|
-
"sideEffects": false,
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "
|
|
23
|
-
"dev": "tsup --watch",
|
|
24
|
-
"test": "vitest run",
|
|
25
|
-
"test:watch": "vitest",
|
|
26
|
-
"test:coverage": "vitest run --coverage",
|
|
27
|
-
"type-check": "tsc --noEmit",
|
|
28
|
-
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
29
|
-
"clean": "rm -rf dist"
|
|
30
|
-
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"@lytjs/common-is": "
|
|
33
|
-
"@lytjs/common-env": "
|
|
34
|
-
"@lytjs/reactivity": "
|
|
35
|
-
"@lytjs/component": "
|
|
36
|
-
"@lytjs/vdom": "
|
|
37
|
-
},
|
|
38
|
-
"devDependencies": {
|
|
39
|
-
"tsup": "^8.0.0",
|
|
40
|
-
"typescript": "^5.4.0",
|
|
41
|
-
"vitest": "^3.0.0"
|
|
42
|
-
},
|
|
43
|
-
"license": "MIT",
|
|
44
|
-
"repository": {
|
|
45
|
-
"type": "git",
|
|
46
|
-
"url": "https://gitee.com/lytjs/lytjs.git",
|
|
47
|
-
"directory": "packages/ecosystem/packages/router"
|
|
48
|
-
},
|
|
49
|
-
"keywords": [
|
|
50
|
-
"lytjs",
|
|
51
|
-
"router",
|
|
52
|
-
"routing",
|
|
53
|
-
"spa"
|
|
54
|
-
]
|
|
55
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@lytjs/router",
|
|
3
|
+
"version": "6.6.0",
|
|
4
|
+
"description": "LytJS declarative routing system with support for nested routes, navigation guards, and history modes",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"dev": "tsup --watch",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"type-check": "tsc --noEmit",
|
|
28
|
+
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
29
|
+
"clean": "rm -rf dist"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@lytjs/common-is": "workspace:*",
|
|
33
|
+
"@lytjs/common-env": "workspace:*",
|
|
34
|
+
"@lytjs/reactivity": "workspace:*",
|
|
35
|
+
"@lytjs/component": "workspace:*",
|
|
36
|
+
"@lytjs/vdom": "workspace:*"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"tsup": "^8.0.0",
|
|
40
|
+
"typescript": "^5.4.0",
|
|
41
|
+
"vitest": "^3.0.0"
|
|
42
|
+
},
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "https://gitee.com/lytjs/lytjs.git",
|
|
47
|
+
"directory": "packages/ecosystem/packages/router"
|
|
48
|
+
},
|
|
49
|
+
"keywords": [
|
|
50
|
+
"lytjs",
|
|
51
|
+
"router",
|
|
52
|
+
"routing",
|
|
53
|
+
"spa"
|
|
54
|
+
]
|
|
55
|
+
}
|