@loozo/angular-router 0.0.1 → 0.0.3

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.
Files changed (40) hide show
  1. package/README.md +455 -63
  2. package/builders.json +2 -2
  3. package/fesm2022/loozo-angular-router-_core.mjs +348 -521
  4. package/fesm2022/loozo-angular-router-_core.mjs.map +1 -1
  5. package/fesm2022/loozo-angular-router-_generated.mjs +492 -617
  6. package/fesm2022/loozo-angular-router-_generated.mjs.map +1 -1
  7. package/fesm2022/loozo-angular-router.mjs +2 -6
  8. package/node/_core/src/path.d.ts +17 -0
  9. package/node/src/builders/application.js +9 -6
  10. package/node/src/builders/options.js +58 -52
  11. package/node/src/builders/serve.js +51 -8
  12. package/node/src/generation/anchor.d.ts +13 -0
  13. package/node/src/generation/anchor.js +92 -0
  14. package/node/src/generation/compiler.d.ts +6 -0
  15. package/node/src/generation/compiler.js +68 -0
  16. package/node/src/generation/emit.d.ts +3 -0
  17. package/node/src/generation/emit.js +26 -1
  18. package/node/src/generation/files.d.ts +26 -0
  19. package/node/src/generation/files.js +42 -10
  20. package/node/src/generation/filesystem.d.ts +7 -0
  21. package/node/src/generation/filesystem.js +343 -0
  22. package/node/src/generation/generate.d.ts +16 -0
  23. package/node/src/generation/generate.js +18 -6
  24. package/node/src/generation/index.d.ts +16 -0
  25. package/node/src/generation/index.js +15 -0
  26. package/node/src/generation/overlay.d.ts +3 -0
  27. package/node/src/generation/overlay.js +84 -0
  28. package/node/src/generation/selectors.d.ts +2 -0
  29. package/node/src/generation/sources.d.ts +50 -0
  30. package/node/src/generation/sources.js +109 -28
  31. package/node/src/generation/validate.d.ts +12 -0
  32. package/node/src/generation/validate.js +53 -33
  33. package/package.json +7 -2
  34. package/schemas/application.json +765 -7
  35. package/schemas/serve.json +11 -9
  36. package/types/loozo-angular-router-_core.d.ts +401 -124
  37. package/types/loozo-angular-router-_generated.d.ts +181 -44
  38. package/types/loozo-angular-router.d.ts +2 -1
  39. package/.npmignore +0 -3
  40. package/fesm2022/loozo-angular-router.mjs.map +0 -1
@@ -1,56 +1,193 @@
1
- import { ActivatedRouteSnapshot, Route, RedirectFunction, UrlTree } from '@angular/router';
2
- import { AnyRoute, ParamsOf, SearchOf, UrlValues } from '@loozo/angular-router/_core';
3
- import { Resource } from '@angular/core';
4
-
1
+ import { ActivatedRouteSnapshot, PartialMatchRouteSnapshot, RedirectFunction, Route, UrlTree } from "@angular/router";
2
+ import { AnyRoute, ParamsOf, SearchOf, UrlValues } from "@loozo/angular-router/_core";
3
+ import { Resource } from "@angular/core";
5
4
  interface RecordBinding {
6
- readonly definition: () => AnyRoute;
7
- readonly owners: readonly string[];
5
+ readonly definition: () => AnyRoute;
6
+ readonly owners: readonly string[];
8
7
  }
9
8
  interface RouteSet {
10
- readonly records: Readonly<Record<string, RecordBinding>>;
11
- readonly destinations: Readonly<Record<string, () => AnyRoute>>;
12
- readonly absolute: Readonly<Record<string, string>>;
13
- readonly relative: Readonly<Record<string, Readonly<Record<string, string>>>>;
9
+ readonly records: Readonly<Record<string, RecordBinding>>;
10
+ readonly destinations: Readonly<Record<string, () => AnyRoute>>;
11
+ readonly absolute: Readonly<Record<string, string>>;
12
+ readonly relative: Readonly<Record<string, Readonly<Record<string, string>>>>;
14
13
  }
