polen 0.8.0-next.4 → 0.8.0-next.6
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/build/api/vite/plugins/core.d.ts.map +1 -1
- package/build/api/vite/plugins/core.js +146 -52
- package/build/api/vite/plugins/core.js.map +1 -1
- package/build/lib/file-router/linter.d.ts.map +1 -1
- package/build/lib/file-router/linter.js +3 -3
- package/build/lib/file-router/linter.js.map +1 -1
- package/build/lib/file-router/route.d.ts +48 -10
- package/build/lib/file-router/route.d.ts.map +1 -1
- package/build/lib/file-router/route.js +68 -3
- package/build/lib/file-router/route.js.map +1 -1
- package/build/lib/file-router/scan.d.ts +2 -2
- package/build/lib/file-router/scan.d.ts.map +1 -1
- package/build/lib/file-router/scan.js +8 -8
- package/build/lib/file-router/scan.js.map +1 -1
- package/build/lib/file-router/sidebar.d.ts +2 -0
- package/build/lib/file-router/sidebar.d.ts.map +1 -0
- package/build/lib/file-router/sidebar.js +2 -0
- package/build/lib/file-router/sidebar.js.map +1 -0
- package/build/lib/kit-temp.d.ts +2 -0
- package/build/lib/kit-temp.d.ts.map +1 -0
- package/build/lib/kit-temp.js +23 -0
- package/build/lib/kit-temp.js.map +1 -0
- package/build/project-data.d.ts +21 -1
- package/build/project-data.d.ts.map +1 -1
- package/build/template/components/Sidebar.d.ts +7 -0
- package/build/template/components/Sidebar.d.ts.map +1 -0
- package/build/template/components/Sidebar.jsx +108 -0
- package/build/template/components/Sidebar.jsx.map +1 -0
- package/build/template/routes/root.d.ts.map +1 -1
- package/build/template/routes/root.jsx +28 -5
- package/build/template/routes/root.jsx.map +1 -1
- package/package.json +1 -1
- package/src/api/vite/plugins/core.ts +178 -54
- package/src/lib/file-router/index.test.ts +5 -5
- package/src/lib/file-router/linter.ts +3 -3
- package/src/lib/file-router/route.ts +147 -11
- package/src/lib/file-router/scan.ts +9 -9
- package/src/lib/file-router/sidebar.ts +0 -0
- package/src/lib/kit-temp.ts +21 -0
- package/src/project-data.ts +26 -1
- package/src/template/components/Sidebar.tsx +185 -0
- package/src/template/routes/root.tsx +35 -5
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAgB9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAW/D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,CAAA;CACjC;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,YAAY,CAAC,MAAM,KAAG,IAAI,CAAC,YAAY,EA4OnE,CAAA"}
|
@@ -1,8 +1,7 @@
|
|
1
|
-
import { Markdown } from '#api/singletons/markdown/index.js';
|
2
1
|
import { FileRouter } from '#lib/file-router/index.js';
|
3
2
|
import { ViteVirtual } from '#lib/vite-virtual/index.js';
|
4
3
|
import mdx from '@mdx-js/rollup';
|
5
|
-
import { Cache,
|
4
|
+
import { Cache, Idx, Json, Path, Str } from '@wollybeard/kit';
|
6
5
|
import jsesc from 'jsesc';
|
7
6
|
import remarkGfm from 'remark-gfm';
|
8
7
|
import { superjson } from '../../../singletons/superjson.js';
|
@@ -40,27 +39,30 @@ export const Core = (config) => {
|
|
40
39
|
],
|
41
40
|
}),
|
42
41
|
},
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
}
|
42
|
+
// TODO: We can remove, mdx subsumes this
|
43
|
+
// TODO: First we need to investigate how e can make our api singleton Markdown used by MDX.
|
44
|
+
// If we cannot, then we might want to ditch MDX instead and use our lower level solution here.
|
45
|
+
// It depends in part on how complex our Markdown singleton gets.
|
46
|
+
// {
|
47
|
+
// name: `polen:markdown`,
|
48
|
+
// enforce: `pre`,
|
49
|
+
// resolveId(id) {
|
50
|
+
// if (id.endsWith(`.md`)) {
|
51
|
+
// return id
|
52
|
+
// }
|
53
|
+
// return null
|
54
|
+
// },
|
55
|
+
// async load(id) {
|
56
|
+
// if (id.endsWith(`.md`)) {
|
57
|
+
// const markdownString = await Fs.read(id)
|
58
|
+
// if (!markdownString) return null
|
59
|
+
// const htmlString = await Markdown.parse(markdownString)
|
60
|
+
// const code = `export default ${JSON.stringify(htmlString)}`
|
61
|
+
// return code
|
62
|
+
// }
|
63
|
+
// return null
|
64
|
+
// },
|
65
|
+
// },
|
64
66
|
{
|
65
67
|
name: `polen:core:alias`,
|
66
68
|
resolveId(id, importer) {
|
@@ -120,30 +122,55 @@ export const Core = (config) => {
|
|
120
122
|
async loader() {
|
121
123
|
// todo: parallel
|
122
124
|
const schema = await readSchema();
|
123
|
-
console.log({ schema });
|
124
125
|
const pagesScanResult = await scanPageRoutes();
|
125
126
|
const siteNavigationItems = [];
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
127
|
+
//
|
128
|
+
// ━━ Build Navbar
|
129
|
+
//
|
130
|
+
// ━ Top pages become navigation items
|
131
|
+
const topPages = pagesScanResult.routes.filter(FileRouter.routeIsTopLevel);
|
132
|
+
for (const page of topPages) {
|
133
|
+
const path = FileRouter.routeToPathExpression(page);
|
131
134
|
const title = Str.titlizeSlug(path);
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
135
|
+
siteNavigationItems.push({ pathExp: path, title });
|
136
|
+
}
|
137
|
+
// ━ Top directories become navigation items
|
138
|
+
const topDirsPaths = pagesScanResult.routes
|
139
|
+
.filter(FileRouter.routeIsSubLevel)
|
140
|
+
// todo: kit, slice that understands non-empty
|
141
|
+
// Arr.slice(route.path.segments, 1)
|
142
|
+
.map(route => [route.logical.path[0]]);
|
143
|
+
for (const dir of topDirsPaths) {
|
144
|
+
const pathExp = FileRouter.pathToExpression(dir);
|
145
|
+
const title = Str.titlizeSlug(pathExp);
|
146
|
+
// todo: this should never happen, if it does, swarn user
|
147
|
+
// Only add if not already added as a top page
|
148
|
+
if (!siteNavigationItems.some(item => item.pathExp === pathExp)) {
|
149
|
+
siteNavigationItems.push({ pathExp: pathExp, title });
|
150
|
+
}
|
151
|
+
}
|
152
|
+
// ━ Schema presence causes adding some navbar items
|
138
153
|
if (schema) {
|
139
|
-
siteNavigationItems.push({
|
154
|
+
siteNavigationItems.push({ pathExp: `/reference`, title: `Reference` });
|
140
155
|
if (schema.versions.length > 1) {
|
141
|
-
siteNavigationItems.push({
|
156
|
+
siteNavigationItems.push({ pathExp: `/changelog`, title: `Changelog` });
|
142
157
|
}
|
143
158
|
}
|
159
|
+
//
|
160
|
+
// ━━ Build Sidebar
|
161
|
+
//
|
162
|
+
const sidebarIndex = {};
|
163
|
+
for (const dirPath of topDirsPaths) {
|
164
|
+
const childPages = pagesScanResult.routes.filter(page => FileRouter.routeIsSubOf(page, dirPath));
|
165
|
+
sidebarIndex[FileRouter.pathToExpression(dirPath)] = buildSidebar(childPages, dirPath);
|
166
|
+
}
|
167
|
+
//
|
168
|
+
// ━━ Put It All together
|
169
|
+
//
|
144
170
|
const projectData = {
|
145
171
|
schema,
|
146
172
|
siteNavigationItems,
|
173
|
+
sidebarIndex,
|
147
174
|
faviconPath: `/logo.svg`,
|
148
175
|
pagesScanResult: pagesScanResult,
|
149
176
|
paths: config.paths.project,
|
@@ -177,24 +204,15 @@ export const Core = (config) => {
|
|
177
204
|
s `export const ${$.pages} = []`;
|
178
205
|
// todo: kit fs should accept parsed file paths
|
179
206
|
for (const route of pagesScanResult.routes) {
|
180
|
-
const
|
181
|
-
const
|
182
|
-
const ident = Str.Case.camel(`page ` + Str.titlizeSlug(
|
207
|
+
const filePathExp = Path.format(route.file.path.absolute);
|
208
|
+
const pathExp = FileRouter.routeToPathExpression(route);
|
209
|
+
const ident = Str.Case.camel(`page ` + Str.titlizeSlug(pathExp));
|
183
210
|
s `
|
184
|
-
import ${ident} from '${
|
211
|
+
import ${ident} from '${filePathExp}'
|
185
212
|
|
186
213
|
${$.pages}.push({
|
187
|
-
path: '${
|
188
|
-
Component:
|
189
|
-
if (typeof ${ident} === 'function') {
|
190
|
-
// ━ MDX
|
191
|
-
const Component = ${ident}
|
192
|
-
return <Component />
|
193
|
-
} else {
|
194
|
-
// ━ MD
|
195
|
-
return <div dangerouslySetInnerHTML={{ __html: ${ident} }} />
|
196
|
-
}
|
197
|
-
}
|
214
|
+
path: '${pathExp}',
|
215
|
+
Component: ${ident}
|
198
216
|
})
|
199
217
|
`;
|
200
218
|
}
|
@@ -204,4 +222,80 @@ export const Core = (config) => {
|
|
204
222
|
},
|
205
223
|
];
|
206
224
|
};
|
225
|
+
/**
|
226
|
+
* Helper function to build sidebar items recursively
|
227
|
+
*/
|
228
|
+
const buildSidebar = (pages, basePath) => {
|
229
|
+
const navs = [];
|
230
|
+
const sections = Idx.create({ toKey: (item) => item.pathExp });
|
231
|
+
// Items
|
232
|
+
for (const page of pages) {
|
233
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath);
|
234
|
+
if (FileRouter.routeIsRootLevel(pageRelative)) {
|
235
|
+
continue;
|
236
|
+
}
|
237
|
+
if (FileRouter.routeIsTopLevel(pageRelative)) {
|
238
|
+
// Section (index)
|
239
|
+
if (FileRouter.routeIsFromIndexFile(pageRelative)) {
|
240
|
+
const sectionPath = page.logical.path;
|
241
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath);
|
242
|
+
let section;
|
243
|
+
section = sections.getKey(sectionPathExp);
|
244
|
+
if (!section) {
|
245
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(pageRelative.logical.path));
|
246
|
+
section = {
|
247
|
+
type: `SidebarSection`,
|
248
|
+
title: sectionTitle,
|
249
|
+
pathExp: sectionPathExp,
|
250
|
+
isNavToo: false,
|
251
|
+
navs: [],
|
252
|
+
};
|
253
|
+
sections.set(section);
|
254
|
+
}
|
255
|
+
section.isNavToo = true;
|
256
|
+
continue;
|
257
|
+
}
|
258
|
+
// Nav
|
259
|
+
navs.push(pageToSidebarNav(page, basePath));
|
260
|
+
continue;
|
261
|
+
}
|
262
|
+
// Section (sub-page)
|
263
|
+
if (FileRouter.routeIsSubLevel(pageRelative)) {
|
264
|
+
const sectionRelativePath = [pageRelative.logical.path[0]];
|
265
|
+
const sectionPath = [...basePath, ...sectionRelativePath];
|
266
|
+
const sectionPathExp = FileRouter.pathToExpression(sectionPath);
|
267
|
+
let section;
|
268
|
+
section = sections.getKey(sectionPathExp);
|
269
|
+
if (!section) {
|
270
|
+
const sectionTitle = Str.titlizeSlug(FileRouter.pathToExpression(sectionRelativePath));
|
271
|
+
section = {
|
272
|
+
type: `SidebarSection`,
|
273
|
+
title: sectionTitle,
|
274
|
+
pathExp: sectionPathExp,
|
275
|
+
isNavToo: false,
|
276
|
+
navs: [],
|
277
|
+
};
|
278
|
+
sections.set(section);
|
279
|
+
}
|
280
|
+
section.navs.push(pageToSidebarNav(page, sectionPath));
|
281
|
+
}
|
282
|
+
}
|
283
|
+
const items = [...navs, ...sections.data.array];
|
284
|
+
return {
|
285
|
+
items,
|
286
|
+
};
|
287
|
+
};
|
288
|
+
/**
|
289
|
+
* Helper function to build sidebar items recursively
|
290
|
+
*/
|
291
|
+
const pageToSidebarNav = (page, basePath) => {
|
292
|
+
const pagePathExp = FileRouter.routeToPathExpression(page);
|
293
|
+
const pageRelative = FileRouter.makeRelativeUnsafe(page, basePath);
|
294
|
+
const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative);
|
295
|
+
return {
|
296
|
+
type: `SidebarItem`,
|
297
|
+
pathExp: pagePathExp,
|
298
|
+
title: Str.titlizeSlug(pageRelativePathExp),
|
299
|
+
};
|
300
|
+
};
|
207
301
|
//# sourceMappingURL=core.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/linter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAA+
|
1
|
+
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/linter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAA+C,MAAM,YAAY,CAAA;AAEpG,MAAM,MAAM,UAAU,GAAG,uBAAuB,CAAA;AAEhD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE;QACP,IAAI,EAAE,SAAS,CAAA;KAChB,CAAA;IACD,KAAK,EAAE;QACL,IAAI,EAAE,SAAS,CAAA;KAChB,CAAA;CACF;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,KAAK,EAAE,KAAG,UA0CtC,CAAA"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { Idx, Path } from '@wollybeard/kit';
|
2
|
-
import {
|
2
|
+
import { routeIsFromIndexFile, routeToPathExpression } from './route.js';
|
3
3
|
export const lint = (routes) => {
|
4
4
|
const diagnostics = [];
|
5
|
-
const seen = Idx.create({ toKey:
|
5
|
+
const seen = Idx.create({ toKey: routeToPathExpression });
|
6
6
|
// ━ Check for conflict between index and literal.
|
7
7
|
// Note: There is no other way for paths to conflict so we safely assuming the cause is index+literal.
|
8
8
|
for (const route of routes) {
|
@@ -10,7 +10,7 @@ export const lint = (routes) => {
|
|
10
10
|
const seenRoute = seen.get(route);
|
11
11
|
if (seenRoute) {
|
12
12
|
// Fix - ignore the index
|
13
|
-
const [index, literal] =
|
13
|
+
const [index, literal] = routeIsFromIndexFile(route) ? [route, seenRoute] : [seenRoute, route];
|
14
14
|
if (seenRoute === index) {
|
15
15
|
seen.set(route);
|
16
16
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../../src/lib/file-router/linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAA8B,
|
1
|
+
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../../src/lib/file-router/linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAA8B,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAmBpG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAe,EAAc,EAAE;IAClD,MAAM,WAAW,GAAiB,EAAE,CAAA;IAEpC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAA;IAEzD,kDAAkD;IAClD,wGAAwG;IACxG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,SAAS;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAEjC,IAAI,SAAS,EAAE,CAAC;YACd,yBAAyB;YACzB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC9F,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC;YAED,SAAS;YACT,MAAM,UAAU,GAA4B;gBAC1C,gBAAgB;gBAChB,OAAO,EAAE,sEAAsE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oDAAoD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,yCAAyC;gBACxP,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB;aACF,CAAA;YACD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAE5B,SAAQ;QACV,CAAC;QAED,WAAW;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC;IAED,OAAO;QACL,WAAW;QACX,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;KACxB,CAAA;AACH,CAAC,CAAA"}
|
@@ -1,7 +1,17 @@
|
|
1
|
-
import type
|
2
|
-
export type
|
3
|
-
export
|
4
|
-
|
1
|
+
import { type Path } from '@wollybeard/kit';
|
2
|
+
export type Path = PathSegment[];
|
3
|
+
export type PathRoot = [];
|
4
|
+
export type PathTop = [PathSegment];
|
5
|
+
export type PathSub = [PathSegment, PathSegment, ...PathSegment[]];
|
6
|
+
export type PathSegment = string;
|
7
|
+
export declare const sep = "/";
|
8
|
+
export declare const pathToExpression: (path: Path) => string;
|
9
|
+
export interface Route {
|
10
|
+
logical: RouteLogical;
|
11
|
+
file: RouteFile;
|
12
|
+
}
|
13
|
+
export interface RouteLogical {
|
14
|
+
path: Path;
|
5
15
|
}
|
6
16
|
export interface RouteFile {
|
7
17
|
path: {
|
@@ -9,11 +19,39 @@ export interface RouteFile {
|
|
9
19
|
absolute: Path.Parsed;
|
10
20
|
};
|
11
21
|
}
|
12
|
-
export interface Route {
|
13
|
-
|
14
|
-
file: RouteFile;
|
22
|
+
export interface TopLevelRoute extends Route {
|
23
|
+
logical: TopLevelRouteLogical;
|
15
24
|
}
|
16
|
-
export
|
17
|
-
|
18
|
-
|
25
|
+
export interface TopLevelRouteLogical {
|
26
|
+
path: PathTop;
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* Route is top level meaning exists directly under the root.
|
30
|
+
*
|
31
|
+
* It excludes the root level route.
|
32
|
+
*/
|
33
|
+
export declare const routeIsTopLevel: (route: Route) => route is TopLevelRoute;
|
34
|
+
export interface RouteSubLevel extends Route {
|
35
|
+
logical: RoutePathSubLevel;
|
36
|
+
}
|
37
|
+
export interface RoutePathSubLevel {
|
38
|
+
path: PathSub;
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* Route is not top or root level
|
42
|
+
*/
|
43
|
+
export declare const routeIsSubLevel: (route: Route) => route is RouteSubLevel;
|
44
|
+
/**
|
45
|
+
* Route is the singular root route.
|
46
|
+
|
47
|
+
* This is the case of index under root.
|
48
|
+
*/
|
49
|
+
export declare const routeIsRootLevel: (route: Route) => route is TopLevelRoute;
|
50
|
+
export declare const routeIsFromIndexFile: (route: Route) => boolean;
|
51
|
+
export declare const routeIsSubOf: (route: Route, potentialAncestorPath: PathSegment[]) => boolean;
|
52
|
+
/**
|
53
|
+
* You are responsible for ensuring given ancestor path is really an ancestor of given route's path.
|
54
|
+
*/
|
55
|
+
export declare const makeRelativeUnsafe: (route: Route, assumedAncestorPath: PathSegment[]) => Route;
|
56
|
+
export declare const routeToPathExpression: (route: Route) => string;
|
19
57
|
//# sourceMappingURL=route.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAU3C,MAAM,MAAM,IAAI,GAAG,WAAW,EAAE,CAAA;AAEhC,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEzB,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAElE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,eAAO,MAAM,GAAG,MAAM,CAAA;AAEtB,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,WAE1C,CAAA;AAUD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,YAAY,CAAA;IACrB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAA;CACX;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;KACtB,CAAA;CACF;AAUD,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,EAAE,oBAAoB,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAEvD,CAAA;AAcD,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAA;CACd;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAEvD,CAAA;AAcD;;;;EAIE;AACF,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,KAAG,KAAK,IAAI,aAIxD,CAAA;AASD,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,KAAG,OAEnD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,uBAAuB,WAAW,EAAE,KAAG,OAQjF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,qBAAqB,WAAW,EAAE,KAAG,KAUrF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,KAAK,WAEjD,CAAA"}
|
@@ -1,10 +1,75 @@
|
|
1
|
+
import { arrayEquals } from '#lib/kit-temp.js';
|
2
|
+
import {} from '@wollybeard/kit';
|
1
3
|
export const sep = `/`;
|
2
|
-
export const
|
3
|
-
return sep +
|
4
|
+
export const pathToExpression = (path) => {
|
5
|
+
return sep + path.join(sep);
|
4
6
|
};
|
5
|
-
|
7
|
+
/**
|
8
|
+
* Route is top level meaning exists directly under the root.
|
9
|
+
*
|
10
|
+
* It excludes the root level route.
|
11
|
+
*/
|
12
|
+
export const routeIsTopLevel = (route) => {
|
13
|
+
return route.logical.path.length === 1;
|
14
|
+
};
|
15
|
+
/**
|
16
|
+
* Route is not top or root level
|
17
|
+
*/
|
18
|
+
export const routeIsSubLevel = (route) => {
|
19
|
+
return route.logical.path.length > 1;
|
20
|
+
};
|
21
|
+
//
|
22
|
+
// ━━ Root Level
|
23
|
+
//
|
24
|
+
//
|
25
|
+
//
|
26
|
+
//
|
27
|
+
//
|
28
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ • Root Level Route
|
29
|
+
//
|
30
|
+
//
|
31
|
+
/**
|
32
|
+
* Route is the singular root route.
|
33
|
+
|
34
|
+
* This is the case of index under root.
|
35
|
+
*/
|
36
|
+
export const routeIsRootLevel = (route) => {
|
37
|
+
// No need to check for name "index"
|
38
|
+
// Segments is uniquely empty for <root>/index
|
39
|
+
return route.logical.path.length === 0;
|
40
|
+
};
|
41
|
+
//
|
42
|
+
//
|
43
|
+
//
|
44
|
+
// ━━━━━━━━━━━━━━ • Route Functions
|
45
|
+
//
|
46
|
+
//
|
47
|
+
export const routeIsFromIndexFile = (route) => {
|
6
48
|
return route.file.path.relative.name === conventions.index.name;
|
7
49
|
};
|
50
|
+
export const routeIsSubOf = (route, potentialAncestorPath) => {
|
51
|
+
if (route.logical.path.length <= potentialAncestorPath.length) {
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
return arrayEquals(route.logical.path.slice(0, potentialAncestorPath.length), potentialAncestorPath);
|
55
|
+
};
|
56
|
+
/**
|
57
|
+
* You are responsible for ensuring given ancestor path is really an ancestor of given route's path.
|
58
|
+
*/
|
59
|
+
export const makeRelativeUnsafe = (route, assumedAncestorPath) => {
|
60
|
+
// We assume that we're working with paths where index is elided per our FileRouter system.
|
61
|
+
const newPath = route.logical.path.slice(assumedAncestorPath.length);
|
62
|
+
return {
|
63
|
+
...route,
|
64
|
+
logical: {
|
65
|
+
...route.logical,
|
66
|
+
path: newPath,
|
67
|
+
},
|
68
|
+
};
|
69
|
+
};
|
70
|
+
export const routeToPathExpression = (route) => {
|
71
|
+
return pathToExpression(route.logical.path);
|
72
|
+
};
|
8
73
|
const conventions = {
|
9
74
|
index: {
|
10
75
|
name: `index`,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/lib/file-router/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAa,MAAM,iBAAiB,CAAA;AAoB3C,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAA;AAEtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC7C,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC,CAAA;AA0CD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAA0B,EAAE;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;AACxC,CAAC,CAAA;AAsBD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAY,EAA0B,EAAE;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,EAAE;AACF,gBAAgB;AAChB,EAAE;AAEF,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,gEAAgE;AAChE,EAAE;AACF,EAAE;AAEF;;;;EAIE;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAA0B,EAAE;IACvE,oCAAoC;IACpC,8CAA8C;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,EAAE;AACF,EAAE;AACF,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,EAAE;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAW,EAAE;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,qBAAoC,EAAW,EAAE;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,WAAW,CAChB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACzD,qBAAqB,CACtB,CAAA;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,mBAAkC,EAAS,EAAE;IAC5F,2FAA2F;IAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpE,OAAO;QACL,GAAG,KAAK;QACR,OAAO,EAAE;YACP,GAAG,KAAK,CAAC,OAAO;YAChB,IAAI,EAAE,OAAO;SACd;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,EAAE;IACpD,OAAO,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;CACF,CAAA"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Path } from '@wollybeard/kit';
|
2
2
|
import { type Diagnostic } from './linter.js';
|
3
|
-
import type { Route,
|
3
|
+
import type { Route, RouteLogical } from './route.js';
|
4
4
|
export interface ScanResult {
|
5
5
|
routes: Route[];
|
6
6
|
diagnostics: Diagnostic[];
|
@@ -10,5 +10,5 @@ export declare const scan: (parameters: {
|
|
10
10
|
glob?: string;
|
11
11
|
}) => Promise<ScanResult>;
|
12
12
|
export declare const filePathToRoute: (filePathExpression: string, rootDir: string) => Route;
|
13
|
-
export declare const
|
13
|
+
export declare const filePathToRouteLogical: (filePath: Path.Parsed) => RouteLogical;
|
14
14
|
//# sourceMappingURL=scan.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAO,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAa,
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAO,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAA;AAwBhE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B;AAUD,eAAO,MAAM,IAAI,GAAU,YAAY;IACrC,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KAAG,OAAO,CAAC,UAAU,CAcrB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,EAAE,SAAS,MAAM,KAAG,KAa7E,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,UAAU,IAAI,CAAC,MAAM,KAAG,YAc9D,CAAA"}
|
@@ -38,23 +38,23 @@ export const filePathToRoute = (filePathExpression, rootDir) => {
|
|
38
38
|
relative: Path.parse(Path.relative(rootDir, filePathExpression)),
|
39
39
|
},
|
40
40
|
};
|
41
|
-
const
|
41
|
+
const logical = filePathToRouteLogical(file.path.relative);
|
42
42
|
return {
|
43
|
-
|
43
|
+
logical,
|
44
44
|
file,
|
45
45
|
};
|
46
46
|
};
|
47
|
-
export const
|
48
|
-
const
|
47
|
+
export const filePathToRouteLogical = (filePath) => {
|
48
|
+
const dirPath = Str.split(Str.removeSurrounding(filePath.dir, Path.sep), Path.sep);
|
49
49
|
if (Str.isMatch(filePath.name, conventions.index.name)) {
|
50
|
-
const
|
50
|
+
const path = dirPath;
|
51
51
|
return {
|
52
|
-
|
52
|
+
path,
|
53
53
|
};
|
54
54
|
}
|
55
|
-
const
|
55
|
+
const path = dirPath.concat(filePath.name);
|
56
56
|
return {
|
57
|
-
|
57
|
+
path,
|
58
58
|
};
|
59
59
|
};
|
60
60
|
//# sourceMappingURL=scan.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAmB,IAAI,EAAE,MAAM,aAAa,CAAA;AAGnD,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,yDAAyD;AACzD,EAAE;AACF,EAAE;AAEF,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;CACF,CAAA;AAeD,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,oDAAoD;AACpD,EAAE;AACF,EAAE;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,UAG1B,EAAuB,EAAE;IACxB,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEzC,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;QAClD,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,GAAG;QACR,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAY,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;IAEvF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAE/B,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,kBAA0B,EAAE,OAAe,EAAS,EAAE;IACpF,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACxC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;SACjE;KACF,CAAA;IACD,MAAM,
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/lib/file-router/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAmB,IAAI,EAAE,MAAM,aAAa,CAAA;AAGnD,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,yDAAyD;AACzD,EAAE;AACF,EAAE;AAEF,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;CACF,CAAA;AAeD,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,oDAAoD;AACpD,EAAE;AACF,EAAE;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,UAG1B,EAAuB,EAAE;IACxB,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,UAAU,CAAA;IAEzC,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;QAClD,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,GAAG;QACR,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,MAAM,GAAY,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;IAEvF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAE/B,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,kBAA0B,EAAE,OAAe,EAAS,EAAE;IACpF,MAAM,IAAI,GAAc;QACtB,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACxC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;SACjE;KACF,CAAA;IACD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAE1D,OAAO;QACL,OAAO;QACP,IAAI;KACL,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAqB,EAAgB,EAAE;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAElF,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,OAAO,CAAA;QACpB,OAAO;YACL,IAAI;SACL,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO;QACL,IAAI;KACL,CAAA;AACH,CAAC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/lib/file-router/sidebar.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/lib/file-router/sidebar.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kit-temp.d.ts","sourceRoot":"","sources":["../../src/lib/kit-temp.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,WAAW,GAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,YAM7C,CAAA"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
//
|
4
|
+
//
|
5
|
+
//
|
6
|
+
// Holding Module for Missing @wollybeard/kit Functionality
|
7
|
+
//
|
8
|
+
// ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
|
9
|
+
//
|
10
|
+
// Code here is meant to be migrated eventually to @wollybeard/kit.
|
11
|
+
//
|
12
|
+
//
|
13
|
+
//
|
14
|
+
export const arrayEquals = (a, b) => {
|
15
|
+
if (a.length !== b.length)
|
16
|
+
return false;
|
17
|
+
for (let i = 0; i < a.length; i++) {
|
18
|
+
if (a[i] !== b[i])
|
19
|
+
return false;
|
20
|
+
}
|
21
|
+
return true;
|
22
|
+
};
|
23
|
+
//# sourceMappingURL=kit-temp.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kit-temp.js","sourceRoot":"","sources":["../../src/lib/kit-temp.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,EAAE;AACF,2DAA2D;AAC3D,EAAE;AACF,mFAAmF;AACnF,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,EAAE;AACF,EAAE;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAQ,EAAE,CAAQ,EAAE,EAAE;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|