@stackbox/cms 0.0.5 → 0.1.1

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 (119) hide show
  1. package/README.md +158 -10
  2. package/dist/AGENTS.md +218 -0
  3. package/dist/blocks.d.ts +6 -13
  4. package/dist/blocks.d.ts.map +1 -1
  5. package/dist/blocks.js +2 -0
  6. package/dist/blocks.js.map +1 -1
  7. package/dist/build.d.ts +14 -0
  8. package/dist/build.d.ts.map +1 -0
  9. package/dist/build.js +145 -0
  10. package/dist/build.js.map +1 -0
  11. package/dist/cache.d.ts +14 -0
  12. package/dist/cache.d.ts.map +1 -0
  13. package/dist/cache.js +93 -0
  14. package/dist/cache.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +16 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/index.d.ts +12 -8
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/link.d.ts +3 -7
  24. package/dist/link.d.ts.map +1 -1
  25. package/dist/link.js +12 -19
  26. package/dist/link.js.map +1 -1
  27. package/dist/merge-hooks.d.ts +3 -0
  28. package/dist/merge-hooks.d.ts.map +1 -0
  29. package/dist/merge-hooks.js +54 -0
  30. package/dist/merge-hooks.js.map +1 -0
  31. package/dist/pages.d.ts +15 -46
  32. package/dist/pages.d.ts.map +1 -1
  33. package/dist/pages.js +2 -0
  34. package/dist/pages.js.map +1 -1
  35. package/dist/plugin.d.ts +22 -0
  36. package/dist/plugin.d.ts.map +1 -0
  37. package/dist/plugin.js +156 -0
  38. package/dist/plugin.js.map +1 -0
  39. package/dist/plugins/blog/index.d.ts +6 -5
  40. package/dist/plugins/blog/index.d.ts.map +1 -1
  41. package/dist/plugins/blog/index.js +16 -0
  42. package/dist/plugins/blog/index.js.map +1 -1
  43. package/dist/plugins/random-quote/assets/quotes.json +230 -0
  44. package/dist/plugins/random-quote/index.d.ts +3 -1
  45. package/dist/plugins/random-quote/index.d.ts.map +1 -1
  46. package/dist/plugins/random-quote/index.js +15 -1
  47. package/dist/plugins/random-quote/index.js.map +1 -1
  48. package/dist/plugins/sitemap/index.d.ts +14 -0
  49. package/dist/plugins/sitemap/index.d.ts.map +1 -0
  50. package/dist/plugins/sitemap/index.js +119 -0
  51. package/dist/plugins/sitemap/index.js.map +1 -0
  52. package/dist/render-head.d.ts +2 -2
  53. package/dist/render-head.d.ts.map +1 -1
  54. package/dist/render-page.d.ts +2 -4
  55. package/dist/render-page.d.ts.map +1 -1
  56. package/dist/render-page.js +7 -3
  57. package/dist/render-page.js.map +1 -1
  58. package/dist/site.d.ts +10 -17
  59. package/dist/site.d.ts.map +1 -1
  60. package/dist/site.js +155 -7
  61. package/dist/site.js.map +1 -1
  62. package/dist/slot-content.d.ts +3 -19
  63. package/dist/slot-content.d.ts.map +1 -1
  64. package/dist/slot-content.js.map +1 -1
  65. package/dist/slot-handle.d.ts +7 -25
  66. package/dist/slot-handle.d.ts.map +1 -1
  67. package/dist/slot-handle.js +29 -14
  68. package/dist/slot-handle.js.map +1 -1
  69. package/dist/stackbox/context.d.ts +2 -51
  70. package/dist/stackbox/context.d.ts.map +1 -1
  71. package/dist/stackbox/context.js.map +1 -1
  72. package/dist/templates.d.ts +7 -57
  73. package/dist/templates.d.ts.map +1 -1
  74. package/dist/templates.js.map +1 -1
  75. package/dist/types.d.ts +281 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +2 -0
  78. package/dist/types.js.map +1 -0
  79. package/package.json +17 -6
  80. package/src/plugins/blog/AGENTS.md +5 -1
  81. package/src/plugins/blog/index.ts +22 -5
  82. package/src/plugins/random-quote/AGENTS.md +30 -7
  83. package/src/plugins/random-quote/index.ts +17 -1
  84. package/src/plugins/random-quote/public_assets/widget.css +5 -0
  85. package/src/plugins/sitemap/AGENTS.md +82 -0
  86. package/src/plugins/sitemap/index.ts +156 -0
  87. package/AGENTS.md +0 -87
  88. package/dist/modules/blog/module.d.ts +0 -20
  89. package/dist/modules/blog/module.d.ts.map +0 -1
  90. package/dist/modules/blog/module.js +0 -52
  91. package/dist/modules/blog/module.js.map +0 -1
  92. package/dist/modules/blog/posts.d.ts +0 -15
  93. package/dist/modules/blog/posts.d.ts.map +0 -1
  94. package/dist/modules/blog/posts.js +0 -46
  95. package/dist/modules/blog/posts.js.map +0 -1
  96. package/dist/modules.d.ts +0 -18
  97. package/dist/modules.d.ts.map +0 -1
  98. package/dist/modules.js +0 -25
  99. package/dist/modules.js.map +0 -1
  100. package/dist/plugins/blog/module.d.ts +0 -20
  101. package/dist/plugins/blog/module.d.ts.map +0 -1
  102. package/dist/plugins/blog/module.js +0 -52
  103. package/dist/plugins/blog/module.js.map +0 -1
  104. package/dist/plugins/blog/plugin.d.ts +0 -20
  105. package/dist/plugins/blog/plugin.d.ts.map +0 -1
  106. package/dist/plugins/blog/plugin.js +0 -52
  107. package/dist/plugins/blog/plugin.js.map +0 -1
  108. package/dist/plugins/random-quote/module.d.ts +0 -9
  109. package/dist/plugins/random-quote/module.d.ts.map +0 -1
  110. package/dist/plugins/random-quote/module.js +0 -31
  111. package/dist/plugins/random-quote/module.js.map +0 -1
  112. package/dist/plugins/random-quote/plugin.d.ts +0 -8
  113. package/dist/plugins/random-quote/plugin.d.ts.map +0 -1
  114. package/dist/plugins/random-quote/plugin.js +0 -31
  115. package/dist/plugins/random-quote/plugin.js.map +0 -1
  116. package/dist/plugins/random-quote/quotes.json +0 -230
  117. package/dist/public/_sb/plugins/random-quote/quotes.json +0 -230
  118. package/src/plugins/random-quote/public_assets/quotes.json +0 -230
  119. /package/{dist/plugins/random-quote/public_assets → src/plugins/random-quote/assets}/quotes.json +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/sitemap/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type HSHtml } from "@hyperspan/html";
