@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":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Stackbox as SB } from "./types.js";
2
+ export declare const DEFAULT_CACHE_TTL_MS: number;
3
+ export declare const MAX_CACHE_TTL_MS: number;
4
+ export declare function createMemoryCache(): SB.CacheAdapter;
5
+ export declare function isCacheConfig(value: unknown): value is SB.CacheConfig;
6
+ export declare function collectPageCacheConfigs(page: SB.SitePage, siteConfig: SB.SiteConfig): (SB.CacheConfig | undefined)[];
7
+ export declare function isPageCacheDisabled(configs: readonly (SB.CacheConfig | undefined)[]): boolean;
8
+ export declare function resolvePageCacheTtlMs(configs: readonly (SB.CacheConfig | undefined)[]): number;
9
+ export declare function buildPageCacheKey(pathname: string, search: string): string;
10
+ export declare function cacheControlFresh(ttlMs: number): string;
11
+ export declare function cacheControlStale(ttlMs: number): string;
12
+ export declare function isCacheEntryFresh(entry: SB.CacheEntry, now?: number): boolean;
13
+ export declare function isSuccessfulRender(html: string): boolean;
14
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,gBAAgB,QAA2B,CAAC;AAEzD,wBAAgB,iBAAiB,IAAI,EAAE,CAAC,YAAY,CAUnD;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,WAAW,CAKrE;AAeD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,UAAU,EAAE,EAAE,CAAC,UAAU,GACxB,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAkBhC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAE7F;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAC/C,MAAM,CAqBR;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,SAAa,GAAG,OAAO,CAEjF;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
package/dist/cache.js ADDED
@@ -0,0 +1,93 @@
1
+ import { isBlock } from "./blocks.js";
2
+ export const DEFAULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;
3
+ export const MAX_CACHE_TTL_MS = 30 * 24 * 60 * 60 * 1000;
4
+ export function createMemoryCache() {
5
+ const store = new Map();
6
+ return {
7
+ get(key) {
8
+ return store.get(key);
9
+ },
10
+ set(key, entry) {
11
+ store.set(key, entry);
12
+ },
13
+ };
14
+ }
15
+ function isCacheBounds(value) {
16
+ return (typeof value === "object" &&
17
+ value !== null &&
18
+ !Array.isArray(value) &&
19
+ ("min" in value || "max" in value));
20
+ }
21
+ export function isCacheConfig(value) {
22
+ if (value === false) {
23
+ return true;
24
+ }
25
+ return isCacheBounds(value);
26
+ }
27
+ function readCacheConfig(value) {
28
+ if (value === undefined) {
29
+ return undefined;
30
+ }
31
+ if (value === false) {
32
+ return false;
33
+ }
34
+ if (isCacheBounds(value)) {
35
+ return value;
36
+ }
37
+ return undefined;
38
+ }
39
+ export function collectPageCacheConfigs(page, siteConfig) {
40
+ const configs = [
41
+ readCacheConfig(page.cache),
42
+ readCacheConfig(siteConfig.config.cache),
43
+ ];
44
+ for (const items of Object.values(page.slots)) {
45
+ if (!items) {
46
+ continue;
47
+ }
48
+ for (const item of items) {
49
+ if (isBlock(item)) {
50
+ configs.push(readCacheConfig(item.cache));
51
+ }
52
+ }
53
+ }
54
+ return configs;
55
+ }
56
+ export function isPageCacheDisabled(configs) {
57
+ return configs.some((config) => config === false);
58
+ }
59
+ export function resolvePageCacheTtlMs(configs) {
60
+ const bounds = configs.filter(isCacheBounds);
61
+ const mins = bounds
62
+ .map((config) => config.min)
63
+ .filter((value) => typeof value === "number" && value >= 0);
64
+ const maxes = bounds
65
+ .map((config) => config.max)
66
+ .filter((value) => typeof value === "number" && value > 0);
67
+ const effectiveMin = mins.length > 0 ? Math.max(...mins) : 0;
68
+ const effectiveMax = maxes.length > 0
69
+ ? Math.min(...maxes, MAX_CACHE_TTL_MS)
70
+ : MAX_CACHE_TTL_MS;
71
+ const raw = maxes.length > 0 ? effectiveMax : DEFAULT_CACHE_TTL_MS;
72
+ const ttl = Math.min(Math.max(raw, effectiveMin), effectiveMax);
73
+ return ttl;
74
+ }
75
+ export function buildPageCacheKey(pathname, search) {
76
+ return `${pathname}${search}`;
77
+ }
78
+ export function cacheControlFresh(ttlMs) {
79
+ const seconds = Math.max(0, Math.floor(ttlMs / 1000));
80
+ return `public, max-age=${seconds}`;
81
+ }
82
+ export function cacheControlStale(ttlMs) {
83
+ const seconds = Math.max(0, Math.floor(ttlMs / 1000));
84
+ return `public, max-age=0, stale-while-revalidate=${seconds}`;
85
+ }
86
+ export function isCacheEntryFresh(entry, now = Date.now()) {
87
+ return entry.expiresAt > now;
88
+ }
89
+ const RENDER_ERROR_MARKER = "[Hyperspan] Render Error";
90
+ export function isSuccessfulRender(html) {
91
+ return !html.includes(RENDER_ERROR_MARKER);
92
+ }
93
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { runBuildCli } from "./build.js";
3
+ try {
4
+ const result = await runBuildCli(process.argv);
5
+ const names = result.plugins.length > 0
6
+ ? result.plugins.map((plugin) => plugin.name).join(", ")
7
+ : "(none)";
8
+ console.log(`stackbox-cms build: copied public assets for ${names}`);
9
+ console.log(` outDir ${result.settings.outDir}`);
10
+ console.log(` publicDir ${result.settings.publicDir}`);
11
+ }
12
+ catch (error) {
13
+ console.error(error instanceof Error ? error.message : error);
14
+ process.exitCode = 1;
15
+ }
16
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GACT,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACxD,CAAC,CAAC,QAAQ,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,gDAAgD,KAAK,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,16 @@
1
- export { html } from "@hyperspan/html";
2
- export { createBlock, isBlock, type Block, type BlockFactory, type BlockOptionsOf, type BlockRenderResult, } from "./blocks.js";
3
- export { createPage, isPage, PageValidationError, toPageRenderView, validateSlotContentItem, type Page, type PageMeta, type PageRenderView, type RenderContext, type SitePage, } from "./pages.js";
1
+ export { html, type HSHtml } from "@hyperspan/html";
2
+ export type { Stackbox } from "./types.js";
3
+ export { buildPageCacheKey, cacheControlFresh, cacheControlStale, collectPageCacheConfigs, createMemoryCache, DEFAULT_CACHE_TTL_MS, isCacheConfig, isCacheEntryFresh, isPageCacheDisabled, isSuccessfulRender, MAX_CACHE_TTL_MS, resolvePageCacheTtlMs, } from "./cache.js";
4
+ export { build, BuildError, loadSiteFromEntry, parseBuildCliArgs, resolveBuildSettings, runBuildCli, } from "./build.js";
5
+ export { createBlock, isBlock, } from "./blocks.js";
6
+ export { createPage, isPage, PageValidationError, toPageRenderView, validateSlotContentItem, } from "./pages.js";
4
7
  export { renderStandardHead } from "./render-head.js";
