polen 0.9.0-next.3 → 0.9.0-next.4

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 (105) hide show
  1. package/build/api/server/report-error.d.ts +2 -0
  2. package/build/api/server/report-error.d.ts.map +1 -0
  3. package/build/api/server/report-error.js +47 -0
  4. package/build/api/server/report-error.js.map +1 -0
  5. package/build/api/vite/data/navbar.d.ts +9 -0
  6. package/build/api/vite/data/navbar.d.ts.map +1 -0
  7. package/build/api/vite/data/navbar.js +6 -0
  8. package/build/api/vite/data/navbar.js.map +1 -0
  9. package/build/api/vite/plugins/core.d.ts.map +1 -1
  10. package/build/api/vite/plugins/core.js +36 -104
  11. package/build/api/vite/plugins/core.js.map +1 -1
  12. package/build/api/vite/plugins/pages.d.ts +12 -3
  13. package/build/api/vite/plugins/pages.d.ts.map +1 -1
  14. package/build/api/vite/plugins/pages.js +155 -35
  15. package/build/api/vite/plugins/pages.js.map +1 -1
  16. package/build/api/vite/plugins/serve.d.ts.map +1 -1
  17. package/build/api/vite/plugins/serve.js +5 -26
  18. package/build/api/vite/plugins/serve.js.map +1 -1
  19. package/build/cli/commands/dev.js +9 -1
  20. package/build/cli/commands/dev.js.map +1 -1
  21. package/build/lib/debug/environment-variable.d.ts +1 -0
  22. package/build/lib/debug/environment-variable.d.ts.map +1 -1
  23. package/build/lib/debug/environment-variable.js +30 -15
  24. package/build/lib/debug/environment-variable.js.map +1 -1
  25. package/build/lib/extensible-data/extensible-data.d.ts +17 -0
  26. package/build/lib/extensible-data/extensible-data.d.ts.map +1 -0
  27. package/build/lib/extensible-data/extensible-data.js +24 -0
  28. package/build/lib/extensible-data/extensible-data.js.map +1 -0
  29. package/build/lib/extensible-data/index.d.ts +2 -0
  30. package/build/lib/extensible-data/index.d.ts.map +1 -0
  31. package/build/lib/extensible-data/index.js +2 -0
  32. package/build/lib/extensible-data/index.js.map +1 -0
  33. package/build/lib/kit-temp.d.ts +2 -0
  34. package/build/lib/kit-temp.d.ts.map +1 -1
  35. package/build/lib/kit-temp.js +10 -1
  36. package/build/lib/kit-temp.js.map +1 -1
  37. package/build/lib/react-router-loader/react-router-loader.d.ts.map +1 -1
  38. package/build/lib/react-router-loader/react-router-loader.js +0 -1
  39. package/build/lib/react-router-loader/react-router-loader.js.map +1 -1
  40. package/build/lib/vite-plugin-json/index.d.ts +2 -0
  41. package/build/lib/vite-plugin-json/index.d.ts.map +1 -0
  42. package/build/lib/vite-plugin-json/index.js +2 -0
  43. package/build/lib/vite-plugin-json/index.js.map +1 -0
  44. package/build/lib/vite-plugin-json/vite-plugin-json.d.ts +64 -0
  45. package/build/lib/vite-plugin-json/vite-plugin-json.d.ts.map +1 -0
  46. package/build/lib/vite-plugin-json/vite-plugin-json.js +59 -0
  47. package/build/lib/vite-plugin-json/vite-plugin-json.js.map +1 -0
  48. package/build/lib/vite-plugin-reactive-data/index.d.ts +2 -0
  49. package/build/lib/vite-plugin-reactive-data/index.d.ts.map +1 -0
  50. package/build/lib/vite-plugin-reactive-data/index.js +2 -0
  51. package/build/lib/vite-plugin-reactive-data/index.js.map +1 -0
  52. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts +39 -0
  53. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts.map +1 -0
  54. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js +92 -0
  55. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js.map +1 -0
  56. package/build/lib/vite-plugins/build-logger.d.ts.map +1 -1
  57. package/build/lib/vite-plugins/build-logger.js +9 -8
  58. package/build/lib/vite-plugins/build-logger.js.map +1 -1
  59. package/build/project-data.d.ts +0 -11
  60. package/build/project-data.d.ts.map +1 -1
  61. package/build/template/components/Link.d.ts.map +1 -1
  62. package/build/template/components/Link.jsx +4 -3
  63. package/build/template/components/Link.jsx.map +1 -1
  64. package/build/template/routes/changelog.jsx +1 -1
  65. package/build/template/routes/changelog.jsx.map +1 -1
  66. package/build/template/routes/reference.jsx +1 -1
  67. package/build/template/routes/reference.jsx.map +1 -1
  68. package/build/template/routes/root.d.ts.map +1 -1
  69. package/build/template/routes/root.jsx +5 -3
  70. package/build/template/routes/root.jsx.map +1 -1
  71. package/build/template/server/app.js +1 -1
  72. package/build/template/server/app.js.map +1 -1
  73. package/build/template/server/render-page.d.ts.map +1 -1
  74. package/build/template/server/render-page.jsx +4 -1
  75. package/build/template/server/render-page.jsx.map +1 -1
  76. package/build/template/server/ssg/generate.js +1 -1
  77. package/build/template/server/ssg/generate.js.map +1 -1
  78. package/build/template/server/ssg/get-route-paths.js +1 -1
  79. package/build/template/server/ssg/get-route-paths.js.map +1 -1
  80. package/package.json +2 -1
  81. package/src/api/server/report-error.ts +61 -0
  82. package/src/api/vite/data/navbar.ts +15 -0
  83. package/src/api/vite/plugins/core.ts +38 -116
  84. package/src/api/vite/plugins/pages.ts +185 -40
  85. package/src/api/vite/plugins/serve.ts +5 -26
  86. package/src/cli/commands/dev.ts +9 -1
  87. package/src/lib/debug/environment-variable.ts +31 -14
  88. package/src/lib/extensible-data/extensible-data.ts +38 -0
  89. package/src/lib/extensible-data/index.ts +1 -0
  90. package/src/lib/kit-temp.ts +12 -1
  91. package/src/lib/react-router-loader/react-router-loader.ts +0 -1
  92. package/src/lib/vite-plugin-json/index.ts +1 -0
  93. package/src/lib/vite-plugin-json/vite-plugin-json.ts +128 -0
  94. package/src/lib/vite-plugin-reactive-data/index.ts +1 -0
  95. package/src/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.ts +131 -0
  96. package/src/lib/vite-plugins/build-logger.ts +10 -8
  97. package/src/project-data.ts +0 -13
  98. package/src/template/components/Link.tsx +6 -3
  99. package/src/template/routes/changelog.tsx +1 -1
  100. package/src/template/routes/reference.tsx +1 -1
  101. package/src/template/routes/root.tsx +5 -3
  102. package/src/template/server/app.ts +1 -1
  103. package/src/template/server/render-page.tsx +4 -1
  104. package/src/template/server/ssg/generate.ts +1 -1
  105. package/src/template/server/ssg/get-route-paths.ts +1 -1
