@lattix/navigation 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +321 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { LattixDiagnostic, LattixSourceLocation, ValidationMode, ValidationResult } from "@lattix/core";
|
|
2
|
+
export type LattixRouteKind = "screen" | "layout" | "stack" | "tabs" | "modal" | "sheet" | "group";
|
|
3
|
+
export type LattixRouteParamType = "string" | "number" | "boolean";
|
|
4
|
+
export type LattixNavigationPlatform = "web" | "native";
|
|
5
|
+
export type LattixNavigationAdapter = "react-router" | "tanstack-router" | "react-navigation";
|
|
6
|
+
export type LattixRoutePresentation = "card" | "modal" | "sheet";
|
|
7
|
+
export interface LattixRouteParam {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly type: LattixRouteParamType;
|
|
10
|
+
readonly required?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface LattixRouteLink {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly href: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LattixRouteManifest {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly kind: LattixRouteKind;
|
|
19
|
+
readonly screenRef?: string;
|
|
20
|
+
readonly path?: string;
|
|
21
|
+
readonly params: readonly LattixRouteParam[];
|
|
22
|
+
readonly query: readonly LattixRouteParam[];
|
|
23
|
+
readonly guards: readonly string[];
|
|
24
|
+
readonly links: readonly LattixRouteLink[];
|
|
25
|
+
readonly deepLinks: readonly string[];
|
|
26
|
+
readonly presentation: LattixRoutePresentation;
|
|
27
|
+
readonly children: readonly LattixRouteManifest[];
|
|
28
|
+
}
|
|
29
|
+
export interface LattixRouteManifestMeta {
|
|
30
|
+
readonly source?: LattixSourceLocation;
|
|
31
|
+
readonly path: string;
|
|
32
|
+
readonly builderTrace: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
export interface LattixNavigationManifest {
|
|
35
|
+
readonly kind: "navigation";
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly routes: readonly LattixRouteManifest[];
|
|
38
|
+
readonly meta: LattixRouteManifestMeta;
|
|
39
|
+
readonly validation: ValidationResult;
|
|
40
|
+
}
|
|
41
|
+
export interface ToRouteManifestOptions {
|
|
42
|
+
readonly mode?: ValidationMode;
|
|
43
|
+
readonly throwOnError?: boolean;
|
|
44
|
+
readonly adapter?: LattixNavigationAdapter;
|
|
45
|
+
readonly platform?: LattixNavigationPlatform;
|
|
46
|
+
}
|
|
47
|
+
export interface ReactRouterRouteContract {
|
|
48
|
+
readonly id: string;
|
|
49
|
+
readonly path?: string;
|
|
50
|
+
readonly elementRef?: string;
|
|
51
|
+
readonly children?: readonly ReactRouterRouteContract[];
|
|
52
|
+
}
|
|
53
|
+
export interface TanStackRouteContract {
|
|
54
|
+
readonly id: string;
|
|
55
|
+
readonly path?: string;
|
|
56
|
+
readonly componentRef?: string;
|
|
57
|
+
readonly children?: readonly TanStackRouteContract[];
|
|
58
|
+
}
|
|
59
|
+
export interface ReactNavigationScreenContract {
|
|
60
|
+
readonly name: string;
|
|
61
|
+
readonly componentRef?: string;
|
|
62
|
+
readonly presentation: LattixRoutePresentation;
|
|
63
|
+
readonly children?: readonly ReactNavigationScreenContract[];
|
|
64
|
+
}
|
|
65
|
+
export declare class LattixNavigationValidationError extends Error {
|
|
66
|
+
readonly diagnostics: readonly LattixDiagnostic[];
|
|
67
|
+
constructor(diagnostics: readonly LattixDiagnostic[]);
|
|
68
|
+
}
|
|
69
|
+
export declare const validateRouteManifest: (manifest: LattixNavigationManifest, options?: ToRouteManifestOptions) => ValidationResult;
|
|
70
|
+
declare class RouteCollectionBuilder {
|
|
71
|
+
protected readonly routes: LattixRouteManifest[];
|
|
72
|
+
screen(id: string, screenRef: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
73
|
+
layout(id: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
74
|
+
stack(id: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
75
|
+
tabs(id: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
76
|
+
modal(id: string, screenRef: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
77
|
+
sheet(id: string, screenRef: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
78
|
+
group(id: string, author?: (route: LattixRouteBuilder) => LattixRouteBuilder): this;
|
|
79
|
+
toManifest(): readonly LattixRouteManifest[];
|
|
80
|
+
private addRoute;
|
|
81
|
+
}
|
|
82
|
+
export declare class LattixRoutesBuilder extends RouteCollectionBuilder {
|
|
83
|
+
}
|
|
84
|
+
export declare class LattixRouteBuilder extends RouteCollectionBuilder {
|
|
85
|
+
private readonly route;
|
|
86
|
+
constructor(kind: LattixRouteKind, id: string, screenRef: string | undefined, presentation: LattixRoutePresentation);
|
|
87
|
+
path(path: string): this;
|
|
88
|
+
param(name: string, options: Omit<LattixRouteParam, "name">): this;
|
|
89
|
+
queryParam(name: string, options: Omit<LattixRouteParam, "name">): this;
|
|
90
|
+
guard(id: string): this;
|
|
91
|
+
link(id: string, href: string): this;
|
|
92
|
+
deepLink(uri: string): this;
|
|
93
|
+
toManifestRoute(): LattixRouteManifest;
|
|
94
|
+
}
|
|
95
|
+
export declare class LattixNavigationBuilder {
|
|
96
|
+
private state;
|
|
97
|
+
constructor(name: string);
|
|
98
|
+
routes(author: (routes: LattixRoutesBuilder) => LattixRoutesBuilder): this;
|
|
99
|
+
toManifest(options?: ToRouteManifestOptions): LattixNavigationManifest;
|
|
100
|
+
validate(options?: ToRouteManifestOptions): ValidationResult;
|
|
101
|
+
debug(options?: ToRouteManifestOptions): {
|
|
102
|
+
manifest: LattixNavigationManifest;
|
|
103
|
+
validation: ValidationResult;
|
|
104
|
+
printed: string;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export declare const Navigation: (name: string) => LattixNavigationBuilder;
|
|
108
|
+
export declare const createReactRouterRoutes: (manifest: LattixNavigationManifest) => readonly ReactRouterRouteContract[];
|
|
109
|
+
export declare const createTanStackRouteTree: (manifest: LattixNavigationManifest) => readonly TanStackRouteContract[];
|
|
110
|
+
export declare const createReactNavigationScreens: (manifest: LattixNavigationManifest) => readonly ReactNavigationScreenContract[];
|
|
111
|
+
export declare const printRouteManifest: (manifest: LattixNavigationManifest) => string;
|
|
112
|
+
export {};
|
|
113
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
const PARAM_NAME_PATTERN = /^[A-Za-z_]\w*$/;
|
|
2
|
+
const PARAM_TYPES = new Set(["string", "number", "boolean"]);
|
|
3
|
+
const optionalString = (key, value) => value === undefined ? {} : { [key]: value };
|
|
4
|
+
const runtimeDiagnostic = (diagnostic) => ({
|
|
5
|
+
manifestKind: "navigation",
|
|
6
|
+
...diagnostic,
|
|
7
|
+
});
|
|
8
|
+
export class LattixNavigationValidationError extends Error {
|
|
9
|
+
diagnostics;
|
|
10
|
+
constructor(diagnostics) {
|
|
11
|
+
super(diagnostics[0]?.summary ?? "Lattix navigation manifest validation failed.");
|
|
12
|
+
this.name = "LattixNavigationValidationError";
|
|
13
|
+
this.diagnostics = diagnostics;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const routeNeedsScreenRef = (route) => route.kind === "screen" || route.kind === "modal" || route.kind === "sheet";
|
|
17
|
+
const collectRouteDiagnostics = (route, path, routeIds, diagnostics, options) => {
|
|
18
|
+
if (routeIds.has(route.id)) {
|
|
19
|
+
diagnostics.push(runtimeDiagnostic({
|
|
20
|
+
code: "LATTIX_DUPLICATE_ROUTE_ID",
|
|
21
|
+
message: `Duplicate route id "${route.id}".`,
|
|
22
|
+
summary: `Route id "${route.id}" is declared more than once.`,
|
|
23
|
+
path,
|
|
24
|
+
field: "routes.id",
|
|
25
|
+
received: route.id,
|
|
26
|
+
expected: "A unique route id.",
|
|
27
|
+
suggestion: "Use a unique route id or remove the duplicate route declaration.",
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
routeIds.add(route.id);
|
|
31
|
+
if (routeNeedsScreenRef(route) && (!route.screenRef || route.screenRef.trim().length === 0)) {
|
|
32
|
+
diagnostics.push(runtimeDiagnostic({
|
|
33
|
+
code: "LATTIX_MISSING_ROUTE_SCREEN_REF",
|
|
34
|
+
message: `Route "${route.id}" is missing a screen reference.`,
|
|
35
|
+
summary: `Route "${route.id}" must reference a screen component or screen manifest.`,
|
|
36
|
+
path: `${path}.screenRef`,
|
|
37
|
+
field: "screenRef",
|
|
38
|
+
received: route.screenRef ?? "",
|
|
39
|
+
expected: "A non-empty screen reference.",
|
|
40
|
+
suggestion: "Pass a screen reference to screen(), modal(), or sheet().",
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
const validateParams = (params, field) => {
|
|
44
|
+
params.forEach((param, index) => {
|
|
45
|
+
if (!PARAM_NAME_PATTERN.test(param.name)) {
|
|
46
|
+
diagnostics.push(runtimeDiagnostic({
|
|
47
|
+
code: "LATTIX_INVALID_ROUTE_PARAM",
|
|
48
|
+
message: `Invalid route parameter "${param.name}".`,
|
|
49
|
+
summary: `Route parameter "${param.name}" must be a valid identifier.`,
|
|
50
|
+
path: `${path}.${field}[${index}].name`,
|
|
51
|
+
field: `${field}.name`,
|
|
52
|
+
received: param.name,
|
|
53
|
+
expected: "A valid TypeScript-style identifier.",
|
|
54
|
+
suggestion: "Rename the route parameter, for example userId.",
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
if (!PARAM_TYPES.has(param.type)) {
|
|
58
|
+
diagnostics.push(runtimeDiagnostic({
|
|
59
|
+
code: "LATTIX_INVALID_ROUTE_PARAM_TYPE",
|
|
60
|
+
message: `Invalid route parameter type "${param.type}".`,
|
|
61
|
+
summary: `Route parameter "${param.name}" uses an unsupported type.`,
|
|
62
|
+
path: `${path}.${field}[${index}].type`,
|
|
63
|
+
field: `${field}.type`,
|
|
64
|
+
received: param.type,
|
|
65
|
+
expected: "string, number, or boolean.",
|
|
66
|
+
suggestion: "Use a portable route parameter type.",
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
validateParams(route.params, "params");
|
|
72
|
+
validateParams(route.query, "query");
|
|
73
|
+
if (options.adapter && options.platform) {
|
|
74
|
+
const adapterPlatform = options.adapter === "react-navigation" ? "native" : "web";
|
|
75
|
+
if (adapterPlatform !== options.platform) {
|
|
76
|
+
diagnostics.push(runtimeDiagnostic({
|
|
77
|
+
code: "LATTIX_UNSUPPORTED_ROUTE_PLATFORM",
|
|
78
|
+
message: `${options.adapter} cannot target ${options.platform}.`,
|
|
79
|
+
summary: `${options.adapter} is a ${adapterPlatform} navigation adapter.`,
|
|
80
|
+
path,
|
|
81
|
+
field: "adapter",
|
|
82
|
+
received: { adapter: options.adapter, platform: options.platform },
|
|
83
|
+
expected: `${options.adapter} should target ${adapterPlatform}.`,
|
|
84
|
+
suggestion: "Select a compatible navigation adapter and platform.",
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (options.adapter &&
|
|
89
|
+
options.adapter !== "react-navigation" &&
|
|
90
|
+
route.presentation === "sheet") {
|
|
91
|
+
diagnostics.push(runtimeDiagnostic({
|
|
92
|
+
code: "LATTIX_UNSUPPORTED_ROUTE_ADAPTER_FEATURE",
|
|
93
|
+
message: `${options.adapter} does not support sheet presentation.`,
|
|
94
|
+
summary: `Route "${route.id}" uses a native sheet presentation unsupported by ${options.adapter}.`,
|
|
95
|
+
path: `${path}.presentation`,
|
|
96
|
+
field: "presentation",
|
|
97
|
+
received: route.presentation,
|
|
98
|
+
expected: "A portable web route presentation.",
|
|
99
|
+
suggestion: "Use modal/card presentation for web routing or target react-navigation.",
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
route.children.forEach((child, index) => {
|
|
103
|
+
collectRouteDiagnostics(child, `${path}.children[${index}]`, routeIds, diagnostics, options);
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
export const validateRouteManifest = (manifest, options = {}) => {
|
|
107
|
+
const diagnostics = [];
|
|
108
|
+
const routeIds = new Set();
|
|
109
|
+
if (manifest.name.trim().length === 0) {
|
|
110
|
+
diagnostics.push(runtimeDiagnostic({
|
|
111
|
+
code: "LATTIX_INVALID_NAVIGATION_NAME",
|
|
112
|
+
message: "Navigation manifest name is required.",
|
|
113
|
+
summary: "Navigation manifest name is required.",
|
|
114
|
+
path: "navigation.name",
|
|
115
|
+
field: "name",
|
|
116
|
+
received: manifest.name,
|
|
117
|
+
expected: "A non-empty navigation manifest name.",
|
|
118
|
+
suggestion: 'Pass a non-empty name to Navigation("Name").',
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
manifest.routes.forEach((route, index) => {
|
|
122
|
+
collectRouteDiagnostics(route, `navigation.routes[${index}]`, routeIds, diagnostics, options);
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
valid: diagnostics.length === 0,
|
|
126
|
+
diagnostics,
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
const withValidation = (manifest, options = {}) => {
|
|
130
|
+
const completeManifest = {
|
|
131
|
+
...manifest,
|
|
132
|
+
validation: { valid: true, diagnostics: [] },
|
|
133
|
+
};
|
|
134
|
+
const validation = validateRouteManifest(completeManifest, options);
|
|
135
|
+
const validatedManifest = { ...completeManifest, validation };
|
|
136
|
+
const mode = options.mode ?? "strict";
|
|
137
|
+
const throwOnError = options.throwOnError ?? mode === "strict";
|
|
138
|
+
if (!validation.valid && throwOnError) {
|
|
139
|
+
throw new LattixNavigationValidationError(validation.diagnostics);
|
|
140
|
+
}
|
|
141
|
+
return validatedManifest;
|
|
142
|
+
};
|
|
143
|
+
const toManifestRoute = (route) => ({
|
|
144
|
+
id: route.id,
|
|
145
|
+
kind: route.kind,
|
|
146
|
+
...optionalString("screenRef", route.screenRef),
|
|
147
|
+
...optionalString("path", route.path),
|
|
148
|
+
params: [...route.params],
|
|
149
|
+
query: [...route.query],
|
|
150
|
+
guards: [...route.guards],
|
|
151
|
+
links: [...route.links],
|
|
152
|
+
deepLinks: [...route.deepLinks],
|
|
153
|
+
presentation: route.presentation,
|
|
154
|
+
children: [...route.children],
|
|
155
|
+
});
|
|
156
|
+
class RouteCollectionBuilder {
|
|
157
|
+
routes = [];
|
|
158
|
+
screen(id, screenRef, author) {
|
|
159
|
+
return this.addRoute("screen", id, screenRef, "card", author);
|
|
160
|
+
}
|
|
161
|
+
layout(id, author) {
|
|
162
|
+
return this.addRoute("layout", id, undefined, "card", author);
|
|
163
|
+
}
|
|
164
|
+
stack(id, author) {
|
|
165
|
+
return this.addRoute("stack", id, undefined, "card", author);
|
|
166
|
+
}
|
|
167
|
+
tabs(id, author) {
|
|
168
|
+
return this.addRoute("tabs", id, undefined, "card", author);
|
|
169
|
+
}
|
|
170
|
+
modal(id, screenRef, author) {
|
|
171
|
+
return this.addRoute("modal", id, screenRef, "modal", author);
|
|
172
|
+
}
|
|
173
|
+
sheet(id, screenRef, author) {
|
|
174
|
+
return this.addRoute("sheet", id, screenRef, "sheet", author);
|
|
175
|
+
}
|
|
176
|
+
group(id, author) {
|
|
177
|
+
return this.addRoute("group", id, undefined, "card", author);
|
|
178
|
+
}
|
|
179
|
+
toManifest() {
|
|
180
|
+
return [...this.routes];
|
|
181
|
+
}
|
|
182
|
+
addRoute(kind, id, screenRef, presentation, author) {
|
|
183
|
+
const builder = new LattixRouteBuilder(kind, id, screenRef, presentation);
|
|
184
|
+
const route = author ? author(builder).toManifestRoute() : builder.toManifestRoute();
|
|
185
|
+
this.routes.push(route);
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export class LattixRoutesBuilder extends RouteCollectionBuilder {
|
|
190
|
+
}
|
|
191
|
+
export class LattixRouteBuilder extends RouteCollectionBuilder {
|
|
192
|
+
route;
|
|
193
|
+
constructor(kind, id, screenRef, presentation) {
|
|
194
|
+
super();
|
|
195
|
+
this.route = {
|
|
196
|
+
id,
|
|
197
|
+
kind,
|
|
198
|
+
...optionalString("screenRef", screenRef),
|
|
199
|
+
params: [],
|
|
200
|
+
query: [],
|
|
201
|
+
guards: [],
|
|
202
|
+
links: [],
|
|
203
|
+
deepLinks: [],
|
|
204
|
+
presentation,
|
|
205
|
+
children: [],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
path(path) {
|
|
209
|
+
this.route.path = path;
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
param(name, options) {
|
|
213
|
+
this.route.params.push({ name, ...options });
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
queryParam(name, options) {
|
|
217
|
+
this.route.query.push({ name, ...options });
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
guard(id) {
|
|
221
|
+
this.route.guards.push(id);
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
link(id, href) {
|
|
225
|
+
this.route.links.push({ id, href });
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
deepLink(uri) {
|
|
229
|
+
this.route.deepLinks.push(uri);
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
toManifestRoute() {
|
|
233
|
+
return toManifestRoute({
|
|
234
|
+
...this.route,
|
|
235
|
+
children: [...this.toManifest()],
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
export class LattixNavigationBuilder {
|
|
240
|
+
state;
|
|
241
|
+
constructor(name) {
|
|
242
|
+
this.state = {
|
|
243
|
+
name,
|
|
244
|
+
routes: [],
|
|
245
|
+
builderTrace: [`Navigation("${name}")`],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
routes(author) {
|
|
249
|
+
const builder = author(new LattixRoutesBuilder());
|
|
250
|
+
this.state = {
|
|
251
|
+
...this.state,
|
|
252
|
+
routes: builder.toManifest(),
|
|
253
|
+
builderTrace: [...this.state.builderTrace, "routes"],
|
|
254
|
+
};
|
|
255
|
+
return this;
|
|
256
|
+
}
|
|
257
|
+
toManifest(options) {
|
|
258
|
+
return withValidation({
|
|
259
|
+
kind: "navigation",
|
|
260
|
+
name: this.state.name,
|
|
261
|
+
routes: [...this.state.routes],
|
|
262
|
+
meta: {
|
|
263
|
+
path: "navigation",
|
|
264
|
+
builderTrace: [...this.state.builderTrace],
|
|
265
|
+
},
|
|
266
|
+
}, options);
|
|
267
|
+
}
|
|
268
|
+
validate(options) {
|
|
269
|
+
return this.toManifest({ ...options, throwOnError: false }).validation;
|
|
270
|
+
}
|
|
271
|
+
debug(options) {
|
|
272
|
+
const manifest = this.toManifest({ ...options, throwOnError: false });
|
|
273
|
+
return {
|
|
274
|
+
manifest,
|
|
275
|
+
validation: manifest.validation,
|
|
276
|
+
printed: printRouteManifest(manifest),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
export const Navigation = (name) => new LattixNavigationBuilder(name);
|
|
281
|
+
const withChildren = (route, children) => ({
|
|
282
|
+
...route,
|
|
283
|
+
...(children.length > 0 ? { children } : {}),
|
|
284
|
+
});
|
|
285
|
+
export const createReactRouterRoutes = (manifest) => manifest.routes.map(toReactRouterRoute);
|
|
286
|
+
const toReactRouterRoute = (route) => withChildren({
|
|
287
|
+
id: route.id,
|
|
288
|
+
...optionalString("path", route.path),
|
|
289
|
+
...(route.screenRef ? { elementRef: route.screenRef } : {}),
|
|
290
|
+
}, route.children.map(toReactRouterRoute));
|
|
291
|
+
export const createTanStackRouteTree = (manifest) => manifest.routes.map(toTanStackRoute);
|
|
292
|
+
const toTanStackRoute = (route) => withChildren({
|
|
293
|
+
id: route.id,
|
|
294
|
+
...optionalString("path", route.path),
|
|
295
|
+
...(route.screenRef ? { componentRef: route.screenRef } : {}),
|
|
296
|
+
}, route.children.map(toTanStackRoute));
|
|
297
|
+
export const createReactNavigationScreens = (manifest) => manifest.routes.map(toReactNavigationScreen);
|
|
298
|
+
const toReactNavigationScreen = (route) => withChildren({
|
|
299
|
+
name: route.id,
|
|
300
|
+
...(route.screenRef ? { componentRef: route.screenRef } : {}),
|
|
301
|
+
presentation: route.presentation,
|
|
302
|
+
}, route.children.map(toReactNavigationScreen));
|
|
303
|
+
const printRoute = (route, depth) => {
|
|
304
|
+
const indent = " ".repeat(depth);
|
|
305
|
+
const parts = [`${indent}${route.kind} id=${route.id}`];
|
|
306
|
+
if (route.path !== undefined) {
|
|
307
|
+
parts.push(`path=${route.path}`);
|
|
308
|
+
}
|
|
309
|
+
if (route.screenRef) {
|
|
310
|
+
parts.push(`screen=${route.screenRef}`);
|
|
311
|
+
}
|
|
312
|
+
return [
|
|
313
|
+
parts.join(" "),
|
|
314
|
+
...route.children.flatMap((child) => printRoute(child, depth + 1)),
|
|
315
|
+
];
|
|
316
|
+
};
|
|
317
|
+
export const printRouteManifest = (manifest) => [
|
|
318
|
+
`navigation name=${manifest.name} routes=${manifest.routes.length}`,
|
|
319
|
+
...manifest.routes.flatMap((route) => printRoute(route, 1)),
|
|
320
|
+
].join("\n");
|
|
321
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+GA,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7D,MAAM,cAAc,GAAG,CACrB,GAAM,EACN,KAAyB,EACkB,EAAE,CAC7C,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAwB,CAAC;AAErE,MAAM,iBAAiB,GAAG,CACxB,UAAkD,EAChC,EAAE,CAAC,CAAC;IACtB,YAAY,EAAE,YAAY;IAC1B,GAAG,UAAU;CACd,CAAC,CAAC;AAEH,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,WAAW,CAA8B;IAElD,YAAY,WAAwC;QAClD,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,+CAA+C,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,CAAC,KAA0B,EAAE,EAAE,CACzD,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAE9E,MAAM,uBAAuB,GAAG,CAC9B,KAA0B,EAC1B,IAAY,EACZ,QAAqB,EACrB,WAA+B,EAC/B,OAA+B,EAC/B,EAAE;IACF,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;YAChB,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,uBAAuB,KAAK,CAAC,EAAE,IAAI;YAC5C,OAAO,EAAE,aAAa,KAAK,CAAC,EAAE,+BAA+B;YAC7D,IAAI;YACJ,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClB,QAAQ,EAAE,oBAAoB;YAC9B,UAAU,EAAE,kEAAkE;SAC/E,CAAC,CACH,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEvB,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5F,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;YAChB,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,UAAU,KAAK,CAAC,EAAE,kCAAkC;YAC7D,OAAO,EAAE,UAAU,KAAK,CAAC,EAAE,yDAAyD;YACpF,IAAI,EAAE,GAAG,IAAI,YAAY;YACzB,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;YAC/B,QAAQ,EAAE,+BAA+B;YACzC,UAAU,EAAE,2DAA2D;SACxE,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,CACrB,MAAmC,EACnC,KAAyB,EACzB,EAAE;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;oBAChB,IAAI,EAAE,4BAA4B;oBAClC,OAAO,EAAE,4BAA4B,KAAK,CAAC,IAAI,IAAI;oBACnD,OAAO,EAAE,oBAAoB,KAAK,CAAC,IAAI,+BAA+B;oBACtE,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,QAAQ;oBACvC,KAAK,EAAE,GAAG,KAAK,OAAO;oBACtB,QAAQ,EAAE,KAAK,CAAC,IAAI;oBACpB,QAAQ,EAAE,sCAAsC;oBAChD,UAAU,EAAE,iDAAiD;iBAC9D,CAAC,CACH,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;oBAChB,IAAI,EAAE,iCAAiC;oBACvC,OAAO,EAAE,iCAAiC,KAAK,CAAC,IAAI,IAAI;oBACxD,OAAO,EAAE,oBAAoB,KAAK,CAAC,IAAI,6BAA6B;oBACpE,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,QAAQ;oBACvC,KAAK,EAAE,GAAG,KAAK,OAAO;oBACtB,QAAQ,EAAE,KAAK,CAAC,IAAI;oBACpB,QAAQ,EAAE,6BAA6B;oBACvC,UAAU,EAAE,sCAAsC;iBACnD,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,eAAe,GACnB,OAAO,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,IAAI,eAAe,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzC,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;gBAChB,IAAI,EAAE,mCAAmC;gBACzC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,kBAAkB,OAAO,CAAC,QAAQ,GAAG;gBAChE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,SAAS,eAAe,sBAAsB;gBACzE,IAAI;gBACJ,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAClE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,kBAAkB,eAAe,GAAG;gBAChE,UAAU,EAAE,sDAAsD;aACnE,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IACE,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO,KAAK,kBAAkB;QACtC,KAAK,CAAC,YAAY,KAAK,OAAO,EAC9B,CAAC;QACD,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;YAChB,IAAI,EAAE,0CAA0C;YAChD,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,uCAAuC;YAClE,OAAO,EAAE,UAAU,KAAK,CAAC,EAAE,qDAAqD,OAAO,CAAC,OAAO,GAAG;YAClG,IAAI,EAAE,GAAG,IAAI,eAAe;YAC5B,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,KAAK,CAAC,YAAY;YAC5B,QAAQ,EAAE,oCAAoC;YAC9C,UAAU,EAAE,yEAAyE;SACtF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACtC,uBAAuB,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,KAAK,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAkC,EAClC,UAAkC,EAAE,EAClB,EAAE;IACpB,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CACd,iBAAiB,CAAC;YAChB,IAAI,EAAE,gCAAgC;YACtC,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,uCAAuC;YAChD,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,QAAQ,EAAE,uCAAuC;YACjD,UAAU,EAAE,8CAA8C;SAC3D,CAAC,CACH,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvC,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,KAAK,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;QAC/B,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,QAAsD,EACtD,UAAkC,EAAE,EACV,EAAE;IAC5B,MAAM,gBAAgB,GAAG;QACvB,GAAG,QAAQ;QACX,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;KACV,CAAC;IACrC,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,iBAAiB,GAAG,EAAE,GAAG,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,KAAK,QAAQ,CAAC;IAE/D,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,+BAA+B,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAuB,EAAE,CAAC,CAAC;IACrE,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/C,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACvB,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IACvB,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC,YAAY;IAChC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,sBAAsB;IACP,MAAM,GAA0B,EAAE,CAAC;IAEtD,MAAM,CACJ,EAAU,EACV,SAAiB,EACjB,MAA0D;QAE1D,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,MAA0D;QAC3E,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,EAAU,EAAE,MAA0D;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,EAAU,EAAE,MAA0D;QACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CACH,EAAU,EACV,SAAiB,EACjB,MAA0D;QAE1D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CACH,EAAU,EACV,SAAiB,EACjB,MAA0D;QAE1D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,EAAU,EAAE,MAA0D;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAEO,QAAQ,CACd,IAAqB,EACrB,EAAU,EACV,SAA6B,EAC7B,YAAqC,EACrC,MAA0D;QAE1D,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,sBAAsB;CAAG;AAElE,MAAM,OAAO,kBAAmB,SAAQ,sBAAsB;IAC3C,KAAK,CAAe;IAErC,YACE,IAAqB,EACrB,EAAU,EACV,SAA6B,EAC7B,YAAqC;QAErC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG;YACX,EAAE;YACF,IAAI;YACJ,GAAG,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC;YACzC,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;YACb,YAAY;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAAuC;QACzD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,OAAuC;QAC9D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,EAAU;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,EAAU,EAAE,IAAY;QAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO,eAAe,CAAC;YACrB,GAAG,IAAI,CAAC,KAAK;YACb,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IAC1B,KAAK,CAAyB;IAEtC,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG;YACX,IAAI;YACJ,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,CAAC,eAAe,IAAI,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAA4D;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI,CAAC,KAAK;YACb,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE;YAC5B,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;SACrD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,OAAgC;QACzC,OAAO,cAAc,CACnB;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE;gBACJ,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;aAC3C;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAgC;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,OAAgC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,OAAO;YACL,QAAQ;YACR,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC;SACtC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAE9E,MAAM,YAAY,GAAG,CACnB,KAA0B,EAC1B,QAAsB,EACnB,EAAE,CAAC,CAAC;IACP,GAAG,KAAK;IACR,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC7C,CAAM,CAAC;AAER,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAkC,EACG,EAAE,CACvC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAE1C,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAA4B,EAAE,CAClF,YAAY,CACV;IACE,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;IACrC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5D,EACD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CACvC,CAAC;AAEJ,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAkC,EACA,EAAE,CACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEvC,MAAM,eAAe,GAAG,CAAC,KAA0B,EAAyB,EAAE,CAC5E,YAAY,CACV;IACE,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;IACrC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC9D,EACD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CACpC,CAAC;AAEJ,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,QAAkC,EACQ,EAAE,CAC5C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAE/C,MAAM,uBAAuB,GAAG,CAC9B,KAA0B,EACK,EAAE,CACjC,YAAY,CACV;IACE,IAAI,EAAE,KAAK,CAAC,EAAE;IACd,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,YAAY,EAAE,KAAK,CAAC,YAAY;CACjC,EACD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAC5C,CAAC;AAEJ,MAAM,UAAU,GAAG,CAAC,KAA0B,EAAE,KAAa,EAAqB,EAAE;IAClF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACf,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;KACnE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAkC,EAAE,EAAE,CACvE;IACE,mBAAmB,QAAQ,CAAC,IAAI,WAAW,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IACnE,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;CAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lattix/navigation",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Route manifests and adapter boundaries for Lattix App Runtime",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc -p tsconfig.json",
|
|
20
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@lattix/core": "0.1.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"typescript": "^5.7.3",
|
|
30
|
+
"vitest": "^3.0.5"
|
|
31
|
+
}
|
|
32
|
+
}
|