@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.
Files changed (174) hide show
  1. package/CHANGELOG.md +3951 -0
  2. package/dist/admin-assets/assets/index-Bc_X94A_.js +1090 -0
  3. package/dist/admin-assets/assets/index-CxZHGwVA.css +1 -0
  4. package/dist/admin-assets/assets/vips-_dmTUXFO.wasm +0 -0
  5. package/dist/admin-assets/assets/vips-es6-DrQTTS8Q.js +7 -0
  6. package/dist/admin-assets/branding/logo-cogenta-dark.png +0 -0
  7. package/dist/admin-assets/branding/logo-cogenta-icon.png +0 -0
  8. package/dist/admin-assets/branding/logo-cogenta-light.png +0 -0
  9. package/dist/admin-assets/branding/logo-cogenta-small.png +0 -0
  10. package/dist/admin-assets/branding/logo-cogenta-transparent.png +0 -0
  11. package/dist/admin-assets/branding/logo-cogenta.png +0 -0
  12. package/dist/admin-assets/favicon.png +0 -0
  13. package/dist/admin-assets/fonts/jetbrains-mono-var.woff2 +0 -0
  14. package/dist/admin-assets/fonts/space-grotesk-var.woff2 +0 -0
  15. package/dist/admin-assets/index.html +3 -2
  16. package/dist/bin.js +6 -0
  17. package/dist/bin.js.map +1 -1
  18. package/dist/commands/admin-assets.d.ts +1 -0
  19. package/dist/commands/admin-assets.d.ts.map +1 -1
  20. package/dist/commands/admin-assets.js +19 -1
  21. package/dist/commands/admin-assets.js.map +1 -1
  22. package/dist/commands/agent-runtime.d.ts +160 -0
  23. package/dist/commands/agent-runtime.d.ts.map +1 -0
  24. package/dist/commands/agent-runtime.js +524 -0
  25. package/dist/commands/agent-runtime.js.map +1 -0
  26. package/dist/commands/assistant.d.ts +89 -3
  27. package/dist/commands/assistant.d.ts.map +1 -1
  28. package/dist/commands/assistant.js +209 -41
  29. package/dist/commands/assistant.js.map +1 -1
  30. package/dist/commands/audit-integrity-alert.d.ts +23 -0
  31. package/dist/commands/audit-integrity-alert.d.ts.map +1 -0
  32. package/dist/commands/audit-integrity-alert.js +33 -0
  33. package/dist/commands/audit-integrity-alert.js.map +1 -0
  34. package/dist/commands/backup.d.ts +78 -0
  35. package/dist/commands/backup.d.ts.map +1 -0
  36. package/dist/commands/backup.js +238 -0
  37. package/dist/commands/backup.js.map +1 -0
  38. package/dist/commands/channels.d.ts +47 -0
  39. package/dist/commands/channels.d.ts.map +1 -0
  40. package/dist/commands/channels.js +284 -0
  41. package/dist/commands/channels.js.map +1 -0
  42. package/dist/commands/default-logo.d.ts +27 -0
  43. package/dist/commands/default-logo.d.ts.map +1 -0
  44. package/dist/commands/default-logo.js +30 -0
  45. package/dist/commands/default-logo.js.map +1 -0
  46. package/dist/commands/doctor.d.ts +5 -1
  47. package/dist/commands/doctor.d.ts.map +1 -1
  48. package/dist/commands/doctor.js +74 -2
  49. package/dist/commands/doctor.js.map +1 -1
  50. package/dist/commands/export.d.ts +22 -0
  51. package/dist/commands/export.d.ts.map +1 -0
  52. package/dist/commands/export.js +182 -0
  53. package/dist/commands/export.js.map +1 -0
  54. package/dist/commands/forms-page.d.ts +75 -0
  55. package/dist/commands/forms-page.d.ts.map +1 -0
  56. package/dist/commands/forms-page.js +191 -0
  57. package/dist/commands/forms-page.js.map +1 -0
  58. package/dist/commands/import.d.ts.map +1 -1
  59. package/dist/commands/import.js +13 -1
  60. package/dist/commands/import.js.map +1 -1
  61. package/dist/commands/mcp.d.ts +35 -0
  62. package/dist/commands/mcp.d.ts.map +1 -0
  63. package/dist/commands/mcp.js +277 -0
  64. package/dist/commands/mcp.js.map +1 -0
  65. package/dist/commands/roles.d.ts +22 -0
  66. package/dist/commands/roles.d.ts.map +1 -0
  67. package/dist/commands/roles.js +79 -0
  68. package/dist/commands/roles.js.map +1 -0
  69. package/dist/commands/search-page.d.ts +15 -0
  70. package/dist/commands/search-page.d.ts.map +1 -1
  71. package/dist/commands/search-page.js +22 -16
  72. package/dist/commands/search-page.js.map +1 -1
  73. package/dist/commands/seo.d.ts +92 -4
  74. package/dist/commands/seo.d.ts.map +1 -1
  75. package/dist/commands/seo.js +168 -4
  76. package/dist/commands/seo.js.map +1 -1
  77. package/dist/commands/serve.d.ts +439 -7
  78. package/dist/commands/serve.d.ts.map +1 -1
  79. package/dist/commands/serve.js +3515 -181
  80. package/dist/commands/serve.js.map +1 -1
  81. package/dist/commands/site-plan.d.ts +27 -1
  82. package/dist/commands/site-plan.d.ts.map +1 -1
  83. package/dist/commands/site-plan.js +79 -8
  84. package/dist/commands/site-plan.js.map +1 -1
  85. package/dist/commands/skin.d.ts.map +1 -1
  86. package/dist/commands/skin.js +7 -2
  87. package/dist/commands/skin.js.map +1 -1
  88. package/dist/commands/term-archive-page.d.ts +94 -0
  89. package/dist/commands/term-archive-page.d.ts.map +1 -0
  90. package/dist/commands/term-archive-page.js +195 -0
  91. package/dist/commands/term-archive-page.js.map +1 -0
  92. package/dist/commands/theme-css.d.ts +22 -7
  93. package/dist/commands/theme-css.d.ts.map +1 -1
  94. package/dist/commands/theme-css.js +33 -8
  95. package/dist/commands/theme-css.js.map +1 -1
  96. package/dist/commands/theme-registry.d.ts +94 -0
  97. package/dist/commands/theme-registry.d.ts.map +1 -0
  98. package/dist/commands/theme-registry.js +130 -0
  99. package/dist/commands/theme-registry.js.map +1 -0
  100. package/dist/commands/theme-render.d.ts +330 -9
  101. package/dist/commands/theme-render.d.ts.map +1 -1
  102. package/dist/commands/theme-render.js +932 -66
  103. package/dist/commands/theme-render.js.map +1 -1
  104. package/dist/commands/theme-wiring.d.ts +107 -0
  105. package/dist/commands/theme-wiring.d.ts.map +1 -0
  106. package/dist/commands/theme-wiring.js +308 -0
  107. package/dist/commands/theme-wiring.js.map +1 -0
  108. package/dist/commands/tools.d.ts +71 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +330 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/update.d.ts +25 -0
  113. package/dist/commands/update.d.ts.map +1 -0
  114. package/dist/commands/update.js +193 -0
  115. package/dist/commands/update.js.map +1 -0
  116. package/dist/index.d.ts +15 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +146 -4
  119. package/dist/index.js.map +1 -1
  120. package/dist/invite-mail.d.ts +39 -0
  121. package/dist/invite-mail.d.ts.map +1 -0
  122. package/dist/invite-mail.js +39 -0
  123. package/dist/invite-mail.js.map +1 -0
  124. package/dist/update/apply.d.ts +54 -0
  125. package/dist/update/apply.d.ts.map +1 -0
  126. package/dist/update/apply.js +77 -0
  127. package/dist/update/apply.js.map +1 -0
  128. package/dist/update/changelog-risk.d.ts +20 -0
  129. package/dist/update/changelog-risk.d.ts.map +1 -0
  130. package/dist/update/changelog-risk.js +55 -0
  131. package/dist/update/changelog-risk.js.map +1 -0
  132. package/dist/update/check.d.ts +60 -0
  133. package/dist/update/check.d.ts.map +1 -0
  134. package/dist/update/check.js +56 -0
  135. package/dist/update/check.js.map +1 -0
  136. package/dist/update/contract-risk.d.ts +55 -0
  137. package/dist/update/contract-risk.d.ts.map +1 -0
  138. package/dist/update/contract-risk.js +75 -0
  139. package/dist/update/contract-risk.js.map +1 -0
  140. package/dist/update/history.d.ts +30 -0
  141. package/dist/update/history.d.ts.map +1 -0
  142. package/dist/update/history.js +38 -0
  143. package/dist/update/history.js.map +1 -0
  144. package/dist/update/index.d.ts +28 -0
  145. package/dist/update/index.d.ts.map +1 -0
  146. package/dist/update/index.js +11 -0
  147. package/dist/update/index.js.map +1 -0
  148. package/dist/update/list-restore-points.d.ts +20 -0
  149. package/dist/update/list-restore-points.d.ts.map +1 -0
  150. package/dist/update/list-restore-points.js +35 -0
  151. package/dist/update/list-restore-points.js.map +1 -0
  152. package/dist/update/npm-registry.d.ts +11 -0
  153. package/dist/update/npm-registry.d.ts.map +1 -0
  154. package/dist/update/npm-registry.js +74 -0
  155. package/dist/update/npm-registry.js.map +1 -0
  156. package/dist/update/restore-point.d.ts +26 -0
  157. package/dist/update/restore-point.d.ts.map +1 -0
  158. package/dist/update/restore-point.js +23 -0
  159. package/dist/update/restore-point.js.map +1 -0
  160. package/dist/update/tar.d.ts +27 -0
  161. package/dist/update/tar.d.ts.map +1 -0
  162. package/dist/update/tar.js +56 -0
  163. package/dist/update/tar.js.map +1 -0
  164. package/dist/update/version-compare.d.ts +17 -0
  165. package/dist/update/version-compare.d.ts.map +1 -0
  166. package/dist/update/version-compare.js +42 -0
  167. package/dist/update/version-compare.js.map +1 -0
  168. package/dist/version.d.ts +13 -0
  169. package/dist/version.d.ts.map +1 -0
  170. package/dist/version.js +18 -0
  171. package/dist/version.js.map +1 -0
  172. package/package.json +33 -16
  173. package/dist/admin-assets/assets/index-C9a7O_Xs.css +0 -1
  174. 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
- export async function loadThemeCss(options) {
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('@cogenta/theme-canonical/styles/theme.css'));
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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"}