2
- import type { PageMeta } from "./pages.js";
2
+ import type { Stackbox as SB } from "./types.js";
3
3
  export declare function renderStandardHead(input: {
4
4
  title: string;
5
- meta?: PageMeta;
5
+ meta?: SB.PageMeta;
6
6
  }): HSHtml;
7
7
  //# sourceMappingURL=render-head.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-head.d.ts","sourceRoot":"","sources":["../src/render-head.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB,GAAG,MAAM,CAyBT"}
1
+ {"version":3,"file":"render-head.d.ts","sourceRoot":"","sources":["../src/render-head.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;CACpB,GAAG,MAAM,CAyBT"}
@@ -1,6 +1,4 @@
1
- import { type SitePage } from "./pages.js";
2
- import type { SiteConfig } from "./site.js";
3
- import type { Stackbox } from "./stackbox/context.js";
1
+ import type { Stackbox as SB } from "./types.js";
4
2
  export { RenderError } from "./slot-handle.js";
5
- export declare function renderPage(page: SitePage, siteConfig: SiteConfig, ctx?: Stackbox.Context): Promise<string>;
3
+ export declare function renderPage(page: SB.SitePage, siteConfig: SB.SiteConfig, ctx?: SB.Context, hooks?: SB.SiteHooks): Promise<string>;
6
4
  //# sourceMappingURL=render-page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-page.d.ts","sourceRoot":"","sources":["../src/render-page.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAa/C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,UAAU,EACtB,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
1
+ {"version":3,"file":"render-page.d.ts","sourceRoot":"","sources":["../src/render-page.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAa/C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,EAChB,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,GACnB,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
@@ -12,19 +12,23 @@ function validateRequiredSlots(page) {
12
12
  }
13
13
  }
14
14
  }
15
- export async function renderPage(page, siteConfig, ctx) {
15
+ export async function renderPage(page, siteConfig, ctx, hooks) {
16
16
  validateRequiredSlots(page);
17
- const renderCtx = { siteConfig, ctx };
17
+ const renderCtx = { siteConfig, ctx, page, hooks };
18
18
  const slots = buildPageSlots(page, renderCtx);
19
19
  const head = renderStandardHead({
20
20
  title: page.template.formatPageTitle(page.title),
21
21
  meta: page.meta,
22
22
  });
23
- return renderAsync(page.template.render({
23
+ let html = await renderAsync(page.template.render({
24
24
  head,
25
25
  siteConfig,
26
26
  page: toPageRenderView(page),
27
27
  slots,
28
28
  }));
29
+ if (hooks?.afterRender) {
30
+ html = await hooks.afterRender(html, { page, ctx });
31
+ }
32
+ return html;
29
33
  }
30
34
  //# sourceMappingURL=render-page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-page.js","sourceRoot":"","sources":["../src/render-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAGL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,SAAS,qBAAqB,CAAC,IAAc;IAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAmC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,mBAAmB,CAC3B,kBAAkB,QAAQ,yDAAyD,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,UAAsB,EACtB,GAAsB;IAEtB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAErD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAChD,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO,WAAW,CAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,UAAU;QACV,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,KAAK;KACN,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"render-page.js","sourceRoot":"","sources":["../src/render-page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,SAAS,qBAAqB,CAAC,IAAiB;IAC9C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAmC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,mBAAmB,CAC3B,kBAAkB,QAAQ,yDAAyD,CACpF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAiB,EACjB,UAAyB,EACzB,GAAgB,EAChB,KAAoB;IAEpB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAqB,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAErE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAChD,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,MAAM,WAAW,CAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,UAAU;QACV,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5B,KAAK;KACN,CAAC,CACH,CAAC;IAEF,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,IAAI,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/site.d.ts CHANGED
@@ -1,21 +1,14 @@
1
- import type { SitePage } from "./pages.js";
2
- export type SiteConfig<T extends Record<string, unknown> = Record<string, unknown>> = {
3
- readonly __kind: "siteConfig";
4
- readonly config: T;
5
- };
6
- export type Site<T extends Record<string, unknown> = Record<string, unknown>> = {
7
- readonly __kind: "site";
8
- readonly siteConfig: SiteConfig<T>;
9
- readonly pages: readonly SitePage[];
10
- fetch(request: globalThis.Request, env?: Record<string, unknown>): Promise<globalThis.Response>;
11
- };
1
+ import type { Stackbox as SB } from "./types.js";
12
2
  export declare class SiteError extends Error {
13
3
  constructor(message: string);
14
4
  }
15
- export declare function createSiteConfig<T extends Record<string, unknown>>(config: T): SiteConfig<T>;
16
- export declare function isSiteConfig(value: unknown): value is SiteConfig;
17
- export declare function createSite<T extends Record<string, unknown>>(siteConfig: SiteConfig<T>, options: {
18
- pages: [SitePage, ...SitePage[]];
19
- }): Site<T>;
20
- export declare function isSite(value: unknown): value is Site;
5
+ export declare function createSiteConfig<T extends Record<string, unknown>>(config: T): SB.SiteConfig<T>;
6
+ export declare function isSiteConfig(value: unknown): value is SB.SiteConfig;
7
+ export declare function createSite<T extends Record<string, unknown>>(siteConfig: SB.SiteConfig<T>, options: {
8
+ pages: [SB.SitePage, ...SB.SitePage[]];
9
+ plugins?: readonly SB.Plugin[];
10
+ cacheAdapter?: SB.CacheAdapter;
11
+ hooks?: SB.SiteHooks;
12
+ }): SB.Site<T>;
13
+ export declare function isSite(value: unknown): value is SB.Site;
21
14
  //# sourceMappingURL=site.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD;IACF,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,CACd,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,KAAK,CACH,OAAO,EAAE,UAAU,CAAC,OAAO,EAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;CACjC,CAAC;AAEF,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAWD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,CAAC,CAAC,CAMf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAShE;AAwBD,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE;IAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;CAAE,GAC5C,IAAI,CAAC,CAAC,CAAC,CA4DT;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CASpD"}
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAWD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,MAAM,EAAE,CAAC,GACR,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAMlB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,UAAU,CASnE;AAoGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5B,OAAO,EAAE;IACP,KAAK,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;CACtB,GACA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAgNZ;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAUvD"}
package/dist/site.js CHANGED
@@ -1,6 +1,9 @@
1
+ import { buildPageCacheKey, cacheControlFresh, cacheControlStale, collectPageCacheConfigs, createMemoryCache, isCacheEntryFresh, isPageCacheDisabled, isSuccessfulRender, resolvePageCacheTtlMs, } from "./cache.js";
1
2
  import { isPage } from "./pages.js";
2
3
  import { renderPage } from "./render-page.js";
3
4
  import { servePluginAsset } from "./link.js";
5
+ import { assertPlugin, } from "./plugin.js";
6
+ import { mergeSiteHooks } from "./merge-hooks.js";
4
7
  import { normalizePathname } from "./routing.js";
5
8
  import { createContext } from "./stackbox/context.js";
6
9
  export class SiteError extends Error {
@@ -49,6 +52,54 @@ function buildPageMap(pages) {
49
52
  }
50
53
  return map;
51
54
  }
55
+ function assertUniquePluginNames(plugins) {
56
+ const seen = new Set();
57
+ for (const plugin of plugins) {
58
+ if (seen.has(plugin.name)) {
59
+ throw new SiteError(`createSite(siteConfig, options): duplicate plugin name "${plugin.name}"`);
60
+ }
61
+ seen.add(plugin.name);
62
+ }
63
+ }
64
+ function collectPluginRoutes(plugins, site, pagePaths) {
65
+ const routes = new Map();
66
+ for (const plugin of plugins) {
67
+ if (!plugin.routes) {
68
+ continue;
69
+ }
70
+ const declared = plugin.routes({ site });
71
+ if (declared instanceof Promise) {
72
+ throw new SiteError(`createSite(siteConfig, options): plugin "${plugin.name}" routes must return synchronously`);
73
+ }
74
+ for (const route of declared) {
75
+ const path = normalizePathname(route.path);
76
+ if (pagePaths.has(path)) {
77
+ throw new SiteError(`createSite(siteConfig, options): plugin route "${path}" conflicts with a page path`);
78
+ }
79
+ if (routes.has(path)) {
80
+ throw new SiteError(`createSite(siteConfig, options): duplicate plugin route "${path}"`);
81
+ }
82
+ routes.set(path, route.fetch);
83
+ }
84
+ }
85
+ return routes;
86
+ }
87
+ function collectPluginHooks(plugins, site) {
88
+ const collected = [];
89
+ for (const plugin of plugins) {
90
+ if (!plugin.hooks) {
91
+ continue;
92
+ }
93
+ const declared = plugin.hooks({ site });
94
+ if (declared instanceof Promise) {
95
+ throw new SiteError(`createSite(siteConfig, options): plugin "${plugin.name}" hooks must return synchronously`);
96
+ }
97
+ if (declared) {
98
+ collected.push(declared);
99
+ }
100
+ }
101
+ return collected;
102
+ }
52
103
  export function createSite(siteConfig, options) {
53
104
  if (!isSiteConfig(siteConfig)) {
54
105
  throw new SiteError("createSite(siteConfig, options): siteConfig must be from createSiteConfig()");
@@ -62,32 +113,128 @@ export function createSite(siteConfig, options) {
62
113
  throw new SiteError("createSite(siteConfig, options): every page must be from createPage()");
63
114
  }
64
115
  }
116
+ const plugins = options.plugins ?? [];
117
+ if (!Array.isArray(plugins)) {
118
+ throw new SiteError("createSite(siteConfig, options): plugins must be an array of createPlugin() results");
119
+ }
120
+ for (const plugin of plugins) {
121
+ try {
122
+ assertPlugin(plugin, "createSite(siteConfig, options)");
123
+ }
124
+ catch (error) {
125
+ throw new SiteError(error instanceof Error ? error.message : String(error));
126
+ }
127
+ }
128
+ assertUniquePluginNames(plugins);
65
129
  assertUniquePaths(pages);
66
130
  const pageMap = buildPageMap(pages);
131
+ const pagePaths = new Set(pageMap.keys());
132
+ const siteShell = {
133
+ __kind: "site",
134
+ siteConfig,
135
+ pages,
136
+ plugins,
137
+ async fetch() {
138
+ return new globalThis.Response("Site not ready", { status: 500 });
139
+ },
140
+ };
141
+ const pluginRoutes = collectPluginRoutes(plugins, siteShell, pagePaths);
142
+ const cacheAdapter = options.cacheAdapter ?? createMemoryCache();
143
+ const hooks = mergeSiteHooks(...collectPluginHooks(plugins, siteShell), options.hooks);
144
+ const inFlightRenders = new Map();
145
+ async function applyBeforeResponse(response, request, ctx, page) {
146
+ if (!hooks?.beforeResponse) {
147
+ return response;
148
+ }
149
+ return hooks.beforeResponse(response, { request, page, ctx });
150
+ }
151
+ async function renderAndStore(key, page, ctx, ttlMs) {
152
+ const existing = inFlightRenders.get(key);
153
+ if (existing) {
154
+ return existing;
155
+ }
156
+ const promise = (async () => {
157
+ const html = await renderPage(page, siteConfig, ctx, hooks);
158
+ if (isSuccessfulRender(html)) {
159
+ await cacheAdapter.set(key, {
160
+ html,
161
+ expiresAt: Date.now() + ttlMs,
162
+ });
163
+ }
164
+ return html;
165
+ })();
166
+ inFlightRenders.set(key, promise);
167
+ try {
168
+ return await promise;
169
+ }
170
+ finally {
171
+ if (inFlightRenders.get(key) === promise) {
172
+ inFlightRenders.delete(key);
173
+ }
174
+ }
175
+ }
176
+ function startBackgroundRefresh(key, page, ctx, ttlMs) {
177
+ if (inFlightRenders.has(key)) {
178
+ return;
179
+ }
180
+ void renderAndStore(key, page, ctx, ttlMs).catch(() => {
181
+ // Keep serving the last good HTML on refresh failure.
182
+ });
183
+ }
184
+ async function respondWithHtml(html, method, cacheControl, ctx) {
185
+ const headers = { "Cache-Control": cacheControl };
186
+ if (method === "HEAD") {
187
+ return ctx.res.html("", { status: 200, headers });
188
+ }
189
+ return ctx.res.html(html, { status: 200, headers });
190
+ }
67
191
  return {
68
192
  __kind: "site",
69
193
  siteConfig,
70
194
  pages,
195
+ plugins,
71
196
  async fetch(request, env = {}) {
72
197
  const ctx = createContext(request, env);
73
198
  const method = ctx.req.method;
199
+ const pathname = normalizePathname(ctx.req.url.pathname);
200
+ const pluginRoute = pluginRoutes.get(pathname);
201
+ if (pluginRoute) {
202
+ return pluginRoute(request, ctx);
203
+ }
74
204
  if (method !== "GET" && method !== "HEAD") {
75
205
  return ctx.res.text("Method Not Allowed", { status: 405 });
76
206
  }
77
- const pathname = normalizePathname(ctx.req.url.pathname);
78
- const pluginAsset = servePluginAsset(pathname, method);
207
+ const pluginAsset = servePluginAsset(pathname, method, plugins);
79
208
  if (pluginAsset) {
80
209
  return pluginAsset;
81
210
  }
82
211
  const page = pageMap.get(pathname);
83
212
  if (!page) {
84
- return ctx.res.notFound();
213
+ return applyBeforeResponse(await ctx.res.notFound(), request, ctx);
214
+ }
215
+ const cacheKey = buildPageCacheKey(pathname, ctx.req.url.search);
216
+ const cacheConfigs = collectPageCacheConfigs(page, siteConfig);
217
+ const hookAllowsCache = hooks?.shouldCache
218
+ ? hooks.shouldCache(request)
219
+ : true;
220
+ async function respondForPage(html, cacheControl) {
221
+ return applyBeforeResponse(await respondWithHtml(html, method, cacheControl, ctx), request, ctx, page);
222
+ }
223
+ if (isPageCacheDisabled(cacheConfigs) || !hookAllowsCache) {
224
+ const html = await renderPage(page, siteConfig, ctx, hooks);
225
+ return respondForPage(html, "no-store");
226
+ }
227
+ const ttlMs = resolvePageCacheTtlMs(cacheConfigs);
228
+ const cached = await cacheAdapter.get(cacheKey);
229
+ if (cached && isCacheEntryFresh(cached)) {
230
+ return respondForPage(cached.html, cacheControlFresh(ttlMs));
85
231
  }
86
- const html = await renderPage(page, siteConfig, ctx);
87
- if (method === "HEAD") {
88
- return ctx.res.html("", { status: 200 });
232
+ if (cached) {
233
+ startBackgroundRefresh(cacheKey, page, ctx, ttlMs);
234
+ return respondForPage(cached.html, cacheControlStale(ttlMs));
89
235
  }
90
- return ctx.res.html(html);
236
+ const html = await renderAndStore(cacheKey, page, ctx, ttlMs);
237
+ return respondForPage(html, cacheControlFresh(ttlMs));
91
238
  },
92
239
  };
93
240
  }
@@ -97,6 +244,7 @@ export function isSite(value) {
97
244
  value.__kind === "site" &&
98
245
  isSiteConfig(value.siteConfig) &&
99
246
  Array.isArray(value.pages) &&
247
+ Array.isArray(value.plugins) &&
100
248
  typeof value.fetch === "function");
101
249
  }
102
250
  //# sourceMappingURL=site.js.map
package/dist/site.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,KAAa;IAC1D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,oCAAoC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,4BAA4B,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAS;IAET,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACzD,OAAO;QACL,MAAM,EAAE,YAAqB;QAC7B,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAuB,CAAC,MAAM,KAAK,YAAY;QAChD,OAAQ,KAAuB,CAAC,MAAM,KAAK,QAAQ;QAClD,KAAuB,CAAC,MAAM,KAAK,IAAI;QACxC,CAAC,KAAK,CAAC,OAAO,CAAE,KAAuB,CAAC,MAAM,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,SAAS,CACjB,wBAAwB,IAAI,CAAC,IAAI,MAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,GAAG,CACrE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA6B;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,SAAS,CACjB,2DAA2D,MAAM,CAAC,IAAI,GAAG,CAC1E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA6B,EAC7B,IAAa,EACb,SAA8B;IAE9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,4CAA4C,MAAM,CAAC,IAAI,oCAAoC,CAC5F,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,SAAS,CACjB,kDAAkD,IAAI,8BAA8B,CACrF,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,SAAS,CACjB,4DAA4D,IAAI,GAAG,CACpE,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA6B,EAC7B,IAAa;IAEb,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CACjB,4CAA4C,MAAM,CAAC,IAAI,mCAAmC,CAC3F,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,UAA4B,EAC5B,OAKC;IAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CACjB,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CACjB,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,SAAS,CACjB,uEAAuE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CACjB,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,YAAY,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,SAAS,CACjB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEjC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAe;QAC5B,MAAM,EAAE,MAAe;QACvB,UAAU;QACV,KAAK;QACL,OAAO;QACP,KAAK,CAAC,KAAK;YACT,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;IAEF,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,iBAAiB,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,cAAc,CAC1B,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,EACzC,OAAO,CAAC,KAAK,CACd,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE3D,KAAK,UAAU,mBAAmB,CAChC,QAA6B,EAC7B,OAA2B,EAC3B,GAAqC,EACrC,IAAkB;QAElB,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,IAAiB,EACjB,GAAqC,EACrC,KAAa;QAEb,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;oBAC1B,IAAI;oBACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;QAEL,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBACzC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,sBAAsB,CAC7B,GAAW,EACX,IAAiB,EACjB,GAAqC,EACrC,KAAa;QAEb,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,KAAK,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACpD,sDAAsD;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,MAAc,EACd,YAAoB,EACpB,GAAqC;QAErC,MAAM,OAAO,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC;QAClD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAe;QACvB,UAAU;QACV,KAAK;QACL,OAAO;QACP,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE;YAC3B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEzD,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAChE,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,mBAAmB,CACxB,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EACxB,OAAO,EACP,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,KAAK,EAAE,WAAW;gBACxC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC5B,CAAC,CAAC,IAAI,CAAC;YAET,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,YAAoB;gBAEpB,OAAO,mBAAmB,CACxB,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,EACtD,OAAO,EACP,GAAG,EACH,IAAI,CACL,CAAC;YACJ,CAAC;YAED,IAAI,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5D,OAAO,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1C,CAAC;YAED,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEhD,IAAI,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBACnD,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiB,CAAC,MAAM,KAAK,MAAM;QACpC,YAAY,CAAE,KAAiB,CAAC,UAAU,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAE,KAAiB,CAAC,KAAK,CAAC;QACvC,KAAK,CAAC,OAAO,CAAE,KAAiB,CAAC,OAAO,CAAC;QACzC,OAAQ,KAAiB,CAAC,KAAK,KAAK,UAAU,CAC/C,CAAC;AACJ,CAAC"}
@@ -1,27 +1,11 @@
1
1
  import type { z } from "zod";
2
- import { type Block } from "./blocks.js";
3
- import type { SlotDefinition, SlotNamesFrom } from "./templates.js";
4
- export type DefaultSlotContent = Block | string;
2
+ import type { Stackbox as SB } from "./types.js";
5
3
  /** Accepts any block or HTML string (default slot content). */
6
- export declare const anySlotContentSchema: z.ZodType<DefaultSlotContent>;
4
+ export declare const anySlotContentSchema: z.ZodType<SB.DefaultSlotContent>;
7
5
  /** Accepts only HTML strings. */
8
6
  export declare const stringSlotContentSchema: z.ZodString;
9
7
  /** Accepts only CMS blocks. */
10
- export declare const blockSlotContentSchema: z.ZodType<Block>;
11
- export type SlotContentFromDefinition<D extends SlotDefinition> = D extends {
12
- options: {
13
- schema: infer Schema extends z.ZodTypeAny;
14
- };
15
- } ? z.input<Schema> : DefaultSlotContent;
16
- export type PageSlotsInput<S extends readonly SlotDefinition[], Required extends string> = {
17
- [K in Required]: SlotContentFromDefinition<Extract<S[number], {
18
- name: K;
19
- }>>[];
20
- } & Partial<{
21
- [K in Exclude<SlotNamesFrom<S>, Required>]: SlotContentFromDefinition<Extract<S[number], {
22
- name: K;
23
- }>>[];
24
- }>;
8
+ export declare const blockSlotContentSchema: z.ZodType<SB.Block>;
25
9
  export declare function validateSlotContentItem(slotName: string, item: unknown, schema: z.ZodTypeAny | undefined): void;
26
10
  export declare class SlotContentValidationError extends Error {
27
11
  constructor(slotName: string, message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"slot-content.d.ts","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAG7D,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,uBAAuB,aAAe,CAAC;AAEpD,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAEnD,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,cAAc,IAC5D,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,MAAM,SAAS,CAAC,CAAC,UAAU,CAAA;KAAE,CAAA;CAAE,GAChE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GACf,kBAAkB,CAAC;AAEzB,MAAM,MAAM,cAAc,CACxB,CAAC,SAAS,SAAS,cAAc,EAAE,EACnC,QAAQ,SAAS,MAAM,IACrB;KACD,CAAC,IAAI,QAAQ,GAAG,yBAAyB,CACxC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAChC,EAAE;CACJ,GAAG,OAAO,CAAC;KACT,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,yBAAyB,CACnE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAChC,EAAE;CACJ,CAAC,CAAC;AAEH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,IAAI,CAkBN;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAMxD"}
1
+ {"version":3,"file":"slot-content.d.ts","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAGhE,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,uBAAuB,aAAe,CAAC;AAEpD,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAEtD,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,IAAI,CAkBN;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAMxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"slot-content.js","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAc,MAAM,aAAa,CAAC;AAKlD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAkC,GAAG,CAAC,KAAK,CAAC;IAC3E,GAAG,CAAC,MAAM,EAAE;IACZ,GAAG,CAAC,MAAM,CAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CAC7C,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AAEpD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAqB,GAAG,CAAC,MAAM,CAChE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAC1B,CAAC;AAoBF,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAa,EACb,MAAgC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,MAAM,CAAC,KAAK,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,+BAA+B,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,SAAS,QAAQ,gCAAgC,OAAO,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,CAAC,IAAI,CAAC;QACb,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"slot-content.js","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAqC,GAAG,CAAC,KAAK,CAAC;IAC9E,GAAG,CAAC,MAAM,EAAE;IACZ,GAAG,CAAC,MAAM,CAAW,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AAEpD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAwB,GAAG,CAAC,MAAM,CACnE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAC1B,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAa,EACb,MAAgC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,MAAM,CAAC,KAAK,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,+BAA+B,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,SAAS,QAAQ,gCAAgC,OAAO,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,CAAC,IAAI,CAAC;QACb,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC"}
@@ -1,32 +1,14 @@
1
- import { html, type HSHtml } from "@hyperspan/html";
1
+ import { type HSHtml } from "@hyperspan/html";
2
2
  import type { z } from "zod";
3
- import type { SitePage, RenderContext } from "./pages.js";
4
- import { type DefaultSlotContent, type SlotContentFromDefinition } from "./slot-content.js";
5
- import type { SlotDefinition, SlotNamesFrom } from "./templates.js";
3
+ import type { Stackbox as SB } from "./types.js";
6
4
  export declare class RenderError extends Error {
7
5
  constructor(message: string);
8
6
  }
9
7
  export declare const SLOT_SENTINEL_PREFIX = "<!--__STACKBOX_SLOT__:";
10
8
  export declare function slotSentinel(name: string): string;
11
- type HtmlSafe = ReturnType<typeof html.raw>;
12
- export type { HSHtml } from "@hyperspan/html";
13
- export type SlotRenderValue = HSHtml | HtmlSafe | Promise<HSHtml>;
14
- export type Slot<TContent = DefaultSlotContent, D extends SlotDefinition = SlotDefinition> = {
15
- readonly name: D["name"];
16
- readonly definition: D;
17
- readonly content: readonly TContent[];
18
- render(): SlotRenderValue;
19
- };
20
- export type TemplateSlotsFrom<S extends readonly SlotDefinition[]> = {
21
- [K in SlotNamesFrom<S>]: Slot<SlotContentFromDefinition<Extract<S[number], {
22
- name: K;
23
- }>>, Extract<S[number], {
24
- name: K;
25
- }>>;
26
- };
27
- export declare function renderSlotContent(slotName: string, items: readonly unknown[], ctx: RenderContext, schema: z.ZodTypeAny | undefined): Promise<HSHtml>;
28
- export declare function createStubSlot<D extends SlotDefinition>(definition: D): Slot<DefaultSlotContent, D>;
29
- export declare function createPageSlot<D extends SlotDefinition>(definition: D, content: readonly SlotContentFromDefinition<D>[], ctx: RenderContext): Slot<SlotContentFromDefinition<D>, D>;
30
- export declare function buildStubSlots<S extends readonly SlotDefinition[]>(definitions: S): TemplateSlotsFrom<S>;
31
- export declare function buildPageSlots(page: SitePage, ctx: RenderContext): Record<string, Slot>;
9
+ export declare function renderSlotContent(slotName: string, items: readonly unknown[], ctx: SB.RenderContext, schema: z.ZodTypeAny | undefined): Promise<HSHtml>;
10
+ export declare function createStubSlot<D extends SB.SlotDefinition>(definition: D): SB.Slot<SB.DefaultSlotContent, D>;
11
+ export declare function createPageSlot<D extends SB.SlotDefinition>(definition: D, content: readonly SB.SlotContentFromDefinition<D>[], ctx: SB.RenderContext): SB.Slot<SB.SlotContentFromDefinition<D>, D>;
12
+ export declare function buildStubSlots<S extends readonly SB.SlotDefinition[]>(definitions: S): SB.TemplateSlotsFrom<S>;
13
+ export declare function buildPageSlots(page: SB.SitePage, ctx: SB.RenderContext): Record<string, SB.Slot>;
32
14
  //# sourceMappingURL=slot-handle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot-handle.d.ts","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAE/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,IAAI,CACd,QAAQ,GAAG,kBAAkB,EAC7B,CAAC,SAAS,cAAc,GAAG,cAAc,IACvC;IACF,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,MAAM,IAAI,eAAe,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE,IAAI;KAClE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAC3B,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,EAC1D,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAChC;CACF,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,cAAc,EACxB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAS5C;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,cAAc,EAExB,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,SAAS,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAChD,GAAG,EAAE,aAAa,GACjB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAUvC;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE,EAChE,WAAW,EAAE,CAAC,GACb,iBAAiB,CAAC,CAAC,CAAC,CAQtB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,aAAa,GACjB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAUtB"}
1
+ {"version":3,"file":"slot-handle.d.ts","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAKjD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AA0BD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,GAAG,EAAE,EAAE,CAAC,aAAa,EACrB,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,EAAE,CAAC,cAAc,EAC3B,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,CASlD;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,EAAE,CAAC,cAAc,EAE3B,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,SAAS,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EACnD,GAAG,EAAE,EAAE,CAAC,aAAa,GACpB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAU7C;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,cAAc,EAAE,EACnE,WAAW,EAAE,CAAC,GACb,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAQzB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,GAAG,EAAE,EAAE,CAAC,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAUzB"}
@@ -1,4 +1,4 @@
1
- import { html } from "@hyperspan/html";
1
+ import { html, renderAsync } from "@hyperspan/html";
2
2
  import { isBlock } from "./blocks.js";
3
3
  import { validateSlotContentItem, } from "./slot-content.js";
4
4
  export class RenderError extends Error {
@@ -11,21 +11,36 @@ export const SLOT_SENTINEL_PREFIX = "<!--__STACKBOX_SLOT__:";
11
11
  export function slotSentinel(name) {
12
12
  return `${SLOT_SENTINEL_PREFIX}${name}-->`;
13
13
  }
14
+ async function renderSlotItemHtml(slotName, item, ctx, schema) {
15
+ try {
16
+ validateSlotContentItem(slotName, item, schema);
17
+ }
18
+ catch (err) {
19
+ throw new RenderError(err instanceof Error ? err.message : String(err));
20
+ }
21
+ if (typeof item === "string") {
22
+ return item;
23
+ }
24
+ if (isBlock(item)) {
25
+ const rendered = await item.render(ctx);
26
+ return renderAsync(rendered);
27
+ }
28
+ throw new RenderError("invalid slot content; expected block or HTML string");
29
+ }
14
30
  export function renderSlotContent(slotName, items, ctx, schema) {
15
- return Promise.all(items.map(async (item) => {
16
- try {
17
- validateSlotContentItem(slotName, item, schema);
18
- }
19
- catch (err) {
20
- throw new RenderError(err instanceof Error ? err.message : String(err));
21
- }
22
- if (typeof item === "string") {
23
- return html.raw(item);
24
- }
25
- if (isBlock(item)) {
26
- return item.render(ctx);
31
+ return Promise.all(items.map(async (item, index) => {
32
+ let htmlString = await renderSlotItemHtml(slotName, item, ctx, schema);
33
+ const hook = ctx.hooks?.renderSlotItem;
34
+ if (hook && ctx.page) {
35
+ htmlString = await hook(htmlString, {
36
+ item: item,
37
+ slot: slotName,
38
+ index,
39
+ page: ctx.page,
40
+ ctx: ctx.ctx,
41
+ });
27
42
  }
28
- throw new RenderError("invalid slot content; expected block or HTML string");
43
+ return html.raw(htmlString);
29
44
  })).then((chunks) => html `${chunks}`);
30
45
  }
31
46
  export function createStubSlot(definition) {
@@ -1 +1 @@
1
- {"version":3,"file":"slot-handle.js","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slot-handle.js","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"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"}
@@ -1,52 +1,3 @@
1
- export declare namespace Stackbox {
2
- type CookieOptions = {
3
- maxAge?: number;
4
- domain?: string;
5
- path?: string;
6
- expires?: Date;
7
- httpOnly?: boolean;
8
- secure?: boolean;
9
- sameSite?: "lax" | "strict" | true;
10
- };
11
- type Cookies = {
12
- _req: globalThis.Request;
13
- _responseHeaders: Headers | undefined;
14
- _parsedCookies: Record<string, string>;
15
- _encrypt: ((str: string) => string) | undefined;
16
- _decrypt: ((str: string) => string) | undefined;
17
- get: (name: string) => string | undefined;
18
- set: (name: string, value: string, options?: CookieOptions) => void;
19
- delete: (name: string) => void;
20
- };
21
- type Request = {
22
- url: URL;
23
- raw: globalThis.Request;
24
- method: string;
25
- headers: Headers;
26
- query: URLSearchParams;
27
- cookies: Cookies;
28
- text: () => Promise<string>;
29
- json: <T = unknown>() => Promise<T>;
30
- formData: () => Promise<FormData>;
31
- urlencoded: () => Promise<URLSearchParams>;
32
- };
33
- type Response = {
34
- cookies: Cookies;
35
- headers: Headers;
36
- status: number | undefined;
37
- html: (html: string, options?: ResponseInit) => Promise<globalThis.Response>;
38
- json: (json: unknown, options?: ResponseInit) => Promise<globalThis.Response>;
39
- text: (text: string, options?: ResponseInit) => Promise<globalThis.Response>;
40
- redirect: (url: string, options?: ResponseInit) => Promise<globalThis.Response>;
41
- error: (error: Error, options?: ResponseInit) => Promise<globalThis.Response>;
42
- notFound: (options?: ResponseInit) => Promise<globalThis.Response>;
43
- merge: (response: globalThis.Response) => Promise<globalThis.Response>;
44
- };
45
- interface Context<TEnv extends Record<string, unknown> = Record<string, unknown>> {
46
- env: TEnv;
47
- req: Request;
48
- res: Response;
49
- }
50
- }
51
- export declare function createContext<TEnv extends Record<string, unknown> = Record<string, unknown>>(raw: globalThis.Request, env?: TEnv): Stackbox.Context<TEnv>;
1
+ import type { Stackbox as SB } from "../types.js";
2
+ export declare function createContext<TEnv extends Record<string, unknown> = Record<string, unknown>>(raw: globalThis.Request, env?: TEnv): SB.Context<TEnv>;
52
3
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"AAAA,yBAAiB,QAAQ,CAAC;IACxB,KAAY,aAAa,GAAG;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,IAAI,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;KACpC,CAAC;IAEF,KAAY,OAAO,GAAG;QACpB,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;QACzB,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;QACtC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;QAChD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;QAC1C,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;QACpE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAChC,CAAC;IAEF,KAAY,OAAO,GAAG;QACpB,GAAG,EAAE,GAAG,CAAC;QACT,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,eAAe,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,UAAU,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;KAC5C,CAAC;IAEF,KAAY,QAAQ,GAAG;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,EAAE,CACJ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,EAAE,CACR,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACxE,CAAC;IAEF,UAAiB,OAAO,CACtB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAE9D,GAAG,EAAE,IAAI,CAAC;QACV,GAAG,EAAE,OAAO,CAAC;QACb,GAAG,EAAE,QAAQ,CAAC;KACf;CACF;AA+JD,wBAAgB,aAAa,CAC3B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAyBzE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AA+JlD,wBAAgB,aAAa,CAC3B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAyBnE"}