@@ -0,0 +1,2 @@
1
+ export declare const reportError: (value: unknown) => Promise<void>;
2
+ //# sourceMappingURL=report-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-error.d.ts","sourceRoot":"","sources":["../../../src/api/server/report-error.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,GAAU,OAAO,OAAO,KAAG,OAAO,CAAC,IAAI,CAkB9D,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { Err } from '@wollybeard/kit';
2
+ import cleanStack from 'clean-stack';
3
+ import { ErrorParser } from 'youch-core';
4
+ export const reportError = async (value) => {
5
+ const error = Err.ensure(value);
6
+ const excludeStackFramesPattern = /.*(?:rolldown-vite|rolldown|node_modules).*/;
7
+ cleanStackRecursive(error, excludeStackFramesPattern);
8
+ Err.log(error);
9
+ const parser = new ErrorParser();
10
+ const parsedError = await parser.parse(error);
11
+ const snippets = createSnippets(parsedError);
12
+ if (snippets) {
13
+ console.log('\n\n\n\n' + snippets);
14
+ }
15
+ };
16
+ const createSnippets = (parsedError) => {
17
+ const snippets = parsedError.frames.map((frame) => {
18
+ let snippet = createSnippet(frame);
19
+ snippet = frame.fileName + '\n' + frame.lineNumber + '\n\n' + snippet;
20
+ return snippet;
21
+ }).join('\n\n----------------------------------------------------------------------------------\n\n');
22
+ return snippets;
23
+ };
24
+ const createSnippet = (stackFrame) => {
25
+ const snippet = stackFrame.source?.map(line => {
26
+ return line.lineNumber.toString().padStart(4, ' ') + `: ` + line.chunk;
27
+ }).join(`\n`);
28
+ return snippet;
29
+ };
30
+ // todo:
31
+ // pathFilter: Fn.compose(Str.isMatchWith(excludePattern), Bool.negate)
32
+ const cleanStackRecursive = (value, excludePattern) => {
33
+ if (value instanceof AggregateError) {
34
+ value.errors.forEach((error) => cleanStackRecursive(error, excludePattern));
35
+ }
36
+ // console.log(`Filtering path: ${path}`, isInclude ? 'Included' : 'Excluded')
37
+ if (value instanceof Error) {
38
+ value.stack = cleanStack(value.stack, {
39
+ pathFilter: (path) => !path.match(excludePattern),
40
+ // todo
41
+ // basePath: config.paths.project.rootDir,
42
+ // pretty: true,
43
+ });
44
+ cleanStackRecursive(value.cause, excludePattern);
45
+ }
46
+ };
47
+ //# sourceMappingURL=report-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-error.js","sourceRoot":"","sources":["../../../src/api/server/report-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,UAAU,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGxC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,KAAc,EAAiB,EAAE;IACjE,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAE/B,MAAM,yBAAyB,GAAG,6CAA6C,CAAA;IAE/E,mBAAmB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAA;IAErD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAEd,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAEhC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IAE5C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAA;IACpC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,WAAwB,EAAE,EAAE;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,IAAI,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QAElC,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,MAAM,GAAG,OAAO,CAAA;QACrE,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAA;IACrG,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;IACxE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,QAAQ;AACR,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAE,cAAsB,EAAE,EAAE;IACrE,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IAC7E,CAAC;IACD,8EAA8E;IAC9E,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;YACpC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;YACjD,OAAO;YACP,0CAA0C;YAC1C,gBAAgB;SACjB,CAAC,CAAA;QAEF,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAClD,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { ExtensibleData } from '#lib/extensible-data/index';
2
+ export interface NavbarItem {
3
+ pathExp: string;
4
+ title: string;
5
+ }
6
+ export type NavbarData = NavbarItem[];
7
+ export type NavbarDataRegistry = ExtensibleData.ExtensibleData<NavbarData>;
8
+ export declare const NavbarData: () => ExtensibleData.ExtensibleData<NavbarData>;
9
+ //# sourceMappingURL=navbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/data/navbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AACD,MAAM,MAAM,UAAU,GAAG,UAAU,EAAE,CAAA;AAErC,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;AAE1E,eAAO,MAAM,UAAU,iDAInB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { ExtensibleData } from '#lib/extensible-data/index';
2
+ export const NavbarData = () => ExtensibleData.create({
3
+ create: () => [],
4
+ join: (chunks) => chunks.flat(),
5
+ });
6
+ //# sourceMappingURL=navbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navbar.js","sourceRoot":"","sources":["../../../../src/api/vite/data/navbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAU3D,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAC7B,cAAc,CAAC,MAAM,CAAa;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;IAChB,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;CAChC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAsB3C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,CAAA;CACjC;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,CAAC,MAAM,KAAG,IAAI,CAAC,YAAY,EAkR7D,CAAA"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAoB3C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,CAAA;CACjC;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,CAAC,MAAM,KAAG,IAAI,CAAC,YAAY,EAqM7D,CAAA"}
@@ -1,26 +1,21 @@
1
+ import { NavbarData } from '#api/vite/data/navbar';
1
2
  import { VitePluginSelfContainedMode } from '#cli/_/self-contained-mode';