15
14
  interface Parsed {
16
- readonly params: Readonly<Record<string, unknown>>;
17
- readonly search: Readonly<Record<string, unknown>>;
15
+ readonly params: Readonly<Record<string, unknown>>;
16
+ readonly search: Readonly<Record<string, unknown>>;
18
17
  }
19
- declare function assertIdentity(snapshot: Pick<ActivatedRouteSnapshot, "routeConfig">, id: string): void;
20
- declare function parseInputs(set: RouteSet, id: string, snapshot: ActivatedRouteSnapshot): Promise<Parsed>;
21
-
22
- declare function callbacks(set: RouteSet, id: string): Pick<Route, "canActivate" | "canActivateChild" | "canMatch" | "resolve">;
23
- declare function redirect(definition: () => AnyRoute): RedirectFunction;
24
-
18
+ interface Job {
19
+ readonly source: "path" | "search";
20
+ readonly key: string;
21
+ readonly raws: readonly string[];
22
+ readonly array: boolean;
23
+ readonly codec: {
24
+ parse(raw: string): unknown;
25
+ };
26
+ }
27
+ interface Operation {
28
+ readonly promise: Promise<Parsed>;
29
+ outcome: {
30
+ value: Parsed;
31
+ } | {
32
+ error: Error;
33
+ } | undefined;
34
+ }
35
+ declare function hasIdentity(snapshot: Pick<ActivatedRouteSnapshot, "routeConfig">, id: string): boolean;
36
+ export declare function assertIdentity(snapshot: Pick<ActivatedRouteSnapshot, "routeConfig">, id: string): void;
37
+ declare function inputError(source: "path" | "search", key: string, reason: "missing" | "repeated" | "invalid", cause?: unknown): Error;
38
+ declare function validateRaw(source: "path" | "search", key: string, raws: readonly unknown[], array: boolean): asserts raws is readonly string[];
39
+ declare function pathJobs(definition: AnyRoute, url: readonly {
40
+ path: string;
41
+ }[]): Job[];
42
+ declare function searchJobs(definition: AnyRoute, snapshot: Pick<ActivatedRouteSnapshot, "queryParamMap">): Job[];
43
+ declare function runJobs(jobs: readonly Job[]): Promise<Parsed>;
44
+ declare function fullOperation(set: RouteSet, id: string, snapshot: ActivatedRouteSnapshot): Operation;
45
+ export declare function parseInputs(set: RouteSet, id: string, snapshot: ActivatedRouteSnapshot): Promise<Parsed>;
46
+ declare function matchingInputs(set: RouteSet, id: string, snapshot: PartialMatchRouteSnapshot): Promise<Parsed>;
47
+ export declare function callbacks(set: RouteSet, id: string): Pick<Route, "canActivate" | "canActivateChild" | "canMatch" | "resolve">;
48
+ export declare function redirect(definition: () => AnyRoute): RedirectFunction;
25
49
  declare const destinationBrand: unique symbol;
