@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.
- package/README.md +119 -7
- package/dist/AGENTS.md +215 -0
- package/dist/blocks.d.ts +6 -13
- package/dist/blocks.d.ts.map +1 -1
- package/dist/blocks.js +2 -0
- package/dist/blocks.js.map +1 -1
- package/dist/build.d.ts +14 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +145 -0
- package/dist/build.js.map +1 -0
- package/dist/cache.d.ts +14 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +93 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/link.d.ts +3 -7
- package/dist/link.d.ts.map +1 -1
- package/dist/link.js +12 -19
- package/dist/link.js.map +1 -1
- package/dist/pages.d.ts +15 -46
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +2 -0
- package/dist/pages.js.map +1 -1
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +155 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/blog/index.d.ts +6 -5
- package/dist/plugins/blog/index.d.ts.map +1 -1
- package/dist/plugins/blog/index.js +16 -0
- package/dist/plugins/blog/index.js.map +1 -1
- package/dist/plugins/random-quote/assets/quotes.json +230 -0
- package/dist/plugins/random-quote/index.d.ts +3 -1
- package/dist/plugins/random-quote/index.d.ts.map +1 -1
- package/dist/plugins/random-quote/index.js +15 -1
- package/dist/plugins/random-quote/index.js.map +1 -1
- package/dist/plugins/sitemap/index.d.ts +14 -0
- package/dist/plugins/sitemap/index.d.ts.map +1 -0
- package/dist/plugins/sitemap/index.js +119 -0
- package/dist/plugins/sitemap/index.js.map +1 -0
- package/dist/render-head.d.ts +2 -2
- package/dist/render-head.d.ts.map +1 -1
- package/dist/render-page.d.ts +2 -4
- package/dist/render-page.d.ts.map +1 -1
- package/dist/render-page.js +7 -3
- package/dist/render-page.js.map +1 -1
- package/dist/site.d.ts +10 -17
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +138 -7
- package/dist/site.js.map +1 -1
- package/dist/slot-content.d.ts +3 -19
- package/dist/slot-content.d.ts.map +1 -1
- package/dist/slot-content.js.map +1 -1
- package/dist/slot-handle.d.ts +7 -25
- package/dist/slot-handle.d.ts.map +1 -1
- package/dist/slot-handle.js +29 -14
- package/dist/slot-handle.js.map +1 -1
- package/dist/stackbox/context.d.ts +2 -51
- package/dist/stackbox/context.d.ts.map +1 -1
- package/dist/stackbox/context.js.map +1 -1
- package/dist/templates.d.ts +7 -57
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +277 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +13 -3
- package/src/plugins/blog/AGENTS.md +5 -1
- package/src/plugins/blog/index.ts +22 -5
- package/src/plugins/random-quote/AGENTS.md +30 -7
- package/src/plugins/random-quote/index.ts +17 -1
- package/src/plugins/random-quote/public_assets/widget.css +5 -0
- package/src/plugins/sitemap/AGENTS.md +82 -0
- package/src/plugins/sitemap/index.ts +156 -0
- package/AGENTS.md +0 -87
- package/dist/modules/blog/module.d.ts +0 -20
- package/dist/modules/blog/module.d.ts.map +0 -1
- package/dist/modules/blog/module.js +0 -52
- package/dist/modules/blog/module.js.map +0 -1
- package/dist/modules/blog/posts.d.ts +0 -15
- package/dist/modules/blog/posts.d.ts.map +0 -1
- package/dist/modules/blog/posts.js +0 -46
- package/dist/modules/blog/posts.js.map +0 -1
- package/dist/plugins/blog/module.d.ts +0 -20
- package/dist/plugins/blog/module.d.ts.map +0 -1
- package/dist/plugins/blog/module.js +0 -52
- package/dist/plugins/blog/module.js.map +0 -1
- package/dist/plugins/blog/plugin.d.ts +0 -20
- package/dist/plugins/blog/plugin.d.ts.map +0 -1
- package/dist/plugins/blog/plugin.js +0 -52
- package/dist/plugins/blog/plugin.js.map +0 -1
- package/dist/plugins/random-quote/module.d.ts +0 -9
- package/dist/plugins/random-quote/module.d.ts.map +0 -1
- package/dist/plugins/random-quote/module.js +0 -31
- package/dist/plugins/random-quote/module.js.map +0 -1
- package/dist/plugins/random-quote/plugin.d.ts +0 -8
- package/dist/plugins/random-quote/plugin.d.ts.map +0 -1
- package/dist/plugins/random-quote/plugin.js +0 -31
- package/dist/plugins/random-quote/plugin.js.map +0 -1
- package/dist/plugins/random-quote/quotes.json +0 -230
- package/dist/public/_sb/plugins/random-quote/quotes.json +0 -230
- package/src/plugins/random-quote/public_assets/quotes.json +0 -230
- /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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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
|
|
3
|
-
export {
|
|
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 {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,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,
|
|
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
|
|
4
|
-
|
|
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
|
package/dist/link.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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
|
|
91
|
-
|
|
92
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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
|
package/dist/pages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
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
package/dist/pages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -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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"}
|