@loozo/angular-router 0.0.1 → 0.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"loozo-angular-router-_generated.mjs","sources":["../../_generated/src/inputs.ts","../../_generated/src/callbacks.ts","../../_generated/src/handle.ts","../../_generated/src/index.ts","../../_generated/src/loozo-angular-router-_generated.ts"],"sourcesContent":["import type { ActivatedRouteSnapshot, PartialMatchRouteSnapshot } from \"@angular/router\";\nimport { codecPresence, routeMetadata, type AnyRoute } from \"@loozo/angular-router/_core\";\n\nexport interface RecordBinding {\n readonly definition: () => AnyRoute;\n readonly owners: readonly string[];\n}\nexport interface RouteSet {\n readonly records: Readonly<Record<string, RecordBinding>>;\n readonly destinations: Readonly<Record<string, () => AnyRoute>>;\n readonly absolute: Readonly<Record<string, string>>;\n readonly relative: Readonly<Record<string, Readonly<Record<string, string>>>>;\n}\nexport interface Parsed {\n readonly params: Readonly<Record<string, unknown>>;\n readonly search: Readonly<Record<string, unknown>>;\n}\nexport interface Job {\n readonly source: \"path\" | \"search\";\n readonly key: string;\n readonly raws: readonly string[];\n readonly array: boolean;\n readonly codec: { parse(raw: string): unknown };\n}\nexport interface Operation {\n readonly promise: Promise<Parsed>;\n outcome: { value: Parsed } | { error: Error } | undefined;\n}\n\nexport function hasIdentity(\n snapshot: Pick<ActivatedRouteSnapshot, \"routeConfig\">,\n id: string,\n): boolean {\n const data = snapshot.routeConfig?.data;\n\n return (\n !!data &&\n Object.hasOwn(data, \"__loozoAngularRouterRouteId\") &&\n data.__loozoAngularRouterRouteId === id\n );\n}\n\nexport function assertIdentity(\n snapshot: Pick<ActivatedRouteSnapshot, \"routeConfig\">,\n id: string,\n): void {\n if (!hasIdentity(snapshot, id)) {\n throw new Error(`Generated route wiring identity mismatch: ${id}`);\n }\n}\n\nexport function inputError(\n source: \"path\" | \"search\",\n key: string,\n reason: \"missing\" | \"repeated\" | \"invalid\",\n cause?: unknown,\n): Error {\n return Object.assign(new Error(`Invalid ${source} input ${key}: ${reason}`, { cause }), {\n source,\n key,\n reason,\n });\n}\n\nexport function validateRaw(\n source: \"path\" | \"search\",\n key: string,\n raws: readonly unknown[],\n array: boolean,\n): asserts raws is readonly string[] {\n if (!array && raws.length === 0) {\n throw inputError(source, key, \"missing\");\n }\n\n if (!array && raws.length > 1) {\n throw inputError(source, key, \"repeated\");\n }\n\n if (raws.some((raw) => typeof raw !== \"string\")) {\n throw inputError(source, key, \"invalid\", new TypeError(\"Raw input must be a decoded string\"));\n }\n}\n\nexport function pathJobs(definition: AnyRoute, url: readonly { path: string }[]): Job[] {\n const metadata = routeMetadata(definition);\n const local = new Map<string, Job>();\n\n for (let index = 0; index < metadata.localSegments.length; index += 1) {\n const segment = metadata.localSegments[index];\n\n if (segment.kind === \"static\") {\n continue;\n }\n\n let raws: unknown[] = [];\n const array = segment.kind === \"catchall\";\n\n if (array) {\n raws = url.slice(index).map((value) => value.path);\n } else if (index < url.length) {\n raws = [url[index].path];\n }\n\n validateRaw(\"path\", segment.name, raws, array);\n // Repeated local scalars intentionally use Angular's last positional occurrence.\n local.set(segment.name, {\n source: \"path\",\n key: segment.name,\n raws,\n array,\n codec: metadata.localParams[segment.name],\n });\n }\n\n return [...local.values()];\n}\n\nexport function searchJobs(\n definition: AnyRoute,\n snapshot: Pick<ActivatedRouteSnapshot, \"queryParamMap\">,\n): Job[] {\n const metadata = routeMetadata(definition);\n const jobs: Job[] = [];\n\n for (const key of Object.keys(metadata.search)) {\n const codec = metadata.search[key];\n const raws = snapshot.queryParamMap.getAll(key);\n\n if (raws.length === 0 && codecPresence(codec) === \"optional\") {\n continue;\n }\n\n validateRaw(\"search\", key, raws, false);\n jobs.push({ source: \"search\", key, raws, array: false, codec });\n }\n\n return jobs;\n}\n\nexport async function runJobs(jobs: readonly Job[]): Promise<Parsed> {\n const params: Record<string, unknown> = Object.create(null);\n const search: Record<string, unknown> = Object.create(null);\n const pending: Promise<void>[] = [];\n\n for (const job of jobs) {\n // Async boundaries convert every synchronous throw into an observed rejection.\n pending.push(\n (async () => {\n try {\n const elements: Promise<unknown>[] = [];\n\n for (const raw of job.raws) {\n elements.push((async () => job.codec.parse(raw))());\n }\n\n const values = await Promise.all(elements);\n let value = values[0];\n\n if (job.array) {\n value = Object.freeze(values);\n }\n\n if (job.source === \"path\") {\n params[job.key] = value;\n } else {\n search[job.key] = value;\n }\n } catch (cause) {\n throw inputError(job.source, job.key, \"invalid\", cause);\n }\n })(),\n );\n }\n\n await Promise.all(pending);\n\n return Object.freeze({ params: Object.freeze(params), search: Object.freeze(search) });\n}\n\nconst full = new WeakMap<object, WeakMap<object, Operation>>();\nconst matching = new WeakMap<object, WeakMap<object, Operation>>();\n\nfunction operation(\n cache: typeof full,\n definition: AnyRoute,\n snapshot: object,\n collect: () => Job[],\n): Operation {\n let snapshots = cache.get(definition);\n\n if (!snapshots) {\n snapshots = new WeakMap();\n cache.set(definition, snapshots);\n }\n\n const existing = snapshots.get(snapshot);\n\n if (existing) {\n return existing;\n }\n\n // Insert before application code can run; even synchronous reentry joins the same operation.\n const result: Operation = {\n promise: Promise.resolve().then(() => runJobs(collect())),\n outcome: undefined,\n };\n\n snapshots.set(snapshot, result);\n result.promise.then(\n (value) => {\n result.outcome = { value };\n },\n (cause) => {\n let error = cause;\n\n if (!(error instanceof Error)) {\n error = new Error(\"Route input failure\", { cause });\n }\n\n result.outcome = { error };\n },\n );\n\n return result;\n}\n\nexport function fullOperation(\n set: RouteSet,\n id: string,\n snapshot: ActivatedRouteSnapshot,\n): Operation {\n assertIdentity(snapshot, id);\n\n const binding = set.records[id];\n\n return operation(full, binding.definition(), snapshot, () => {\n const jobs: Job[] = [];\n\n for (const ownerId of binding.owners) {\n const definition = set.records[ownerId].definition();\n\n // Pathless/static owners contribute no positional input. Effective search belongs\n // to this complete future record; inherited data is never positional authority.\n if (!routeMetadata(definition).localSegments.some((segment) => segment.kind !== \"static\")) {\n continue;\n }\n\n const owner = [...snapshot.pathFromRoot]\n .reverse()\n .find((record) => hasIdentity(record, ownerId));\n\n if (!owner) {\n throw new Error(`Generated route ancestor missing: ${ownerId}`);\n }\n\n assertIdentity(owner, ownerId);\n jobs.push(...pathJobs(definition, owner.url));\n }\n\n jobs.push(...searchJobs(binding.definition(), snapshot));\n\n return jobs;\n });\n}\n\nexport function parseInputs(\n set: RouteSet,\n id: string,\n snapshot: ActivatedRouteSnapshot,\n): Promise<Parsed> {\n return fullOperation(set, id, snapshot).promise;\n}\n\nexport function matchingInputs(\n set: RouteSet,\n id: string,\n snapshot: PartialMatchRouteSnapshot,\n): Promise<Parsed> {\n assertIdentity(snapshot, id);\n\n const definition = set.records[id].definition();\n\n return operation(matching, definition, snapshot, () => [\n ...pathJobs(definition, snapshot.url),\n ...searchJobs(definition, snapshot),\n ]).promise;\n}\n","import { Injector, inject, runInInjectionContext } from \"@angular/core\";\nimport {\n Router,\n type Route,\n type ActivatedRouteSnapshot,\n type RouterStateSnapshot,\n type GuardResult,\n type CanActivateFn,\n type CanActivateChildFn,\n type CanMatchFn,\n type ResolveFn,\n type RedirectFunction,\n} from \"@angular/router\";\nimport { Observable, from, isObservable, type ObservableInput } from \"rxjs\";\nimport { routeMetadata, codecPresence, type AnyRoute } from \"@loozo/angular-router/_core\";\nimport {\n assertIdentity,\n hasIdentity,\n parseInputs,\n matchingInputs,\n runJobs,\n validateRaw,\n type Job,\n type RouteSet,\n} from \"./inputs.js\";\n\nfunction isPromiseResult<T>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as Promise<T>).then === \"function\";\n}\n\nfunction bridge<T>(\n inputs: () => Promise<unknown>,\n callback: (inputs: any) => T | ObservableInput<T>,\n): Observable<T> {\n const injector = inject(Injector);\n\n return new Observable((subscriber) => {\n let subscription: { unsubscribe(): void } | undefined;\n\n inputs().then(\n (value) => {\n if (subscriber.closed) {\n return;\n }\n\n try {\n const result = runInInjectionContext(injector, () => callback(value));\n\n if (isObservable(result)) {\n subscription = result.subscribe(subscriber);\n } else if (isPromiseResult<T>(result)) {\n subscription = from(Promise.resolve(result)).subscribe(subscriber);\n } else {\n subscriber.next(result as T);\n subscriber.complete();\n }\n } catch (error) {\n subscriber.error(error);\n }\n },\n (error) => subscriber.error(error),\n );\n\n return () => subscription?.unsubscribe();\n });\n}\n\nexport function callbacks(\n set: RouteSet,\n id: string,\n): Pick<Route, \"canActivate\" | \"canActivateChild\" | \"canMatch\" | \"resolve\"> {\n const config = routeMetadata(set.records[id].definition()).config;\n const result: Pick<Route, \"canActivate\" | \"canActivateChild\" | \"canMatch\" | \"resolve\"> = {};\n const activate = config.canActivate as readonly ((...args: any[]) => any)[] | undefined;\n\n if (activate) {\n result.canActivate = activate.map(\n (callback): CanActivateFn =>\n (snapshot, state) => {\n assertIdentity(snapshot, id);\n\n return bridge<GuardResult>(\n () => parseInputs(set, id, snapshot),\n (inputs) => callback(inputs, snapshot, state),\n );\n },\n );\n }\n\n const children = config.canActivateChild as readonly ((...args: any[]) => any)[] | undefined;\n\n if (children) {\n result.canActivateChild = children.map(\n (callback): CanActivateChildFn =>\n (child, state) => {\n let parent: ActivatedRouteSnapshot | undefined;\n\n // The native ancestry includes child itself; only proper ancestors can declare this guard.\n for (let index = child.pathFromRoot.length - 2; index >= 0; index -= 1) {\n const ancestor = child.pathFromRoot[index];\n\n if (hasIdentity(ancestor, id)) {\n parent = ancestor;\n\n break;\n }\n }\n\n if (!parent) {\n throw new Error(`Generated guard ancestor missing: ${id}`);\n }\n\n assertIdentity(parent, id);\n\n return bridge<GuardResult>(\n () => parseInputs(set, id, parent),\n (inputs) => callback(inputs, child, state),\n );\n },\n );\n }\n\n const matching = config.canMatch as readonly ((...args: any[]) => any)[] | undefined;\n\n if (matching) {\n result.canMatch = matching.map(\n (callback): CanMatchFn =>\n (route, segments, snapshot) => {\n assertIdentity(snapshot, id);\n\n return bridge<GuardResult>(\n () => matchingInputs(set, id, snapshot),\n (inputs) => callback(inputs, route, segments, snapshot),\n );\n },\n );\n }\n\n const resolvers = config.resolve as\n | Record<\n PropertyKey,\n (inputs: unknown, snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any\n >\n | undefined;\n\n if (resolvers) {\n const resolve: Record<PropertyKey, ResolveFn<unknown>> = Object.create(null);\n\n for (const key of Reflect.ownKeys(resolvers)) {\n resolve[key] = (snapshot, state) => {\n assertIdentity(snapshot, id);\n\n return bridge(\n () => parseInputs(set, id, snapshot),\n (inputs) => resolvers[key](inputs, snapshot, state),\n );\n };\n }\n\n result.resolve = resolve;\n }\n\n return result;\n}\n\nexport function redirect(definition: () => AnyRoute): RedirectFunction {\n return async (snapshot) => {\n const router = inject(Router);\n const source = routeMetadata(definition());\n const config = source.config.redirect as {\n to: AnyRoute;\n params: Record<string, string>;\n search: { mode: string; values?: Record<string, unknown> };\n fragment: { mode: string; value?: string };\n };\n const target = routeMetadata(config.to);\n const raw = new Map<string, { values: string[]; array: boolean }>();\n\n for (let index = 0; index < source.segments.length; index += 1) {\n const segment = source.segments[index];\n\n if (segment.kind === \"scalar\") {\n raw.set(segment.name, {\n values: snapshot.url.slice(index, index + 1).map((value) => value.path),\n array: false,\n });\n } else if (segment.kind === \"catchall\") {\n raw.set(segment.name, {\n values: snapshot.url.slice(index).map((value) => value.path),\n array: true,\n });\n }\n }\n\n const jobs: Job[] = [];\n\n for (const key of new Set(Object.values(config.params))) {\n const input = raw.get(key);\n const raws = input?.values ?? [];\n const array = input?.array ?? false;\n\n validateRaw(\"path\", key, raws, array);\n jobs.push({ source: \"path\", key, raws, array, codec: source.params[key] });\n }\n\n if (config.search.mode === \"preserve\") {\n for (const key of Object.keys(target.search)) {\n const codec = target.search[key];\n const raws = snapshot.queryParamMap.getAll(key);\n\n if (raws.length === 0 && codecPresence(codec) === \"optional\") {\n continue;\n }\n\n validateRaw(\"search\", key, raws, false);\n jobs.push({ source: \"search\", key, raws, array: false, codec });\n }\n }\n\n // Every demand is prechecked. Async wrappers observe even synchronous preserved-search\n // throws after earlier source jobs launch, without detaching those later rejections.\n const logical = await runJobs(jobs);\n const params: Record<string, unknown> = Object.create(null);\n\n for (const [key, sourceKey] of Object.entries(config.params)) {\n params[key] = logical.params[sourceKey];\n }\n\n const path = createUrlForPath(config.to, params);\n const replacement: Record<string, string> = Object.create(null);\n\n if (config.search.mode === \"replace\") {\n const values = config.search.values!;\n\n for (const key of Object.keys(target.search).sort()) {\n const codec = target.search[key];\n\n if (\n codecPresence(codec) === \"optional\" &&\n (!Object.hasOwn(values, key) || values[key] === undefined)\n ) {\n continue;\n }\n\n const raw = codec.stringify(values[key]);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(`Redirect search codec must stringify to a string: ${key}`);\n }\n\n replacement[key] = raw;\n }\n }\n\n // No native conversion before demanded codecs and destination stringification succeed.\n const tree = router.parseUrl(path);\n\n if (config.search.mode === \"preserve\") {\n tree.queryParams = { ...snapshot.queryParams };\n } else if (config.search.mode === \"replace\") {\n tree.queryParams = replacement;\n }\n\n if (config.fragment.mode === \"preserve\") {\n tree.fragment = snapshot.fragment;\n } else if (config.fragment.mode === \"replace\") {\n tree.fragment = config.fragment.value!;\n }\n\n return tree;\n };\n}\n\nfunction createUrlForPath(definition: AnyRoute, params: Record<string, unknown>): string {\n const metadata = routeMetadata(definition);\n const parts: string[] = [];\n\n function encode(raw: string): string {\n if (raw === \"\" || raw === \".\" || raw === \"..\") {\n throw new TypeError(\"Invalid redirect path value\");\n }\n\n return encodeURIComponent(raw).replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\");\n }\n\n for (const segment of metadata.segments) {\n if (segment.kind === \"static\") {\n parts.push(encode(segment.text));\n } else if (segment.kind === \"scalar\") {\n const raw = metadata.params[segment.name].stringify(params[segment.name]);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(\"Redirect codec must stringify to a string\");\n }\n\n parts.push(encode(raw));\n } else {\n const values = params[segment.name];\n\n if (!Array.isArray(values)) {\n throw new TypeError(\"Redirect catchall requires an array\");\n }\n\n for (const value of values) {\n const raw = metadata.params[segment.name].stringify(value);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(\"Redirect codec must stringify to a string\");\n }\n\n parts.push(encode(raw));\n }\n }\n }\n\n return `/${parts.join(\"/\")}`;\n}\n","import {\n DestroyRef,\n PendingTasks,\n inject,\n resourceFromSnapshots,\n signal,\n type ResourceSnapshot,\n} from \"@angular/core\";\nimport {\n ActivatedRoute,\n Router,\n NavigationStart,\n NavigationEnd,\n NavigationCancel,\n NavigationSkipped,\n NavigationError,\n NavigationCancellationCode,\n type ActivatedRouteSnapshot,\n} from \"@angular/router\";\nimport { routeMetadata } from \"@loozo/angular-router/_core\";\nimport {\n assertIdentity,\n fullOperation,\n type Operation,\n type Parsed,\n type RouteSet,\n} from \"./inputs.js\";\n\n// Shared parsing has no view/task lifetime. Each handle owns its visibility and relevance.\nexport function observeRoute(set: RouteSet, id: string) {\n const activated = inject(ActivatedRoute);\n const router = inject(Router);\n const destroy = inject(DestroyRef);\n const tasks = inject(PendingTasks);\n\n assertIdentity(activated.snapshot, id);\n\n const paired = signal<ResourceSnapshot<Parsed | undefined>>({\n status: \"loading\",\n value: undefined,\n });\n const data = signal<ResourceSnapshot<Readonly<Record<PropertyKey, unknown>> | undefined>>({\n status: \"loading\",\n value: undefined,\n });\n let survivor: ActivatedRouteSnapshot | undefined;\n let work: Operation | undefined;\n let commitment = -1;\n let pending: number | undefined;\n let visible = false;\n let destroyed = false;\n let release: (() => void) | undefined;\n let acquiring = false;\n\n function track(): void {\n if (release || destroyed || acquiring) {\n return;\n }\n\n // Native add synchronously notifies stability observers before returning ownership.\n acquiring = true;\n\n const cleanup = tasks.add();\n\n acquiring = false;\n\n if (destroyed) {\n cleanup();\n\n return;\n }\n\n release = cleanup;\n }\n\n function untrack(): void {\n const cleanup = release;\n\n release = undefined;\n cleanup?.();\n }\n\n function publish(): void {\n if (!visible || destroyed || !work) {\n return;\n }\n\n if (!work.outcome) {\n paired.set({ status: \"loading\", value: undefined });\n track();\n\n return;\n }\n\n if (\"value\" in work.outcome) {\n paired.set({ status: \"resolved\", value: work.outcome.value });\n } else {\n paired.set({ status: \"error\", error: work.outcome.error });\n }\n\n // A synchronous paired write always precedes package task removal.\n untrack();\n }\n\n function adopt(snapshot: ActivatedRouteSnapshot): void {\n assertIdentity(snapshot, id);\n\n if (snapshot === survivor) {\n return;\n }\n\n survivor = snapshot;\n\n const joined = fullOperation(set, id, snapshot);\n\n work = joined;\n\n if (!joined.outcome) {\n track();\n }\n\n joined.promise.then(\n () => {\n if (work === joined) {\n publish();\n }\n },\n () => {\n if (work === joined) {\n publish();\n }\n },\n );\n }\n\n function reconcile(): void {\n const successful = router.lastSuccessfulNavigation();\n\n if (successful && successful.id > commitment) {\n commitment = successful.id;\n adopt(activated.snapshot);\n }\n }\n\n function restore(): void {\n if (destroyed) {\n return;\n }\n\n reconcile();\n\n if (!survivor) {\n adopt(activated.snapshot);\n }\n\n const local: Record<PropertyKey, unknown> = Object.create(null);\n const resolvers = routeMetadata(set.records[id].definition()).config.resolve ?? {};\n\n for (const key of Reflect.ownKeys(resolvers)) {\n if (Object.hasOwn(survivor!.data, key)) {\n local[key] = survivor!.data[key];\n }\n }\n\n data.set({ status: \"resolved\", value: Object.freeze(local) });\n visible = true;\n publish();\n }\n\n function idleHandoff(): void {\n queueMicrotask(() => {\n if (destroyed || visible) {\n return;\n }\n\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (!current || current.id === successful?.id) {\n pending = undefined;\n restore();\n }\n });\n }\n\n function eligible(id: number): boolean {\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (current && current.id > id && current.id !== successful?.id) {\n return false;\n }\n\n return pending === undefined || pending === id;\n }\n\n // Subscribe before reading native phase: constructors can run inside event delivery.\n const subscription = router.events.subscribe((event) => {\n if (destroyed) {\n return;\n }\n\n if (event instanceof NavigationStart) {\n pending = event.id;\n visible = false;\n reconcile();\n paired.set({ status: \"loading\", value: undefined });\n data.set({ status: \"loading\", value: undefined });\n } else if (event instanceof NavigationEnd) {\n // Even an old End may expose a newer true survivor; it cannot settle a newer Start.\n reconcile();\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationCancel) {\n reconcile();\n\n if (\n event.code === NavigationCancellationCode.Redirect ||\n event.code === NavigationCancellationCode.SupersededByNewNavigation\n ) {\n return;\n }\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationSkipped) {\n reconcile();\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationError && eligible(event.id)) {\n reconcile();\n pending = undefined;\n visible = false;\n\n let error = event.error;\n\n if (!(error instanceof Error)) {\n error = new Error(\"Navigation failure\", { cause: event.error });\n }\n\n paired.set({ status: \"error\", error });\n data.set({ status: \"error\", error });\n untrack();\n }\n });\n\n destroy.onDestroy(() => {\n destroyed = true;\n visible = false;\n subscription.unsubscribe();\n untrack();\n });\n\n // Synchronous task handoff prevents whenStable resolving before a missed-terminal microtask.\n track();\n\n if (!destroyed) {\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (!current || current.id === successful?.id) {\n restore();\n } else {\n pending = current.id;\n idleHandoff();\n }\n }\n\n function project(key: \"params\" | \"search\"): ResourceSnapshot<any> {\n const state = paired();\n\n if (state.status === \"error\") {\n return state;\n }\n\n return { status: state.status, value: state.value?.[key] };\n }\n\n return {\n params: resourceFromSnapshots(() => project(\"params\")),\n search: resourceFromSnapshots(() => project(\"search\")),\n data: resourceFromSnapshots(() => data()),\n };\n}\n","export { callbacks, redirect } from \"./callbacks.js\";\nexport { assertIdentity, parseInputs } from \"./inputs.js\";\nexport type { RecordBinding, RouteSet } from \"./inputs.js\";\n\nimport { inject, type Resource } from \"@angular/core\";\nimport { Router, type UrlTree } from \"@angular/router\";\nimport {\n createUrl,\n routeMetadata,\n type AnyRoute,\n type ParamsOf,\n type SearchOf,\n type UrlValues,\n} from \"@loozo/angular-router/_core\";\nimport { observeRoute } from \"./handle.js\";\nimport type { RouteSet } from \"./inputs.js\";\n\ndeclare const destinationBrand: unique symbol;\n\nexport declare class Destination<\n Target extends AnyRoute,\n Set = unknown,\n Id extends string = string,\n> {\n // Type-only identity, intentionally not read; object spreads must lose this member.\n // oxlint-disable-next-line no-unused-private-class-members\n readonly #nominal: void;\n readonly [destinationBrand]: { readonly target: Target; readonly set: Set; readonly id: Id };\n}\n\nconst destinations = new WeakMap<object, { getSet: () => RouteSet; id: string }>();\n\nexport function createDestination<Target extends AnyRoute, Set, Id extends string>(\n getSet: () => RouteSet,\n id: Id,\n): Destination<Target, Set, Id> {\n const destination = Object.freeze({});\n\n destinations.set(destination, { getSet, id });\n\n return destination as Destination<Target, Set, Id>;\n}\n\ntype DataOf<Target> = Target extends { readonly __data?: infer Data } ? Readonly<Data> : never;\ntype IsUnion<Value, Whole = Value> = Value extends unknown\n ? [Whole] extends [Value]\n ? false\n : true\n : never;\n\nexport interface Handle<\n Target extends AnyRoute,\n Selected extends Record<string, AnyRoute> = {},\n Set = unknown,\n References extends Record<string, AnyRoute> = {},\n> {\n readonly params: Resource<Readonly<ParamsOf<Target>> | undefined>;\n readonly search: Resource<Readonly<SearchOf<Target>> | undefined>;\n readonly data: Resource<DataOf<Target> | undefined>;\n link<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): UrlTree;\n link<Keys extends keyof SearchOf<Target> = never>(\n selector: \".\",\n values: UrlValues<Target, Keys>,\n ): UrlTree;\n link<\n const Selector extends keyof Selected & string,\n Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never,\n >(\n selector: Selector & (IsUnion<Selector> extends true ? never : unknown),\n values: UrlValues<NoInfer<Selected[Selector]>, Keys>,\n ): UrlTree;\n link<\n const Id extends keyof References & string,\n Keys extends keyof SearchOf<NoInfer<References[Id]>> = never,\n >(\n selector: Destination<NoInfer<References[Id]>, Set, Id> &\n (IsUnion<Id> extends true ? never : unknown),\n values: UrlValues<NoInfer<References[Id]>, Keys>,\n ): UrlTree;\n navigate<Keys extends keyof SearchOf<Target> = never>(\n values: UrlValues<Target, Keys>,\n ): Promise<boolean>;\n navigate<Keys extends keyof SearchOf<Target> = never>(\n selector: \".\",\n values: UrlValues<Target, Keys>,\n ): Promise<boolean>;\n navigate<\n const Selector extends keyof Selected & string,\n Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never,\n >(\n selector: Selector & (IsUnion<Selector> extends true ? never : unknown),\n values: UrlValues<NoInfer<Selected[Selector]>, Keys>,\n ): Promise<boolean>;\n navigate<\n const Id extends keyof References & string,\n Keys extends keyof SearchOf<NoInfer<References[Id]>> = never,\n >(\n selector: Destination<NoInfer<References[Id]>, Set, Id> &\n (IsUnion<Id> extends true ? never : unknown),\n values: UrlValues<NoInfer<References[Id]>, Keys>,\n ): Promise<boolean>;\n}\n\nexport function nativeOptions(definition: AnyRoute): Record<string, unknown> {\n const config = routeMetadata(definition).config;\n const options: Record<string, unknown> = {};\n\n for (const key of [\"providers\", \"title\", \"data\", \"canDeactivate\", \"runGuardsAndResolvers\"]) {\n if (Object.hasOwn(config, key)) {\n options[key] = config[key];\n }\n }\n\n return options;\n}\n\nexport function injectGeneratedRoute<\n Target extends AnyRoute,\n Selected extends Record<string, AnyRoute>,\n Set,\n References extends Record<string, AnyRoute>,\n>(set: RouteSet, id: string): Handle<Target, Selected, Set, References> {\n const router = inject(Router);\n const view = observeRoute(set, id);\n\n function url(args: readonly unknown[]): string {\n if (args.length !== 1 && args.length !== 2) {\n throw new TypeError(\"Expected values or a selected destination and values\");\n }\n\n let target = id;\n let values = args[0];\n\n if (args.length === 2) {\n const selector = args[0];\n\n values = args[1];\n\n if (typeof selector === \"string\") {\n if (selector !== \".\") {\n if (Object.hasOwn(set.absolute, selector)) {\n target = set.absolute[selector];\n } else if (Object.hasOwn(set.relative[id], selector)) {\n target = set.relative[id][selector];\n } else {\n throw new TypeError(`Unknown generated selector: ${selector}`);\n }\n }\n } else {\n if (typeof selector !== \"object\" || selector === null) {\n throw new TypeError(\"Expected a literal selector or genuine generated destination\");\n }\n\n const destination = destinations.get(selector);\n\n if (\n !destination ||\n destination.getSet() !== set ||\n !Object.hasOwn(set.records, destination.id)\n ) {\n throw new TypeError(\"Expected a destination from the same generated set\");\n }\n\n target = destination.id;\n }\n }\n\n return createUrl(set.destinations[target](), values as UrlValues<AnyRoute>);\n }\n\n return {\n params: view.params,\n search: view.search,\n data: view.data as Resource<DataOf<Target> | undefined>,\n link: ((...args: unknown[]) => router.parseUrl(url(args))) as Handle<\n Target,\n Selected,\n Set,\n References\n >[\"link\"],\n navigate: ((...args: unknown[]) => router.navigateByUrl(url(args))) as Handle<\n Target,\n Selected,\n Set,\n References\n >[\"navigate\"],\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loozo-angular-router-_generated.mjs","sources":["../../_generated/src/inputs.ts","../../_generated/src/callbacks.ts","../../_generated/src/handle.ts","../../_generated/src/index.ts","../../_generated/src/loozo-angular-router-_generated.ts"],"sourcesContent":["import type { ActivatedRouteSnapshot, PartialMatchRouteSnapshot } from \"@angular/router\";\nimport { codecPresence, routeMetadata, type AnyRoute } from \"@loozo/angular-router/_core\";\n\nexport interface RecordBinding {\n readonly definition: () => AnyRoute;\n readonly owners: readonly string[];\n}\nexport interface RouteSet {\n readonly records: Readonly<Record<string, RecordBinding>>;\n readonly destinations: Readonly<Record<string, () => AnyRoute>>;\n readonly absolute: Readonly<Record<string, string>>;\n readonly relative: Readonly<Record<string, Readonly<Record<string, string>>>>;\n}\nexport interface Parsed {\n readonly params: Readonly<Record<string, unknown>>;\n readonly search: Readonly<Record<string, unknown>>;\n}\nexport interface Job {\n readonly source: \"path\" | \"search\";\n readonly key: string;\n readonly raws: readonly string[];\n readonly array: boolean;\n readonly codec: { parse(raw: string): unknown };\n}\nexport interface Operation {\n readonly promise: Promise<Parsed>;\n outcome: { value: Parsed } | { error: Error } | undefined;\n}\n\nexport function hasIdentity(\n snapshot: Pick<ActivatedRouteSnapshot, \"routeConfig\">,\n id: string,\n): boolean {\n const data = snapshot.routeConfig?.data;\n\n return (\n !!data &&\n Object.hasOwn(data, \"__loozoAngularRouterRouteId\") &&\n data.__loozoAngularRouterRouteId === id\n );\n}\n\nexport function assertIdentity(\n snapshot: Pick<ActivatedRouteSnapshot, \"routeConfig\">,\n id: string,\n): void {\n if (!hasIdentity(snapshot, id)) {\n throw new Error(`Generated route wiring identity mismatch: ${id}`);\n }\n}\n\nexport function inputError(\n source: \"path\" | \"search\",\n key: string,\n reason: \"missing\" | \"repeated\" | \"invalid\",\n cause?: unknown,\n): Error {\n return Object.assign(new Error(`Invalid ${source} input ${key}: ${reason}`, { cause }), {\n source,\n key,\n reason,\n });\n}\n\nexport function validateRaw(\n source: \"path\" | \"search\",\n key: string,\n raws: readonly unknown[],\n array: boolean,\n): asserts raws is readonly string[] {\n if (!array && raws.length === 0) {\n throw inputError(source, key, \"missing\");\n }\n\n if (!array && raws.length > 1) {\n throw inputError(source, key, \"repeated\");\n }\n\n if (raws.some((raw) => typeof raw !== \"string\")) {\n throw inputError(source, key, \"invalid\", new TypeError(\"Raw input must be a decoded string\"));\n }\n}\n\nexport function pathJobs(definition: AnyRoute, url: readonly { path: string }[]): Job[] {\n const metadata = routeMetadata(definition);\n const local = new Map<string, Job>();\n\n for (let index = 0; index < metadata.localSegments.length; index += 1) {\n const segment = metadata.localSegments[index];\n\n if (segment.kind === \"static\") {\n continue;\n }\n\n let raws: unknown[] = [];\n const array = segment.kind === \"catchall\";\n\n if (array) {\n raws = url.slice(index).map((value) => value.path);\n } else if (index < url.length) {\n raws = [url[index].path];\n }\n\n validateRaw(\"path\", segment.name, raws, array);\n // Repeated local scalars intentionally use Angular's last positional occurrence.\n local.set(segment.name, {\n source: \"path\",\n key: segment.name,\n raws,\n array,\n codec: metadata.localParams[segment.name],\n });\n }\n\n return [...local.values()];\n}\n\nexport function searchJobs(\n definition: AnyRoute,\n snapshot: Pick<ActivatedRouteSnapshot, \"queryParamMap\">,\n): Job[] {\n const metadata = routeMetadata(definition);\n const jobs: Job[] = [];\n\n for (const key of Object.keys(metadata.search)) {\n const codec = metadata.search[key];\n const raws = snapshot.queryParamMap.getAll(key);\n\n if (raws.length === 0 && codecPresence(codec) === \"optional\") {\n continue;\n }\n\n validateRaw(\"search\", key, raws, false);\n jobs.push({ source: \"search\", key, raws, array: false, codec });\n }\n\n return jobs;\n}\n\nexport async function runJobs(jobs: readonly Job[]): Promise<Parsed> {\n const params: Record<string, unknown> = Object.create(null);\n const search: Record<string, unknown> = Object.create(null);\n const pending: Promise<void>[] = [];\n\n for (const job of jobs) {\n // Async boundaries convert every synchronous throw into an observed rejection.\n pending.push(\n (async () => {\n try {\n const elements: Promise<unknown>[] = [];\n\n for (const raw of job.raws) {\n elements.push((async () => job.codec.parse(raw))());\n }\n\n const values = await Promise.all(elements);\n let value = values[0];\n\n if (job.array) {\n value = Object.freeze(values);\n }\n\n if (job.source === \"path\") {\n params[job.key] = value;\n } else {\n search[job.key] = value;\n }\n } catch (cause) {\n throw inputError(job.source, job.key, \"invalid\", cause);\n }\n })(),\n );\n }\n\n await Promise.all(pending);\n\n return Object.freeze({ params: Object.freeze(params), search: Object.freeze(search) });\n}\n\nconst full = new WeakMap<object, WeakMap<object, Operation>>();\nconst matching = new WeakMap<object, WeakMap<object, Operation>>();\n\nfunction operation(\n cache: typeof full,\n definition: AnyRoute,\n snapshot: object,\n collect: () => Job[],\n): Operation {\n let snapshots = cache.get(definition);\n\n if (!snapshots) {\n snapshots = new WeakMap();\n cache.set(definition, snapshots);\n }\n\n const existing = snapshots.get(snapshot);\n\n if (existing) {\n return existing;\n }\n\n // Insert before application code can run; even synchronous reentry joins the same operation.\n const result: Operation = {\n promise: Promise.resolve().then(() => runJobs(collect())),\n outcome: undefined,\n };\n\n snapshots.set(snapshot, result);\n result.promise.then(\n (value) => {\n result.outcome = { value };\n },\n (cause) => {\n let error = cause;\n\n if (!(error instanceof Error)) {\n error = new Error(\"Route input failure\", { cause });\n }\n\n result.outcome = { error };\n },\n );\n\n return result;\n}\n\nexport function fullOperation(\n set: RouteSet,\n id: string,\n snapshot: ActivatedRouteSnapshot,\n): Operation {\n assertIdentity(snapshot, id);\n\n const binding = set.records[id];\n\n return operation(full, binding.definition(), snapshot, () => {\n const jobs: Job[] = [];\n\n for (const ownerId of binding.owners) {\n const definition = set.records[ownerId].definition();\n\n // Pathless/static owners contribute no positional input. Effective search belongs\n // to this complete future record; inherited data is never positional authority.\n if (!routeMetadata(definition).localSegments.some((segment) => segment.kind !== \"static\")) {\n continue;\n }\n\n const owner = [...snapshot.pathFromRoot]\n .reverse()\n .find((record) => hasIdentity(record, ownerId));\n\n if (!owner) {\n throw new Error(`Generated route ancestor missing: ${ownerId}`);\n }\n\n assertIdentity(owner, ownerId);\n jobs.push(...pathJobs(definition, owner.url));\n }\n\n jobs.push(...searchJobs(binding.definition(), snapshot));\n\n return jobs;\n });\n}\n\nexport function parseInputs(\n set: RouteSet,\n id: string,\n snapshot: ActivatedRouteSnapshot,\n): Promise<Parsed> {\n return fullOperation(set, id, snapshot).promise;\n}\n\nexport function matchingInputs(\n set: RouteSet,\n id: string,\n snapshot: PartialMatchRouteSnapshot,\n): Promise<Parsed> {\n assertIdentity(snapshot, id);\n\n const definition = set.records[id].definition();\n\n return operation(matching, definition, snapshot, () => [\n ...pathJobs(definition, snapshot.url),\n ...searchJobs(definition, snapshot),\n ]).promise;\n}\n","import { Injector, inject, runInInjectionContext } from \"@angular/core\";\nimport {\n Router,\n type Route,\n type ActivatedRouteSnapshot,\n type RouterStateSnapshot,\n type GuardResult,\n type CanActivateFn,\n type CanActivateChildFn,\n type CanMatchFn,\n type ResolveFn,\n type RedirectFunction,\n} from \"@angular/router\";\nimport { Observable, from, isObservable, type ObservableInput } from \"rxjs\";\nimport { routeMetadata, codecPresence, type AnyRoute } from \"@loozo/angular-router/_core\";\nimport {\n assertIdentity,\n hasIdentity,\n parseInputs,\n matchingInputs,\n runJobs,\n validateRaw,\n type Job,\n type RouteSet,\n} from \"./inputs.js\";\n\nfunction isPromiseResult<T>(value: unknown): value is Promise<T> {\n return !!value && typeof (value as Promise<T>).then === \"function\";\n}\n\nfunction bridge<T>(\n inputs: () => Promise<unknown>,\n callback: (inputs: any) => T | ObservableInput<T>,\n): Observable<T> {\n const injector = inject(Injector);\n\n return new Observable((subscriber) => {\n let subscription: { unsubscribe(): void } | undefined;\n\n inputs().then(\n (value) => {\n if (subscriber.closed) {\n return;\n }\n\n try {\n const result = runInInjectionContext(injector, () => callback(value));\n\n if (isObservable(result)) {\n subscription = result.subscribe(subscriber);\n } else if (isPromiseResult<T>(result)) {\n subscription = from(Promise.resolve(result)).subscribe(subscriber);\n } else {\n subscriber.next(result as T);\n subscriber.complete();\n }\n } catch (error) {\n subscriber.error(error);\n }\n },\n (error) => subscriber.error(error),\n );\n\n return () => subscription?.unsubscribe();\n });\n}\n\nexport function callbacks(\n set: RouteSet,\n id: string,\n): Pick<Route, \"canActivate\" | \"canActivateChild\" | \"canMatch\" | \"resolve\"> {\n const config = routeMetadata(set.records[id].definition()).config;\n const result: Pick<Route, \"canActivate\" | \"canActivateChild\" | \"canMatch\" | \"resolve\"> = {};\n const activate = config.canActivate as readonly ((...args: any[]) => any)[] | undefined;\n\n if (activate) {\n result.canActivate = activate.map(\n (callback): CanActivateFn =>\n (snapshot, state) => {\n assertIdentity(snapshot, id);\n\n return bridge<GuardResult>(\n () => parseInputs(set, id, snapshot),\n (inputs) => callback(inputs, snapshot, state),\n );\n },\n );\n }\n\n const children = config.canActivateChild as readonly ((...args: any[]) => any)[] | undefined;\n\n if (children) {\n result.canActivateChild = children.map(\n (callback): CanActivateChildFn =>\n (child, state) => {\n let parent: ActivatedRouteSnapshot | undefined;\n\n // The native ancestry includes child itself; only proper ancestors can declare this guard.\n for (let index = child.pathFromRoot.length - 2; index >= 0; index -= 1) {\n const ancestor = child.pathFromRoot[index];\n\n if (hasIdentity(ancestor, id)) {\n parent = ancestor;\n\n break;\n }\n }\n\n if (!parent) {\n throw new Error(`Generated guard ancestor missing: ${id}`);\n }\n\n assertIdentity(parent, id);\n\n return bridge<GuardResult>(\n () => parseInputs(set, id, parent),\n (inputs) => callback(inputs, child, state),\n );\n },\n );\n }\n\n const matching = config.canMatch as readonly ((...args: any[]) => any)[] | undefined;\n\n if (matching) {\n result.canMatch = matching.map(\n (callback): CanMatchFn =>\n (route, segments, snapshot) => {\n assertIdentity(snapshot, id);\n\n return bridge<GuardResult>(\n () => matchingInputs(set, id, snapshot),\n (inputs) => callback(inputs, route, segments, snapshot),\n );\n },\n );\n }\n\n const resolvers = config.resolve as\n | Record<\n PropertyKey,\n (inputs: unknown, snapshot: ActivatedRouteSnapshot, state: RouterStateSnapshot) => any\n >\n | undefined;\n\n if (resolvers) {\n const resolve: Record<PropertyKey, ResolveFn<unknown>> = Object.create(null);\n\n for (const key of Reflect.ownKeys(resolvers)) {\n resolve[key] = (snapshot, state) => {\n assertIdentity(snapshot, id);\n\n return bridge(\n () => parseInputs(set, id, snapshot),\n (inputs) => resolvers[key](inputs, snapshot, state),\n );\n };\n }\n\n result.resolve = resolve;\n }\n\n return result;\n}\n\nexport function redirect(definition: () => AnyRoute): RedirectFunction {\n return async (snapshot) => {\n const router = inject(Router);\n const source = routeMetadata(definition());\n const config = source.config.redirect as {\n to: AnyRoute;\n params: Record<string, string>;\n search: { mode: string; values?: Record<string, unknown> };\n fragment: { mode: string; value?: string };\n };\n const target = routeMetadata(config.to);\n const raw = new Map<string, { values: string[]; array: boolean }>();\n\n for (let index = 0; index < source.segments.length; index += 1) {\n const segment = source.segments[index];\n\n if (segment.kind === \"scalar\") {\n raw.set(segment.name, {\n values: snapshot.url.slice(index, index + 1).map((value) => value.path),\n array: false,\n });\n } else if (segment.kind === \"catchall\") {\n raw.set(segment.name, {\n values: snapshot.url.slice(index).map((value) => value.path),\n array: true,\n });\n }\n }\n\n const jobs: Job[] = [];\n\n for (const key of new Set(Object.values(config.params))) {\n const input = raw.get(key);\n const raws = input?.values ?? [];\n const array = input?.array ?? false;\n\n validateRaw(\"path\", key, raws, array);\n jobs.push({ source: \"path\", key, raws, array, codec: source.params[key] });\n }\n\n if (config.search.mode === \"preserve\") {\n for (const key of Object.keys(target.search)) {\n const codec = target.search[key];\n const raws = snapshot.queryParamMap.getAll(key);\n\n if (raws.length === 0 && codecPresence(codec) === \"optional\") {\n continue;\n }\n\n validateRaw(\"search\", key, raws, false);\n jobs.push({ source: \"search\", key, raws, array: false, codec });\n }\n }\n\n // Every demand is prechecked. Async wrappers observe even synchronous preserved-search\n // throws after earlier source jobs launch, without detaching those later rejections.\n const logical = await runJobs(jobs);\n const params: Record<string, unknown> = Object.create(null);\n\n for (const [key, sourceKey] of Object.entries(config.params)) {\n params[key] = logical.params[sourceKey];\n }\n\n const path = createUrlForPath(config.to, params);\n const replacement: Record<string, string> = Object.create(null);\n\n if (config.search.mode === \"replace\") {\n const values = config.search.values!;\n\n for (const key of Object.keys(target.search).sort()) {\n const codec = target.search[key];\n\n if (\n codecPresence(codec) === \"optional\" &&\n (!Object.hasOwn(values, key) || values[key] === undefined)\n ) {\n continue;\n }\n\n const raw = codec.stringify(values[key]);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(`Redirect search codec must stringify to a string: ${key}`);\n }\n\n replacement[key] = raw;\n }\n }\n\n // No native conversion before demanded codecs and destination stringification succeed.\n const tree = router.parseUrl(path);\n\n if (config.search.mode === \"preserve\") {\n tree.queryParams = { ...snapshot.queryParams };\n } else if (config.search.mode === \"replace\") {\n tree.queryParams = replacement;\n }\n\n if (config.fragment.mode === \"preserve\") {\n tree.fragment = snapshot.fragment;\n } else if (config.fragment.mode === \"replace\") {\n tree.fragment = config.fragment.value!;\n }\n\n return tree;\n };\n}\n\nfunction createUrlForPath(definition: AnyRoute, params: Record<string, unknown>): string {\n const metadata = routeMetadata(definition);\n const parts: string[] = [];\n\n function encode(raw: string): string {\n if (raw === \"\" || raw === \".\" || raw === \"..\") {\n throw new TypeError(\"Invalid redirect path value\");\n }\n\n return encodeURIComponent(raw).replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\");\n }\n\n for (const segment of metadata.segments) {\n if (segment.kind === \"static\") {\n parts.push(encode(segment.text));\n } else if (segment.kind === \"scalar\") {\n const raw = metadata.params[segment.name].stringify(params[segment.name]);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(\"Redirect codec must stringify to a string\");\n }\n\n parts.push(encode(raw));\n } else {\n const values = params[segment.name];\n\n if (!Array.isArray(values)) {\n throw new TypeError(\"Redirect catchall requires an array\");\n }\n\n for (const value of values) {\n const raw = metadata.params[segment.name].stringify(value);\n\n if (typeof raw !== \"string\") {\n throw new TypeError(\"Redirect codec must stringify to a string\");\n }\n\n parts.push(encode(raw));\n }\n }\n }\n\n return `/${parts.join(\"/\")}`;\n}\n","import {\n DestroyRef,\n PendingTasks,\n inject,\n resourceFromSnapshots,\n signal,\n type ResourceSnapshot,\n} from \"@angular/core\";\nimport {\n ActivatedRoute,\n Router,\n NavigationStart,\n NavigationEnd,\n NavigationCancel,\n NavigationSkipped,\n NavigationError,\n NavigationCancellationCode,\n type ActivatedRouteSnapshot,\n} from \"@angular/router\";\nimport { routeMetadata } from \"@loozo/angular-router/_core\";\nimport {\n assertIdentity,\n fullOperation,\n type Operation,\n type Parsed,\n type RouteSet,\n} from \"./inputs.js\";\n\n// Shared parsing has no view/task lifetime. Each handle owns its visibility and relevance.\nexport function observeRoute(set: RouteSet, id: string) {\n const activated = inject(ActivatedRoute);\n const router = inject(Router);\n const destroy = inject(DestroyRef);\n const tasks = inject(PendingTasks);\n\n assertIdentity(activated.snapshot, id);\n\n const paired = signal<ResourceSnapshot<Parsed | undefined>>({\n status: \"loading\",\n value: undefined,\n });\n const data = signal<ResourceSnapshot<Readonly<Record<PropertyKey, unknown>> | undefined>>({\n status: \"loading\",\n value: undefined,\n });\n let survivor: ActivatedRouteSnapshot | undefined;\n let work: Operation | undefined;\n let commitment = -1;\n let pending: number | undefined;\n let visible = false;\n let destroyed = false;\n let release: (() => void) | undefined;\n let acquiring = false;\n\n function track(): void {\n if (release || destroyed || acquiring) {\n return;\n }\n\n // Native add synchronously notifies stability observers before returning ownership.\n acquiring = true;\n\n const cleanup = tasks.add();\n\n acquiring = false;\n\n if (destroyed) {\n cleanup();\n\n return;\n }\n\n release = cleanup;\n }\n\n function untrack(): void {\n const cleanup = release;\n\n release = undefined;\n cleanup?.();\n }\n\n function publish(): void {\n if (!visible || destroyed || !work) {\n return;\n }\n\n if (!work.outcome) {\n paired.set({ status: \"loading\", value: undefined });\n track();\n\n return;\n }\n\n if (\"value\" in work.outcome) {\n paired.set({ status: \"resolved\", value: work.outcome.value });\n } else {\n paired.set({ status: \"error\", error: work.outcome.error });\n }\n\n // A synchronous paired write always precedes package task removal.\n untrack();\n }\n\n function adopt(snapshot: ActivatedRouteSnapshot): void {\n assertIdentity(snapshot, id);\n\n if (snapshot === survivor) {\n return;\n }\n\n survivor = snapshot;\n\n const joined = fullOperation(set, id, snapshot);\n\n work = joined;\n\n if (!joined.outcome) {\n track();\n }\n\n joined.promise.then(\n () => {\n if (work === joined) {\n publish();\n }\n },\n () => {\n if (work === joined) {\n publish();\n }\n },\n );\n }\n\n function reconcile(): void {\n const successful = router.lastSuccessfulNavigation();\n\n if (successful && successful.id > commitment) {\n commitment = successful.id;\n adopt(activated.snapshot);\n }\n }\n\n function restore(): void {\n if (destroyed) {\n return;\n }\n\n reconcile();\n\n if (!survivor) {\n adopt(activated.snapshot);\n }\n\n const local: Record<PropertyKey, unknown> = Object.create(null);\n const resolvers = routeMetadata(set.records[id].definition()).config.resolve ?? {};\n\n for (const key of Reflect.ownKeys(resolvers)) {\n if (Object.hasOwn(survivor!.data, key)) {\n local[key] = survivor!.data[key];\n }\n }\n\n data.set({ status: \"resolved\", value: Object.freeze(local) });\n visible = true;\n publish();\n }\n\n function idleHandoff(): void {\n queueMicrotask(() => {\n if (destroyed || visible) {\n return;\n }\n\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (!current || current.id === successful?.id) {\n pending = undefined;\n restore();\n }\n });\n }\n\n function eligible(id: number): boolean {\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (current && current.id > id && current.id !== successful?.id) {\n return false;\n }\n\n return pending === undefined || pending === id;\n }\n\n // Subscribe before reading native phase: constructors can run inside event delivery.\n const subscription = router.events.subscribe((event) => {\n if (destroyed) {\n return;\n }\n\n if (event instanceof NavigationStart) {\n pending = event.id;\n visible = false;\n reconcile();\n paired.set({ status: \"loading\", value: undefined });\n data.set({ status: \"loading\", value: undefined });\n } else if (event instanceof NavigationEnd) {\n // Even an old End may expose a newer true survivor; it cannot settle a newer Start.\n reconcile();\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationCancel) {\n reconcile();\n\n if (\n event.code === NavigationCancellationCode.Redirect ||\n event.code === NavigationCancellationCode.SupersededByNewNavigation\n ) {\n return;\n }\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationSkipped) {\n reconcile();\n\n if (eligible(event.id)) {\n pending = undefined;\n restore();\n }\n } else if (event instanceof NavigationError && eligible(event.id)) {\n reconcile();\n pending = undefined;\n visible = false;\n\n let error = event.error;\n\n if (!(error instanceof Error)) {\n error = new Error(\"Navigation failure\", { cause: event.error });\n }\n\n paired.set({ status: \"error\", error });\n data.set({ status: \"error\", error });\n untrack();\n }\n });\n\n destroy.onDestroy(() => {\n destroyed = true;\n visible = false;\n subscription.unsubscribe();\n untrack();\n });\n\n // Synchronous task handoff prevents whenStable resolving before a missed-terminal microtask.\n track();\n\n if (!destroyed) {\n const current = router.currentNavigation();\n const successful = router.lastSuccessfulNavigation();\n\n if (!current || current.id === successful?.id) {\n restore();\n } else {\n pending = current.id;\n idleHandoff();\n }\n }\n\n function project(key: \"params\" | \"search\"): ResourceSnapshot<any> {\n const state = paired();\n\n if (state.status === \"error\") {\n return state;\n }\n\n return { status: state.status, value: state.value?.[key] };\n }\n\n return {\n params: resourceFromSnapshots(() => project(\"params\")),\n search: resourceFromSnapshots(() => project(\"search\")),\n data: resourceFromSnapshots(() => data()),\n };\n}\n","export { callbacks, redirect } from \"./callbacks.js\";\nexport { assertIdentity, parseInputs } from \"./inputs.js\";\nexport type { RecordBinding, RouteSet } from \"./inputs.js\";\n\nimport { inject, type Resource } from \"@angular/core\";\nimport { Router, type UrlTree } from \"@angular/router\";\nimport {\n createUrl,\n routeMetadata,\n type AnyRoute,\n type ParamsOf,\n type SearchOf,\n type UrlValues,\n} from \"@loozo/angular-router/_core\";\nimport { observeRoute } from \"./handle.js\";\nimport type { RouteSet } from \"./inputs.js\";\n\ndeclare const destinationBrand: unique symbol;\n\n/**\n * An inert nominal reference exported as `destination` by a route-local facade.\n *\n * @remarks\n * Use the exported object with a handle's link/navigate methods; no injection\n * context or target activation is needed. It selects its exact declaration,\n * not a canonical pathless winner. Only references from the caller's generated\n * set are accepted. Copies, spreads, fakes and authored routes are not references.\n * Do not construct this type or pass it to the root createUrl function.\n *\n * @typeParam Target - The referenced route's input and fragment schema.\n * @typeParam Set - The generator's nominal route-set identity.\n * @typeParam Id - The exact generated declaration identity.\n */\nexport declare class Destination<\n Target extends AnyRoute,\n Set = unknown,\n Id extends string = string,\n> {\n // Type-only identity, intentionally not read; object spreads must lose this member.\n // oxlint-disable-next-line no-unused-private-class-members\n readonly #nominal: void;\n readonly [destinationBrand]: { readonly target: Target; readonly set: Set; readonly id: Id };\n}\n\nconst destinations = new WeakMap<object, { getSet: () => RouteSet; id: string }>();\n\nexport function createDestination<Target extends AnyRoute, Set, Id extends string>(\n getSet: () => RouteSet,\n id: Id,\n): Destination<Target, Set, Id> {\n const destination = Object.freeze({});\n\n destinations.set(destination, { getSet, id });\n\n return destination as Destination<Target, Set, Id>;\n}\n\ntype DataOf<Target> = Target extends { readonly __data?: infer Data } ? Readonly<Data> : never;\ntype IsUnion<Value, Whole = Value> = Value extends unknown\n ? [Whole] extends [Value]\n ? false\n : true\n : never;\n\n/**\n * The noncallable typed handle returned by a colocated `injectRoute()` facade.\n *\n * @remarks\n * Obtain it in an Angular injection context for the exact generated activated\n * record. Params/search parse together; data contains only local resolver results,\n * not static/ancestor data or title. Resources are native readonly Angular\n * Resources: use hasValue before value access; error-state value reads throw.\n *\n * Navigation hides old values. Cancellation/same-URL skip restores the survivor\n * without reparsing; obsolete work cannot publish. Relevant parsing participates\n * in Angular stability until publication, error, replacement or destruction.\n * Codecs are not abortable and there is no package timeout or resolved-data cache.\n *\n * Selectors are single known authored literals, not concrete URLs or string\n * unions. `.` is exact-current; other absolute/relative selections use generated\n * canonical targets. Relative climbs count URL-template segments, not parent\n * edges. Catchall origins permit exact-current, absolute and reference targets,\n * not depth-dependent relative traversal. Every call supplies all target values;\n * there is no current-value reuse, extras argument or implicit query merge.\n *\n * @typeParam Target - The bound declaration's schema.\n * @typeParam Selected - Statically admitted literal selectors and target schemas.\n * @typeParam Set - The generator's nominal route-set identity.\n * @typeParam References - Exact declarations addressable by same-set references.\n *\n * @example\n * ```ts\n * import { injectRoute } from \"./route.generated.js\";\n * import { destination as report } from \"../report/route.generated.js\";\n *\n * const route = injectRoute(); // Inside an Angular injection context.\n * const link = route.link(report, { params: { reportId: 42 } });\n * // Bind link to Angular RouterLink, or call route.navigate with the same values.\n * ```\n */\nexport interface Handle<\n Target extends AnyRoute,\n Selected extends Record<string, AnyRoute> = {},\n Set = unknown,\n References extends Record<string, AnyRoute> = {},\n> {\n /** Effective positional params; undefined while pending or without a value. */\n readonly params: Resource<Readonly<ParamsOf<Target>> | undefined>;\n /** Effective declared search; paired with params from the same parse operation. */\n readonly search: Resource<Readonly<SearchOf<Target>> | undefined>;\n /** Own native resolver results only; settles independently of paired inputs. */\n readonly data: Resource<DataOf<Target> | undefined>;\n /**\n * Creates a native UrlTree for this exact declaration without navigating.\n *\n * @param values - Explicit effective params/search and optional own fragment.\n * @returns Router.parseUrl's result, suitable for Angular RouterLink.\n * @throws Synchronous URL validation, encoding or stringifier failures before Angular.\n */\n link<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): UrlTree;\n /**\n * Creates a UrlTree for the exact bound declaration, not its pathless winner.\n *\n * @param selector - The exact-current literal `.`.\n * @param values - Explicit values for this declaration, with no current-input reuse.\n * @returns Router.parseUrl's result without navigating.\n * @throws Synchronous URL validation, encoding or stringifier failures before Angular.\n */\n link<Keys extends keyof SearchOf<Target> = never>(\n selector: \".\",\n values: UrlValues<Target, Keys>,\n ): UrlTree;\n /**\n * Creates a UrlTree for a statically admitted absolute/relative authored selector.\n *\n * @param selector - A single known template literal, never a concrete URL.\n * @param values - The selected target's complete explicit values.\n * @returns Router.parseUrl's result without navigating.\n * @throws Synchronously for unknown selectors or invalid URL values.\n */\n link<\n const Selector extends keyof Selected & string,\n Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never,\n >(\n selector: Selector & (IsUnion<Selector> extends true ? never : unknown),\n values: UrlValues<NoInfer<Selected[Selector]>, Keys>,\n ): UrlTree;\n /**\n * Creates a UrlTree for a generated reference's own exact declaration.\n *\n * @param selector - A genuine destination exported by a facade in this route set.\n * @param values - The referenced declaration's complete explicit values.\n * @returns Router.parseUrl's result without navigating.\n * @throws Synchronously for foreign/fake references or invalid URL values.\n */\n link<\n const Id extends keyof References & string,\n Keys extends keyof SearchOf<NoInfer<References[Id]>> = never,\n >(\n selector: Destination<NoInfer<References[Id]>, Set, Id> &\n (IsUnion<Id> extends true ? never : unknown),\n values: UrlValues<NoInfer<References[Id]>, Keys>,\n ): UrlTree;\n /**\n * Navigates to this exact declaration via Router.navigateByUrl.\n *\n * @param values - Explicit effective params/search and optional own fragment.\n * @returns Angular's identical Promise; Angular owns skips, redirects and failures.\n * @throws Synchronous URL validation, encoding or stringifier failures before Angular.\n */\n navigate<Keys extends keyof SearchOf<Target> = never>(\n values: UrlValues<Target, Keys>,\n ): Promise<boolean>;\n /**\n * Navigates to the exact bound declaration, not its pathless winner.\n *\n * @param selector - The exact-current literal `.`.\n * @param values - Explicit values for this declaration, with no current-input reuse.\n * @returns Angular's identical Router.navigateByUrl Promise.\n * @throws Synchronous URL validation, encoding or stringifier failures before Angular.\n */\n navigate<Keys extends keyof SearchOf<Target> = never>(\n selector: \".\",\n values: UrlValues<Target, Keys>,\n ): Promise<boolean>;\n /**\n * Navigates to a statically admitted absolute/relative authored selector.\n *\n * @param selector - A single known template literal, never a concrete URL.\n * @param values - The selected target's complete explicit values.\n * @returns Angular's identical Router.navigateByUrl Promise.\n * @throws Synchronously for unknown selectors or invalid URL values.\n */\n navigate<\n const Selector extends keyof Selected & string,\n Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never,\n >(\n selector: Selector & (IsUnion<Selector> extends true ? never : unknown),\n values: UrlValues<NoInfer<Selected[Selector]>, Keys>,\n ): Promise<boolean>;\n /**\n * Navigates to a generated reference's own exact declaration.\n *\n * @param selector - A genuine destination exported by a facade in this route set.\n * @param values - The referenced declaration's complete explicit values.\n * @returns Angular's identical Router.navigateByUrl Promise.\n * @throws Synchronously for foreign/fake references or invalid URL values.\n */\n navigate<\n const Id extends keyof References & string,\n Keys extends keyof SearchOf<NoInfer<References[Id]>> = never,\n >(\n selector: Destination<NoInfer<References[Id]>, Set, Id> &\n (IsUnion<Id> extends true ? never : unknown),\n values: UrlValues<NoInfer<References[Id]>, Keys>,\n ): Promise<boolean>;\n}\n\nexport function nativeOptions(definition: AnyRoute): Record<string, unknown> {\n const config = routeMetadata(definition).config;\n const options: Record<string, unknown> = {};\n\n for (const key of [\"providers\", \"title\", \"data\", \"canDeactivate\", \"runGuardsAndResolvers\"]) {\n if (Object.hasOwn(config, key)) {\n options[key] = config[key];\n }\n }\n\n return options;\n}\n\nexport function injectGeneratedRoute<\n Target extends AnyRoute,\n Selected extends Record<string, AnyRoute>,\n Set,\n References extends Record<string, AnyRoute>,\n>(set: RouteSet, id: string): Handle<Target, Selected, Set, References> {\n const router = inject(Router);\n const view = observeRoute(set, id);\n\n function url(args: readonly unknown[]): string {\n if (args.length !== 1 && args.length !== 2) {\n throw new TypeError(\"Expected values or a selected destination and values\");\n }\n\n let target = id;\n let values = args[0];\n\n if (args.length === 2) {\n const selector = args[0];\n\n values = args[1];\n\n if (typeof selector === \"string\") {\n if (selector !== \".\") {\n if (Object.hasOwn(set.absolute, selector)) {\n target = set.absolute[selector];\n } else if (Object.hasOwn(set.relative[id], selector)) {\n target = set.relative[id][selector];\n } else {\n throw new TypeError(`Unknown generated selector: ${selector}`);\n }\n }\n } else {\n if (typeof selector !== \"object\" || selector === null) {\n throw new TypeError(\"Expected a literal selector or genuine generated destination\");\n }\n\n const destination = destinations.get(selector);\n\n if (\n !destination ||\n destination.getSet() !== set ||\n !Object.hasOwn(set.records, destination.id)\n ) {\n throw new TypeError(\"Expected a destination from the same generated set\");\n }\n\n target = destination.id;\n }\n }\n\n return createUrl(set.destinations[target](), values as UrlValues<AnyRoute>);\n }\n\n return {\n params: view.params,\n search: view.search,\n data: view.data as Resource<DataOf<Target> | undefined>,\n link: ((...args: unknown[]) => router.parseUrl(url(args))) as Handle<\n Target,\n Selected,\n Set,\n References\n >[\"link\"],\n navigate: ((...args: unknown[]) => router.navigateByUrl(url(args))) as Handle<\n Target,\n Selected,\n Set,\n References\n >[\"navigate\"],\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,18 @@
1
1
  export { booleanParam, createUrl, defineRoute, enumParam, nullableSearchParam, numberParam, optionalSearchParam, stringParam } from '@loozo/angular-router/_core';
2
2
 
3
+ /**
4
+ * Typed declarations, scalar codecs and synchronous URLs for Angular's native router.
5
+ *
6
+ * @remarks
7
+ * Install generated `routes` with Angular's provideRouter and import the colocated
8
+ * `injectRoute`/`destination` facade for typed resources, links and navigation.
9
+ * Generate through the application/serve Architect companions. The `_core` and
10
+ * `_generated` subpaths are internal package/generator coupling, not supported
11
+ * application metadata or graph APIs.
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+
3
16
  /**
4
17
  * Generated bundle index. Do not edit.
5
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loozo-angular-router.mjs","sources":["../../src/loozo-angular-router.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;AAEG"}
1
+ {"version":3,"file":"loozo-angular-router.mjs","sources":["../../src/index.ts","../../src/loozo-angular-router.ts"],"sourcesContent":["/**\n * Typed declarations, scalar codecs and synchronous URLs for Angular's native router.\n *\n * @remarks\n * Install generated `routes` with Angular's provideRouter and import the colocated\n * `injectRoute`/`destination` facade for typed resources, links and navigation.\n * Generate through the application/serve Architect companions. The `_core` and\n * `_generated` subpaths are internal package/generator coupling, not supported\n * application metadata or graph APIs.\n *\n * @packageDocumentation\n */\nexport {\n defineRoute,\n createUrl,\n stringParam,\n numberParam,\n booleanParam,\n enumParam,\n optionalSearchParam,\n nullableSearchParam,\n} from \"@loozo/angular-router/_core\";\nexport type { Route, ParamCodec } from \"@loozo/angular-router/_core\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;;;;;;;;;;AAWG;;ACXH;;AAEG"}
@@ -3,7 +3,13 @@ export function validateOptions(value, serve) {
3
3
  if (!value || typeof value !== "object" || Array.isArray(value)) {
4
4
  throw new Error("Companion options must be an object");
5
5
  }
6
- const allowed = new Set(["tsconfig", "scanDirectories", "outDirectory", "delegateTarget"]);
6
+ const allowed = new Set([
7
+ "tsconfig",
8
+ "scanDirectories",
9
+ "outDirectory",
10
+ "delegateTarget",
11
+ "autoDefineRoutes",
12
+ ]);
7
13
  if (!serve) {
8
14
  allowed.add("check");
9
15
  }
@@ -18,9 +24,29 @@ export function validateOptions(value, serve) {
18
24
  }
19
25
  }
20
26
  if (!Array.isArray(value.scanDirectories) ||
21
- value.scanDirectories.length === 0 ||
27
+ value.scanDirectories.length !== 1 ||
22
28
  value.scanDirectories.some((scan) => typeof scan !== "string" || scan.trim() === "")) {
23
- throw new Error("scanDirectories must contain at least one nonempty string");
29
+ throw new Error("scanDirectories must contain exactly one nonempty string");
30
+ }
31
+ if (value.autoDefineRoutes !== undefined) {
32
+ const auto = value.autoDefineRoutes;
33
+ if (!auto || typeof auto !== "object" || Array.isArray(auto)) {
34
+ throw new Error("autoDefineRoutes must be an object");
35
+ }
36
+ for (const key of Object.keys(auto)) {
37
+ if (key !== "filename") {
38
+ throw new Error(`Unknown autoDefineRoutes option: ${key}`);
39
+ }
40
+ }
41
+ if (auto.filename !== undefined) {
42
+ const filename = auto.filename;
43
+ if (typeof filename !== "string" ||
44
+ !/^[A-Za-z0-9_$][A-Za-z0-9_$.-]*\.ts$/.test(filename) ||
45
+ filename.endsWith(".d.ts") ||
46
+ ["route.generated.ts", "routes.generated.ts", "destinations.generated.ts"].includes(filename)) {
47
+ throw new Error("autoDefineRoutes.filename must be a simple implementation .ts basename, not a generated artifact");
48
+ }
49
+ }
24
50
  }
25
51
  if (Object.hasOwn(value, "check") && typeof value.check !== "boolean") {
26
52
  throw new Error("check must be a boolean");
@@ -67,8 +67,8 @@ export default createBuilder((options, context) => new Observable((subscriber) =
67
67
  if (stopped) {
68
68
  return;
69
69
  }
70
- const configFile = await access.resolve(options.tsconfig);
71
- const roots = await Promise.all(options.scanDirectories.map((scan) => access.resolve(resolve(dirname(configFile), scan))));
70
+ const configFile = access.resolve(options.tsconfig);
71
+ const roots = [access.resolve(resolve(dirname(configFile), options.scanDirectories[0]))];
72
72
  if (stopped) {
73
73
  return;
74
74
  }
@@ -165,7 +165,12 @@ export function emit(sources, selected) {
165
165
  for (const group of [before, ordinary, after]) {
166
166
  group.sort(order);
167
167
  }
168
- routes.push(`\nexport const routes: Routes = [${[...before, ...ordinary, ...after].map(record).join(",\n")}];\n`);
168
+ routes.push(`
169
+ /**
170
+ * Generated native Angular route configuration; install with provideRouter(routes).
171
+ * Regenerate through the router's Architect companions instead of editing this file.
172
+ */
173
+ export const routes: Routes = [${[...before, ...ordinary, ...after].map(record).join(",\n")}];\n`);
169
174
  desired.set(routesFile, routes.join("\n"));
170
175
  const retained = declarations.filter((declaration) => declaration.retained);
171
176
  if (retained.length === 0) {
@@ -202,7 +207,9 @@ export type Selected<Id extends keyof RelativeTargets> = {
202
207
  Definitions[(Expression extends keyof AbsoluteTargets ? AbsoluteTargets[Expression] :
203
208
  Expression extends keyof RelativeTargets[Id] ? RelativeTargets[Id][Expression] : never) & keyof Definitions];
204
209
  };
210
+ /** A declaration-bound handle; obtain it through its colocated injectRoute facade. */
205
211
  export type Handle<Id extends keyof RelativeTargets> = GeneratedHandle<Definitions[Id], Selected<Id>, typeof setIdentity, Pick<Definitions, keyof RelativeTargets>>;
212
+ /** A same-set nominal reference; use the destination exported by a colocated facade. */
206
213
  export type Destination<Id extends keyof RelativeTargets> = GeneratedDestination<Definitions[Id], typeof setIdentity, Id>;
207
214
  const routeSet: RouteSet = { records: {`);
208
215
  for (const declaration of retained) {
@@ -235,7 +242,25 @@ const routeSet: RouteSet = { records: {`);
235
242
  "import { createDestination, injectGeneratedRoute } from '@loozo/angular-router/_generated';",
236
243
  `import { getRouteSet, type Destination, type Handle } from ${JSON.stringify(specifier(facade, sharedFile))};`,
237
244
  "export { defineRoute } from '@loozo/angular-router';",
245
+ `/**
246
+ * Inert reference to this exact declaration for same-set handle link/navigate calls.
247
+ * No injection context is required; copies and foreign-set references are invalid.
248
+ * This is not an authored route and cannot be passed to the root createUrl function.
249
+ */`,
238
250
  `export const destination: Destination<${JSON.stringify(declaration.id)}> = createDestination(() => getRouteSet(), ${JSON.stringify(declaration.id)});`,
251
+ `/**
252
+ * Injects a typed handle bound to this exact generated activated route record.
253
+ *
254
+ * @remarks
255
+ * Call in an Angular injection context. The handle exposes readonly native
256
+ * params/search/data Resources and destination-typed link/navigate methods.
257
+ * Data includes local resolver results only, not static or inherited data.
258
+ * All navigation values are explicit; current inputs are never reused implicitly.
259
+ *
260
+ * @returns A noncallable handle for this declaration.
261
+ * @throws A synchronous wiring error outside an injection context or when the
262
+ * activated record does not carry this declaration's own generated identity.
263
+ */`,
239
264
  `export function injectRoute(): Handle<${JSON.stringify(declaration.id)}> { return injectGeneratedRoute(getRouteSet(), ${JSON.stringify(declaration.id)}); }`,
240
265
  "",
241
266
  ];
@@ -1,5 +1,5 @@
1
1
  import { lstat, readdir, readFile, realpath } from "node:fs/promises";
2
- import { mkdirSync, writeFileSync, unlinkSync } from "node:fs";
2
+ import { lstatSync, realpathSync, mkdirSync, writeFileSync, unlinkSync } from "node:fs";
3
3
  import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
4
4
  export const markers = {
5
5
  "routes.generated.ts": "// @loozo/angular-router routegen: owned routes.generated.ts",
@@ -26,21 +26,31 @@ export async function workspacePaths(workspace) {
26
26
  const canonical = await realpath(workspace);
27
27
  return {
28
28
  canonical,
29
- async resolve(path) {
30
- let absolute = resolve(workspace, path);
29
+ // Config matching needs synchronous directory-entry lookup. The optional
30
+ // directory leaf uses the same restricted prefix policy as file ancestors.
31
+ resolve(path, directory = false) {
32
+ const absolute = resolve(workspace, path);
33
+ // Inside the workspace every link is a suffix, even a link back to its root.
34
+ // Preserve that spelling for audit; only external access aliases may map.
35
+ if (contains(canonical, absolute)) {
36
+ return absolute;
37
+ }
31
38
  if (contains(workspace, absolute)) {
32
- absolute = resolve(canonical, relative(workspace, absolute));
39
+ return resolve(canonical, relative(workspace, absolute));
33
40
  }
34
41
  const ancestors = [];
35
42
  let current = dirname(absolute);
43
+ if (directory) {
44
+ current = absolute;
45
+ }
36
46
  while (dirname(current) !== current) {
37
47
  ancestors.unshift(current);
38
48
  current = dirname(current);
39
49
  }
40
50
  for (const ancestor of ancestors) {
41
- const info = await metadata(ancestor);
51
+ const info = lstatSync(ancestor, { throwIfNoEntry: false });
42
52
  if (info?.isSymbolicLink()) {
43
- const target = await realpath(ancestor);
53
+ const target = realpathSync(ancestor);
44
54
  if (target === canonical) {
45
55
  return resolve(canonical, relative(ancestor, absolute));
46
56
  }
@@ -141,11 +151,14 @@ export async function planOutputs(desired, encountered, globals) {
141
151
  }
142
152
  return { changed, missing, stale, desired };
143
153
  }
144
- export function publish(plan, check, stopped) {
154
+ export function publish(plan, check, stopped, authored, seeds) {
145
155
  if (stopped()) {
146
156
  return;
147
157
  }
148
158
  if (check) {
159
+ if (authored.size > 0) {
160
+ throw new Error(`Filesystem definitions missing/changed:\n${[...authored.keys()].join("\n")}`);
161
+ }
149
162
  for (const [kind, paths] of [
150
163
  ["changed", plan.changed],
151
164
  ["missing", plan.missing],
@@ -158,6 +171,14 @@ export function publish(plan, check, stopped) {
158
171
  return;
159
172
  }
160
173
  // No awaits from the final stop check through this short publication section.
174
+ for (const [file, bytes] of authored) {
175
+ if (seeds.has(file)) {
176
+ writeFileSync(file, bytes, { encoding: "utf8", flag: "wx" });
177
+ }
178
+ else {
179
+ writeFileSync(file, bytes, "utf8");
180
+ }
181
+ }
161
182
  for (const path of [...plan.changed, ...plan.missing]) {
162
183
  mkdirSync(dirname(path), { recursive: true });
163
184
  writeFileSync(path, plan.desired.get(path), "utf8");