2
- import { reportDiagnostics } from '#lib/file-router/diagnostic-reporter';
3
- import { FileRouter } from '#lib/file-router/index';
4
- import { Tree } from '#lib/tree/index';
3
+ import { VitePluginJson } from '#lib/vite-plugin-json/index';
4
+ import { VitePluginReactiveData } from '#lib/vite-plugin-reactive-data/index';
5
5
  import { ViteVirtual } from '#lib/vite-virtual/index';
6
6
  import { debug } from '#singletons/debug';
7
+ import { superjson } from '#singletons/superjson';
7
8
  import { Json, Str } from '@wollybeard/kit';
8
- import jsesc from 'jsesc';
9
- import { superjson } from "../../../singletons/superjson.js";
10
9
  import { SchemaAugmentation } from "../../schema-augmentation/index.js";
11
10
  import { Schema } from "../../schema/index.js";
12
11
  import { createLogger } from "../logger.js";
13
12
  import { polenVirtual } from "../vi.js";
14
- import { createPagesPlugin, getRouteTree } from "./pages.js";
13
+ import { Pages } from "./pages.js";
15
14
  const _debug = debug.sub(`vite-plugin-core`);
16
15
  const viTemplateVariables = polenVirtual([`template`, `variables`]);
17
16
  const viTemplateSchemaAugmentations = polenVirtual([`template`, `schema-augmentations`]);
