gazetta 0.4.0 → 0.6.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/admin-dist/assets/index-B6pVot0Y.css +1 -0
- package/admin-dist/assets/index-DniLwxJA.js +609 -0
- package/admin-dist/assets/{vendor-primevue-BnR1c_bQ.js → vendor-primevue-C0Q_YTCb.js} +330 -431
- package/admin-dist/assets/vendor-vue-D3wBSmDf.js +1 -0
- package/admin-dist/index.html +4 -4
- package/dist/admin-api/index.d.ts +26 -5
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +175 -13
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/routes/compare.d.ts +3 -1
- package/dist/admin-api/routes/compare.d.ts.map +1 -1
- package/dist/admin-api/routes/compare.js +34 -24
- package/dist/admin-api/routes/compare.js.map +1 -1
- package/dist/admin-api/routes/fields.d.ts +2 -2
- package/dist/admin-api/routes/fields.d.ts.map +1 -1
- package/dist/admin-api/routes/fields.js +10 -3
- package/dist/admin-api/routes/fields.js.map +1 -1
- package/dist/admin-api/routes/fragments.d.ts +2 -2
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +94 -19
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/history.d.ts +23 -0
- package/dist/admin-api/routes/history.d.ts.map +1 -0
- package/dist/admin-api/routes/history.js +143 -0
- package/dist/admin-api/routes/history.js.map +1 -0
- package/dist/admin-api/routes/pages.d.ts +2 -2
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +120 -20
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/preview.d.ts +2 -2
- package/dist/admin-api/routes/preview.d.ts.map +1 -1
- package/dist/admin-api/routes/preview.js +50 -15
- package/dist/admin-api/routes/preview.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts +3 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +306 -65
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/routes/site.d.ts +2 -2
- package/dist/admin-api/routes/site.d.ts.map +1 -1
- package/dist/admin-api/routes/site.js +27 -4
- package/dist/admin-api/routes/site.js.map +1 -1
- package/dist/admin-api/routes/templates.d.ts +2 -2
- package/dist/admin-api/routes/templates.d.ts.map +1 -1
- package/dist/admin-api/routes/templates.js +19 -9
- package/dist/admin-api/routes/templates.js.map +1 -1
- package/dist/admin-api/schemas/compare.d.ts +29 -0
- package/dist/admin-api/schemas/compare.d.ts.map +1 -0
- package/dist/admin-api/schemas/compare.js +30 -0
- package/dist/admin-api/schemas/compare.js.map +1 -0
- package/dist/admin-api/schemas/dependents.d.ts +15 -0
- package/dist/admin-api/schemas/dependents.d.ts.map +1 -0
- package/dist/admin-api/schemas/dependents.js +14 -0
- package/dist/admin-api/schemas/dependents.js.map +1 -0
- package/dist/admin-api/schemas/fetch.d.ts +12 -0
- package/dist/admin-api/schemas/fetch.d.ts.map +1 -0
- package/dist/admin-api/schemas/fetch.js +11 -0
- package/dist/admin-api/schemas/fetch.js.map +1 -0
- package/dist/admin-api/schemas/fields.d.ts +11 -0
- package/dist/admin-api/schemas/fields.d.ts.map +1 -0
- package/dist/admin-api/schemas/fields.js +11 -0
- package/dist/admin-api/schemas/fields.js.map +1 -0
- package/dist/admin-api/schemas/fragments.d.ts +27 -0
- package/dist/admin-api/schemas/fragments.d.ts.map +1 -0
- package/dist/admin-api/schemas/fragments.js +26 -0
- package/dist/admin-api/schemas/fragments.js.map +1 -0
- package/dist/admin-api/schemas/history.d.ts +73 -0
- package/dist/admin-api/schemas/history.d.ts.map +1 -0
- package/dist/admin-api/schemas/history.js +35 -0
- package/dist/admin-api/schemas/history.js.map +1 -0
- package/dist/admin-api/schemas/index.d.ts +32 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -0
- package/dist/admin-api/schemas/index.js +32 -0
- package/dist/admin-api/schemas/index.js.map +1 -0
- package/dist/admin-api/schemas/pages.d.ts +46 -0
- package/dist/admin-api/schemas/pages.d.ts.map +1 -0
- package/dist/admin-api/schemas/pages.js +47 -0
- package/dist/admin-api/schemas/pages.js.map +1 -0
- package/dist/admin-api/schemas/publish.d.ts +67 -0
- package/dist/admin-api/schemas/publish.d.ts.map +1 -0
- package/dist/admin-api/schemas/publish.js +60 -0
- package/dist/admin-api/schemas/publish.js.map +1 -0
- package/dist/admin-api/schemas/site.d.ts +28 -0
- package/dist/admin-api/schemas/site.d.ts.map +1 -0
- package/dist/admin-api/schemas/site.js +24 -0
- package/dist/admin-api/schemas/site.js.map +1 -0
- package/dist/admin-api/schemas/targets.d.ts +36 -0
- package/dist/admin-api/schemas/targets.d.ts.map +1 -0
- package/dist/admin-api/schemas/targets.js +19 -0
- package/dist/admin-api/schemas/targets.js.map +1 -0
- package/dist/admin-api/schemas/templates.d.ts +17 -0
- package/dist/admin-api/schemas/templates.d.ts.map +1 -0
- package/dist/admin-api/schemas/templates.js +16 -0
- package/dist/admin-api/schemas/templates.js.map +1 -0
- package/dist/admin-api/source-context.d.ts +165 -0
- package/dist/admin-api/source-context.d.ts.map +1 -0
- package/dist/admin-api/source-context.js +95 -0
- package/dist/admin-api/source-context.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/assemble.d.ts.map +1 -1
- package/dist/assemble.js +4 -1
- package/dist/assemble.js.map +1 -1
- package/dist/cli/bootstrap.d.ts +48 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +85 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/history.d.ts +45 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +165 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/index.js +691 -113
- package/dist/cli/index.js.map +1 -1
- package/dist/compare.d.ts +15 -5
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +83 -45
- package/dist/compare.js.map +1 -1
- package/dist/concurrency.d.ts +63 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +134 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/content-root.d.ts +38 -0
- package/dist/content-root.d.ts.map +1 -0
- package/dist/content-root.js +29 -0
- package/dist/content-root.js.map +1 -0
- package/dist/editor/mount.d.ts +1 -1
- package/dist/editor/mount.d.ts.map +1 -1
- package/dist/editor/mount.js +61 -29
- package/dist/editor/mount.js.map +1 -1
- package/dist/hash.d.ts +47 -1
- package/dist/hash.d.ts.map +1 -1
- package/dist/hash.js +107 -10
- package/dist/hash.js.map +1 -1
- package/dist/history-provider.d.ts +49 -0
- package/dist/history-provider.d.ts.map +1 -0
- package/dist/history-provider.js +226 -0
- package/dist/history-provider.js.map +1 -0
- package/dist/history-recorder.d.ts +98 -0
- package/dist/history-recorder.d.ts.map +1 -0
- package/dist/history-recorder.js +160 -0
- package/dist/history-recorder.js.map +1 -0
- package/dist/history-restorer.d.ts +46 -0
- package/dist/history-restorer.d.ts.map +1 -0
- package/dist/history-restorer.js +105 -0
- package/dist/history-restorer.js.map +1 -0
- package/dist/history.d.ts +111 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +26 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +74 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +150 -0
- package/dist/locale.js.map +1 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +16 -1
- package/dist/manifest.js.map +1 -1
- package/dist/providers/azure-blob.d.ts.map +1 -1
- package/dist/providers/azure-blob.js.map +1 -1
- package/dist/providers/r2.d.ts.map +1 -1
- package/dist/providers/r2.js +7 -4
- package/dist/providers/r2.js.map +1 -1
- package/dist/providers/s3.d.ts.map +1 -1
- package/dist/providers/s3.js +23 -15
- package/dist/providers/s3.js.map +1 -1
- package/dist/publish-locale.d.ts +44 -0
- package/dist/publish-locale.d.ts.map +1 -0
- package/dist/publish-locale.js +103 -0
- package/dist/publish-locale.js.map +1 -0
- package/dist/publish-rendered.d.ts +17 -5
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +114 -66
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish.d.ts +39 -3
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +166 -17
- package/dist/publish.js.map +1 -1
- package/dist/renderer.d.ts +14 -4
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +35 -23
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.d.ts +7 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +66 -15
- package/dist/resolver.js.map +1 -1
- package/dist/robots.d.ts +22 -0
- package/dist/robots.d.ts.map +1 -0
- package/dist/robots.js +25 -0
- package/dist/robots.js.map +1 -0
- package/dist/seo.d.ts +56 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +72 -0
- package/dist/seo.js.map +1 -0
- package/dist/serve.d.ts +41 -3
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +206 -65
- package/dist/serve.js.map +1 -1
- package/dist/sidecars.d.ts +60 -0
- package/dist/sidecars.d.ts.map +1 -0
- package/dist/sidecars.js +231 -0
- package/dist/sidecars.js.map +1 -0
- package/dist/site-loader.d.ts +74 -6
- package/dist/site-loader.d.ts.map +1 -1
- package/dist/site-loader.js +149 -36
- package/dist/site-loader.js.map +1 -1
- package/dist/sitemap.d.ts +45 -0
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +67 -0
- package/dist/sitemap.js.map +1 -0
- package/dist/source-sidecars.d.ts +32 -0
- package/dist/source-sidecars.d.ts.map +1 -0
- package/dist/source-sidecars.js +98 -0
- package/dist/source-sidecars.js.map +1 -0
- package/dist/targets.d.ts +47 -1
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +78 -9
- package/dist/targets.js.map +1 -1
- package/dist/template-loader.d.ts +7 -3
- package/dist/template-loader.d.ts.map +1 -1
- package/dist/template-loader.js +27 -12
- package/dist/template-loader.js.map +1 -1
- package/dist/templates-scan-worker.js +1 -1
- package/dist/templates-scan-worker.js.map +1 -1
- package/dist/templates-scan.d.ts.map +1 -1
- package/dist/templates-scan.js +1 -1
- package/dist/templates-scan.js.map +1 -1
- package/dist/types.d.ts +116 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +28 -5
- package/dist/types.js.map +1 -1
- package/dist/workers/cloudflare-r2.d.ts +11 -2
- package/dist/workers/cloudflare-r2.d.ts.map +1 -1
- package/dist/workers/cloudflare-r2.js +120 -55
- package/dist/workers/cloudflare-r2.js.map +1 -1
- package/package.json +11 -2
- package/admin-dist/assets/index-Bh_y1d_l.css +0 -1
- package/admin-dist/assets/index-DjGNi6yy.js +0 -608
- package/admin-dist/assets/vendor-vue-DSjyxCX6.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAChC,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB;;;;OAIG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACjD,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAWD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAyD3E"}
|
package/dist/sitemap.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { deriveRoute } from './site-loader.js';
|
|
2
|
+
function escapeXml(s) {
|
|
3
|
+
return s
|
|
4
|
+
.replace(/&/g, '&')
|
|
5
|
+
.replace(/</g, '<')
|
|
6
|
+
.replace(/>/g, '>')
|
|
7
|
+
.replace(/"/g, '"')
|
|
8
|
+
.replace(/'/g, ''');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Generate sitemap XML from target sidecars. Returns null when no
|
|
12
|
+
* pages qualify (all noindex, or empty target).
|
|
13
|
+
*/
|
|
14
|
+
export function generateSitemap(opts) {
|
|
15
|
+
const systemSet = new Set(opts.systemPages ?? []);
|
|
16
|
+
const base = opts.siteUrl.replace(/\/+$/, '');
|
|
17
|
+
const urls = [];
|
|
18
|
+
// Sort by page name for deterministic output across runs.
|
|
19
|
+
const sorted = [...opts.pages.entries()].sort((a, b) => a[0].localeCompare(b[0]));
|
|
20
|
+
for (const [name, state] of sorted) {
|
|
21
|
+
// Locale-qualified entries (home:fr) are handled as separate <url> entries
|
|
22
|
+
// with their locale-prefixed route. The base page name is before the colon.
|
|
23
|
+
const isLocaleEntry = name.includes(':');
|
|
24
|
+
const baseName = isLocaleEntry ? name.split(':')[0] : name;
|
|
25
|
+
const locale = isLocaleEntry ? name.split(':')[1] : null;
|
|
26
|
+
if (systemSet.has(baseName))
|
|
27
|
+
continue;
|
|
28
|
+
if (state.pub?.noindex)
|
|
29
|
+
continue;
|
|
30
|
+
if (baseName.includes('['))
|
|
31
|
+
continue; // dynamic routes — can't sitemap template patterns
|
|
32
|
+
// For locale entries, use the locale-prefixed route (e.g. /fr/about).
|
|
33
|
+
// For default entries, use the standard route (e.g. /about).
|
|
34
|
+
const baseRoute = deriveRoute(baseName);
|
|
35
|
+
const route = locale ? (baseRoute === '/' ? `/${locale}` : `/${locale}${baseRoute}`) : baseRoute;
|
|
36
|
+
const loc = `${base}${route}`;
|
|
37
|
+
const lastmod = state.pub?.lastPublished;
|
|
38
|
+
const parts = [` <loc>${escapeXml(loc)}</loc>`];
|
|
39
|
+
if (lastmod) {
|
|
40
|
+
// Sitemap spec wants YYYY-MM-DD or full ISO — use date only
|
|
41
|
+
parts.push(` <lastmod>${lastmod.slice(0, 10)}</lastmod>`);
|
|
42
|
+
}
|
|
43
|
+
// hreflang cross-links — only when 2+ locale variants exist.
|
|
44
|
+
// Locale entries share the same hreflang group as their base page.
|
|
45
|
+
const alternates = opts.hreflangGroups?.get(baseName);
|
|
46
|
+
if (alternates && alternates.length > 1) {
|
|
47
|
+
for (const alt of alternates) {
|
|
48
|
+
parts.push(` <xhtml:link rel="alternate" hreflang="${escapeXml(alt.locale)}" href="${escapeXml(alt.url)}" />`);
|
|
49
|
+
}
|
|
50
|
+
if (opts.defaultLocale) {
|
|
51
|
+
const defaultAlt = alternates.find(a => a.locale === opts.defaultLocale);
|
|
52
|
+
if (defaultAlt) {
|
|
53
|
+
parts.push(` <xhtml:link rel="alternate" hreflang="x-default" href="${escapeXml(defaultAlt.url)}" />`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
urls.push(` <url>\n${parts.join('\n')}\n </url>`);
|
|
58
|
+
}
|
|
59
|
+
if (urls.length === 0)
|
|
60
|
+
return null;
|
|
61
|
+
const hasHreflang = opts.hreflangGroups && [...opts.hreflangGroups.values()].some(alts => alts.length > 1);
|
|
62
|
+
const xmlns = hasHreflang
|
|
63
|
+
? '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">'
|
|
64
|
+
: '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
|
|
65
|
+
return ['<?xml version="1.0" encoding="UTF-8"?>', xmlns, ...urls, '</urlset>', ''].join('\n');
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=sitemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StorageProvider } from './types.js';
|
|
2
|
+
import type { TemplateInfo } from './templates-scan.js';
|
|
3
|
+
import { type ContentRoot } from './content-root.js';
|
|
4
|
+
export interface SourceSidecarWriter {
|
|
5
|
+
writeFor(kind: 'page' | 'fragment', name: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Ensure every page and fragment in the site has sidecars written.
|
|
8
|
+
* Idempotent; concurrent callers share the same in-flight work. Use
|
|
9
|
+
* this before any read path that depends on `.uses-*` / `.tpl-*`
|
|
10
|
+
* sidecars being present (e.g. dependents lookup) — without it, a
|
|
11
|
+
* fresh dev server serves empty results until the first publish.
|
|
12
|
+
*/
|
|
13
|
+
ensureBackfilled(): Promise<void>;
|
|
14
|
+
invalidate(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface SourceSidecarWriterOptions {
|
|
17
|
+
/** Content root for source. Preferred shape. */
|
|
18
|
+
contentRoot?: ContentRoot;
|
|
19
|
+
/** @deprecated Prefer `contentRoot`. */
|
|
20
|
+
storage?: StorageProvider;
|
|
21
|
+
/** @deprecated Prefer `contentRoot`. */
|
|
22
|
+
siteDir?: string;
|
|
23
|
+
scanTemplates: () => Promise<TemplateInfo[]>;
|
|
24
|
+
/** Templates directory — used by `ensureBackfilled` to load the site
|
|
25
|
+
* manifest so it knows which items need sidecars. Without this,
|
|
26
|
+
* `ensureBackfilled` throws. */
|
|
27
|
+
templatesDir?: string;
|
|
28
|
+
/** Project-level manifest — passed to loadSite so targets don't need site.yaml. */
|
|
29
|
+
manifest?: import('./types.js').SiteManifest;
|
|
30
|
+
}
|
|
31
|
+
export declare function createSourceSidecarWriter(opts: SourceSidecarWriterOptions): SourceSidecarWriter;
|
|
32
|
+
//# sourceMappingURL=source-sidecars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-sidecars.d.ts","sourceRoot":"","sources":["../src/source-sidecars.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIvD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAKvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE;;;;;;OAMG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,UAAU,IAAI,IAAI,CAAA;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,gDAAgD;IAChD,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC5C;;qCAEiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,YAAY,CAAA;CAC7C;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,0BAA0B,GAAG,mBAAmB,CAkF/F"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-side sidecar writer. Keeps `sites/<name>/pages/` and
|
|
3
|
+
* `sites/<name>/fragments/` in the same filename-encoded shape as published
|
|
4
|
+
* targets — .{hash}.hash,
|
|
5
|
+
* .uses-{frag}, .tpl-{template} — so compare and incremental publish can
|
|
6
|
+
* read them without re-hashing manifests.
|
|
7
|
+
*
|
|
8
|
+
* Single responsibility: given (kind, name), hash the manifest with current
|
|
9
|
+
* template hashes and write its three sidecars. Nothing else.
|
|
10
|
+
*
|
|
11
|
+
* Template hashes are cached. A template edit flips every dependent item's
|
|
12
|
+
* content hash, so the file watcher calls invalidate() — next writeFor()
|
|
13
|
+
* rescans.
|
|
14
|
+
*/
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { templateHashesFrom } from './templates-scan.js';
|
|
17
|
+
import { hashManifest } from './hash.js';
|
|
18
|
+
import { writeSidecars, collectFragmentRefs, listSidecars } from './sidecars.js';
|
|
19
|
+
import { createContentRoot } from './content-root.js';
|
|
20
|
+
import { loadSite } from './site-loader.js';
|
|
21
|
+
import { mapLimit } from './concurrency.js';
|
|
22
|
+
export function createSourceSidecarWriter(opts) {
|
|
23
|
+
const root = opts.contentRoot ??
|
|
24
|
+
(opts.storage && opts.siteDir !== undefined
|
|
25
|
+
? createContentRoot(opts.storage, opts.siteDir)
|
|
26
|
+
: (() => {
|
|
27
|
+
throw new Error('createSourceSidecarWriter: pass `contentRoot` (or legacy `storage` + `siteDir`)');
|
|
28
|
+
})());
|
|
29
|
+
let templateHashes = null;
|
|
30
|
+
const getTemplateHashes = () => {
|
|
31
|
+
if (!templateHashes)
|
|
32
|
+
templateHashes = opts.scanTemplates().then(templateHashesFrom);
|
|
33
|
+
return templateHashes;
|
|
34
|
+
};
|
|
35
|
+
/** Shared in-flight promise for the "every item has a sidecar" state.
|
|
36
|
+
* Concurrent callers await the same work; subsequent calls after it
|
|
37
|
+
* settles are near-free (one listSidecars + set-diff). Cleared by
|
|
38
|
+
* invalidate() so a template-hash change also re-backfills. */
|
|
39
|
+
let backfillPromise = null;
|
|
40
|
+
async function runBackfill() {
|
|
41
|
+
if (!opts.templatesDir) {
|
|
42
|
+
throw new Error('SourceSidecarWriter.ensureBackfilled requires `templatesDir` in options');
|
|
43
|
+
}
|
|
44
|
+
const site = await loadSite({ contentRoot: root, templatesDir: opts.templatesDir, manifest: opts.manifest });
|
|
45
|
+
const [pagesList, fragmentsList] = await Promise.all([
|
|
46
|
+
listSidecars(root.storage, root.path('pages')),
|
|
47
|
+
listSidecars(root.storage, root.path('fragments')),
|
|
48
|
+
]);
|
|
49
|
+
const missingPages = [...site.pages.keys()].filter(n => !pagesList.has(n));
|
|
50
|
+
const missingFragments = [...site.fragments.keys()].filter(n => !fragmentsList.has(n));
|
|
51
|
+
if (!missingPages.length && !missingFragments.length)
|
|
52
|
+
return;
|
|
53
|
+
await mapLimit([
|
|
54
|
+
...missingPages.map(n => ({ kind: 'page', name: n })),
|
|
55
|
+
...missingFragments.map(n => ({ kind: 'fragment', name: n })),
|
|
56
|
+
], it => writer.writeFor(it.kind, it.name));
|
|
57
|
+
}
|
|
58
|
+
const writer = {
|
|
59
|
+
async writeFor(kind, name) {
|
|
60
|
+
const subdir = kind === 'page' ? 'pages' : 'fragments';
|
|
61
|
+
const manifestName = kind === 'page' ? 'page.json' : 'fragment.json';
|
|
62
|
+
const itemDir = root.path(subdir, name);
|
|
63
|
+
const manifestPath = join(itemDir, manifestName);
|
|
64
|
+
let manifest;
|
|
65
|
+
try {
|
|
66
|
+
manifest = JSON.parse(await root.storage.readFile(manifestPath));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const hashes = await getTemplateHashes();
|
|
72
|
+
const hash = hashManifest(manifest, { templateHashes: hashes });
|
|
73
|
+
await writeSidecars(root.storage, itemDir, {
|
|
74
|
+
hash,
|
|
75
|
+
uses: collectFragmentRefs(manifest.components),
|
|
76
|
+
template: manifest.template,
|
|
77
|
+
pub: null,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
ensureBackfilled() {
|
|
81
|
+
if (!backfillPromise) {
|
|
82
|
+
backfillPromise = runBackfill().catch(err => {
|
|
83
|
+
// Clear on failure so the next caller retries. Otherwise one
|
|
84
|
+
// transient error would poison backfill for the process lifetime.
|
|
85
|
+
backfillPromise = null;
|
|
86
|
+
throw err;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return backfillPromise;
|
|
90
|
+
},
|
|
91
|
+
invalidate() {
|
|
92
|
+
templateHashes = null;
|
|
93
|
+
backfillPromise = null;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
return writer;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=source-sidecars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-sidecars.js","sourceRoot":"","sources":["../src/source-sidecars.ts"],"names":[],"mappings":"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"}
|
package/dist/targets.d.ts
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
import type { StorageProvider, TargetConfig, StorageConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Target resolution surface used by route handlers and anything that needs
|
|
4
|
+
* to act on a specific named target. Narrow by intent: route factories that
|
|
5
|
+
* only list targets take `list()`; handlers that load content take `get()`;
|
|
6
|
+
* publish-aware code reads `getConfig()` to branch on type or environment.
|
|
7
|
+
*
|
|
8
|
+
* Implementations decide how to initialize providers — eagerly at boot,
|
|
9
|
+
* lazily on first access, or mocked for tests.
|
|
10
|
+
*/
|
|
11
|
+
export interface TargetRegistry {
|
|
12
|
+
/** Resolve a target name to its storage provider. Throws if unknown. */
|
|
13
|
+
get(name: string): StorageProvider;
|
|
14
|
+
/** Configuration for a target (type, environment, editable). */
|
|
15
|
+
getConfig(name: string): TargetConfig | undefined;
|
|
16
|
+
/** All known target names. */
|
|
17
|
+
list(): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Name of the default editable target for this site. Throws if none exists.
|
|
20
|
+
* Resolution: first target where `isEditable(config) === true`, in the order
|
|
21
|
+
* they appear in site.yaml.
|
|
22
|
+
*/
|
|
23
|
+
defaultEditable(): string;
|
|
24
|
+
}
|
|
25
|
+
export declare class UnknownTargetError extends Error {
|
|
26
|
+
constructor(name: string);
|
|
27
|
+
}
|
|
28
|
+
export declare class NoEditableTargetError extends Error {
|
|
29
|
+
constructor();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build a TargetRegistry from already-initialized providers and their configs.
|
|
33
|
+
* The factory that boots the dev server populates `providers` by running
|
|
34
|
+
* `createStorageProvider` per target; tests pass in-memory providers.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createTargetRegistryView(providers: Map<string, StorageProvider>, configs: Record<string, TargetConfig>): TargetRegistry;
|
|
37
|
+
/** Find all editable targets in declaration order. Pure helper. */
|
|
38
|
+
export declare function listEditableTargets(configs: Record<string, TargetConfig>): string[];
|
|
2
39
|
export declare function resolveEnvVars(value: string | undefined): string | undefined;
|
|
3
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Build a storage provider from config.
|
|
42
|
+
*
|
|
43
|
+
* For filesystem targets, `path` defaults to `./targets/<targetName>` (relative
|
|
44
|
+
* to the site dir). Users can override by setting `path` explicitly in
|
|
45
|
+
* site.yaml — useful for shared drives, existing layouts, or multi-site setups
|
|
46
|
+
* that need custom paths. If neither `path` nor `targetName` is available for
|
|
47
|
+
* a filesystem target, throws.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createStorageProvider(config: StorageConfig, siteDir: string, targetName?: string): Promise<StorageProvider>;
|
|
4
50
|
export declare function createTargetRegistry(targets: Record<string, TargetConfig>, siteDir: string): Promise<Map<string, StorageProvider>>;
|
|
5
51
|
//# sourceMappingURL=targets.d.ts.map
|
package/dist/targets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI9E;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAA;IAClC,gEAAgE;IAChE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IACjD,8BAA8B;IAC9B,IAAI,IAAI,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,eAAe,IAAI,MAAM,CAAA;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM;CAIzB;AACD,qBAAa,qBAAsB,SAAQ,KAAK;;CAK/C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACpC,cAAc,CAsBhB;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,EAAE,CAInF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG5E;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAuF1B;AAUD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CA6BvC"}
|
package/dist/targets.js
CHANGED
|
@@ -1,17 +1,77 @@
|
|
|
1
|
-
import { resolve } from 'node:path';
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
|
+
import { isEditable } from './types.js';
|
|
3
4
|
import { createFilesystemProvider } from './providers/filesystem.js';
|
|
5
|
+
export class UnknownTargetError extends Error {
|
|
6
|
+
constructor(name) {
|
|
7
|
+
super(`Unknown target: ${name}`);
|
|
8
|
+
this.name = 'UnknownTargetError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class NoEditableTargetError extends Error {
|
|
12
|
+
constructor() {
|
|
13
|
+
super('No editable target is configured. At least one target in site.yaml must be editable.');
|
|
14
|
+
this.name = 'NoEditableTargetError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build a TargetRegistry from already-initialized providers and their configs.
|
|
19
|
+
* The factory that boots the dev server populates `providers` by running
|
|
20
|
+
* `createStorageProvider` per target; tests pass in-memory providers.
|
|
21
|
+
*/
|
|
22
|
+
export function createTargetRegistryView(providers, configs) {
|
|
23
|
+
const orderedNames = Object.keys(configs);
|
|
24
|
+
return {
|
|
25
|
+
get(name) {
|
|
26
|
+
const p = providers.get(name);
|
|
27
|
+
if (!p)
|
|
28
|
+
throw new UnknownTargetError(name);
|
|
29
|
+
return p;
|
|
30
|
+
},
|
|
31
|
+
getConfig(name) {
|
|
32
|
+
return configs[name];
|
|
33
|
+
},
|
|
34
|
+
list() {
|
|
35
|
+
return [...orderedNames];
|
|
36
|
+
},
|
|
37
|
+
defaultEditable() {
|
|
38
|
+
for (const name of orderedNames) {
|
|
39
|
+
const cfg = configs[name];
|
|
40
|
+
if (cfg && isEditable(cfg))
|
|
41
|
+
return name;
|
|
42
|
+
}
|
|
43
|
+
throw new NoEditableTargetError();
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Find all editable targets in declaration order. Pure helper. */
|
|
48
|
+
export function listEditableTargets(configs) {
|
|
49
|
+
return Object.entries(configs)
|
|
50
|
+
.filter(([, cfg]) => isEditable(cfg))
|
|
51
|
+
.map(([name]) => name);
|
|
52
|
+
}
|
|
4
53
|
export function resolveEnvVars(value) {
|
|
5
54
|
if (!value)
|
|
6
55
|
return value;
|
|
7
56
|
return value.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] ?? '');
|
|
8
57
|
}
|
|
9
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Build a storage provider from config.
|
|
60
|
+
*
|
|
61
|
+
* For filesystem targets, `path` defaults to `./targets/<targetName>` (relative
|
|
62
|
+
* to the site dir). Users can override by setting `path` explicitly in
|
|
63
|
+
* site.yaml — useful for shared drives, existing layouts, or multi-site setups
|
|
64
|
+
* that need custom paths. If neither `path` nor `targetName` is available for
|
|
65
|
+
* a filesystem target, throws.
|
|
66
|
+
*/
|
|
67
|
+
export async function createStorageProvider(config, siteDir, targetName) {
|
|
10
68
|
switch (config.type) {
|
|
11
|
-
case 'filesystem':
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
69
|
+
case 'filesystem': {
|
|
70
|
+
const path = config.path ?? (targetName ? join('targets', targetName) : undefined);
|
|
71
|
+
if (!path)
|
|
72
|
+
throw new Error('Filesystem storage requires "path" (or a target name to derive the default from)');
|
|
73
|
+
return createFilesystemProvider(resolve(siteDir, path));
|
|
74
|
+
}
|
|
15
75
|
case 'azure-blob': {
|
|
16
76
|
const connectionString = resolveEnvVars(config.connectionString);
|
|
17
77
|
if (!connectionString)
|
|
@@ -72,9 +132,18 @@ export async function createStorageProvider(config, siteDir) {
|
|
|
72
132
|
// Fall back to Cloudflare REST API using wrangler auth
|
|
73
133
|
let apiToken;
|
|
74
134
|
try {
|
|
75
|
-
const output = execSync('npx wrangler auth token', {
|
|
135
|
+
const output = execSync('npx wrangler auth token', {
|
|
136
|
+
encoding: 'utf-8',
|
|
137
|
+
timeout: 10000,
|
|
138
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
139
|
+
});
|
|
76
140
|
// wrangler prints a banner before the token — extract the last non-empty line
|
|
77
|
-
apiToken =
|
|
141
|
+
apiToken =
|
|
142
|
+
output
|
|
143
|
+
.split('\n')
|
|
144
|
+
.map(l => l.trim())
|
|
145
|
+
.filter(l => l && !l.includes('wrangler') && !l.includes('───'))
|
|
146
|
+
.pop() ?? '';
|
|
78
147
|
}
|
|
79
148
|
catch {
|
|
80
149
|
throw new Error('R2 storage: no credentials found.\n' +
|
|
@@ -105,7 +174,7 @@ export async function createTargetRegistry(targets, siteDir) {
|
|
|
105
174
|
await Promise.all(Object.entries(targets).map(async ([name, config]) => {
|
|
106
175
|
try {
|
|
107
176
|
const initOne = async () => {
|
|
108
|
-
const provider = await createStorageProvider(config.storage, siteDir);
|
|
177
|
+
const provider = await createStorageProvider(config.storage, siteDir, name);
|
|
109
178
|
if ('init' in provider && typeof provider.init === 'function') {
|
|
110
179
|
await provider.init();
|
|
111
180
|
}
|
package/dist/targets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,13 @@ interface LoadedTemplate {
|
|
|
3
3
|
render: TemplateFunction;
|
|
4
4
|
schema: unknown;
|
|
5
5
|
}
|
|
6
|
-
export declare function loadTemplate(
|
|
7
|
-
/**
|
|
8
|
-
|
|
6
|
+
export declare function loadTemplate(_storage: StorageProvider | undefined, templatesDir: string, templateName: string): Promise<LoadedTemplate>;
|
|
7
|
+
/**
|
|
8
|
+
* Check if a custom editor file exists for a template. Editors live at
|
|
9
|
+
* project level on local filesystem, so this reads via fs.access regardless
|
|
10
|
+
* of what storage the admin app is bound to.
|
|
11
|
+
*/
|
|
12
|
+
export declare function hasEditorFile(_storage: StorageProvider | undefined, editorsDir: string, templateName: string): Promise<boolean>;
|
|
9
13
|
export declare function invalidateTemplate(templateName: string): void;
|
|
10
14
|
export declare function invalidateAllTemplates(): void;
|
|
11
15
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-loader.d.ts","sourceRoot":"","sources":["../src/template-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-loader.d.ts","sourceRoot":"","sources":["../src/template-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnE,UAAU,cAAc;IACtB,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,OAAO,CAAA;CAChB;AAwCD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAyCzB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
package/dist/template-loader.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { access } from 'node:fs/promises';
|
|
3
4
|
import { createJiti } from 'jiti';
|
|
4
5
|
const cache = new Map();
|
|
5
6
|
/** Tracks which templates have been imported — reloads use jiti to bypass Node's module cache */
|
|
6
7
|
const importedPaths = new Set();
|
|
7
8
|
const TEMPLATE_FILES = ['index.ts', 'index.tsx'];
|
|
8
|
-
|
|
9
|
+
/** Filesystem existence check — templates always live on disk at absolute paths. */
|
|
10
|
+
async function fsExists(path) {
|
|
11
|
+
try {
|
|
12
|
+
await access(path);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function findTemplateFile(templatesDir, templateName) {
|
|
9
20
|
for (const file of TEMPLATE_FILES) {
|
|
10
21
|
const path = join(templatesDir, templateName, file);
|
|
11
|
-
if (await
|
|
22
|
+
if (await fsExists(path))
|
|
12
23
|
return path;
|
|
13
24
|
}
|
|
14
25
|
return null;
|
|
@@ -21,17 +32,17 @@ async function importTemplate(templatePath) {
|
|
|
21
32
|
}
|
|
22
33
|
catch {
|
|
23
34
|
const jiti = createJiti(pathToFileURL(templatePath).href, { jsx: true });
|
|
24
|
-
return await jiti.import(templatePath);
|
|
35
|
+
return (await jiti.import(templatePath));
|
|
25
36
|
}
|
|
26
37
|
}
|
|
27
38
|
const freshJiti = createJiti(pathToFileURL(templatePath).href, { jsx: true, moduleCache: false });
|
|
28
|
-
return await freshJiti.import(templatePath);
|
|
39
|
+
return (await freshJiti.import(templatePath));
|
|
29
40
|
}
|
|
30
|
-
export async function loadTemplate(
|
|
41
|
+
export async function loadTemplate(_storage, templatesDir, templateName) {
|
|
31
42
|
const cached = cache.get(templateName);
|
|
32
43
|
if (cached)
|
|
33
44
|
return cached;
|
|
34
|
-
const templatePath = await findTemplateFile(
|
|
45
|
+
const templatePath = await findTemplateFile(templatesDir, templateName);
|
|
35
46
|
if (!templatePath) {
|
|
36
47
|
throw new Error(`Template "${templateName}" not found. Expected index.ts or index.tsx in ${join(templatesDir, templateName)}\n` +
|
|
37
48
|
` Available templates are in ${templatesDir}`);
|
|
@@ -59,17 +70,21 @@ export async function loadTemplate(storage, templatesDir, templateName) {
|
|
|
59
70
|
cache.set(templateName, loaded);
|
|
60
71
|
return loaded;
|
|
61
72
|
}
|
|
62
|
-
/**
|
|
63
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Check if a custom editor file exists for a template. Editors live at
|
|
75
|
+
* project level on local filesystem, so this reads via fs.access regardless
|
|
76
|
+
* of what storage the admin app is bound to.
|
|
77
|
+
*/
|
|
78
|
+
export async function hasEditorFile(_storage, editorsDir, templateName) {
|
|
64
79
|
// Flat: admin/editors/hero.ts(x)
|
|
65
|
-
if (await
|
|
80
|
+
if (await fsExists(join(editorsDir, `${templateName}.ts`)))
|
|
66
81
|
return true;
|
|
67
|
-
if (await
|
|
82
|
+
if (await fsExists(join(editorsDir, `${templateName}.tsx`)))
|
|
68
83
|
return true;
|
|
69
84
|
// Directory: admin/editors/hero/index.ts(x)
|
|
70
|
-
if (await
|
|
85
|
+
if (await fsExists(join(editorsDir, templateName, 'index.ts')))
|
|
71
86
|
return true;
|
|
72
|
-
if (await
|
|
87
|
+
if (await fsExists(join(editorsDir, templateName, 'index.tsx')))
|
|
73
88
|
return true;
|
|
74
89
|
return false;
|
|
75
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-loader.js","sourceRoot":"","sources":["../src/template-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAQjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAA;AAC/C,iGAAiG;AACjG,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;AAEvC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAEhD,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"template-loader.js","sourceRoot":"","sources":["../src/template-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ async function scan(input) {
|
|
|
9
9
|
const jiti = createJiti(pathToFileURL(entry).href, { jsx: true, moduleCache: true });
|
|
10
10
|
let mod;
|
|
11
11
|
try {
|
|
12
|
-
mod = await jiti.import(entry);
|
|
12
|
+
mod = (await jiti.import(entry));
|
|
13
13
|
}
|
|
14
14
|
catch (err) {
|
|
15
15
|
return { valid: false, hash: '', errors: [`import failed: ${err.message}`], files: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-scan-worker.js","sourceRoot":"","sources":["../src/templates-scan-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAcpC,KAAK,UAAU,IAAI,CAAC,KAAkB;IACpC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAEpF,IAAI,GAA4B,CAAA;IAChC,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"templates-scan-worker.js","sourceRoot":"","sources":["../src/templates-scan-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAcpC,KAAK,UAAU,IAAI,CAAC,KAAkB;IACpC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAEpF,IAAI,GAA4B,CAAA;IAChC,IAAI,CAAC;QACH,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAA4B,CAAA;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,kBAAmB,GAAa,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACpG,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU;QAAE,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACzF,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAElD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAgC,CAAC;SAC7D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;SAC1C,IAAI,EAAE,CAAA;IAET,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QACvC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QACpB,CAAC,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM;QACN,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;KAChD,CAAA;AACH,CAAC;AAED,IAAI,CAAC,UAAU;IAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;AAExF,IAAI,CAAC,UAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-scan.d.ts","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAmFD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,
|
|
1
|
+
{"version":3,"file":"templates-scan.d.ts","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,mEAAmE;IACnE,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAmFD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAYtG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAYjH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CASlE"}
|
package/dist/templates-scan.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-scan.js","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates-scan.js","sourceRoot":"","sources":["../src/templates-scan.ts"],"names":[],"mappings":"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"}
|