5
8
  export { renderPage, RenderError } from "./render-page.js";
6
9
  export { matchPagePath, normalizePathname } from "./routing.js";
7
- export { createSite, createSiteConfig, isSite, isSiteConfig, SiteError, type Site, type SiteConfig, } from "./site.js";
8
- export { createContext, Stackbox } from "./stackbox/context.js";
9
- export { anySlotContentSchema, blockSlotContentSchema, slotHasContent, SlotContentValidationError, stringSlotContentSchema, type DefaultSlotContent, type PageSlotsInput, type SlotContentFromDefinition, } from "./slot-content.js";
10
- export { buildPageSlots, buildStubSlots, renderSlotContent, slotSentinel, SLOT_SENTINEL_PREFIX, type Slot, type SlotRenderValue, type TemplateSlotsFrom, } from "./slot-handle.js";
11
- export { createTemplate, isTemplate, TemplateBuildError, type RequiredSlotNamesFrom, type SlotDefinition, type SlotMeta, type SlotNamesFrom, type SlotOptions, type TemplateDescriptor, type TemplateRenderContext, type TemplateRenderFn, } from "./templates.js";
10
+ export { assertPlugin, copyPluginPrivateAssets, copyRegisteredPluginAssets, createPlugin, isPlugin, PluginError, runRegisteredPluginBuilds, } from "./plugin.js";
11
+ export { createSite, createSiteConfig, isSite, isSiteConfig, SiteError, } from "./site.js";
12
+ export { createContext } from "./stackbox/context.js";
13
+ export { anySlotContentSchema, blockSlotContentSchema, slotHasContent, SlotContentValidationError, stringSlotContentSchema, } from "./slot-content.js";
14
+ export { buildPageSlots, buildStubSlots, renderSlotContent, slotSentinel, SLOT_SENTINEL_PREFIX, } from "./slot-handle.js";
15
+ export { createTemplate, isTemplate, TemplateBuildError, } from "./templates.js";
12
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,WAAW,EACX,OAAO,EACP,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,EACT,KAAK,IAAI,EACT,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,UAAU,EACV,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  export { html } from "@hyperspan/html";
2
+ export { buildPageCacheKey, cacheControlFresh, cacheControlStale, collectPageCacheConfigs, createMemoryCache, DEFAULT_CACHE_TTL_MS, isCacheConfig, isCacheEntryFresh, isPageCacheDisabled, isSuccessfulRender, MAX_CACHE_TTL_MS, resolvePageCacheTtlMs, } from "./cache.js";
3
+ export { build, BuildError, loadSiteFromEntry, parseBuildCliArgs, resolveBuildSettings, runBuildCli, } from "./build.js";
2
4
  export { createBlock, isBlock, } from "./blocks.js";