18
- const viProjectData = polenVirtual([`project`, `data`]);
17
+ const viProjectData = polenVirtual([`project`, `data.jsonsuper`], { allowPluginProcessing: true });
19
18
  export const Core = (config) => {
20
- // State for current pages data (updated by pages plugin)
21
- let currentPagesData = null;
22
- let currentTreeData = null;
23
- let viteDevServer = null;
24
19
  // Schema cache management
25
20
  let schemaCache = null;
26
21
  const readSchema = async () => {
@@ -38,6 +33,7 @@ export const Core = (config) => {
38
33
  return schemaCache;
39
34
  };
40
35
  const plugins = [];
36
+ const navbarData = NavbarData();
41
37
  // Note: The main use for this right now is to resolve the react imports
42
38
  // from the mdx vite plugin which have to go through the Polen exports since Polen keeps those deps bundled.
43
39
  //
@@ -48,25 +44,18 @@ export const Core = (config) => {
48
44
  projectDirPathExp: config.paths.project.rootDir,
49
45
  }));
50
46
  }
47
+ const json = VitePluginJson.create({
48
+ codec: {
49
+ validate: superjson,
50
+ importPath: import.meta.resolve('#singletons/superjson'),
51
+ importExport: 'superjson',
52
+ },
53
+ filter: {
54
+ moduleTypes: ['jsonsuper'],
55
+ },
56
+ });
51
57
  return [
52
58
  ...plugins,
53
- // Self-contained pages plugin
54
- ...createPagesPlugin({
55
- config,
56
- onPagesChange: (pages) => {
57
- currentPagesData = pages;
58
- // Invalidate project data virtual module to regenerate navigation/sidebar
59
- if (viteDevServer) {
60
- const projectDataModule = viteDevServer.moduleGraph.getModuleById(viProjectData.resolved);
61
- if (projectDataModule) {
62
- viteDevServer.moduleGraph.invalidateModule(projectDataModule);
63
- }
64
- }
65
- },
66
- onTreeChange: (tree) => {
67
- currentTreeData = tree;
68
- },
69
- }),
70
59
  /**
71
60
  * If a `polen*` import is encountered from the user's project, resolve it to the currently
72
61
  * running source code of Polen rather than the user's node_modules.
@@ -80,6 +69,7 @@ export const Core = (config) => {
80
69
  */
81
70
  {
82
71
  name: `polen:internal-import-alias`,
72
+ enforce: 'pre',
83
73
  resolveId(id, importer) {
84
74
  const d = debug.sub(`vite-plugin:internal-import-alias`);
85
75
  const isPolenImporter = Boolean(importer
@@ -108,11 +98,20 @@ export const Core = (config) => {
108
98
  return to;
109
99
  },
110
100
  },
101
+ json,
102
+ VitePluginReactiveData.create({
103
+ moduleId: `virtual:polen/project/data/navbar`,
104
+ data: navbarData.value,
105
+ codec: superjson,
106
+ name: `polen-navbar`,
107
+ moduleType: 'jsonsuper',
108
+ }),
109
+ ...Pages({
110
+ config,
111
+ navbarData,
112
+ }),
111
113
  {
112
114
  name: `polen:core`,
113
- configureServer(server) {
114
- viteDevServer = server;
115
- },
116
115
  config(_, { command }) {
117
116
  // isServing = command === `serve`
118
117
  return {
@@ -159,73 +158,14 @@ export const Core = (config) => {
159
158
  identifier: viProjectData,
160
159
  async loader() {
161
160
  _debug(`loadingViProjectDataVirtualModule`);
162
- // todo: parallel
163
161
  const schema = await readSchema();
164
- // Get pages data from the pages plugin or load initially
165
- if (!currentPagesData) {
166
- _debug(`loadingPagesDataInitially`);
167
- currentPagesData = await FileRouter.scan({
168
- dir: config.paths.project.absolute.pages,
169
- glob: `**/*.{md,mdx}`,
170
- });
171
- // Report any diagnostics from initial scan
172
- reportDiagnostics(currentPagesData.diagnostics);
173
- }
174
- if (!currentTreeData) {
175
- _debug(`loadingTreeDataInitially`);
176
- currentTreeData = await getRouteTree(config);
177
- }
178
- const pagesScanResult = currentPagesData;
179
- const routeTree = currentTreeData;
180
- _debug(`usingPageRoutesFromPagesPlugin`, pagesScanResult.routes.length);
181
- const siteNavigationItems = [];
182
- //
183
- // ━━ Build Navbar
184
- //
185
- // Process first-level children as navigation items
186
- for (const child of routeTree.children) {
187
- if (child.value.type === 'directory') {
188
- // Check if this directory has an index file
189
- const hasIndex = child.children.some(c => c.value.type === 'file' && c.value.name === 'index');
190
- if (hasIndex) {
191
- const pathExp = FileRouter.pathToExpression([child.value.name]);
192
- const title = Str.titlizeSlug(child.value.name);
193
- siteNavigationItems.push({
194
- pathExp: pathExp.startsWith('/') ? pathExp.slice(1) : pathExp,
195
- title,
196
- });
197
- }
198
- }
199
- else if (child.value.type === 'file' && child.value.name !== 'index') {
200
- const pathExp = FileRouter.pathToExpression([child.value.name]);
201
- const title = Str.titlizeSlug(child.value.name);
202
- siteNavigationItems.push({
203
- pathExp: pathExp.startsWith('/') ? pathExp.slice(1) : pathExp,
204
- title,
205
- });
206
- }
207
- }
208
162
  // ━ Schema presence causes adding some navbar items
163
+ const schemaNavbar = navbarData.get('schema');
164
+ schemaNavbar.length = 0; // Clear existing
209
165
  if (schema) {
210
- siteNavigationItems.push({ pathExp: `reference`, title: `Reference` });
166
+ schemaNavbar.push({ pathExp: `reference`, title: `Reference` });
211
167
  if (schema.versions.length > 1) {
212
- siteNavigationItems.push({ pathExp: `changelog`, title: `Changelog` });
213
- }
214
- }
215
- //
216
- // ━━ Build Sidebar
217
- //
218
- const sidebarIndex = {};
219
- // Build sidebar for each top-level directory
220
- for (const child of routeTree.children) {
221
- if (child.value.type === 'directory') {
222
- const pathExp = `/${child.value.name}`;
223
- // Create a subtree starting from this directory
224
- const subtree = Tree.node(child.value, child.children);
225
- // Pass the directory name as base path so paths are built correctly
226
- const sidebar = FileRouter.Sidebar.buildFromTree(subtree, [child.value.name]);
227
- _debug(`Built sidebar for ${pathExp}:`, sidebar);
228
- sidebarIndex[pathExp] = sidebar;
168
+ schemaNavbar.push({ pathExp: `changelog`, title: `Changelog` });
229
169
  }
230
170
  }
231
171
  //
@@ -233,10 +173,7 @@ export const Core = (config) => {
233
173
  //
234
174
  const projectData = {
235
175
  schema,
236
- siteNavigationItems,
237
- sidebarIndex,
238
176
  faviconPath: `/logo.svg`,
239
- pagesScanResult: pagesScanResult,
240
177
  paths: config.paths.project,
241
178
  server: {
242
179
  static: {
@@ -249,13 +186,8 @@ export const Core = (config) => {
249
186
  },
250
187
  },
251
188
  };
252
- const projectDataCode = jsesc(superjson.stringify(projectData));
253
- const content = `
254
- import { superjson } from '#singletons/superjson'
255
-
256
- export const PROJECT_DATA = superjson.parse('${projectDataCode}')
257
- `;
258
- return content;
189
+ // Return just the JSON string - let the JSON plugin handle the transformation
190
+ return superjson.stringify(projectData);
259
191
  },
260
192
  }),
261
193
  },
@@ -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,16 +1,25 @@
1
1
  import type { Config } from '#api/config/index';
2
+ import type { NavbarDataRegistry } from '#api/vite/data/navbar';
2
3
  import type { Vite } from '#dep/vite/index';
3
4
  import { FileRouter } from '#lib/file-router/index';
4
- import { ViteVirtual } from '#lib/vite-virtual/index';
5
- export declare const viProjectPages: ViteVirtual.Identifier.Identifier;
5
+ export declare const viProjectPages: import("../../../lib/vite-virtual/identifier.ts").Identifier;
6
+ export declare const viProjectPagesData: import("../../../lib/vite-virtual/identifier.ts").Identifier;
6
7
  export interface PagesTreePluginOptions {
7
8
  config: Config.Config;
9
+ navbarData?: NavbarDataRegistry;
8
10
  onPagesChange?: (pages: FileRouter.ScanResult) => void;
9
11
  onTreeChange?: (tree: FileRouter.RouteTreeNode) => void;
10
12
  }
13
+ export interface ProjectDataPages {
14
+ sidebarIndex: SidebarIndex;
15
+ pagesScanResult: FileRouter.ScanResult;
16
+ }
17
+ export interface SidebarIndex {
18
+ [pathExpression: string]: FileRouter.Sidebar.Sidebar;
19
+ }
11
20
  /**
12
21
  * Pages plugin with tree support
13
22
  */
14
- export declare const createPagesPlugin: ({ config, onPagesChange, onTreeChange }: PagesTreePluginOptions) => Vite.Plugin[];
23
+ export declare const Pages: ({ config, navbarData, onPagesChange, onTreeChange, }: PagesTreePluginOptions) => Vite.Plugin[];
15
24
  export declare const getRouteTree: (config: Config.Config) => Promise<FileRouter.RouteTreeNode>;
16
25
  //# sourceMappingURL=pages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAQrD,eAAO,MAAM,cAAc,mCAA0E,CAAA;AAErG,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,KAAK,IAAI,CAAA;IACtD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,KAAK,IAAI,CAAA;CACxD;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,yCAAyC,sBAAsB,KAC9D,IAAI,CAAC,MAAM,EAuJb,CAAA;AAGD,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,CAAC,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAM1F,CAAA"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../../src/api/vite/plugins/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAUnD,eAAO,MAAM,cAAc,8DAA0E,CAAA;AACrG,eAAO,MAAM,kBAAkB,8DAAwF,CAAA;AAEvH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,KAAK,IAAI,CAAA;IACtD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,KAAK,IAAI,CAAA;CACxD;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,UAAU,CAAC,UAAU,CAAA;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAA;CACrD;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,sDAKnB,sBAAsB,KAAG,IAAI,CAAC,MAAM,EAwRtC,CAAA;AAGD,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,CAAC,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAM1F,CAAA"}
@@ -1,17 +1,21 @@
1
1
  import { polenVirtual } from '#api/vite/vi';
2
2
  import { reportDiagnostics } from '#lib/file-router/diagnostic-reporter';
3
3
  import { FileRouter } from '#lib/file-router/index';
4
- import { ViteVirtual } from '#lib/vite-virtual/index';
4
+ import { Tree } from '#lib/tree/index';
5
5
  import { debug } from '#singletons/debug';
6
+ import { superjson } from '#singletons/superjson';
6
7
  import mdx from '@mdx-js/rollup';
7
8
  import { Path, Str } from '@wollybeard/kit';
8
9
  import remarkGfm from 'remark-gfm';
9
10
  const _debug = debug.sub(`vite-plugin-pages`);
10
11
  export const viProjectPages = polenVirtual([`project`, `pages.jsx`], { allowPluginProcessing: true });
12
+ export const viProjectPagesData = polenVirtual([`project`, `data`, 'pages.jsonsuper'], { allowPluginProcessing: true });
11
13
  /**
12
14
  * Pages plugin with tree support
13
15
  */
14
- export const createPagesPlugin = ({ config, onPagesChange, onTreeChange }) => {
16
+ export const Pages = ({ config, navbarData, onPagesChange, onTreeChange, }) => {
17
+ let currentPagesData = null;
18
+ let currentTreeData = null;
15
19
  // State management
16
20
  let pagesCache = null;
17
21
  let treeCache = null;
@@ -95,50 +99,166 @@ export const createPagesPlugin = ({ config, onPagesChange, onTreeChange }) => {
95
99
  server.watcher.add(config.paths.project.absolute.pages);
96
100
  },
97
101
  // Hot update handling
98
- async handleHotUpdate({ file, server }) {
102
+ async handleHotUpdate({ file, server, modules }) {
99
103
  _debug(`handleHotUpdate`, file);
100
104
  if (!isPageFile(file))
101
105
  return;
102
106
  _debug(`Page file changed:`, file);
103
- // Clear cache
107
+ // Check if this is a content-only change to an existing page
108
+ const oldPages = pagesCache;
109
+ // Clear cache and rescan
104
110
  clearCache();
105
- // Invalidate virtual module
106
- const mod = server.moduleGraph.getModuleById(viProjectPages.resolved);
107
- if (mod) {
108
- server.moduleGraph.invalidateModule(mod);
109
- _debug(`Invalidated pages virtual module`);
111
+ const newPages = await scanPages();
112
+ currentPagesData = newPages;
113
+ // Check if page structure changed (added/removed pages)
114
+ const structureChanged = !oldPages
115
+ || oldPages.routes.length !== newPages.routes.length
116
+ || !oldPages.routes.every((oldRoute, i) => oldRoute.file.path.absolute === newPages.routes[i]?.file.path.absolute);
117
+ if (structureChanged) {
118
+ _debug(`Page structure changed, triggering full reload`);
119
+ // Invalidate virtual module
120
+ const mod = server.moduleGraph.getModuleById(viProjectPages.id);
121
+ if (mod) {
122
+ server.moduleGraph.invalidateModule(mod);
123
+ _debug(`Invalidated pages virtual module`);
124
+ }
125
+ // Notify about changes
126
+ if (onPagesChange) {
127
+ reportDiagnostics(newPages.diagnostics);
128
+ onPagesChange(newPages);
129
+ }
130
+ if (onTreeChange) {
131
+ const tree = await scanTree();
132
+ onTreeChange(tree);
133
+ currentTreeData = tree;
134
+ }
135
+ // Trigger full reload for structure changes
136
+ server.ws.send({ type: `full-reload` });
137
+ return [];
110
138
  }
111
- // Notify about pages change (for other plugins that depend on pages)
112
- if (onPagesChange) {
113
- const pages = await scanPages();
114
- // Report any diagnostics
115
- reportDiagnostics(pages.diagnostics);
116
- onPagesChange(pages);
139
+ else {
140
+ _debug(`Page content changed, allowing HMR`);
141
+ // Let default HMR handle the MDX file change
142
+ return modules;
117
143
  }
118
- // Notify about tree change
119
- if (onTreeChange) {
120
- const tree = await scanTree();
121
- onTreeChange(tree);
144
+ },
145
+ resolveId(id) {
146
+ if (id === viProjectPagesData.id) {
147
+ return viProjectPagesData.resolved;
122
148
  }
123
- // Trigger full reload
124
- server.ws.send({ type: `full-reload` });
125
- return [];
126
149
  },
127
- // Virtual module handling
128
- ...ViteVirtual.IdentifiedLoader.toHooks({
129
- identifier: viProjectPages,
130
- async loader() {
150
+ load: {
151
+ // filter: {
152
+ // id: viProjectPagesData.resolved,
153
+ // },
154
+ async handler(id) {
155
+ if (id !== viProjectPagesData.resolved)
156
+ return;
157
+ _debug(`viProjectDataPages`);
158
+ // Get pages data from the pages plugin or load initially
159
+ if (!currentPagesData) {
160
+ _debug(`loadingPagesDataInitially`);
161
+ currentPagesData = await FileRouter.scan({
162
+ dir: config.paths.project.absolute.pages,
163
+ glob: `**/*.{md,mdx}`,
164
+ });
165
+ // Report any diagnostics from initial scan
166
+ reportDiagnostics(currentPagesData.diagnostics);
167
+ }
168
+ if (!currentTreeData) {
169
+ _debug(`loadingTreeDataInitially`);
170
+ currentTreeData = await getRouteTree(config);
171
+ }
172
+ const pagesScanResult = currentPagesData;
173
+ const routeTree = currentTreeData;
174
+ _debug(`usingPageRoutesFromPagesPlugin`, pagesScanResult.routes.length);
175
+ //
176
+ // ━━ Build Navbar
177
+ //
178
+ // Update navbar if provided
179
+ if (navbarData) {
180
+ const navbarPages = navbarData.get('pages');
181
+ navbarPages.length = 0; // Clear existing
182
+ // Process first-level children as navigation items
183
+ for (const child of routeTree.children) {
184
+ if (child.value.type === 'directory') {
185
+ // Check if this directory has an index file
186
+ const hasIndex = child.children.some(c => c.value.type === 'file' && c.value.name === 'index');
187
+ if (hasIndex) {
188
+ const pathExp = FileRouter.pathToExpression([child.value.name]);
189
+ const title = Str.titlizeSlug(child.value.name);
190
+ navbarPages.push({
191
+ pathExp: pathExp.startsWith('/') ? pathExp.slice(1) : pathExp,
192
+ title,
193
+ });
194
+ }
195
+ }
196
+ else if (child.value.type === 'file' && child.value.name !== 'index') {
197
+ const pathExp = FileRouter.pathToExpression([child.value.name]);
198
+ const title = Str.titlizeSlug(child.value.name);
199
+ navbarPages.push({
200
+ pathExp: pathExp.startsWith('/') ? pathExp.slice(1) : pathExp,
201
+ title,
202
+ });
203
+ }
204
+ }
205
+ }
206
+ //
207
+ // ━━ Build Sidebar
208
+ //
209
+ const sidebarIndex = {};
210
+ // Build sidebar for each top-level directory
211
+ for (const child of routeTree.children) {
212
+ if (child.value.type === 'directory') {
213
+ const pathExp = `/${child.value.name}`;
214
+ // Create a subtree starting from this directory
215
+ const subtree = Tree.node(child.value, child.children);
216
+ // Pass the directory name as base path so paths are built correctly
217
+ const sidebar = FileRouter.Sidebar.buildFromTree(subtree, [child.value.name]);
218
+ _debug(`Built sidebar for ${pathExp}:`, sidebar);
219
+ sidebarIndex[pathExp] = sidebar;
220
+ }
221
+ }
222
+ //
223
+ // ━━ Put It All together
224
+ //
225
+ const projectDataPages = {
226
+ sidebarIndex,
227
+ pagesScanResult: pagesScanResult,
228
+ };
229
+ // Return just the JSON string - let the JSON plugin handle the transformation
230
+ return superjson.stringify(projectDataPages);
231
+ },
232
+ },
233
+ },
234
+ // Plugin 4: Virtual Module for Pages Routes
235
+ {
236
+ name: 'polen:pages:routes',
237
+ resolveId(id) {
238
+ if (id === viProjectPages.id) {
239
+ return viProjectPages.resolved;
240
+ }
241
+ },
242
+ load: {
243
+ // filter: {
244
+ // id: viProjectPages.resolved,
245
+ // },
246
+ handler: async (id) => {
247
+ if (id !== viProjectPages.resolved)
248
+ return;
131
249
  _debug(`Loading viProjectPages virtual module`);
132
- const pagesScanResult = await scanPages();
133
- const tree = await scanTree();
134
- // Report any diagnostics
135
- reportDiagnostics(pagesScanResult.diagnostics);
136
- // Notify about pages (useful for initial load)
137
- onPagesChange?.(pagesScanResult);
138
- onTreeChange?.(tree);
139
- return generatePagesModule(pagesScanResult);
250
+ // Ensure we have pages data
251
+ if (!currentPagesData) {
252
+ currentPagesData = await scanPages();
253
+ reportDiagnostics(currentPagesData.diagnostics);
254
+ }
255
+ // Generate the module code
256
+ return {
257
+ code: generatePagesModule(currentPagesData),
258
+ moduleType: 'js',
259
+ };
140
260
  },
141
- }),
261
+ },
142
262
  },
143
263
  ];
144
264
  };