polen 0.10.0-next.12 → 0.10.0-next.14

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 (141) hide show
  1. package/build/api/vite/plugins/build.d.ts.map +1 -1
  2. package/build/api/vite/plugins/build.js +11 -3
  3. package/build/api/vite/plugins/build.js.map +1 -1
  4. package/build/api/vite/plugins/core.d.ts.map +1 -1
  5. package/build/api/vite/plugins/core.js +12 -10
  6. package/build/api/vite/plugins/core.js.map +1 -1
  7. package/build/api/vite/plugins/pages.d.ts.map +1 -1
  8. package/build/api/vite/plugins/pages.js +6 -7
  9. package/build/api/vite/plugins/pages.js.map +1 -1
  10. package/build/api/vite/plugins/serve.d.ts.map +1 -1
  11. package/build/api/vite/plugins/serve.js +47 -7
  12. package/build/api/vite/plugins/serve.js.map +1 -1
  13. package/build/lib/file-router/diagnostic-reporter.js +2 -2
  14. package/build/lib/file-router/diagnostic-reporter.js.map +1 -1
  15. package/build/lib/graphql-document/components/CopyButton.d.ts +19 -0
  16. package/build/lib/graphql-document/components/CopyButton.d.ts.map +1 -0
  17. package/build/lib/graphql-document/components/CopyButton.js +43 -0
  18. package/build/lib/graphql-document/components/CopyButton.js.map +1 -0
  19. package/build/lib/graphql-document/components/GraphQLDocument.d.ts +0 -4
  20. package/build/lib/graphql-document/components/GraphQLDocument.d.ts.map +1 -1
  21. package/build/lib/graphql-document/components/GraphQLDocument.js +52 -83
  22. package/build/lib/graphql-document/components/GraphQLDocument.js.map +1 -1
  23. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts +33 -0
  24. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts.map +1 -0
  25. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js +48 -0
  26. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js.map +1 -0
  27. package/build/lib/graphql-document/components/IdentifierLink.d.ts +15 -13
  28. package/build/lib/graphql-document/components/IdentifierLink.d.ts.map +1 -1
  29. package/build/lib/graphql-document/components/IdentifierLink.js +51 -117
  30. package/build/lib/graphql-document/components/IdentifierLink.js.map +1 -1
  31. package/build/lib/graphql-document/components/graphql-document-styles.d.ts +5 -0
  32. package/build/lib/graphql-document/components/graphql-document-styles.d.ts.map +1 -0
  33. package/build/lib/graphql-document/components/graphql-document-styles.js +167 -0
  34. package/build/lib/graphql-document/components/graphql-document-styles.js.map +1 -0
  35. package/build/lib/graphql-document/components/index.d.ts +2 -1
  36. package/build/lib/graphql-document/components/index.d.ts.map +1 -1
  37. package/build/lib/graphql-document/components/index.js +2 -1
  38. package/build/lib/graphql-document/components/index.js.map +1 -1
  39. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts +43 -0
  40. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts.map +1 -0
  41. package/build/lib/graphql-document/hooks/use-tooltip-state.js +132 -0
  42. package/build/lib/graphql-document/hooks/use-tooltip-state.js.map +1 -0
  43. package/build/lib/graphql-document/positioning-simple.d.ts +0 -5
  44. package/build/lib/graphql-document/positioning-simple.d.ts.map +1 -1
  45. package/build/lib/graphql-document/positioning-simple.js +78 -90
  46. package/build/lib/graphql-document/positioning-simple.js.map +1 -1
  47. package/build/lib/kit-temp.d.ts +103 -0
  48. package/build/lib/kit-temp.d.ts.map +1 -1
  49. package/build/lib/kit-temp.js +236 -2
  50. package/build/lib/kit-temp.js.map +1 -1
  51. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts +1 -8
  52. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.d.ts.map +1 -1
  53. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js +48 -53
  54. package/build/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.js.map +1 -1
  55. package/build/package-paths.js +3 -3
  56. package/build/package-paths.js.map +1 -1
  57. package/build/template/components/Link.d.ts +1 -1
  58. package/build/template/components/Link.d.ts.map +1 -1
  59. package/build/template/components/Link.js +14 -5
  60. package/build/template/components/Link.js.map +1 -1
  61. package/build/template/components/content/GraphQLDocumentWithSchema.d.ts.map +1 -1
  62. package/build/template/components/content/GraphQLDocumentWithSchema.js +0 -3
  63. package/build/template/components/content/GraphQLDocumentWithSchema.js.map +1 -1
  64. package/build/template/components/content/GraphQLDocumentWrapper.d.ts.map +1 -1
  65. package/build/template/components/content/GraphQLDocumentWrapper.js +8 -7
  66. package/build/template/components/content/GraphQLDocumentWrapper.js.map +1 -1
  67. package/build/template/components/sidebar/SidebarItem.js +2 -2
  68. package/build/template/entry.client.d.ts.map +1 -1
  69. package/build/template/entry.client.js +0 -3
  70. package/build/template/entry.client.js.map +1 -1
  71. package/build/template/hooks/useClientOnly.d.ts +9 -0
  72. package/build/template/hooks/useClientOnly.d.ts.map +1 -0
  73. package/build/template/hooks/useClientOnly.js +16 -0
  74. package/build/template/hooks/useClientOnly.js.map +1 -0
  75. package/build/template/routes/root.d.ts.map +1 -1
  76. package/build/template/routes/root.js +2 -150
  77. package/build/template/routes/root.js.map +1 -1
  78. package/build/template/server/app.d.ts +8 -1
  79. package/build/template/server/app.d.ts.map +1 -1
  80. package/build/template/server/app.js +21 -21
  81. package/build/template/server/app.js.map +1 -1
  82. package/build/template/server/create-page-html-response.d.ts +7 -0
  83. package/build/template/server/create-page-html-response.d.ts.map +1 -0
  84. package/build/template/server/{render-page.js → create-page-html-response.js} +11 -16
  85. package/build/template/server/create-page-html-response.js.map +1 -0
  86. package/build/template/server/main.js +2 -1
  87. package/build/template/server/main.js.map +1 -1
  88. package/build/template/server/middleware/page.d.ts +4 -0
  89. package/build/template/server/middleware/page.d.ts.map +1 -0
  90. package/build/template/server/middleware/page.js +15 -0
  91. package/build/template/server/middleware/page.js.map +1 -0
  92. package/build/template/server/middleware/unsupported-assets.d.ts +10 -0
  93. package/build/template/server/middleware/unsupported-assets.d.ts.map +1 -0
  94. package/build/template/server/middleware/unsupported-assets.js +21 -0
  95. package/build/template/server/middleware/unsupported-assets.js.map +1 -0
  96. package/build/template/server/ssg/generate.d.ts.map +1 -1
  97. package/build/template/server/ssg/generate.js +33 -34
  98. package/build/template/server/ssg/generate.js.map +1 -1
  99. package/build/template/styles/code-block.css +218 -0
  100. package/package.json +4 -2
  101. package/src/api/singletons/markdown/markdown.test.ts +1 -1
  102. package/src/api/vite/plugins/build.ts +97 -89
  103. package/src/api/vite/plugins/core.ts +15 -10
  104. package/src/api/vite/plugins/pages.ts +9 -7
  105. package/src/api/vite/plugins/serve.ts +62 -9
  106. package/src/lib/file-router/diagnostic-reporter.ts +2 -2
  107. package/src/lib/graphql-document/components/CopyButton.tsx +76 -0
  108. package/src/lib/graphql-document/components/GraphQLDocument.tsx +73 -95
  109. package/src/lib/graphql-document/components/GraphQLIdentifierPopover.tsx +197 -0
  110. package/src/lib/graphql-document/components/IdentifierLink.tsx +105 -166
  111. package/src/lib/graphql-document/components/graphql-document-styles.ts +167 -0
  112. package/src/lib/graphql-document/components/index.ts +2 -1
  113. package/src/lib/graphql-document/hooks/use-tooltip-state.test.ts +76 -0
  114. package/src/lib/graphql-document/hooks/use-tooltip-state.ts +191 -0
  115. package/src/lib/graphql-document/positioning-simple.test.ts +18 -22
  116. package/src/lib/graphql-document/positioning-simple.ts +97 -108
  117. package/src/lib/kit-temp.test.ts +15 -3
  118. package/src/lib/kit-temp.ts +304 -4
  119. package/src/lib/vite-plugin-reactive-data/vite-plugin-reactive-data.ts +52 -58
  120. package/src/package-paths.ts +3 -3
  121. package/src/template/components/Link.tsx +20 -12
  122. package/src/template/components/content/GraphQLDocumentWithSchema.tsx +0 -5
  123. package/src/template/components/content/GraphQLDocumentWrapper.tsx +14 -7
  124. package/src/template/components/sidebar/SidebarItem.tsx +2 -2
  125. package/src/template/entry.client.tsx +0 -3
  126. package/src/template/hooks/useClientOnly.ts +21 -0
  127. package/src/template/routes/root.tsx +0 -159
  128. package/src/template/server/app.ts +33 -23
  129. package/src/template/server/{render-page.tsx → create-page-html-response.ts} +19 -16
  130. package/src/template/server/main.ts +2 -1
  131. package/src/template/server/middleware/page.ts +19 -0
  132. package/src/template/server/middleware/unsupported-assets.ts +25 -0
  133. package/src/template/server/ssg/generate.ts +68 -72
  134. package/build/lib/graphql-document/components/HoverTooltip.d.ts +0 -35
  135. package/build/lib/graphql-document/components/HoverTooltip.d.ts.map +0 -1
  136. package/build/lib/graphql-document/components/HoverTooltip.js +0 -132
  137. package/build/lib/graphql-document/components/HoverTooltip.js.map +0 -1
  138. package/build/template/server/render-page.d.ts +0 -3
  139. package/build/template/server/render-page.d.ts.map +0 -1
  140. package/build/template/server/render-page.js.map +0 -1
  141. package/src/lib/graphql-document/components/HoverTooltip.tsx +0 -282