3
5
  export { createPage, isPage, PageValidationError, toPageRenderView, validateSlotContentItem, } from "./pages.js";
4
6
  export { renderStandardHead } from "./render-head.js";
5
7
  export { renderPage, RenderError } from "./render-page.js";
6
8
  export { matchPagePath, normalizePathname } from "./routing.js";
9
+ export { assertPlugin, copyPluginPrivateAssets, copyRegisteredPluginAssets, createPlugin, isPlugin, PluginError, runRegisteredPluginBuilds, } from "./plugin.js";
7
10
  export { createSite, createSiteConfig, isSite, isSiteConfig, SiteError, } from "./site.js";
8
11
  export { createContext } from "./stackbox/context.js";
9
12
  export { anySlotContentSchema, blockSlotContentSchema, slotHasContent, SlotContentValidationError, stringSlotContentSchema, } from "./slot-content.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,WAAW,EACX,OAAO,GAKR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GAMxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,GAGV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAY,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,GAIxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,GAIrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,UAAU,EACV,kBAAkB,GASnB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,UAAU,EACV,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}
package/dist/link.d.ts CHANGED
@@ -1,10 +1,6 @@
1
+ import type { Stackbox as SB } from "./types.js";
1
2
  export declare const PLUGIN_PUBLIC_PREFIX = "/_sb/plugins";
2
3
  export declare function pluginAssetPath(pluginName: string, relativePath: string): string;
3
- export type PluginAssetRequest = {
4
- plugin: string;
5
- relativePath: string;
6
- };
7
- export declare function parsePluginAssetRequest(pathname: string): PluginAssetRequest | null;
8
- export declare function getPluginPublicRootDir(): string;
9
- export declare function servePluginAsset(pathname: string, method: string): globalThis.Response | null;
4
+ export declare function parsePluginAssetRequest(pathname: string): SB.PluginAssetRequest | null;
5
+ export declare function servePluginAsset(pathname: string, method: string, plugins?: readonly SB.Plugin[]): globalThis.Response | null;
10
6
  //# sourceMappingURL=link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AA8BnD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAShF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GACf,kBAAkB,GAAG,IAAI,CAkC3B;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAa/C;AAwBD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,UAAU,CAAC,QAAQ,GAAG,IAAI,CA4B5B"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AA8BnD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAShF;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GACf,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAkC9B;AA0BD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAAS,EAAE,CAAC,MAAM,EAAO,GACjC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAiC5B"}
