@stackbox/cms 0.0.5 → 0.1.0

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 (111) hide show
  1. package/README.md +119 -7
  2. package/dist/AGENTS.md +215 -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/pages.d.ts +15 -46
  28. package/dist/pages.d.ts.map +1 -1
  29. package/dist/pages.js +2 -0
  30. package/dist/pages.js.map +1 -1
  31. package/dist/plugin.d.ts +22 -0
  32. package/dist/plugin.d.ts.map +1 -0
  33. package/dist/plugin.js +155 -0
  34. package/dist/plugin.js.map +1 -0
  35. package/dist/plugins/blog/index.d.ts +6 -5
  36. package/dist/plugins/blog/index.d.ts.map +1 -1
  37. package/dist/plugins/blog/index.js +16 -0
  38. package/dist/plugins/blog/index.js.map +1 -1
  39. package/dist/plugins/random-quote/assets/quotes.json +230 -0
  40. package/dist/plugins/random-quote/index.d.ts +3 -1
  41. package/dist/plugins/random-quote/index.d.ts.map +1 -1
  42. package/dist/plugins/random-quote/index.js +15 -1
  43. package/dist/plugins/random-quote/index.js.map +1 -1
  44. package/dist/plugins/sitemap/index.d.ts +14 -0
  45. package/dist/plugins/sitemap/index.d.ts.map +1 -0
  46. package/dist/plugins/sitemap/index.js +119 -0
  47. package/dist/plugins/sitemap/index.js.map +1 -0
  48. package/dist/render-head.d.ts +2 -2
  49. package/dist/render-head.d.ts.map +1 -1
  50. package/dist/render-page.d.ts +2 -4
  51. package/dist/render-page.d.ts.map +1 -1
  52. package/dist/render-page.js +7 -3
  53. package/dist/render-page.js.map +1 -1
  54. package/dist/site.d.ts +10 -17
  55. package/dist/site.d.ts.map +1 -1
  56. package/dist/site.js +138 -7
  57. package/dist/site.js.map +1 -1
  58. package/dist/slot-content.d.ts +3 -19
  59. package/dist/slot-content.d.ts.map +1 -1
  60. package/dist/slot-content.js.map +1 -1
  61. package/dist/slot-handle.d.ts +7 -25
  62. package/dist/slot-handle.d.ts.map +1 -1
  63. package/dist/slot-handle.js +29 -14
  64. package/dist/slot-handle.js.map +1 -1
  65. package/dist/stackbox/context.d.ts +2 -51
  66. package/dist/stackbox/context.d.ts.map +1 -1
  67. package/dist/stackbox/context.js.map +1 -1
  68. package/dist/templates.d.ts +7 -57
  69. package/dist/templates.d.ts.map +1 -1
  70. package/dist/templates.js.map +1 -1
  71. package/dist/types.d.ts +277 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +13 -3
  76. package/src/plugins/blog/AGENTS.md +5 -1
  77. package/src/plugins/blog/index.ts +22 -5
  78. package/src/plugins/random-quote/AGENTS.md +30 -7
  79. package/src/plugins/random-quote/index.ts +17 -1
  80. package/src/plugins/random-quote/public_assets/widget.css +5 -0
  81. package/src/plugins/sitemap/AGENTS.md +82 -0
  82. package/src/plugins/sitemap/index.ts +156 -0
  83. package/AGENTS.md +0 -87
  84. package/dist/modules/blog/module.d.ts +0 -20
  85. package/dist/modules/blog/module.d.ts.map +0 -1
  86. package/dist/modules/blog/module.js +0 -52
  87. package/dist/modules/blog/module.js.map +0 -1
  88. package/dist/modules/blog/posts.d.ts +0 -15
  89. package/dist/modules/blog/posts.d.ts.map +0 -1
  90. package/dist/modules/blog/posts.js +0 -46
  91. package/dist/modules/blog/posts.js.map +0 -1
  92. package/dist/plugins/blog/module.d.ts +0 -20
  93. package/dist/plugins/blog/module.d.ts.map +0 -1
  94. package/dist/plugins/blog/module.js +0 -52
  95. package/dist/plugins/blog/module.js.map +0 -1
  96. package/dist/plugins/blog/plugin.d.ts +0 -20
  97. package/dist/plugins/blog/plugin.d.ts.map +0 -1
  98. package/dist/plugins/blog/plugin.js +0 -52
  99. package/dist/plugins/blog/plugin.js.map +0 -1
  100. package/dist/plugins/random-quote/module.d.ts +0 -9
  101. package/dist/plugins/random-quote/module.d.ts.map +0 -1
  102. package/dist/plugins/random-quote/module.js +0 -31
  103. package/dist/plugins/random-quote/module.js.map +0 -1
  104. package/dist/plugins/random-quote/plugin.d.ts +0 -8
  105. package/dist/plugins/random-quote/plugin.d.ts.map +0 -1
  106. package/dist/plugins/random-quote/plugin.js +0 -31
  107. package/dist/plugins/random-quote/plugin.js.map +0 -1
  108. package/dist/plugins/random-quote/quotes.json +0 -230
  109. package/dist/public/_sb/plugins/random-quote/quotes.json +0 -230
  110. package/src/plugins/random-quote/public_assets/quotes.json +0 -230
  111. /package/{dist/plugins/random-quote/public_assets → src/plugins/random-quote/assets}/quotes.json +0 -0
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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"}
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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAIpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,IAAI,CACd,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,aAAa,SAAS,KAAK,GAAG,KAAK,EACnC,WAAW,SAAS,SAAS,cAAc,EAAE,GAAG,SAAS,cAAc,EAAE,IACvE;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;CACnD,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,IAAI,EACR,EAAE,QAAQ,GAAG,cAAc,CAE3B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAapD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AA+CD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5C,GAAG,EAAE;IACH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;CACtD,GACA,QAAQ,CAAC;AACZ,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE,EAClE,QAAQ,EAAE,kBAAkB,CAC1B,aAAa,CAAC,CAAC,CAAC,EAChB,qBAAqB,CAAC,CAAC,CAAC,EACxB,CAAC,CACF,EACD,GAAG,EAAE;IACH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;CACpD,GACA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AA2CvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
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,CA2BvE;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"}
package/dist/plugin.js ADDED
@@ -0,0 +1,155 @@
1
+ import { cpSync, existsSync, mkdirSync, statSync } from "node:fs";
2
+ import { join, resolve, sep } from "node:path";
3
+ export class PluginError extends Error {
4
+ constructor(message) {
5
+ super(message);
6
+ this.name = "PluginError";
7
+ }
8
+ }
9
+ function requireNonEmptyString(value, label) {
10
+ if (typeof value !== "string" || value.trim().length === 0) {
11
+ throw new PluginError(`createPlugin(): ${label} is required`);
12
+ }
13
+ return value.trim();
14
+ }
15
+ function assertSafePluginName(name) {
16
+ if (name === "." ||
17
+ name === ".." ||
18
+ name.includes("/") ||
19
+ name.includes("\\")) {
20
+ throw new PluginError(`createPlugin(): name must be a single path segment (got "${name}")`);
21
+ }
22
+ }
23
+ function requireKeywords(value) {
24
+ if (!Array.isArray(value) || value.length === 0) {
25
+ throw new PluginError("createPlugin(): keywords must be a non-empty array of strings");
26
+ }
27
+ const keywords = value.map((keyword, index) => {
28
+ if (typeof keyword !== "string" || keyword.trim().length === 0) {
29
+ throw new PluginError(`createPlugin(): keywords[${index}] must be a non-empty string`);
30
+ }
31
+ return keyword.trim();
32
+ });
33
+ return Object.freeze(keywords);
34
+ }
35
+ function requireRootDir(root) {
36
+ return resolve(requireNonEmptyString(root, "root"));
37
+ }
38
+ /**
39
+ * When a plugin is compiled to `dist/plugins/<folder>`, `assets/` and
40
+ * `public_assets/` may still live next to the TypeScript source.
41
+ * Uses the on-disk folder name, which can differ from `plugin.name`.
42
+ */
43
+ function sourcePluginSubdir(root, folder) {
44
+ const needle = `${sep}dist${sep}plugins${sep}`;
45
+ const index = root.lastIndexOf(needle);
46
+ if (index === -1) {
47
+ return null;
48
+ }
49
+ const dirName = root.slice(index + needle.length).split(sep)[0];
50
+ if (!dirName) {
51
+ return null;
52
+ }
53
+ const candidate = join(root.slice(0, index), "src", "plugins", dirName, folder);
54
+ return existsSync(candidate) ? candidate : null;
55
+ }
56
+ function resolvePluginSubdir(root, folder) {
57
+ const local = join(root, folder);
58
+ if (existsSync(local)) {
59
+ return local;
60
+ }
61
+ return sourcePluginSubdir(root, folder) ?? local;
62
+ }
63
+ export function createPlugin(options) {
64
+ if (!options || typeof options !== "object" || Array.isArray(options)) {
65
+ throw new PluginError("createPlugin(): name, description, version, keywords, and root are required");
66
+ }
67
+ const name = requireNonEmptyString(options.name, "name");
68
+ assertSafePluginName(name);
69
+ const description = requireNonEmptyString(options.description, "description");
70
+ const version = requireNonEmptyString(options.version, "version");
71
+ const keywords = requireKeywords(options.keywords);
72
+ const root = requireRootDir(options.root);
73
+ return {
74
+ __kind: "plugin",
75
+ name,
76
+ description,
77
+ version,
78
+ keywords,
79
+ root,
80
+ assetsDir: resolvePluginSubdir(root, "assets"),
81
+ publicAssetsDir: resolvePluginSubdir(root, "public_assets"),
82
+ ...(options.routes ? { routes: options.routes } : {}),
83
+ ...(options.build ? { build: options.build } : {}),
84
+ };
85
+ }
86
+ export function isPlugin(value) {
87
+ return (typeof value === "object" &&
88
+ value !== null &&
89
+ value.__kind === "plugin" &&
90
+ typeof value.name === "string" &&
91
+ value.name.length > 0 &&
92
+ typeof value.description === "string" &&
93
+ value.description.length > 0 &&
94
+ typeof value.version === "string" &&
95
+ value.version.length > 0 &&
96
+ Array.isArray(value.keywords) &&
97
+ value.keywords.length > 0 &&
98
+ typeof value.root === "string" &&
99
+ typeof value.assetsDir === "string" &&
100
+ typeof value.publicAssetsDir === "string");
101
+ }
102
+ export function assertPlugin(value, label = "plugin") {
103
+ if (!isPlugin(value)) {
104
+ throw new PluginError(`${label}: each plugin must be created with createPlugin() and include name, description, version, and keywords`);
105
+ }
106
+ return value;
107
+ }
108
+ function copyDirIfPresent(source, dest) {
109
+ if (!existsSync(source) || !statSync(source).isDirectory()) {
110
+ return;
111
+ }
112
+ if (resolve(source) === resolve(dest)) {
113
+ return;
114
+ }
115
+ mkdirSync(dest, { recursive: true });
116
+ cpSync(source, dest, { recursive: true });
117
+ }
118
+ /**
119
+ * Copy each registered plugin's private `assets/` next to its compiled entry
120
+ * (`{plugin.root}/assets`). Used by this package's build — not a site public copy.
121
+ */
122
+ export function copyPluginPrivateAssets(plugins) {
123
+ for (const plugin of plugins) {
124
+ assertPlugin(plugin, "copyPluginPrivateAssets()");
125
+ copyDirIfPresent(plugin.assetsDir, join(plugin.root, "assets"));
126
+ }
127
+ }
128
+ /**
129
+ * Copy each registered plugin's `public_assets/` to
130
+ * `{publicDir}/_sb/plugins/{name}/`. Only plugins you pass in are copied.
131
+ */
132
+ export function copyRegisteredPluginAssets(plugins, publicDir) {
133
+ const destRoot = requireNonEmptyString(publicDir, "publicDir");
134
+ const seen = new Set();
135
+ for (const plugin of plugins) {
136
+ assertPlugin(plugin, "copyRegisteredPluginAssets()");
137
+ if (seen.has(plugin.name)) {
138
+ throw new PluginError(`copyRegisteredPluginAssets(): duplicate plugin name "${plugin.name}"`);
139
+ }
140
+ seen.add(plugin.name);
141
+ copyDirIfPresent(plugin.publicAssetsDir, join(destRoot, "_sb", "plugins", plugin.name));
142
+ }
143
+ }
144
+ /**
145
+ * Run each registered plugin's `build` hook (e.g. write sitemap.xml).
146
+ */
147
+ export async function runRegisteredPluginBuilds(plugins, ctx) {
148
+ for (const plugin of plugins) {
149
+ assertPlugin(plugin, "runRegisteredPluginBuilds()");
150
+ if (plugin.build) {
151
+ await plugin.build(ctx);
152
+ }
153
+ }
154
+ }
155
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}