polen 0.8.0-next.4 → 0.8.0-next.5

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 (37) hide show
  1. package/build/api/vite/plugins/core.d.ts.map +1 -1
  2. package/build/api/vite/plugins/core.js +83 -52
  3. package/build/api/vite/plugins/core.js.map +1 -1
  4. package/build/lib/file-router/linter.d.ts.map +1 -1
  5. package/build/lib/file-router/linter.js +3 -3
  6. package/build/lib/file-router/linter.js.map +1 -1
  7. package/build/lib/file-router/route.d.ts +48 -10
  8. package/build/lib/file-router/route.d.ts.map +1 -1
  9. package/build/lib/file-router/route.js +68 -3
  10. package/build/lib/file-router/route.js.map +1 -1
  11. package/build/lib/file-router/scan.d.ts +2 -2
  12. package/build/lib/file-router/scan.d.ts.map +1 -1
  13. package/build/lib/file-router/scan.js +8 -8
  14. package/build/lib/file-router/scan.js.map +1 -1
  15. package/build/lib/kit-temp.d.ts +2 -0
  16. package/build/lib/kit-temp.d.ts.map +1 -0
  17. package/build/lib/kit-temp.js +23 -0
  18. package/build/lib/kit-temp.js.map +1 -0
  19. package/build/project-data.d.ts +10 -1
  20. package/build/project-data.d.ts.map +1 -1
  21. package/build/template/components/Sidebar.d.ts +11 -0
  22. package/build/template/components/Sidebar.d.ts.map +1 -0
  23. package/build/template/components/Sidebar.jsx +47 -0
  24. package/build/template/components/Sidebar.jsx.map +1 -0
  25. package/build/template/routes/root.d.ts.map +1 -1
  26. package/build/template/routes/root.jsx +28 -5
  27. package/build/template/routes/root.jsx.map +1 -1
  28. package/package.json +1 -1
  29. package/src/api/vite/plugins/core.ts +97 -54
  30. package/src/lib/file-router/index.test.ts +5 -5
  31. package/src/lib/file-router/linter.ts +3 -3
  32. package/src/lib/file-router/route.ts +147 -11
  33. package/src/lib/file-router/scan.ts +9 -9
  34. package/src/lib/kit-temp.ts +21 -0
  35. package/src/project-data.ts +12 -1
  36. package/src/template/components/Sidebar.tsx +92 -0
  37. 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":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAS9C,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,EAiNnE,CAAA"}
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;AAS9C,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,EA6PnE,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, Fs, Json, Path, Str } from '@wollybeard/kit';
4
+ import { Cache, 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
- name: `polen:markdown`,
45
- enforce: `pre`,
46
- resolveId(id) {
47
- if (id.endsWith(`.md`)) {
48
- return id;
49
- }
50
- return null;
51
- },
52
- async load(id) {
53
- if (id.endsWith(`.md`)) {
54
- const markdownString = await Fs.read(id);
55
- if (!markdownString)
56
- return null;
57
- const htmlString = await Markdown.parse(markdownString);
58
- const code = `export default ${JSON.stringify(htmlString)}`;
59
- return code;
60
- }
61
- return null;
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,68 @@ 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
- const siteNavigationItemsFromTopLevelPages = pagesScanResult.routes
127
- // We exclude home page
128
- .filter(route => route.path.segments.length === 1)
129
- .map(route => {
130
- const path = FileRouter.routeToString(route);
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
- return {
133
- path,
134
- title,
135
- };
136
- });
137
- siteNavigationItems.push(...siteNavigationItemsFromTopLevelPages);
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({ path: `/reference`, title: `Reference` });
154
+ siteNavigationItems.push({ pathExp: `/reference`, title: `Reference` });
140
155
  if (schema.versions.length > 1) {
141
- siteNavigationItems.push({ path: `/changelog`, title: `Changelog` });
156
+ siteNavigationItems.push({ pathExp: `/changelog`, title: `Changelog` });
142
157
  }
143
158
  }
159
+ //
160
+ // ━━ Build Sidebar
161
+ //
162
+ const sidebar = {};
163
+ for (const dirPath of topDirsPaths) {
164
+ const childPages = pagesScanResult.routes.filter(page => FileRouter.routeIsSubOf(page, dirPath));
165
+ const sidebarItems = [];
166
+ // ━ Pages in this dir become sidebar items
167
+ for (const childPage of childPages) {
168
+ const childPageRelative = FileRouter.makeRelativeUnsafe(childPage, dirPath);
169
+ if (FileRouter.routeIsRootLevel(childPageRelative)) {
170
+ // We elide root from items. Root represents this whole group of items.
171
+ continue;
172
+ }
173
+ if (FileRouter.routeIsTopLevel(childPageRelative)) {
174
+ const pathExp = FileRouter.routeToPathExpression(childPage);
175
+ const relativePathExp = FileRouter.routeToPathExpression(childPageRelative);
176
+ const title = Str.titlizeSlug(relativePathExp);
177
+ sidebarItems.push({ pathExp, title });
178
+ }
179
+ // TODO: Handle nested directories in phase 3
180
+ }
181
+ sidebar[FileRouter.pathToExpression(dirPath)] = sidebarItems;
182
+ }
144
183
  const projectData = {
145
184
  schema,
146
185
  siteNavigationItems,
186
+ sidebar,
147
187
  faviconPath: `/logo.svg`,
148
188
  pagesScanResult: pagesScanResult,
149
189
  paths: config.paths.project,
@@ -177,24 +217,15 @@ export const Core = (config) => {
177
217
  s `export const ${$.pages} = []`;
178
218
  // todo: kit fs should accept parsed file paths
179
219
  for (const route of pagesScanResult.routes) {
180
- const filePath = Path.format(route.file.path.absolute);
181
- const path = FileRouter.routeToString(route);
182
- const ident = Str.Case.camel(`page ` + Str.titlizeSlug(path));
220
+ const filePathExp = Path.format(route.file.path.absolute);
221
+ const pathExp = FileRouter.routeToPathExpression(route);
222
+ const ident = Str.Case.camel(`page ` + Str.titlizeSlug(pathExp));
183
223
  s `
184
- import ${ident} from '${filePath}'
224
+ import ${ident} from '${filePathExp}'
185
225
 
186
226
  ${$.pages}.push({
187
- path: '${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
- }
227
+ path: '${pathExp}',
228
+ Component: ${ident}
198
229
  })
199
230
  `;
200
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"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"}
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+B,MAAM,YAAY,CAAA;AAEpF,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
+ {"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 { routeIsIndex, routeToString } from './route.js';
2
+ import { routeIsFromIndexFile, routeToPathExpression } from './route.js';
3
3
  export const lint = (routes) => {
4
4
  const diagnostics = [];
5
- const seen = Idx.create({ toKey: routeToString });
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] = routeIsIndex(route) ? [route, seenRoute] : [seenRoute, route];
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,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAmBpF,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,aAAa,EAAE,CAAC,CAAA;IAEjD,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,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACtF,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
+ {"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 { Path } from '@wollybeard/kit';
2
- export type RoutePathSegment = string;
3
- export interface RoutePath {
4
- segments: RoutePathSegment[];
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
- path: RoutePath;
14
- file: RouteFile;
22
+ export interface TopLevelRoute extends Route {
23
+ logical: TopLevelRouteLogical;
15
24
  }
16
- export declare const sep = "/";
17
- export declare const routeToString: (route: Route) => string;
18
- export declare const routeIsIndex: (route: Route) => boolean;
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":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAErC,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAA;KACtB,CAAA;CACF;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,eAAO,MAAM,GAAG,MAAM,CAAA;AAEtB,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,WAEzC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,YAExC,CAAA"}
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 routeToString = (route) => {
3
- return sep + route.path.segments.join(sep);
4
+ export const pathToExpression = (path) => {
5
+ return sep + path.join(sep);
4
6
  };
5
- export const routeIsIndex = (route) => {
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":"AAoBA,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAA;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE;IAC5C,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,EAAE;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;KACd;CACF,CAAA"}
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, RoutePath } from './route.js';
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 filePathToRoutePath: (filePath: Path.Parsed) => RoutePath;
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,SAAS,EAAE,MAAM,YAAY,CAAA;AAwB7D,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,mBAAmB,GAAI,UAAU,IAAI,CAAC,MAAM,KAAG,SAc3D,CAAA"}
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 path = filePathToRoutePath(file.path.relative);
41
+ const logical = filePathToRouteLogical(file.path.relative);
42
42
  return {
43
- path,
43
+ logical,
44
44
  file,
45
45
  };
46
46
  };
47
- export const filePathToRoutePath = (filePath) => {
48
- const dirSegments = Str.split(Str.removeSurrounding(filePath.dir, Path.sep), Path.sep);
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 segments = dirSegments;
50
+ const path = dirPath;
51
51
  return {
52
- segments,
52
+ path,
53
53
  };
54
54
  }
55
- const segments = dirSegments.concat(filePath.name);
55
+ const path = dirPath.concat(filePath.name);
56
56
  return {
57
- segments,
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,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEpD,OAAO;QACL,IAAI;QACJ,IAAI;KACL,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAqB,EAAa,EAAE;IACtE,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAEtF,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,WAAW,CAAA;QAC5B,OAAO;YACL,QAAQ;SACT,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAClD,OAAO;QACL,QAAQ;KACT,CAAA;AACH,CAAC,CAAA"}
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,2 @@
1
+ export declare const arrayEquals: (a: any[], b: any[]) => boolean;
2
+ //# sourceMappingURL=kit-temp.d.ts.map
@@ -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"}
@@ -4,6 +4,7 @@ import type { Schema } from './api/schema/index.js';
4
4
  export interface ProjectData {
5
5
  schema: null | Schema.Schema;
6
6
  siteNavigationItems: SiteNavigationItem[];
7
+ sidebar: Sidebar;
7
8
  faviconPath: string;
8
9
  paths: Configurator.Config[`paths`][`project`];
9
10
  pagesScanResult: FileRouter.ScanResult;
@@ -16,6 +17,14 @@ export interface ProjectData {
16
17
  }
17
18
  export interface SiteNavigationItem {
18
19
  title: string;
19
- path: string;
20
+ pathExp: string;
21
+ }
22
+ export interface Sidebar {
23
+ [navPath: string]: SidebarItem[];
24
+ }
25
+ export interface SidebarItem {
26
+ title: string;
27
+ pathExp: string;
28
+ children?: SidebarItem[];
20
29
  }
21
30
  //# sourceMappingURL=project-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-data.d.ts","sourceRoot":"","sources":["../src/project-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9C,eAAe,EAAE,UAAU,CAAC,UAAU,CAAA;IACtC,MAAM,EAAE;QACN,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAA;YACjB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAA;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb"}
1
+ {"version":3,"file":"project-data.d.ts","sourceRoot":"","sources":["../src/project-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAC5B,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9C,eAAe,EAAE,UAAU,CAAC,UAAU,CAAA;IACtC,MAAM,EAAE;QACN,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAA;YACjB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAA;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB"}
@@ -0,0 +1,11 @@
1
+ export interface SidebarItem {
2
+ title: string;
3
+ pathExp: string;
4
+ children?: SidebarItem[];
5
+ }
6
+ interface SidebarProps {
7
+ items: SidebarItem[];
8
+ }
9
+ export declare const Sidebar: ({ items }: SidebarProps) => import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=Sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,eAAO,MAAM,OAAO,GAAI,WAAW,YAAY,gCAuB9C,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { Box, Flex, Text } from '@radix-ui/themes';
2
+ import { Link, useLocation } from 'react-router';
3
+ export const Sidebar = ({ items }) => {
4
+ const location = useLocation();
5
+ return (<Box style={{
6
+ width: `240px`,
7
+ borderRight: `1px solid var(--gray-3)`,
8
+ height: `100%`,
9
+ paddingRight: `var(--space-4)`,
10
+ }}>
11
+ <Flex direction='column' gap='1'>
12
+ {items.map((item) => (<SidebarItem key={item.pathExp} item={item} currentPathExp={location.pathname}/>))}
13
+ </Flex>
14
+ </Box>);
15
+ };
16
+ const SidebarItem = ({ item, currentPathExp: currentPath, level = 0 }) => {
17
+ const isActive = currentPath === item.pathExp;
18
+ const hasChildren = item.children && item.children.length > 0;
19
+ return (<>
20
+ <Link to={item.pathExp} style={{
21
+ textDecoration: `none`,
22
+ color: isActive ? `var(--accent-11)` : `var(--gray-12)`,
23
+ padding: `var(--space-2) var(--space-3)`,
24
+ paddingLeft: `calc(var(--space-3) + ${(level * 16).toString()}px)`,
25
+ borderRadius: `var(--radius-2)`,
26
+ display: `block`,
27
+ backgroundColor: isActive ? `var(--accent-3)` : `transparent`,
28
+ transition: `background-color 0.2s ease, color 0.2s ease`,
29
+ }} onMouseEnter={(e) => {
30
+ if (!isActive) {
31
+ e.currentTarget.style.backgroundColor = `var(--gray-2)`;
32
+ }
33
+ }} onMouseLeave={(e) => {
34
+ if (!isActive) {
35
+ e.currentTarget.style.backgroundColor = `transparent`;
36
+ }
37
+ }}>
38
+ <Text size='2' weight={isActive ? `medium` : `regular`}>
39
+ {item.title}
40
+ </Text>
41
+ </Link>
42
+ {hasChildren && (<Flex direction='column' gap='1'>
43
+ {item.children.map((child) => (<SidebarItem key={child.pathExp} item={child} currentPathExp={currentPath} level={level + 1}/>))}
44
+ </Flex>)}
45
+ </>);
46
+ };
47
+ //# sourceMappingURL=Sidebar.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.jsx","sourceRoot":"","sources":["../../../src/template/components/Sidebar.tsx"],"names":[],"mappings":"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"}