26
- declare class Destination<Target extends AnyRoute, Set = unknown, Id extends string = string> {
27
- #private;
28
- readonly [destinationBrand]: {
29
- readonly target: Target;
30
- readonly set: Set;
31
- readonly id: Id;
32
- };
50
+ /**
51
+ * An inert nominal reference exported as `destination` by a route-local facade.
52
+ *
53
+ * @remarks
54
+ * Use the exported object with a handle's link/navigate methods; no injection
55
+ * context or target activation is needed. It selects its exact declaration,
56
+ * not a canonical pathless winner. Only references from the caller's generated
57
+ * set are accepted. Copies, spreads, fakes and authored routes are not references.
58
+ * Do not construct this type or pass it to the root createUrl function.
59
+ *
60
+ * @typeParam Target - The referenced route's input and fragment schema.
61
+ * @typeParam Set - The generator's nominal route-set identity.
62
+ * @typeParam Id - The exact generated declaration identity.
63
+ */
64
+ export declare class Destination<Target extends AnyRoute, Set = unknown, Id extends string = string> {
65
+ #private;
66
+ readonly [destinationBrand]: {
67
+ readonly target: Target;
68
+ readonly set: Set;
69
+ readonly id: Id;
70
+ };
33
71
  }
34
- declare function createDestination<Target extends AnyRoute, Set, Id extends string>(getSet: () => RouteSet, id: Id): Destination<Target, Set, Id>;
72
+ export declare function createDestination<Target extends AnyRoute, Set, Id extends string>(getSet: () => RouteSet, id: Id): Destination<Target, Set, Id>;
35
73
  type DataOf<Target> = Target extends {
36
- readonly __data?: infer Data;
74
+ readonly __data?: infer Data;
37
75
  } ? Readonly<Data> : never;
38
76
  type IsUnion<Value, Whole = Value> = Value extends unknown ? [Whole] extends [Value] ? false : true : never;
39
- interface Handle<Target extends AnyRoute, Selected extends Record<string, AnyRoute> = {}, Set = unknown, References extends Record<string, AnyRoute> = {}> {
40
- readonly params: Resource<Readonly<ParamsOf<Target>> | undefined>;
41
- readonly search: Resource<Readonly<SearchOf<Target>> | undefined>;
42
- readonly data: Resource<DataOf<Target> | undefined>;
43
- link<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): UrlTree;
44
- link<Keys extends keyof SearchOf<Target> = never>(selector: ".", values: UrlValues<Target, Keys>): UrlTree;
45
- link<const Selector extends keyof Selected & string, Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never>(selector: Selector & (IsUnion<Selector> extends true ? never : unknown), values: UrlValues<NoInfer<Selected[Selector]>, Keys>): UrlTree;
46
- link<const Id extends keyof References & string, Keys extends keyof SearchOf<NoInfer<References[Id]>> = never>(selector: Destination<NoInfer<References[Id]>, Set, Id> & (IsUnion<Id> extends true ? never : unknown), values: UrlValues<NoInfer<References[Id]>, Keys>): UrlTree;
47
- navigate<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): Promise<boolean>;
48
- navigate<Keys extends keyof SearchOf<Target> = never>(selector: ".", values: UrlValues<Target, Keys>): Promise<boolean>;
49
- navigate<const Selector extends keyof Selected & string, Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never>(selector: Selector & (IsUnion<Selector> extends true ? never : unknown), values: UrlValues<NoInfer<Selected[Selector]>, Keys>): Promise<boolean>;
50
- navigate<const Id extends keyof References & string, Keys extends keyof SearchOf<NoInfer<References[Id]>> = never>(selector: Destination<NoInfer<References[Id]>, Set, Id> & (IsUnion<Id> extends true ? never : unknown), values: UrlValues<NoInfer<References[Id]>, Keys>): Promise<boolean>;
77
+ /**
78
+ * The noncallable typed handle returned by a colocated `injectRoute()` facade.
79
+ *
80
+ * @remarks
81
+ * Obtain it in an Angular injection context for the exact generated activated
82
+ * record. Params/search parse together; data contains only local resolver results,
83
+ * not static/ancestor data or title. Resources are native readonly Angular
84
+ * Resources: use hasValue before value access; error-state value reads throw.
85
+ *
86
+ * Navigation hides old values. Cancellation/same-URL skip restores the survivor
87
+ * without reparsing; obsolete work cannot publish. Relevant parsing participates
88
+ * in Angular stability until publication, error, replacement or destruction.
89
+ * Codecs are not abortable and there is no package timeout or resolved-data cache.
90
+ *
91
+ * Selectors are single known authored literals, not concrete URLs or string
92
+ * unions. `.` is exact-current; other absolute/relative selections use generated
93
+ * canonical targets. Relative climbs count URL-template segments, not parent
94
+ * edges. Catchall origins permit exact-current, absolute and reference targets,
95
+ * not depth-dependent relative traversal. Every call supplies all target values;
96
+ * there is no current-value reuse, extras argument or implicit query merge.
97
+ *
98
+ * @typeParam Target - The bound declaration's schema.
99
+ * @typeParam Selected - Statically admitted literal selectors and target schemas.
100
+ * @typeParam Set - The generator's nominal route-set identity.
101
+ * @typeParam References - Exact declarations addressable by same-set references.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import { injectRoute } from "./route.generated.js";
106
+ * import { destination as report } from "../report/route.generated.js";
107
+ *
108
+ * const route = injectRoute(); // Inside an Angular injection context.
109
+ * const link = route.link(report, { params: { reportId: 42 } });
110
+ * // Bind link to Angular RouterLink, or call route.navigate with the same values.
111
+ * ```
112
+ */
113
+ export interface Handle<Target extends AnyRoute, Selected extends Record<string, AnyRoute> = {}, Set = unknown, References extends Record<string, AnyRoute> = {}> {
114
+ /** Effective positional params; undefined while pending or without a value. */
115
+ readonly params: Resource<Readonly<ParamsOf<Target>> | undefined>;
116
+ /** Effective declared search; paired with params from the same parse operation. */
117
+ readonly search: Resource<Readonly<SearchOf<Target>> | undefined>;
118
+ /** Own native resolver results only; settles independently of paired inputs. */
119
+ readonly data: Resource<DataOf<Target> | undefined>;
120
+ /**
121
+ * Creates a native UrlTree for this exact declaration without navigating.
122
+ *
123
+ * @param values - Explicit effective params/search and optional own fragment.
124
+ * @returns Router.parseUrl's result, suitable for Angular RouterLink.
125
+ * @throws Synchronous URL validation, encoding or stringifier failures before Angular.
126
+ */
127
+ link<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): UrlTree;
128
+ /**
129
+ * Creates a UrlTree for the exact bound declaration, not its pathless winner.
130
+ *
131
+ * @param selector - The exact-current literal `.`.
132
+ * @param values - Explicit values for this declaration, with no current-input reuse.
133
+ * @returns Router.parseUrl's result without navigating.
134
+ * @throws Synchronous URL validation, encoding or stringifier failures before Angular.
135
+ */
136
+ link<Keys extends keyof SearchOf<Target> = never>(selector: ".", values: UrlValues<Target, Keys>): UrlTree;
137
+ /**
138
+ * Creates a UrlTree for a statically admitted absolute/relative authored selector.
139
+ *
140
+ * @param selector - A single known template literal, never a concrete URL.
141
+ * @param values - The selected target's complete explicit values.
142
+ * @returns Router.parseUrl's result without navigating.
143
+ * @throws Synchronously for unknown selectors or invalid URL values.
144
+ */
145
+ link<const Selector extends keyof Selected & string, Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never>(selector: Selector & (IsUnion<Selector> extends true ? never : unknown), values: UrlValues<NoInfer<Selected[Selector]>, Keys>): UrlTree;
146
+ /**
147
+ * Creates a UrlTree for a generated reference's own exact declaration.
148
+ *
149
+ * @param selector - A genuine destination exported by a facade in this route set.
150
+ * @param values - The referenced declaration's complete explicit values.
151
+ * @returns Router.parseUrl's result without navigating.
152
+ * @throws Synchronously for foreign/fake references or invalid URL values.
153
+ */
154
+ link<const Id extends keyof References & string, Keys extends keyof SearchOf<NoInfer<References[Id]>> = never>(selector: Destination<NoInfer<References[Id]>, Set, Id> & (IsUnion<Id> extends true ? never : unknown), values: UrlValues<NoInfer<References[Id]>, Keys>): UrlTree;
155
+ /**
156
+ * Navigates to this exact declaration via Router.navigateByUrl.
157
+ *
158
+ * @param values - Explicit effective params/search and optional own fragment.
159
+ * @returns Angular's identical Promise; Angular owns skips, redirects and failures.
160
+ * @throws Synchronous URL validation, encoding or stringifier failures before Angular.
161
+ */
162
+ navigate<Keys extends keyof SearchOf<Target> = never>(values: UrlValues<Target, Keys>): Promise<boolean>;
163
+ /**
164
+ * Navigates to the exact bound declaration, not its pathless winner.
165
+ *
166
+ * @param selector - The exact-current literal `.`.
167
+ * @param values - Explicit values for this declaration, with no current-input reuse.
168
+ * @returns Angular's identical Router.navigateByUrl Promise.
169
+ * @throws Synchronous URL validation, encoding or stringifier failures before Angular.
170
+ */
171
+ navigate<Keys extends keyof SearchOf<Target> = never>(selector: ".", values: UrlValues<Target, Keys>): Promise<boolean>;
172
+ /**
173
+ * Navigates to a statically admitted absolute/relative authored selector.
174
+ *
175
+ * @param selector - A single known template literal, never a concrete URL.
176
+ * @param values - The selected target's complete explicit values.
177
+ * @returns Angular's identical Router.navigateByUrl Promise.
178
+ * @throws Synchronously for unknown selectors or invalid URL values.
179
+ */
180
+ navigate<const Selector extends keyof Selected & string, Keys extends keyof SearchOf<NoInfer<Selected[Selector]>> = never>(selector: Selector & (IsUnion<Selector> extends true ? never : unknown), values: UrlValues<NoInfer<Selected[Selector]>, Keys>): Promise<boolean>;
181
+ /**
182
+ * Navigates to a generated reference's own exact declaration.
183
+ *
184
+ * @param selector - A genuine destination exported by a facade in this route set.
185
+ * @param values - The referenced declaration's complete explicit values.
186
+ * @returns Angular's identical Router.navigateByUrl Promise.
187
+ * @throws Synchronously for foreign/fake references or invalid URL values.
188
+ */
189
+ navigate<const Id extends keyof References & string, Keys extends keyof SearchOf<NoInfer<References[Id]>> = never>(selector: Destination<NoInfer<References[Id]>, Set, Id> & (IsUnion<Id> extends true ? never : unknown), values: UrlValues<NoInfer<References[Id]>, Keys>): Promise<boolean>;
51
190
  }