@@ -1,32 +1,27 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
1
  import { reportError } from '#api/server/report-error';
2
+ import { React } from '#dep/react/index';
3
3
  import { ResponseInternalServerError } from '#lib/kit-temp';
4
4
  import { Arr } from '@wollybeard/kit';
5
- import { StrictMode } from 'react';
6
5
  import * as ReactDomServer from 'react-dom/server';
7
6
  import { createStaticRouter, StaticRouterProvider } from 'react-router';
8
- import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper';
9
- import viteClientAssetManifest from 'virtual:polen/vite/client/manifest';
10
- import { injectManifestIntoHtml } from "./manifest.js";
11
7
  import { view } from "./view.js";
12
- export const renderPage = (staticHandlerContext) => {
8
+ export const createPageHtmlResponse = async (staticHandlerContext, hooks) => {
13
9
  const router = createStaticRouter(view.dataRoutes, staticHandlerContext);
14
10
  let html = ``;
15
11
  try {
16
- html = ReactDomServer.renderToString(_jsx(StrictMode, { children: _jsx(StaticRouterProvider, { router: router, context: staticHandlerContext }) }));
12
+ html = ReactDomServer.renderToString(React.createElement(React.StrictMode, null, React.createElement(StaticRouterProvider, {
13
+ router,
14
+ context: staticHandlerContext,
15
+ })));
17
16
  }
18
17
  catch (cause) {
19
18
  reportError(new Error(`Failed to server side render the HTML`, { cause }));
20
19
  return ResponseInternalServerError();
21
20
  }
22
- if (__BUILDING__) {
23
- html = injectManifestIntoHtml(html, viteClientAssetManifest, PROJECT_DATA.basePath);
24
- }
25
- // todo: what is this?
26
- if (import.meta.env.DEV) {
27
- // const env = ctx.env as { viteDevServer: Vite.ViteDevServer }
28
- // html = await env.viteDevServer.transformIndexHtml(ctx.req.url, html)
29
- // await env.viteDevServer.transformIndexHtml(ctx.req.url, html)
21
+ // Create the full HTML document
22
+ // Apply HTML transformation hook to the full document
23
+ if (hooks?.transformHtml) {
24
+ html = await hooks.transformHtml(html);
30
25
  }
31
26
  const headers = getRouteHeaders(staticHandlerContext);
32
27
  headers.set(`Content-Type`, `text/html; charset=utf-8`);
@@ -63,4 +58,4 @@ const getRouteHeaders = (context) => {
63
58
  }
64
59
  return headers;
65
60
  };
66
- //# sourceMappingURL=render-page.js.map
61
+ //# sourceMappingURL=create-page-html-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-page-html-response.js","sourceRoot":"","sources":["../../../src/template/server/create-page-html-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMhC,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,oBAAsD,EACtD,KAAmB,EACnB,EAAE;IACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAA;IAExE,IAAI,IAAI,GAAG,EAAE,CAAA;IAEb,IAAI,CAAC;QACH,IAAI,GAAG,cAAc,CAAC,cAAc,CAClC,KAAK,CAAC,aAAa,CACjB,KAAK,CAAC,UAAU,EAChB,IAAI,EACJ,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;YACxC,MAAM;YACN,OAAO,EAAE,oBAAoB;SAC9B,CAAC,CACH,CACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC1E,OAAO,2BAA2B,EAAE,CAAA;IACtC,CAAC;IAED,gCAAgC;IAEhC,sDAAsD;IACtD,IAAI,KAAK,EAAE,aAAa,EAAE,CAAC;QACzB,IAAI,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAA;IAEvD,+CAA+C;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAA;IAEtD,OAAO,IAAI,QAAQ,CAAC,kBAAkB,IAAI,EAAE,EAAE;QAC5C,MAAM,EAAE,UAAU;QAClB,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,OAAyC,EACjC,EAAE;IACV,gDAAgD;IAChD,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,UAAU,CAAA;IAC3B,CAAC;IAED,+CAA+C;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,MAAgD,CAAA;IACnG,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,UAAU,CAAA;IAC1B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CACtB,OAAyC,EAChC,EAAE;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,OAAO,EAAE,CAAA;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;IAC1C,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { serve } from '@hono/node-server'; // TODO: support non-node platforms.
2
2
  import { neverCase } from '@wollybeard/kit/language';
3
- import { app } from "./app.js";
3
+ import { createApp } from "./app.js";
4
4
  import { generate } from "./ssg/generate.js";
5
5
  import { view } from "./view.js";
6
6
  if (__BUILDING__) {
@@ -10,6 +10,7 @@ if (__BUILDING__) {
10
10
  break;
11
11
  case `ssr`:
12
12
  const port = process.env[`PORT`] ? parseInt(process.env[`PORT`]) : 3001; // todo viteConfigResolved.server.port + 1
13
+ const app = createApp();
13
14
  serve({ fetch: app.fetch, port });
14
15
  break;
15
16
  case `spa`:
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/template/server/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA,CAAC,oCAAoC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,IAAI,YAAY,EAAE,CAAC;IACjB,QAAQ,sBAAsB,EAAE,CAAC;QAC/B,KAAK,KAAK;YACR,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpB,MAAK;QACP,KAAK,KAAK;YACR,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,CAAC,0CAA0C;YAClH,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACjC,MAAK;QACP,KAAK,KAAK;YACR,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD;YACE,SAAS,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/template/server/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA,CAAC,oCAAoC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,IAAI,YAAY,EAAE,CAAC;IACjB,QAAQ,sBAAsB,EAAE,CAAC;QAC/B,KAAK,KAAK;YACR,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpB,MAAK;QACP,KAAK,KAAK;YACR,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,CAAC,0CAA0C;YAClH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;YACvB,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACjC,MAAK;QACP,KAAK,KAAK;YACR,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD;YACE,SAAS,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Hono } from '#dep/hono/index';
2
+ import type { HtmlTransformer } from '../app.ts';
3
+ export declare const PageMiddleware: (transformers: HtmlTransformer[]) => (ctx: Hono.Context) => Promise<Response>;
4
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/template/server/middleware/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAIhD,eAAO,MAAM,cAAc,GAAI,cAAc,eAAe,EAAE,MAC9C,KAAK,IAAI,CAAC,OAAO,sBAWhC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { asyncReduceWith } from '#lib/kit-temp';
2
+ import { createPageHtmlResponse } from "../create-page-html-response.js";
3
+ import { view } from "../view.js";
4
+ export const PageMiddleware = (transformers) => {
5
+ return async (ctx) => {
6
+ const staticHandlerContext = await view.query(ctx.req.raw);
7
+ if (staticHandlerContext instanceof Response) {
8
+ return staticHandlerContext;
9
+ }
10
+ return createPageHtmlResponse(staticHandlerContext, {
11
+ transformHtml: asyncReduceWith(transformers, ctx),
12
+ });
13
+ };
14
+ };
15
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/template/server/middleware/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAA+B,EAAE,EAAE;IAChE,OAAO,KAAK,EAAE,GAAiB,EAAE,EAAE;QACjC,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE1D,IAAI,oBAAoB,YAAY,QAAQ,EAAE,CAAC;YAC7C,OAAO,oBAAoB,CAAA;QAC7B,CAAC;QAED,OAAO,sBAAsB,CAAC,oBAAoB,EAAE;YAClD,aAAa,EAAE,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC;SAClD,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Hono } from '#dep/hono/index';
2
+ /**
3
+ * Temporary middleware to block unsupported asset requests
4
+ *
5
+ * TODO: Polen should eventually support favicon and apple-touch-icon generation
6
+ * For now, we return 404 immediately to prevent these requests from reaching
7
+ * React Router and causing unnecessary processing or errors.
8
+ */
9
+ export declare const UnsupportedAssetsMiddleware: () => Hono.MiddlewareHandler;
10
+ //# sourceMappingURL=unsupported-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-assets.d.ts","sourceRoot":"","sources":["../../../../src/template/server/middleware/unsupported-assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAK3C;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QAAO,IAAI,CAAC,iBAYnD,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { AppleTouchIcon } from '#lib/apple-touch-icon/index';
2
+ import { Favicon } from '#lib/favicon/index';
3
+ import { Http } from '@wollybeard/kit';
4
+ /**
5
+ * Temporary middleware to block unsupported asset requests
6
+ *
7
+ * TODO: Polen should eventually support favicon and apple-touch-icon generation
8
+ * For now, we return 404 immediately to prevent these requests from reaching
9
+ * React Router and causing unnecessary processing or errors.
10
+ */
11
+ export const UnsupportedAssetsMiddleware = () => {
12
+ return async (ctx, next) => {
13
+ // Block these asset requests until Polen supports them
14
+ if (Favicon.fileNamePattern.test(ctx.req.path)
15
+ || AppleTouchIcon.fileNamePattern.test(ctx.req.path)) {
16
+ return Http.Response.notFound;
17
+ }
18
+ await next();
19
+ };
20
+ };
21
+ //# sourceMappingURL=unsupported-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported-assets.js","sourceRoot":"","sources":["../../../../src/template/server/middleware/unsupported-assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAA2B,EAAE;IACtE,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,uDAAuD;QACvD,IACE,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;eACvC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EACpD,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA;QAC/B,CAAC;QAED,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/template/server/ssg/generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAO1D,eAAO,MAAM,QAAQ,GAAU,MAAM,WAAW,CAAC,aAAa,kBAsF7D,CAAA"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/template/server/ssg/generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAU1D,eAAO,MAAM,QAAQ,GAAU,MAAM,WAAW,CAAC,aAAa,kBA+E7D,CAAA"}
@@ -1,37 +1,21 @@
1
1
  import { Hono } from '#dep/hono/index';
2
- import { app } from '#template/server/app';
2
+ import { asyncParallel, chunk } from '#lib/kit-temp';
3
+ import { debugPolen } from '#singletons/debug';
3
4
  import * as NodeFs from 'node:fs/promises';
4
5
  import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper';
5
- import { renderPage } from "../render-page.js";
6
+ import viteClientAssetManifest from 'virtual:polen/vite/client/manifest';
7
+ import { createPageHtmlResponse } from "../create-page-html-response.js";
8
+ import { injectManifestIntoHtml } from "../manifest.js";
6
9
  import { getRoutesPaths } from "./get-route-paths.js";
7
10
  export const generate = async (view) => {
8
- const handler = async (ctx) => {
9
- // For SSG, we need to create a request with the base path prepended
10
- // so React Router can match it correctly
11
- const url = new URL(ctx.req.raw.url);
12
- const basePath = PROJECT_DATA.basePath === '/' ? '' : PROJECT_DATA.basePath.slice(0, -1);
13
- // Create a new request with the base path prepended to the pathname
14
- const modifiedRequest = new Request(`${url.protocol}//${url.host}${basePath}${url.pathname}${url.search}`, {
15
- method: ctx.req.raw.method,
16
- headers: ctx.req.raw.headers,
17
- body: ctx.req.raw.body,
18
- });
19
- const staticHandlerContext = await view.query(modifiedRequest);
20
- if (staticHandlerContext instanceof Response) {
21
- return staticHandlerContext;
22
- }
23
- return renderPage(staticHandlerContext);
24
- };
11
+ const debug = debugPolen.sub(`ssg`);
25
12
  const routePaths = getRoutesPaths();
26
- for (const routePath of routePaths) {
27
- app.get(routePath, handler);
28
- }
29
- // For large schemas, we need to process in smaller batches to avoid memory issues
30
- const BATCH_SIZE = 50;
31
13
  const totalPaths = routePaths.length;
32
- console.log(`[info] Generating ${totalPaths} static pages...`);
33
- for (let i = 0; i < totalPaths; i += BATCH_SIZE) {
34
- const batchPaths = routePaths.slice(i, i + BATCH_SIZE);
14
+ debug(`start`, { totalPaths });
15
+ // Process routes in batches using the new utilities
16
+ const batchSize = 50;
17
+ const batches = chunk(routePaths, batchSize);
18
+ const result = await asyncParallel(batches, async (batchPaths, batchIndex) => {
35
19
  const batchApp = new Hono.Hono();
36
20
  // Create a custom handler for batch processing that includes base path handling
37
21
  const batchHandler = async (ctx) => {
@@ -48,23 +32,38 @@ export const generate = async (view) => {
48
32
  if (staticHandlerContext instanceof Response) {
49
33
  return staticHandlerContext;
50
34
  }
51
- return renderPage(staticHandlerContext);
35
+ // SSG uses manifest-based transformation directly
36
+ const transformHtml = (html) => {
37
+ return injectManifestIntoHtml(html, viteClientAssetManifest, PROJECT_DATA.basePath);
38
+ };
39
+ return createPageHtmlResponse(staticHandlerContext, { transformHtml });
52
40
  };
53
41
  // Register only the routes for this batch
54
42
  for (const routePath of batchPaths) {
55
43
  batchApp.get(routePath, batchHandler);
56
44
  }
57
- console.log(`[info] Processing batch ${Math.floor(i / BATCH_SIZE) + 1}/${Math.ceil(totalPaths / BATCH_SIZE)} (${batchPaths.length} pages)...`);
58
- const result = await Hono.SSG.toSSG(batchApp, NodeFs, {
45
+ debug(`batch:start`, {
46
+ batchIndex: batchIndex + 1,
47
+ totalBatches: batches.length,
48
+ pagesInBatch: batchPaths.length,
49
+ });
50
+ const ssgResult = await Hono.SSG.toSSG(batchApp, NodeFs, {
59
51
  concurrency: 5, // Reduced concurrency for memory efficiency
60
52
  dir: PROJECT_DATA.paths.relative.build.root,
61
53
  });
62
- if (!result.success) {
63
- throw new Error(`Failed to generate static site at batch ${Math.floor(i / BATCH_SIZE) + 1}`, {
64
- cause: result.error,
54
+ if (!ssgResult.success) {
55
+ throw new Error(`Failed to generate static site at batch ${batchIndex + 1}`, {
56
+ cause: ssgResult.error,
65
57
  });
66
58
  }
59
+ return ssgResult;
60
+ }, {
61
+ concurrency: 1, // Process batches sequentially to avoid memory issues
62
+ failFast: true, // Stop on first batch failure
63
+ });
64
+ if (!result.success) {
65
+ throw new Error(`SSG generation failed`, { cause: result.errors[0] });
67
66
  }
68
- console.log(`[info] Successfully generated ${totalPaths} static pages.`);
67
+ debug(`complete`, { totalPaths });
69
68
  };
70
69
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/template/server/ssg/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/template/server/ssg/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ /* Code Block Styles */
2
+
3
+ /* Base code block container */
4
+ .code-block {
5
+ position: relative;
6
+ margin: 1rem 0;
7
+ border-radius: 8px;
8
+ overflow: hidden;
9
+ font-size: 14px;
10
+ line-height: 1.6;
11
+ }
12
+
13
+ .code-block pre {
14
+ margin: 0;
15
+ padding: 1rem;
16
+ overflow-x: auto;
17
+ background: inherit;
18
+ }
19
+
20
+ .code-block code {
21
+ font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace;
22
+ font-variant-ligatures: contextual;
23
+ }
24
+
25
+ /* Shiki theme switching with CSS variables */
26
+ /* Default to light theme */
27
+ :root {
28
+ color-scheme: light;
29
+ }
30
+
31
+ /* When dark mode is active */
32
+ .dark {
33
+ color-scheme: dark;
34
+ }
35
+
36
+ /* Shiki token colors for light theme (github-light) */
37
+ :root {
38
+ --shiki-color-text: #24292e;
39
+ --shiki-color-background: #f6f8fa;
40
+ --shiki-token-constant: #005cc5;
41
+ --shiki-token-string: #032f62;
42
+ --shiki-token-comment: #6a737d;
43
+ --shiki-token-keyword: #d73a49;
44
+ --shiki-token-parameter: #e36209;
45
+ --shiki-token-function: #6f42c1;
46
+ --shiki-token-string-expression: #032f62;
47
+ --shiki-token-punctuation: #24292e;
48
+ --shiki-token-link: #032f62;
49
+ }
50
+
51
+ /* Shiki token colors for dark theme (tokyo-night) */
52
+ .dark {
53
+ --shiki-color-text: #c0caf5;
54
+ --shiki-color-background: #1a1b26;
55
+ --shiki-token-constant: #ff9e64;
56
+ --shiki-token-string: #9ece6a;
57
+ --shiki-token-comment: #565f89;
58
+ --shiki-token-keyword: #bb9af7;
59
+ --shiki-token-parameter: #e0af68;
60
+ --shiki-token-function: #7aa2f7;
61
+ --shiki-token-string-expression: #9ece6a;
62
+ --shiki-token-punctuation: #c0caf5;
63
+ --shiki-token-link: #9ece6a;
64
+ }
65
+
66
+ /* Shiki code blocks */
67
+ pre.shiki {
68
+ margin: 1rem 0;
69
+ padding: 1rem;
70
+ border-radius: 8px;
71
+ overflow-x: auto;
72
+ font-size: 14px;
73
+ line-height: 1.6;
74
+ background-color: var(--shiki-color-background);
75
+ color: var(--shiki-color-text);
76
+ }
77
+
78
+ pre.shiki code {
79
+ font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace;
80
+ font-variant-ligatures: contextual;
81
+ }
82
+
83
+ /* Line numbers */
84
+ .code-block[data-line-numbers="true"] pre {
85
+ padding-left: 3.5rem;
86
+ position: relative;
87
+ }
88
+
89
+ .code-block[data-line-numbers="true"] .line {
90
+ position: relative;
91
+ }
92
+
93
+ .code-block[data-line-numbers="true"] .line::before {
94
+ content: attr(data-line);
95
+ position: absolute;
96
+ left: -3rem;
97
+ width: 2.5rem;
98
+ text-align: right;
99
+ color: var(--gray-a6);
100
+ user-select: none;
101
+ }
102
+
103
+ /* Line highlighting */
104
+ .code-block .line[data-highlighted="true"] {
105
+ background-color: var(--amber-a3);
106
+ display: block;
107
+ margin: 0 -1rem;
108
+ padding: 0 1rem;
109
+ }
110
+
111
+ /* Diff lines */
112
+ .code-block .line[data-diff="+"] {
113
+ background-color: var(--green-a3);
114
+ display: block;
115
+ margin: 0 -1rem;
116
+ padding: 0 1rem;
117
+ }
118
+
119
+ .code-block .line[data-diff="-"] {
120
+ background-color: var(--red-a3);
121
+ display: block;
122
+ margin: 0 -1rem;
123
+ padding: 0 1rem;
124
+ }
125
+
126
+ .code-block .line[data-diff="+"]::before {
127
+ content: "+ ";
128
+ color: var(--green-11);
129
+ font-weight: bold;
130
+ }
131
+
132
+ .code-block .line[data-diff="-"]::before {
133
+ content: "- ";
134
+ color: var(--red-11);
135
+ font-weight: bold;
136
+ }
137
+
138
+ /* Focus lines */
139
+ .code-block .line:not([data-focus="true"]) {
140
+ opacity: 0.5;
141
+ filter: grayscale(100%);
142
+ transition: opacity 0.2s, filter 0.2s;
143
+ }
144
+
145
+ .code-block:hover .line:not([data-focus="true"]) {
146
+ opacity: 0.8;
147
+ filter: grayscale(0%);
148
+ }
149
+
150
+ /* Copy button */
151
+ .code-block-copy {
152
+ position: absolute;
153
+ top: 0.5rem;
154
+ right: 0.5rem;
155
+ padding: 0.25rem 0.5rem;
156
+ border-radius: 4px;
157
+ background: var(--gray-a3);
158
+ color: var(--gray-12);
159
+ border: 1px solid var(--gray-a5);
160
+ cursor: pointer;
161
+ font-size: 12px;
162
+ transition: all 0.2s;
163
+ }
164
+
165
+ .code-block-copy:hover {
166
+ background: var(--gray-a4);
167
+ border-color: var(--gray-a6);
168
+ }
169
+
170
+ .code-block-copy.copied {
171
+ background: var(--green-a3);
172
+ border-color: var(--green-a5);
173
+ color: var(--green-11);
174
+ }
175
+
176
+ /* Language badge */
177
+ .code-block-lang {
178
+ position: absolute;
179
+ top: 0;
180
+ right: 0;
181
+ padding: 0.25rem 0.75rem;
182
+ background: var(--gray-a3);
183
+ color: var(--gray-11);
184
+ font-size: 12px;
185
+ font-weight: 500;
186
+ border-bottom-left-radius: 4px;
187
+ user-select: none;
188
+ }
189
+
190
+ /* Scrollbar styling */
191
+ .code-block pre::-webkit-scrollbar {
192
+ height: 8px;
193
+ width: 8px;
194
+ }
195
+
196
+ .code-block pre::-webkit-scrollbar-track {
197
+ background: var(--gray-a3);
198
+ border-radius: 4px;
199
+ }
200
+
201
+ .code-block pre::-webkit-scrollbar-thumb {
202
+ background: var(--gray-a6);
203
+ border-radius: 4px;
204
+ }
205
+
206
+ .code-block pre::-webkit-scrollbar-thumb:hover {
207
+ background: var(--gray-a7);
208
+ }
209
+
210
+ /* Inline code */
211
+ code:not(.code-block code) {
212
+ padding: 0.2em 0.4em;
213
+ margin: 0;
214
+ font-size: 0.85em;
215
+ background-color: var(--gray-a3);
216
+ border-radius: 4px;
217
+ font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace;
218
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polen",
3
- "version": "0.10.0-next.12",
3
+ "version": "0.10.0-next.14",
4
4
  "type": "module",
5
5
  "description": "A framework for delightful GraphQL developer portals",
6
6
  "author": {
@@ -199,6 +199,7 @@
199
199
  "@octokit/types": "^14.1.0",
200
200
  "@playwright/browser-chromium": "^1.53.0",
201
201
  "@stylistic/eslint-plugin": "^4.4.1",
202
+ "@testing-library/react": "^16.3.0",
202
203
  "@tsconfig/node-lts": "^22.0.1",
203
204
  "@tsconfig/node22": "^22.0.2",
204
205
  "@tsconfig/strictest": "^2.0.5",
@@ -267,7 +268,8 @@
267
268
  "prepublishOnly": "pnpm build",
268
269
  "prepack": "pnpm build",
269
270
  "build:cli:chmodx": "chmod +x ./build/cli/index.js",
270
- "postbuild": "pnpm run build:cli:chmodx",
271
+ "postbuild": "pnpm run build:cli:chmodx && pnpm run build:copy-assets",
272
+ "build:copy-assets": "cp -r src/template/styles build/template/",
271
273
  "test": "vitest",
272
274
  "check": "pnpm run '/^check:(?!pedantic:).+/'",
273
275
  "checkAll": "pnpm run '/^check:.+/'",
@@ -2,7 +2,7 @@ import { describe, expect, test } from 'vitest'
2
2
  import { parse } from './markdown.ts'
3
3
 
4
4
  describe(`markdown parser with syntax highlighting`, () => {
5
- test(`parse highlights code blocks`, async () => {
5
+ test(`parse highlights code blocks`, { timeout: 10000 }, async () => {
6
6
  const markdown = `
7
7
  # Hello
8
8