package/dist/link.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
- import { dirname, join, normalize, sep } from "node:path";
3
- import { fileURLToPath } from "node:url";
2
+ import { join, normalize, sep } from "node:path";
4
3
  import { normalizePathname } from "./routing.js";
5
4
  export const PLUGIN_PUBLIC_PREFIX = "/_sb/plugins";
6
5
  const CONTENT_TYPES = {
@@ -67,18 +66,6 @@ export function parsePluginAssetRequest(pathname) {
67
66
  }
68
67
  return { plugin, relativePath };
69
68
  }
70
- export function getPluginPublicRootDir() {
71
- const here = dirname(fileURLToPath(import.meta.url));
72
- const fromDist = join(here, "public", "_sb", "plugins");
73
- if (existsSync(fromDist)) {
74
- return fromDist;
75
- }
76
- const fromSrcDev = join(here, "..", "dist", "public", "_sb", "plugins");
77
- if (existsSync(fromSrcDev)) {
78
- return fromSrcDev;
79
- }
80
- return fromDist;
81
- }
82
69
  function contentTypeForPath(relativePath) {
83
70
  const dot = relativePath.lastIndexOf(".");
84
71
  if (dot === -1) {
@@ -87,9 +74,11 @@ function contentTypeForPath(relativePath) {
87
74
  return CONTENT_TYPES[relativePath.slice(dot).toLowerCase()] ??
88
75
  "application/octet-stream";
89
76
  }
90
- function resolvePluginAssetFile(request) {
91
- const root = getPluginPublicRootDir();
92
- const absolute = normalize(join(root, request.plugin, request.relativePath));
77
+ function resolveFileInDir(root, relativePath) {
78
+ if (!existsSync(root)) {
79
+ return null;
80
+ }
81
+ const absolute = normalize(join(root, relativePath));
93
82
  const rootWithSep = root.endsWith(sep) ? root : `${root}${sep}`;
94
83
  if (!absolute.startsWith(rootWithSep)) {
95
84
  return null;
@@ -99,12 +88,16 @@ function resolvePluginAssetFile(request) {
99
88
  }
100
89
  return absolute;
101
90
  }
102
- export function servePluginAsset(pathname, method) {
91
+ export function servePluginAsset(pathname, method, plugins = []) {
103
92
  const request = parsePluginAssetRequest(pathname);
104
93
  if (!request) {
105
94
  return null;
106
95
  }
107
- const filePath = resolvePluginAssetFile(request);
96
+ const plugin = plugins.find((entry) => entry.name === request.plugin);
97
+ if (!plugin) {
98
+ return new globalThis.Response("Not Found", { status: 404 });
99
+ }
100
+ const filePath = resolveFileInDir(plugin.publicAssetsDir, request.relativePath);
108
101
  if (!filePath) {
109
102
  return new globalThis.Response("Not Found", { status: 404 });
110
103
  }
package/dist/link.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Stackbox as SB } from "./types.js";
2
+ export declare function mergeSiteHooks(...sources: Array<SB.SiteHooks | undefined>): SB.SiteHooks | undefined;
3
+ //# sourceMappingURL=merge-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-hooks.d.ts","sourceRoot":"","sources":["../src/merge-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAMjD,wBAAgB,cAAc,CAC5B,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC,GAC1C,EAAE,CAAC,SAAS,GAAG,SAAS,CAyD1B"}
@@ -0,0 +1,54 @@
1
+ function isDefined(value) {
2
+ return value !== undefined;
3
+ }
4
+ export function mergeSiteHooks(...sources) {
5
+ const hooks = sources.filter(isDefined);
6
+ if (hooks.length === 0) {
7
+ return undefined;
8
+ }
9
+ const shouldCacheFns = hooks
10
+ .map((source) => source.shouldCache)
11
+ .filter(isDefined);
12
+ const renderSlotItemFns = hooks
13
+ .map((source) => source.renderSlotItem)
14
+ .filter(isDefined);
15
+ const afterRenderFns = hooks
16
+ .map((source) => source.afterRender)
17
+ .filter(isDefined);
18
+ const beforeResponseFns = hooks
19
+ .map((source) => source.beforeResponse)
20
+ .filter(isDefined);
21
+ const merged = {};
22
+ if (shouldCacheFns.length > 0) {
23
+ merged.shouldCache = (request) => shouldCacheFns.every((fn) => fn(request));
24
+ }
25
+ if (renderSlotItemFns.length > 0) {
26
+ merged.renderSlotItem = async (html, info) => {
27
+ let result = html;
28
+ for (const fn of renderSlotItemFns) {
29
+ result = await fn(result, info);
30
+ }
31
+ return result;
32
+ };
33
+ }
34
+ if (afterRenderFns.length > 0) {
35
+ merged.afterRender = async (html, info) => {
36
+ let result = html;
37
+ for (const fn of afterRenderFns) {
38
+ result = await fn(result, info);
39
+ }
40
+ return result;
41
+ };
42
+ }
43
+ if (beforeResponseFns.length > 0) {
44
+ merged.beforeResponse = async (response, info) => {
45
+ let result = response;
46
+ for (const fn of beforeResponseFns) {
47
+ result = await fn(result, info);
48
+ }
49
+ return result;
50
+ };
51
+ }
52
+ return merged;
53
+ }
54
+ //# sourceMappingURL=merge-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-hooks.js","sourceRoot":"","sources":["../src/merge-hooks.ts"],"names":[],"mappings":"AAEA,SAAS,SAAS,CAAI,KAAoB;IACxC,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAG,OAAwC;IAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,KAAK;SACzB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SACnC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrB,MAAM,iBAAiB,GAAG,KAAK;SAC5B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;SACtC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrB,MAAM,cAAc,GAAG,KAAK;SACzB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;SACnC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrB,MAAM,iBAAiB,GAAG,KAAK;SAC5B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;SACtC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,EAAE,CAC/B,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC3C,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;gBACnC,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,WAAW,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACxC,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;gBAChC,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,cAAc,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC/C,IAAI,MAAM,GAAG,QAAQ,CAAC;YACtB,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;gBACnC,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/pages.d.ts CHANGED
@@ -1,55 +1,24 @@
1
- import type { SiteConfig } from "./site.js";
2
- import type { Stackbox } from "./stackbox/context.js";
3
- import { type SlotDefinition, type SlotNamesFrom, type RequiredSlotNamesFrom, type TemplateDescriptor } from "./templates.js";
4
- import { type DefaultSlotContent, type PageSlotsInput } from "./slot-content.js";
5
- export type PageMeta = {
6
- description?: string;
7
- robots?: string;
8
- canonical?: string;
9
- ogTitle?: string;
10
- ogDescription?: string;
11
- ogImage?: string;
12
- twitterCard?: string;
13
- };
14
- export type RenderContext = {
15
- siteConfig: SiteConfig;
16
- ctx?: Stackbox.Context;
17
- };
18
- export type Page<Slots extends string = string, RequiredSlots extends Slots = never, Definitions extends readonly SlotDefinition[] = readonly SlotDefinition[]> = {
19
- readonly __kind: "page";
20
- path: string;
21
- template: TemplateDescriptor<Slots, RequiredSlots, Definitions>;
22
- title: string;
23
- meta?: PageMeta;
24
- slots: PageSlotsInput<Definitions, RequiredSlots>;
25
- };
26
- /** Widened page type for site builds mixing templates and required slots. */
27
- export type SitePage = {
28
- readonly __kind: "page";
29
- path: string;
30
- template: TemplateDescriptor<string, string>;
31
- title: string;
32
- meta?: PageMeta;
33
- slots: Partial<Record<string, DefaultSlotContent[]>>;
34
- };
35
- /** Page fields passed to template render (slot content lives on `slots`). */
36
- export type PageRenderView = Omit<Page, "template" | "slots">;
37
- export declare function toPageRenderView({ template: _template, slots: _slots, ...view }: SitePage): PageRenderView;
38
- export declare function isPage(value: unknown): value is Page;
1
+ import type { Stackbox as SB } from "./types.js";
2
+ export declare function toPageRenderView({ template: _template, slots: _slots, ...view }: SB.SitePage): SB.PageRenderView;
3
+ export declare function isPage(value: unknown): value is SB.Page;
39
4
  export declare class PageValidationError extends Error {
40
5
  constructor(message: string);
41
6
  }
42
- export declare function createPage(template: TemplateDescriptor<string, string>, def: {
7
+ export declare function createPage(template: SB.TemplateDescriptor<string, string>, def: {
43
8
  path: string;
44
9
  title: string;
45
- meta?: PageMeta;
46
- slots: Partial<Record<string, DefaultSlotContent[]>>;
47
- }): SitePage;
48
- export declare function createPage<const S extends readonly SlotDefinition[]>(template: TemplateDescriptor<SlotNamesFrom<S>, RequiredSlotNamesFrom<S>, S>, def: {
10
+ meta?: SB.PageMeta;
11
+ cache?: SB.CacheConfig;
12
+ source?: string;
13
+ slots: Partial<Record<string, SB.DefaultSlotContent[]>>;
14
+ }): SB.SitePage;
15
+ export declare function createPage<const S extends readonly SB.SlotDefinition[]>(template: SB.TemplateDescriptor<SB.SlotNamesFrom<S>, SB.RequiredSlotNamesFrom<S>, S>, def: {
49
16
  path: string;
50
17
  title: string;
51
- meta?: PageMeta;
52
- slots: PageSlotsInput<S, RequiredSlotNamesFrom<S>>;
53
- }): Page<SlotNamesFrom<S>, RequiredSlotNamesFrom<S>, S>;
18
+ meta?: SB.PageMeta;
19
+ cache?: SB.CacheConfig;
20
+ source?: string;
21
+ slots: SB.PageSlotsInput<S, SB.RequiredSlotNamesFrom<S>>;
22
+ }): SB.Page<SB.SlotNamesFrom<S>, SB.RequiredSlotNamesFrom<S>, S>;
54
23
  export { validateSlotContentItem } from "./slot-content.js";
55
24
  //# sourceMappingURL=pages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAUjD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,IAAI,EACR,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,cAAc,CAEjC;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAavD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AA+CD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/C,GAAG,EAAE;IACH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;CACzD,GACA,EAAE,CAAC,QAAQ,CAAC;AACf,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,cAAc,EAAE,EACrE,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAC7B,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EACnB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAC3B,CAAC,CACF,EACD,GAAG,EAAE;IACH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1D,GACA,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AA+ChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/pages.js CHANGED
@@ -78,6 +78,8 @@ export function createPage(template, def) {
78
78
  template,
79
79
  title: def.title,
80
80
  meta: def.meta,
81
+ cache: def.cache,
82
+ source: def.source,
81
83
  slots: def.slots,
82
84
  };
83
85
  }
package/dist/pages.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Stackbox as SB } from "./types.js";
2
+ export declare class PluginError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function createPlugin(options: SB.CreatePluginOptions): SB.Plugin;
6
+ export declare function isPlugin(value: unknown): value is SB.Plugin;
7
+ export declare function assertPlugin(value: unknown, label?: string): SB.Plugin;
8
+ /**
9
+ * Copy each registered plugin's private `assets/` next to its compiled entry
10
+ * (`{plugin.root}/assets`). Used by this package's build — not a site public copy.
11
+ */
12
+ export declare function copyPluginPrivateAssets(plugins: readonly SB.Plugin[]): void;
13
+ /**
14
+ * Copy each registered plugin's `public_assets/` to
15
+ * `{publicDir}/_sb/plugins/{name}/`. Only plugins you pass in are copied.
16
+ */
17
+ export declare function copyRegisteredPluginAssets(plugins: readonly SB.Plugin[], publicDir: string): void;
18
+ /**
19
+ * Run each registered plugin's `build` hook (e.g. write sitemap.xml).
20
+ */
21
+ export declare function runRegisteredPluginBuilds(plugins: readonly SB.Plugin[], ctx: SB.PluginBuildContext): Promise<void>;
22
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AA8ED,wBAAgB,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,MAAM,CA4BvE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,CAiB3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAW,GAAG,EAAE,CAAC,MAAM,CAOxE;AAaD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAK3E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAC7B,SAAS,EAAE,MAAM,GAChB,IAAI,CAiBN;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAC7B,GAAG,EAAE,EAAE,CAAC,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CAOf"}