52
- declare function nativeOptions(definition: AnyRoute): Record<string, unknown>;
53
- declare function injectGeneratedRoute<Target extends AnyRoute, Selected extends Record<string, AnyRoute>, Set, References extends Record<string, AnyRoute>>(set: RouteSet, id: string): Handle<Target, Selected, Set, References>;
54
-
55
- export { Destination, assertIdentity, callbacks, createDestination, injectGeneratedRoute, nativeOptions, parseInputs, redirect };
56
- export type { Handle, RecordBinding, RouteSet };
191
+ export declare function nativeOptions(definition: AnyRoute): Record<string, unknown>;
192
+ export declare function injectGeneratedRoute<Target extends AnyRoute, Selected extends Record<string, AnyRoute>, Set, References extends Record<string, AnyRoute>>(set: RouteSet, id: string): Handle<Target, Selected, Set, References>;
193
+ export type { RecordBinding, RouteSet };
@@ -1 +1,2 @@
1
- export { ParamCodec, Route, booleanParam, createUrl, defineRoute, enumParam, nullableSearchParam, numberParam, optionalSearchParam, stringParam } from '@loozo/angular-router/_core';
1
+ import { ParamCodec, Route, booleanParam, createUrl, defineRoute, enumParam, nullableSearchParam, numberParam, optionalSearchParam, stringParam } from "@loozo/angular-router/_core";
2
+ export { type ParamCodec, type Route, booleanParam, createUrl, defineRoute, enumParam, nullableSearchParam, numberParam, optionalSearchParam, stringParam };
package/.npmignore DELETED
@@ -1,3 +0,0 @@
1
- # Nested package.json's are only needed for development.
2
- _core/package.json
3
- _generated/package.json
@@ -1 +0,0 @@
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"}