@cogenta/cli 0.4.0 → 0.7.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/CHANGELOG.md +3951 -0
- package/dist/admin-assets/assets/index-Bc_X94A_.js +1090 -0
- package/dist/admin-assets/assets/index-CxZHGwVA.css +1 -0
- package/dist/admin-assets/assets/vips-_dmTUXFO.wasm +0 -0
- package/dist/admin-assets/assets/vips-es6-DrQTTS8Q.js +7 -0
- package/dist/admin-assets/branding/logo-cogenta-dark.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-icon.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-light.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-small.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta-transparent.png +0 -0
- package/dist/admin-assets/branding/logo-cogenta.png +0 -0
- package/dist/admin-assets/favicon.png +0 -0
- package/dist/admin-assets/fonts/jetbrains-mono-var.woff2 +0 -0
- package/dist/admin-assets/fonts/space-grotesk-var.woff2 +0 -0
- package/dist/admin-assets/index.html +3 -2
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -1
- package/dist/commands/admin-assets.d.ts +1 -0
- package/dist/commands/admin-assets.d.ts.map +1 -1
- package/dist/commands/admin-assets.js +19 -1
- package/dist/commands/admin-assets.js.map +1 -1
- package/dist/commands/agent-runtime.d.ts +160 -0
- package/dist/commands/agent-runtime.d.ts.map +1 -0
- package/dist/commands/agent-runtime.js +524 -0
- package/dist/commands/agent-runtime.js.map +1 -0
- package/dist/commands/assistant.d.ts +89 -3
- package/dist/commands/assistant.d.ts.map +1 -1
- package/dist/commands/assistant.js +209 -41
- package/dist/commands/assistant.js.map +1 -1
- package/dist/commands/audit-integrity-alert.d.ts +23 -0
- package/dist/commands/audit-integrity-alert.d.ts.map +1 -0
- package/dist/commands/audit-integrity-alert.js +33 -0
- package/dist/commands/audit-integrity-alert.js.map +1 -0
- package/dist/commands/backup.d.ts +78 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +238 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/channels.d.ts +47 -0
- package/dist/commands/channels.d.ts.map +1 -0
- package/dist/commands/channels.js +284 -0
- package/dist/commands/channels.js.map +1 -0
- package/dist/commands/default-logo.d.ts +27 -0
- package/dist/commands/default-logo.d.ts.map +1 -0
- package/dist/commands/default-logo.js +30 -0
- package/dist/commands/default-logo.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +74 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +22 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +182 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/forms-page.d.ts +75 -0
- package/dist/commands/forms-page.d.ts.map +1 -0
- package/dist/commands/forms-page.js +191 -0
- package/dist/commands/forms-page.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +13 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/mcp.d.ts +35 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +277 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/roles.d.ts +22 -0
- package/dist/commands/roles.d.ts.map +1 -0
- package/dist/commands/roles.js +79 -0
- package/dist/commands/roles.js.map +1 -0
- package/dist/commands/search-page.d.ts +15 -0
- package/dist/commands/search-page.d.ts.map +1 -1
- package/dist/commands/search-page.js +22 -16
- package/dist/commands/search-page.js.map +1 -1
- package/dist/commands/seo.d.ts +92 -4
- package/dist/commands/seo.d.ts.map +1 -1
- package/dist/commands/seo.js +168 -4
- package/dist/commands/seo.js.map +1 -1
- package/dist/commands/serve.d.ts +439 -7
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +3515 -181
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/site-plan.d.ts +27 -1
- package/dist/commands/site-plan.d.ts.map +1 -1
- package/dist/commands/site-plan.js +79 -8
- package/dist/commands/site-plan.js.map +1 -1
- package/dist/commands/skin.d.ts.map +1 -1
- package/dist/commands/skin.js +7 -2
- package/dist/commands/skin.js.map +1 -1
- package/dist/commands/term-archive-page.d.ts +94 -0
- package/dist/commands/term-archive-page.d.ts.map +1 -0
- package/dist/commands/term-archive-page.js +195 -0
- package/dist/commands/term-archive-page.js.map +1 -0
- package/dist/commands/theme-css.d.ts +22 -7
- package/dist/commands/theme-css.d.ts.map +1 -1
- package/dist/commands/theme-css.js +33 -8
- package/dist/commands/theme-css.js.map +1 -1
- package/dist/commands/theme-registry.d.ts +94 -0
- package/dist/commands/theme-registry.d.ts.map +1 -0
- package/dist/commands/theme-registry.js +130 -0
- package/dist/commands/theme-registry.js.map +1 -0
- package/dist/commands/theme-render.d.ts +330 -9
- package/dist/commands/theme-render.d.ts.map +1 -1
- package/dist/commands/theme-render.js +932 -66
- package/dist/commands/theme-render.js.map +1 -1
- package/dist/commands/theme-wiring.d.ts +107 -0
- package/dist/commands/theme-wiring.d.ts.map +1 -0
- package/dist/commands/theme-wiring.js +308 -0
- package/dist/commands/theme-wiring.js.map +1 -0
- package/dist/commands/tools.d.ts +71 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +330 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/update.d.ts +25 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +193 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -4
- package/dist/index.js.map +1 -1
- package/dist/invite-mail.d.ts +39 -0
- package/dist/invite-mail.d.ts.map +1 -0
- package/dist/invite-mail.js +39 -0
- package/dist/invite-mail.js.map +1 -0
- package/dist/update/apply.d.ts +54 -0
- package/dist/update/apply.d.ts.map +1 -0
- package/dist/update/apply.js +77 -0
- package/dist/update/apply.js.map +1 -0
- package/dist/update/changelog-risk.d.ts +20 -0
- package/dist/update/changelog-risk.d.ts.map +1 -0
- package/dist/update/changelog-risk.js +55 -0
- package/dist/update/changelog-risk.js.map +1 -0
- package/dist/update/check.d.ts +60 -0
- package/dist/update/check.d.ts.map +1 -0
- package/dist/update/check.js +56 -0
- package/dist/update/check.js.map +1 -0
- package/dist/update/contract-risk.d.ts +55 -0
- package/dist/update/contract-risk.d.ts.map +1 -0
- package/dist/update/contract-risk.js +75 -0
- package/dist/update/contract-risk.js.map +1 -0
- package/dist/update/history.d.ts +30 -0
- package/dist/update/history.d.ts.map +1 -0
- package/dist/update/history.js +38 -0
- package/dist/update/history.js.map +1 -0
- package/dist/update/index.d.ts +28 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +11 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/list-restore-points.d.ts +20 -0
- package/dist/update/list-restore-points.d.ts.map +1 -0
- package/dist/update/list-restore-points.js +35 -0
- package/dist/update/list-restore-points.js.map +1 -0
- package/dist/update/npm-registry.d.ts +11 -0
- package/dist/update/npm-registry.d.ts.map +1 -0
- package/dist/update/npm-registry.js +74 -0
- package/dist/update/npm-registry.js.map +1 -0
- package/dist/update/restore-point.d.ts +26 -0
- package/dist/update/restore-point.d.ts.map +1 -0
- package/dist/update/restore-point.js +23 -0
- package/dist/update/restore-point.js.map +1 -0
- package/dist/update/tar.d.ts +27 -0
- package/dist/update/tar.d.ts.map +1 -0
- package/dist/update/tar.js +56 -0
- package/dist/update/tar.js.map +1 -0
- package/dist/update/version-compare.d.ts +17 -0
- package/dist/update/version-compare.d.ts.map +1 -0
- package/dist/update/version-compare.js +42 -0
- package/dist/update/version-compare.js.map +1 -0
- package/dist/version.d.ts +13 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +18 -0
- package/dist/version.js.map +1 -0
- package/package.json +33 -16
- package/dist/admin-assets/assets/index-C9a7O_Xs.css +0 -1
- package/dist/admin-assets/assets/index-DXvMgWvn.js +0 -74
|
@@ -90,12 +90,6 @@ export async function inlineImports(entry, options) {
|
|
|
90
90
|
parts.push(css.slice(cursor));
|
|
91
91
|
return parts.join('\n');
|
|
92
92
|
}
|
|
93
|
-
/**
|
|
94
|
-
* The whole theme stylesheet as one minified string, or `null` when the theme
|
|
95
|
-
* package cannot be resolved — a site then renders with the skin's custom
|
|
96
|
-
* properties alone rather than refusing to serve, the same degradation
|
|
97
|
-
* `loadSkinCss` already chose for a missing `theme.tokens.json`.
|
|
98
|
-
*/
|
|
99
93
|
/**
|
|
100
94
|
* FNV-1a, 32 bits. A cache key, never a security boundary — and deliberately
|
|
101
95
|
* not `node:crypto`, to match the hash `@cogenta/render` already uses for the
|
|
@@ -109,13 +103,44 @@ export function cssEtag(css) {
|
|
|
109
103
|
}
|
|
110
104
|
return `"${value.toString(16).padStart(8, '0')}"`;
|
|
111
105
|
}
|
|
112
|
-
|
|
106
|
+
/**
|
|
107
|
+
* The whole theme stylesheet as one minified string, or `null` when the named
|
|
108
|
+
* theme package cannot be resolved — a site then renders with the skin's
|
|
109
|
+
* custom properties alone rather than refusing to serve, the same degradation
|
|
110
|
+
* `loadSkinCss` already chose for a missing `theme.tokens.json`.
|
|
111
|
+
*
|
|
112
|
+
* Every theme package publishes its stylesheet at the same `./styles/theme.css`
|
|
113
|
+
* export subpath (contract D, mirrored by every theme package's `package.json`)
|
|
114
|
+
* so this stays a one-line lookup regardless of which theme is active — a
|
|
115
|
+
* per-theme convention, not a per-theme code branch.
|
|
116
|
+
*/
|
|
117
|
+
export async function loadThemeCss(options, themeName) {
|
|
113
118
|
try {
|
|
114
|
-
const entry = new URL(import.meta.resolve(
|
|
119
|
+
const entry = new URL(import.meta.resolve(`${themeName}/styles/theme.css`));
|
|
115
120
|
return minifyCss(await inlineImports(entry, options));
|
|
116
121
|
}
|
|
117
122
|
catch {
|
|
118
123
|
return null;
|
|
119
124
|
}
|
|
120
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* A theme's own stylesheet is code, not data — installing a second theme
|
|
128
|
+
* package is a redeploy, unlike the skin tokens `resolveStyles` re-reads on
|
|
129
|
+
* every request. So each theme's CSS is loaded and flattened once per name
|
|
130
|
+
* and kept for the life of the process, memoised by this factory rather than
|
|
131
|
+
* reloaded on a request that merely switched *which* already-installed theme
|
|
132
|
+
* is active — switching is still live (fiche L23): only the file I/O is not
|
|
133
|
+
* repeated for a theme this process has already read.
|
|
134
|
+
*/
|
|
135
|
+
export function createThemeCssResolver(options) {
|
|
136
|
+
const cache = new Map();
|
|
137
|
+
return (themeName) => {
|
|
138
|
+
const cached = cache.get(themeName);
|
|
139
|
+
if (cached !== undefined)
|
|
140
|
+
return cached;
|
|
141
|
+
const promise = loadThemeCss(options, themeName);
|
|
142
|
+
cache.set(themeName, promise);
|
|
143
|
+
return promise;
|
|
144
|
+
};
|
|
145
|
+
}
|
|
121
146
|
//# sourceMappingURL=theme-css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-css.js","sourceRoot":"","sources":["../../src/commands/theme-css.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"theme-css.js","sourceRoot":"","sources":["../../src/commands/theme-css.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { BlockRegistry } from '@cogenta/blocks';
|
|
2
|
+
import type { ThemeManifest } from '@cogenta/render';
|
|
3
|
+
import type { ChromeInput, ChromeResult, FetchedEntries, HtmlElement, PageContent, RenderContext, TermArchiveInput } from '@cogenta/theme-kit';
|
|
4
|
+
/**
|
|
5
|
+
* The theme registry — what makes more than one theme package installable at
|
|
6
|
+
* all (fiche L23). Before this, `theme-render.ts` imported `renderPage` and
|
|
7
|
+
* the chrome markup directly from `@cogenta/theme-canonical`; every site ran
|
|
8
|
+
* that one theme because nothing else could be named.
|
|
9
|
+
*
|
|
10
|
+
* A theme package's two theme-specific exports — everything else a rendered
|
|
11
|
+
* page needs (`RenderContext`, escaping, rich text, comments, entry helpers)
|
|
12
|
+
* now lives in `@cogenta/theme-kit`, shared and identical across every theme,
|
|
13
|
+
* so `theme-render.ts` never has to ask the registry for it.
|
|
14
|
+
*/
|
|
15
|
+
export interface ThemeModule {
|
|
16
|
+
readonly renderPage: (page: PageContent, ctx: RenderContext, entries?: FetchedEntries,
|
|
17
|
+
/**
|
|
18
|
+
* The block registry a stored block's type is resolved against —
|
|
19
|
+
* `@cogenta/blocks`'s twelve-turned-seventeen by default. A site with
|
|
20
|
+
* blocks of its own (a theme, or a theme-shipping plugin) passes its own,
|
|
21
|
+
* wider registry, so an active theme that does not implement one of them
|
|
22
|
+
* still renders its declared `fallback` (fiche 43, sous-chantier C(ii))
|
|
23
|
+
* instead of a silently blank slot.
|
|
24
|
+
*/
|
|
25
|
+
registry?: BlockRegistry) => HtmlElement;
|
|
26
|
+
readonly renderChrome: (input: ChromeInput) => ChromeResult;
|
|
27
|
+
/**
|
|
28
|
+
* The public archive page of one taxonomy term (contract D `theme@1.3`).
|
|
29
|
+
*
|
|
30
|
+
* **Optional**, and that is the whole point of it being here rather than
|
|
31
|
+
* beside `renderPage`: a theme installed before this existed, or a theme
|
|
32
|
+
* that simply does not want to own this layout, keeps working — the host
|
|
33
|
+
* renders a plain list inside that theme's own chrome instead. Making it
|
|
34
|
+
* required would have turned a new capability into a breaking change for
|
|
35
|
+
* every theme package on the day it shipped.
|
|
36
|
+
*/
|
|
37
|
+
readonly renderTermArchive?: (input: TermArchiveInput) => HtmlElement;
|
|
38
|
+
}
|
|
39
|
+
export interface BuiltinTheme {
|
|
40
|
+
readonly name: string;
|
|
41
|
+
/** The gallery's own display name — not part of the manifest (fiche 48: a theme package does not get to name the card it is shown on). */
|
|
42
|
+
readonly label: string;
|
|
43
|
+
readonly load: () => Promise<ThemeModule>;
|
|
44
|
+
/** Loads `<package>/theme.config` — the manifest, separate from `load()` so a card can show version/description/author without pulling in the whole render module. */
|
|
45
|
+
readonly loadManifest: () => Promise<{
|
|
46
|
+
readonly default: ThemeManifest;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The theme packages this build of `@cogenta/cli` ships with — a real npm
|
|
51
|
+
* dependency of this package, never a filesystem scan: `cogenta serve` runs
|
|
52
|
+
* from a project that installed `@cogenta/cli`, and every theme it can offer
|
|
53
|
+
* has to be something that installation actually has in `node_modules`.
|
|
54
|
+
*
|
|
55
|
+
* Adding a theme package is one entry here, matched by one line in this
|
|
56
|
+
* package's own `dependencies` — the same "declare it once, the registry
|
|
57
|
+
* generalises the rest" shape `SITE_SETTINGS_REGISTRY` already uses for site
|
|
58
|
+
* settings.
|
|
59
|
+
*/
|
|
60
|
+
export declare const BUILTIN_THEMES: readonly BuiltinTheme[];
|
|
61
|
+
export declare const DEFAULT_THEME_NAME = "@cogenta/theme-canonical";
|
|
62
|
+
/** One entry of the appearance screen's theme gallery (fiche 48) — everything a card shows about a theme. */
|
|
63
|
+
export interface AvailableThemeInfo {
|
|
64
|
+
readonly name: string;
|
|
65
|
+
readonly label: string;
|
|
66
|
+
/**
|
|
67
|
+
* `manifest.description`, when the theme declares one — the manifest is
|
|
68
|
+
* the source of truth (fiche 48 task 3: editing `theme.config.ts` alone
|
|
69
|
+
* changes this, no change to this file needed). Falls back to `label`
|
|
70
|
+
* for a theme that predates `theme@1.2` or simply omits `description`.
|
|
71
|
+
*/
|
|
72
|
+
readonly description: string;
|
|
73
|
+
/** `manifest.version` — the theme contract's own version, not the npm package version (two different numbers; this is the one contract D already models). */
|
|
74
|
+
readonly version: string;
|
|
75
|
+
/** `manifest.author`, or `null` for a theme that does not declare one. */
|
|
76
|
+
readonly author: string | null;
|
|
77
|
+
}
|
|
78
|
+
/** Every theme this instance can offer — what the appearance screen's picker lists. */
|
|
79
|
+
export declare function availableThemes(): Promise<readonly AvailableThemeInfo[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Resolves the active theme by name, defaulting to
|
|
82
|
+
* `@cogenta/theme-canonical` for `null`/`undefined`/an unrecognised name — a
|
|
83
|
+
* site whose stored `activeTheme` names a theme this build no longer ships
|
|
84
|
+
* (an uninstalled package, a typo restored from a backup) still serves,
|
|
85
|
+
* rather than refusing every request, which is what R1/R2's "never let an
|
|
86
|
+
* optional feature take the whole site down" spirit asks for here.
|
|
87
|
+
*
|
|
88
|
+
* Each theme's module is imported once and cached for the life of the
|
|
89
|
+
* process (Node's own ESM cache would do this anyway; the `Map` here just
|
|
90
|
+
* keys it by name instead of by specifier, and is what lets a second call
|
|
91
|
+
* with a different name resolve without waiting on the first).
|
|
92
|
+
*/
|
|
93
|
+
export declare function resolveTheme(name: string | null | undefined): Promise<ThemeModule>;
|
|
94
|
+
//# sourceMappingURL=theme-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-registry.d.ts","sourceRoot":"","sources":["../../src/commands/theme-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,CACnB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,cAAc;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,aAAa,KACrB,WAAW,CAAA;IAChB,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,YAAY,CAAA;IAC3D;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,WAAW,CAAA;CACtE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0IAA0I;IAC1I,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACzC,sKAAsK;IACtK,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;KAAE,CAAC,CAAA;CAC1E;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EA6DjD,CAAA;AAED,eAAO,MAAM,kBAAkB,6BAA6B,CAAA;AAI5D,6GAA6G;AAC7G,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,6JAA6J;IAC7J,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAYD,uFAAuF;AACvF,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAa9E;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBlF"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { CogentaError } from '@cogenta/core';
|
|
2
|
+
/**
|
|
3
|
+
* The theme packages this build of `@cogenta/cli` ships with — a real npm
|
|
4
|
+
* dependency of this package, never a filesystem scan: `cogenta serve` runs
|
|
5
|
+
* from a project that installed `@cogenta/cli`, and every theme it can offer
|
|
6
|
+
* has to be something that installation actually has in `node_modules`.
|
|
7
|
+
*
|
|
8
|
+
* Adding a theme package is one entry here, matched by one line in this
|
|
9
|
+
* package's own `dependencies` — the same "declare it once, the registry
|
|
10
|
+
* generalises the rest" shape `SITE_SETTINGS_REGISTRY` already uses for site
|
|
11
|
+
* settings.
|
|
12
|
+
*/
|
|
13
|
+
export const BUILTIN_THEMES = [
|
|
14
|
+
{
|
|
15
|
+
name: '@cogenta/theme-canonical',
|
|
16
|
+
label: 'Canonical',
|
|
17
|
+
load: () => import('@cogenta/theme-canonical'),
|
|
18
|
+
loadManifest: () => import('@cogenta/theme-canonical/theme.config'),
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: '@cogenta/theme-ecommerce',
|
|
22
|
+
label: 'Storefront',
|
|
23
|
+
load: () => import('@cogenta/theme-ecommerce'),
|
|
24
|
+
loadManifest: () => import('@cogenta/theme-ecommerce/theme.config'),
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: '@cogenta/theme-portfolio',
|
|
28
|
+
label: 'Portfolio',
|
|
29
|
+
load: () => import('@cogenta/theme-portfolio'),
|
|
30
|
+
loadManifest: () => import('@cogenta/theme-portfolio/theme.config'),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: '@cogenta/theme-entreprise',
|
|
34
|
+
label: 'Entreprise',
|
|
35
|
+
load: () => import('@cogenta/theme-entreprise'),
|
|
36
|
+
loadManifest: () => import('@cogenta/theme-entreprise/theme.config'),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '@cogenta/theme-magazine',
|
|
40
|
+
label: 'Magazine',
|
|
41
|
+
load: () => import('@cogenta/theme-magazine'),
|
|
42
|
+
loadManifest: () => import('@cogenta/theme-magazine/theme.config'),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '@cogenta/theme-blog',
|
|
46
|
+
label: 'Blog',
|
|
47
|
+
load: () => import('@cogenta/theme-blog'),
|
|
48
|
+
loadManifest: () => import('@cogenta/theme-blog/theme.config'),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: '@cogenta/theme-saas',
|
|
52
|
+
label: 'SaaS',
|
|
53
|
+
load: () => import('@cogenta/theme-saas'),
|
|
54
|
+
loadManifest: () => import('@cogenta/theme-saas/theme.config'),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: '@cogenta/theme-docs',
|
|
58
|
+
label: 'Documentation',
|
|
59
|
+
load: () => import('@cogenta/theme-docs'),
|
|
60
|
+
loadManifest: () => import('@cogenta/theme-docs/theme.config'),
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: '@cogenta/theme-restaurant',
|
|
64
|
+
label: 'Restaurant',
|
|
65
|
+
load: () => import('@cogenta/theme-restaurant'),
|
|
66
|
+
loadManifest: () => import('@cogenta/theme-restaurant/theme.config'),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: '@cogenta/theme-association',
|
|
70
|
+
label: 'Association',
|
|
71
|
+
load: () => import('@cogenta/theme-association'),
|
|
72
|
+
loadManifest: () => import('@cogenta/theme-association/theme.config'),
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
export const DEFAULT_THEME_NAME = '@cogenta/theme-canonical';
|
|
76
|
+
const BY_NAME = new Map(BUILTIN_THEMES.map((theme) => [theme.name, theme]));
|
|
77
|
+
const manifestCache = new Map();
|
|
78
|
+
function loadManifestOf(theme) {
|
|
79
|
+
const cached = manifestCache.get(theme.name);
|
|
80
|
+
if (cached !== undefined)
|
|
81
|
+
return cached;
|
|
82
|
+
const promise = theme.loadManifest().then((mod) => mod.default);
|
|
83
|
+
manifestCache.set(theme.name, promise);
|
|
84
|
+
return promise;
|
|
85
|
+
}
|
|
86
|
+
/** Every theme this instance can offer — what the appearance screen's picker lists. */
|
|
87
|
+
export async function availableThemes() {
|
|
88
|
+
return Promise.all(BUILTIN_THEMES.map(async (theme) => {
|
|
89
|
+
const manifest = await loadManifestOf(theme);
|
|
90
|
+
return {
|
|
91
|
+
name: theme.name,
|
|
92
|
+
label: theme.label,
|
|
93
|
+
description: manifest.description ?? theme.label,
|
|
94
|
+
version: manifest.version,
|
|
95
|
+
author: manifest.author ?? null,
|
|
96
|
+
};
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
const loaded = new Map();
|
|
100
|
+
/**
|
|
101
|
+
* Resolves the active theme by name, defaulting to
|
|
102
|
+
* `@cogenta/theme-canonical` for `null`/`undefined`/an unrecognised name — a
|
|
103
|
+
* site whose stored `activeTheme` names a theme this build no longer ships
|
|
104
|
+
* (an uninstalled package, a typo restored from a backup) still serves,
|
|
105
|
+
* rather than refusing every request, which is what R1/R2's "never let an
|
|
106
|
+
* optional feature take the whole site down" spirit asks for here.
|
|
107
|
+
*
|
|
108
|
+
* Each theme's module is imported once and cached for the life of the
|
|
109
|
+
* process (Node's own ESM cache would do this anyway; the `Map` here just
|
|
110
|
+
* keys it by name instead of by specifier, and is what lets a second call
|
|
111
|
+
* with a different name resolve without waiting on the first).
|
|
112
|
+
*/
|
|
113
|
+
export function resolveTheme(name) {
|
|
114
|
+
const theme = (name !== null && name !== undefined ? BY_NAME.get(name) : undefined) ??
|
|
115
|
+
BY_NAME.get(DEFAULT_THEME_NAME);
|
|
116
|
+
if (theme === undefined) {
|
|
117
|
+
throw new CogentaError({
|
|
118
|
+
code: 'THEME_NOT_FOUND',
|
|
119
|
+
message: 'No theme is registered, not even the built-in default.',
|
|
120
|
+
hint: 'This is a packaging error in @cogenta/cli, not a site configuration problem.',
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const cached = loaded.get(theme.name);
|
|
124
|
+
if (cached !== undefined)
|
|
125
|
+
return cached;
|
|
126
|
+
const promise = theme.load();
|
|
127
|
+
loaded.set(theme.name, promise);
|
|
128
|
+
return promise;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=theme-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-registry.js","sourceRoot":"","sources":["../../src/commands/theme-registry.ts"],"names":[],"mappings":"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"}
|