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.
Files changed (240) hide show
  1. package/admin-dist/assets/index-B6pVot0Y.css +1 -0
  2. package/admin-dist/assets/index-DniLwxJA.js +609 -0
  3. package/admin-dist/assets/{vendor-primevue-BnR1c_bQ.js → vendor-primevue-C0Q_YTCb.js} +330 -431
  4. package/admin-dist/assets/vendor-vue-D3wBSmDf.js +1 -0
  5. package/admin-dist/index.html +4 -4
  6. package/dist/admin-api/index.d.ts +26 -5
  7. package/dist/admin-api/index.d.ts.map +1 -1
  8. package/dist/admin-api/index.js +175 -13
  9. package/dist/admin-api/index.js.map +1 -1
  10. package/dist/admin-api/routes/compare.d.ts +3 -1
  11. package/dist/admin-api/routes/compare.d.ts.map +1 -1
  12. package/dist/admin-api/routes/compare.js +34 -24
  13. package/dist/admin-api/routes/compare.js.map +1 -1
  14. package/dist/admin-api/routes/fields.d.ts +2 -2
  15. package/dist/admin-api/routes/fields.d.ts.map +1 -1
  16. package/dist/admin-api/routes/fields.js +10 -3
  17. package/dist/admin-api/routes/fields.js.map +1 -1
  18. package/dist/admin-api/routes/fragments.d.ts +2 -2
  19. package/dist/admin-api/routes/fragments.d.ts.map +1 -1
  20. package/dist/admin-api/routes/fragments.js +94 -19
  21. package/dist/admin-api/routes/fragments.js.map +1 -1
  22. package/dist/admin-api/routes/history.d.ts +23 -0
  23. package/dist/admin-api/routes/history.d.ts.map +1 -0
  24. package/dist/admin-api/routes/history.js +143 -0
  25. package/dist/admin-api/routes/history.js.map +1 -0
  26. package/dist/admin-api/routes/pages.d.ts +2 -2
  27. package/dist/admin-api/routes/pages.d.ts.map +1 -1
  28. package/dist/admin-api/routes/pages.js +120 -20
  29. package/dist/admin-api/routes/pages.js.map +1 -1
  30. package/dist/admin-api/routes/preview.d.ts +2 -2
  31. package/dist/admin-api/routes/preview.d.ts.map +1 -1
  32. package/dist/admin-api/routes/preview.js +50 -15
  33. package/dist/admin-api/routes/preview.js.map +1 -1
  34. package/dist/admin-api/routes/publish.d.ts +3 -1
  35. package/dist/admin-api/routes/publish.d.ts.map +1 -1
  36. package/dist/admin-api/routes/publish.js +306 -65
  37. package/dist/admin-api/routes/publish.js.map +1 -1
  38. package/dist/admin-api/routes/site.d.ts +2 -2
  39. package/dist/admin-api/routes/site.d.ts.map +1 -1
  40. package/dist/admin-api/routes/site.js +27 -4
  41. package/dist/admin-api/routes/site.js.map +1 -1
  42. package/dist/admin-api/routes/templates.d.ts +2 -2
  43. package/dist/admin-api/routes/templates.d.ts.map +1 -1
  44. package/dist/admin-api/routes/templates.js +19 -9
  45. package/dist/admin-api/routes/templates.js.map +1 -1
  46. package/dist/admin-api/schemas/compare.d.ts +29 -0
  47. package/dist/admin-api/schemas/compare.d.ts.map +1 -0
  48. package/dist/admin-api/schemas/compare.js +30 -0
  49. package/dist/admin-api/schemas/compare.js.map +1 -0
  50. package/dist/admin-api/schemas/dependents.d.ts +15 -0
  51. package/dist/admin-api/schemas/dependents.d.ts.map +1 -0
  52. package/dist/admin-api/schemas/dependents.js +14 -0
  53. package/dist/admin-api/schemas/dependents.js.map +1 -0
  54. package/dist/admin-api/schemas/fetch.d.ts +12 -0
  55. package/dist/admin-api/schemas/fetch.d.ts.map +1 -0
  56. package/dist/admin-api/schemas/fetch.js +11 -0
  57. package/dist/admin-api/schemas/fetch.js.map +1 -0
  58. package/dist/admin-api/schemas/fields.d.ts +11 -0
  59. package/dist/admin-api/schemas/fields.d.ts.map +1 -0
  60. package/dist/admin-api/schemas/fields.js +11 -0
  61. package/dist/admin-api/schemas/fields.js.map +1 -0
  62. package/dist/admin-api/schemas/fragments.d.ts +27 -0
  63. package/dist/admin-api/schemas/fragments.d.ts.map +1 -0
  64. package/dist/admin-api/schemas/fragments.js +26 -0
  65. package/dist/admin-api/schemas/fragments.js.map +1 -0
  66. package/dist/admin-api/schemas/history.d.ts +73 -0
  67. package/dist/admin-api/schemas/history.d.ts.map +1 -0
  68. package/dist/admin-api/schemas/history.js +35 -0
  69. package/dist/admin-api/schemas/history.js.map +1 -0
  70. package/dist/admin-api/schemas/index.d.ts +32 -0
  71. package/dist/admin-api/schemas/index.d.ts.map +1 -0
  72. package/dist/admin-api/schemas/index.js +32 -0
  73. package/dist/admin-api/schemas/index.js.map +1 -0
  74. package/dist/admin-api/schemas/pages.d.ts +46 -0
  75. package/dist/admin-api/schemas/pages.d.ts.map +1 -0
  76. package/dist/admin-api/schemas/pages.js +47 -0
  77. package/dist/admin-api/schemas/pages.js.map +1 -0
  78. package/dist/admin-api/schemas/publish.d.ts +67 -0
  79. package/dist/admin-api/schemas/publish.d.ts.map +1 -0
  80. package/dist/admin-api/schemas/publish.js +60 -0
  81. package/dist/admin-api/schemas/publish.js.map +1 -0
  82. package/dist/admin-api/schemas/site.d.ts +28 -0
  83. package/dist/admin-api/schemas/site.d.ts.map +1 -0
  84. package/dist/admin-api/schemas/site.js +24 -0
  85. package/dist/admin-api/schemas/site.js.map +1 -0
  86. package/dist/admin-api/schemas/targets.d.ts +36 -0
  87. package/dist/admin-api/schemas/targets.d.ts.map +1 -0
  88. package/dist/admin-api/schemas/targets.js +19 -0
  89. package/dist/admin-api/schemas/targets.js.map +1 -0
  90. package/dist/admin-api/schemas/templates.d.ts +17 -0
  91. package/dist/admin-api/schemas/templates.d.ts.map +1 -0
  92. package/dist/admin-api/schemas/templates.js +16 -0
  93. package/dist/admin-api/schemas/templates.js.map +1 -0
  94. package/dist/admin-api/source-context.d.ts +165 -0
  95. package/dist/admin-api/source-context.d.ts.map +1 -0
  96. package/dist/admin-api/source-context.js +95 -0
  97. package/dist/admin-api/source-context.js.map +1 -0
  98. package/dist/app.js +1 -1
  99. package/dist/app.js.map +1 -1
  100. package/dist/assemble.d.ts.map +1 -1
  101. package/dist/assemble.js +4 -1
  102. package/dist/assemble.js.map +1 -1
  103. package/dist/cli/bootstrap.d.ts +48 -0
  104. package/dist/cli/bootstrap.d.ts.map +1 -0
  105. package/dist/cli/bootstrap.js +85 -0
  106. package/dist/cli/bootstrap.js.map +1 -0
  107. package/dist/cli/history.d.ts +45 -0
  108. package/dist/cli/history.d.ts.map +1 -0
  109. package/dist/cli/history.js +165 -0
  110. package/dist/cli/history.js.map +1 -0
  111. package/dist/cli/index.js +691 -113
  112. package/dist/cli/index.js.map +1 -1
  113. package/dist/compare.d.ts +15 -5
  114. package/dist/compare.d.ts.map +1 -1
  115. package/dist/compare.js +83 -45
  116. package/dist/compare.js.map +1 -1
  117. package/dist/concurrency.d.ts +63 -0
  118. package/dist/concurrency.d.ts.map +1 -0
  119. package/dist/concurrency.js +134 -0
  120. package/dist/concurrency.js.map +1 -0
  121. package/dist/content-root.d.ts +38 -0
  122. package/dist/content-root.d.ts.map +1 -0
  123. package/dist/content-root.js +29 -0
  124. package/dist/content-root.js.map +1 -0
  125. package/dist/editor/mount.d.ts +1 -1
  126. package/dist/editor/mount.d.ts.map +1 -1
  127. package/dist/editor/mount.js +61 -29
  128. package/dist/editor/mount.js.map +1 -1
  129. package/dist/hash.d.ts +47 -1
  130. package/dist/hash.d.ts.map +1 -1
  131. package/dist/hash.js +107 -10
  132. package/dist/hash.js.map +1 -1
  133. package/dist/history-provider.d.ts +49 -0
  134. package/dist/history-provider.d.ts.map +1 -0
  135. package/dist/history-provider.js +226 -0
  136. package/dist/history-provider.js.map +1 -0
  137. package/dist/history-recorder.d.ts +98 -0
  138. package/dist/history-recorder.d.ts.map +1 -0
  139. package/dist/history-recorder.js +160 -0
  140. package/dist/history-recorder.js.map +1 -0
  141. package/dist/history-restorer.d.ts +46 -0
  142. package/dist/history-restorer.d.ts.map +1 -0
  143. package/dist/history-restorer.js +105 -0
  144. package/dist/history-restorer.js.map +1 -0
  145. package/dist/history.d.ts +111 -0
  146. package/dist/history.d.ts.map +1 -0
  147. package/dist/history.js +25 -0
  148. package/dist/history.js.map +1 -0
  149. package/dist/index.d.ts +26 -4
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +16 -3
  152. package/dist/index.js.map +1 -1
  153. package/dist/locale.d.ts +74 -0
  154. package/dist/locale.d.ts.map +1 -0
  155. package/dist/locale.js +150 -0
  156. package/dist/locale.js.map +1 -0
  157. package/dist/manifest.d.ts.map +1 -1
  158. package/dist/manifest.js +16 -1
  159. package/dist/manifest.js.map +1 -1
  160. package/dist/providers/azure-blob.d.ts.map +1 -1
  161. package/dist/providers/azure-blob.js.map +1 -1
  162. package/dist/providers/r2.d.ts.map +1 -1
  163. package/dist/providers/r2.js +7 -4
  164. package/dist/providers/r2.js.map +1 -1
  165. package/dist/providers/s3.d.ts.map +1 -1
  166. package/dist/providers/s3.js +23 -15
  167. package/dist/providers/s3.js.map +1 -1
  168. package/dist/publish-locale.d.ts +44 -0
  169. package/dist/publish-locale.d.ts.map +1 -0
  170. package/dist/publish-locale.js +103 -0
  171. package/dist/publish-locale.js.map +1 -0
  172. package/dist/publish-rendered.d.ts +17 -5
  173. package/dist/publish-rendered.d.ts.map +1 -1
  174. package/dist/publish-rendered.js +114 -66
  175. package/dist/publish-rendered.js.map +1 -1
  176. package/dist/publish.d.ts +39 -3
  177. package/dist/publish.d.ts.map +1 -1
  178. package/dist/publish.js +166 -17
  179. package/dist/publish.js.map +1 -1
  180. package/dist/renderer.d.ts +14 -4
  181. package/dist/renderer.d.ts.map +1 -1
  182. package/dist/renderer.js +35 -23
  183. package/dist/renderer.js.map +1 -1
  184. package/dist/resolver.d.ts +7 -2
  185. package/dist/resolver.d.ts.map +1 -1
  186. package/dist/resolver.js +66 -15
  187. package/dist/resolver.js.map +1 -1
  188. package/dist/robots.d.ts +22 -0
  189. package/dist/robots.d.ts.map +1 -0
  190. package/dist/robots.js +25 -0
  191. package/dist/robots.js.map +1 -0
  192. package/dist/seo.d.ts +56 -0
  193. package/dist/seo.d.ts.map +1 -0
  194. package/dist/seo.js +72 -0
  195. package/dist/seo.js.map +1 -0
  196. package/dist/serve.d.ts +41 -3
  197. package/dist/serve.d.ts.map +1 -1
  198. package/dist/serve.js +206 -65
  199. package/dist/serve.js.map +1 -1
  200. package/dist/sidecars.d.ts +60 -0
  201. package/dist/sidecars.d.ts.map +1 -0
  202. package/dist/sidecars.js +231 -0
  203. package/dist/sidecars.js.map +1 -0
  204. package/dist/site-loader.d.ts +74 -6
  205. package/dist/site-loader.d.ts.map +1 -1
  206. package/dist/site-loader.js +149 -36
  207. package/dist/site-loader.js.map +1 -1
  208. package/dist/sitemap.d.ts +45 -0
  209. package/dist/sitemap.d.ts.map +1 -0
  210. package/dist/sitemap.js +67 -0
  211. package/dist/sitemap.js.map +1 -0
  212. package/dist/source-sidecars.d.ts +32 -0
  213. package/dist/source-sidecars.d.ts.map +1 -0
  214. package/dist/source-sidecars.js +98 -0
  215. package/dist/source-sidecars.js.map +1 -0
  216. package/dist/targets.d.ts +47 -1
  217. package/dist/targets.d.ts.map +1 -1
  218. package/dist/targets.js +78 -9
  219. package/dist/targets.js.map +1 -1
  220. package/dist/template-loader.d.ts +7 -3
  221. package/dist/template-loader.d.ts.map +1 -1
  222. package/dist/template-loader.js +27 -12
  223. package/dist/template-loader.js.map +1 -1
  224. package/dist/templates-scan-worker.js +1 -1
  225. package/dist/templates-scan-worker.js.map +1 -1
  226. package/dist/templates-scan.d.ts.map +1 -1
  227. package/dist/templates-scan.js +1 -1
  228. package/dist/templates-scan.js.map +1 -1
  229. package/dist/types.d.ts +116 -9
  230. package/dist/types.d.ts.map +1 -1
  231. package/dist/types.js +28 -5
  232. package/dist/types.js.map +1 -1
  233. package/dist/workers/cloudflare-r2.d.ts +11 -2
  234. package/dist/workers/cloudflare-r2.d.ts.map +1 -1
  235. package/dist/workers/cloudflare-r2.js +120 -55
  236. package/dist/workers/cloudflare-r2.js.map +1 -1
  237. package/package.json +11 -2
  238. package/admin-dist/assets/index-Bh_y1d_l.css +0 -1
  239. package/admin-dist/assets/index-DjGNi6yy.js +0 -608
  240. package/admin-dist/assets/vendor-vue-DSjyxCX6.js +0 -1
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Shared bootstrap helpers for CLI commands and the dev server admin bootstrap.
3
+ *
4
+ * Responsibility: read site.yaml from the project site directory, build a
5
+ * TargetRegistry from its targets, and derive a SourceContext pointing at
6
+ * the default editable target. Callers compose these primitives; the admin
7
+ * API and `createApp` runtime take over from there.
8
+ */
9
+ import type { SiteManifest, TargetConfig } from '../types.js';
10
+ import { type SourceContext } from '../admin-api/source-context.js';
11
+ import type { TargetRegistry } from '../targets.js';
12
+ import type { SourceSidecarWriter } from '../source-sidecars.js';
13
+ export interface BootstrapResult {
14
+ /** Parsed site.yaml content. */
15
+ manifest: SiteManifest;
16
+ /** Target configurations declared in site.yaml. */
17
+ targetConfigs: Record<string, TargetConfig>;
18
+ /** Fully-initialized target registry (providers built, cloud targets connected). */
19
+ registry: TargetRegistry;
20
+ }
21
+ /**
22
+ * Read site.yaml, initialize all targets, and return a TargetRegistry view.
23
+ * Throws if site.yaml is missing or has no targets declared.
24
+ */
25
+ export declare function bootstrapFromSiteYaml(projectSiteDir: string): Promise<BootstrapResult>;
26
+ export interface BuildSourceContextOptions {
27
+ projectSiteDir: string;
28
+ /** Pre-parsed manifest to avoid re-reading site.yaml when caller already has it. */
29
+ manifest?: SiteManifest;
30
+ /** Explicit target name. Defaults to the registry's defaultEditable(). */
31
+ targetName?: string;
32
+ sidecarWriter?: SourceSidecarWriter;
33
+ }
34
+ /**
35
+ * High-level: read site.yaml, init only the chosen editable target, return a
36
+ * SourceContext and metadata. Cloud/remote targets are not initialized —
37
+ * callers that need them (publish, fetch, compare) init on demand.
38
+ *
39
+ * Rationale: validate and dev-bootstrap only need the source (editable local)
40
+ * target; initializing cloud targets upfront adds seconds of latency and
41
+ * surfaces spurious failures when credentials aren't configured.
42
+ */
43
+ export declare function buildSourceContext(opts: BuildSourceContextOptions): Promise<{
44
+ source: SourceContext;
45
+ manifest: SiteManifest;
46
+ targetConfigs: Record<string, TargetConfig>;
47
+ }>;
48
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/cli/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,QAAQ,EAAE,YAAY,CAAA;IACtB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC3C,oFAAoF;IACpF,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAe5F;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAA;IACtB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,mBAAmB,CAAA;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC;IACjF,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,YAAY,CAAA;IACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAC5C,CAAC,CAsDD"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared bootstrap helpers for CLI commands and the dev server admin bootstrap.
3
+ *
4
+ * Responsibility: read site.yaml from the project site directory, build a
5
+ * TargetRegistry from its targets, and derive a SourceContext pointing at
6
+ * the default editable target. Callers compose these primitives; the admin
7
+ * API and `createApp` runtime take over from there.
8
+ */
9
+ import { join } from 'node:path';
10
+ import { readFileSync } from 'node:fs';
11
+ import yaml from 'js-yaml';
12
+ import { createTargetRegistry, createTargetRegistryView } from '../targets.js';
13
+ import { createSourceContextFromRegistry } from '../admin-api/source-context.js';
14
+ /**
15
+ * Read site.yaml, initialize all targets, and return a TargetRegistry view.
16
+ * Throws if site.yaml is missing or has no targets declared.
17
+ */
18
+ export async function bootstrapFromSiteYaml(projectSiteDir) {
19
+ const siteYamlPath = join(projectSiteDir, 'site.yaml');
20
+ const manifest = yaml.load(readFileSync(siteYamlPath, 'utf-8'));
21
+ const targetConfigs = manifest.targets ?? {};
22
+ if (Object.keys(targetConfigs).length === 0) {
23
+ throw new Error(`No targets declared in ${siteYamlPath}. At least one target is required — ` +
24
+ `add a local target:\n\ntargets:\n local:\n storage:\n type: filesystem\n`);
25
+ }
26
+ const providers = await createTargetRegistry(targetConfigs, projectSiteDir);
27
+ const registry = createTargetRegistryView(providers, targetConfigs);
28
+ return { manifest, targetConfigs, registry };
29
+ }
30
+ /**
31
+ * High-level: read site.yaml, init only the chosen editable target, return a
32
+ * SourceContext and metadata. Cloud/remote targets are not initialized —
33
+ * callers that need them (publish, fetch, compare) init on demand.
34
+ *
35
+ * Rationale: validate and dev-bootstrap only need the source (editable local)
36
+ * target; initializing cloud targets upfront adds seconds of latency and
37
+ * surfaces spurious failures when credentials aren't configured.
38
+ */
39
+ export async function buildSourceContext(opts) {
40
+ const siteYamlPath = join(opts.projectSiteDir, 'site.yaml');
41
+ const manifest = opts.manifest ?? yaml.load(readFileSync(siteYamlPath, 'utf-8'));
42
+ const targetConfigs = manifest.targets ?? {};
43
+ if (Object.keys(targetConfigs).length === 0) {
44
+ throw new Error(`No targets declared in ${siteYamlPath}. At least one target is required — ` +
45
+ `add a local target:\n\ntargets:\n local:\n storage:\n type: filesystem\n`);
46
+ }
47
+ // Pick the editable target (explicit override or first editable in declaration order).
48
+ const { isEditable } = await import('../types.js');
49
+ const editableNames = Object.entries(targetConfigs)
50
+ .filter(([, cfg]) => isEditable(cfg))
51
+ .map(([n]) => n);
52
+ if (editableNames.length === 0) {
53
+ throw new Error(`No editable target in ${siteYamlPath}. Add one:\n\n` +
54
+ `targets:\n local:\n storage:\n type: filesystem\n`);
55
+ }
56
+ const targetName = opts.targetName ?? editableNames[0];
57
+ const config = targetConfigs[targetName];
58
+ if (!config) {
59
+ const { UnknownTargetError } = await import('../targets.js');
60
+ throw new UnknownTargetError(targetName);
61
+ }
62
+ if (!isEditable(config)) {
63
+ throw new Error(`Target "${targetName}" is not editable`);
64
+ }
65
+ // Init only the chosen target's provider.
66
+ const { createStorageProvider } = await import('../targets.js');
67
+ const storage = await createStorageProvider(config.storage, opts.projectSiteDir, targetName);
68
+ const initProvider = storage;
69
+ if (typeof initProvider.init === 'function') {
70
+ await initProvider.init();
71
+ }
72
+ // Build a single-target view; callers that need cross-target access call
73
+ // bootstrapFromSiteYaml() instead (or use admin-api's lazy target init).
74
+ const singleTargetProviders = new Map([[targetName, storage]]);
75
+ const registry = createTargetRegistryView(singleTargetProviders, targetConfigs);
76
+ const source = createSourceContextFromRegistry({
77
+ registry,
78
+ targetName,
79
+ projectSiteDir: opts.projectSiteDir,
80
+ sidecarWriter: opts.sidecarWriter,
81
+ manifest,
82
+ });
83
+ return { source, manifest, targetConfigs };
84
+ }
85
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/cli/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CLI history commands.
3
+ *
4
+ * gazetta history [target] — list revisions, newest first
5
+ * gazetta undo [target] — restore the revision just before
6
+ * head (the "undo last write" shortcut)
7
+ * gazetta rollback <rev> [target] — restore an arbitrary revision by id
8
+ *
9
+ * All three reuse the admin-api's HistoryProvider + restoreRevision —
10
+ * CLI and web surface the same operations. SRP: this file glues the
11
+ * CLI to the core; no new domain logic.
12
+ *
13
+ * Destructive ops (undo, rollback) prompt for confirmation on prod
14
+ * targets when running interactively. `CI=true` disables the prompt
15
+ * and fails if `--yes` wasn't passed.
16
+ */
17
+ import type { TargetConfig } from '../types.js';
18
+ /** Shared context passed to every command handler. */
19
+ export interface HistoryCommandContext {
20
+ siteDir: string;
21
+ targetName: string;
22
+ config: TargetConfig;
23
+ }
24
+ /**
25
+ * `gazetta history [target]` — print the revision list, newest first.
26
+ */
27
+ export declare function runHistoryList(ctx: HistoryCommandContext, opts?: {
28
+ limit?: number;
29
+ }): Promise<void>;
30
+ /**
31
+ * `gazetta undo [target]` — restore the revision just before head.
32
+ * Needs at least two revisions (baseline + one write). Records a
33
+ * forward rollback.
34
+ */
35
+ export declare function runHistoryUndo(ctx: HistoryCommandContext, opts?: {
36
+ yes?: boolean;
37
+ }): Promise<void>;
38
+ /**
39
+ * `gazetta rollback <rev> [target]` — restore an arbitrary revision.
40
+ * Records a forward rollback.
41
+ */
42
+ export declare function runHistoryRollback(ctx: HistoryCommandContext, revisionId: string, opts?: {
43
+ yes?: boolean;
44
+ }): Promise<void>;
45
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;CACrB;AA0CD;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7G;AA0BD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5G;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,qBAAqB,EAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * CLI history commands.
3
+ *
4
+ * gazetta history [target] — list revisions, newest first
5
+ * gazetta undo [target] — restore the revision just before
6
+ * head (the "undo last write" shortcut)
7
+ * gazetta rollback <rev> [target] — restore an arbitrary revision by id
8
+ *
9
+ * All three reuse the admin-api's HistoryProvider + restoreRevision —
10
+ * CLI and web surface the same operations. SRP: this file glues the
11
+ * CLI to the core; no new domain logic.
12
+ *
13
+ * Destructive ops (undo, rollback) prompt for confirmation on prod
14
+ * targets when running interactively. `CI=true` disables the prompt
15
+ * and fails if `--yes` wasn't passed.
16
+ */
17
+ import { createInterface } from 'node:readline/promises';
18
+ import { createHistoryProvider } from '../history-provider.js';
19
+ import { restoreRevision } from '../history-restorer.js';
20
+ import { createContentRoot } from '../content-root.js';
21
+ import { isHistoryEnabled, getHistoryRetention, getEnvironment } from '../types.js';
22
+ /** Format an ISO timestamp as "Apr 16, 2026 · 11:05" for humans. */
23
+ function formatTimestamp(iso) {
24
+ const d = new Date(iso);
25
+ return d
26
+ .toLocaleString('en-US', {
27
+ month: 'short',
28
+ day: 'numeric',
29
+ year: 'numeric',
30
+ hour: '2-digit',
31
+ minute: '2-digit',
32
+ hour12: false,
33
+ })
34
+ .replace(',', ' ·');
35
+ }
36
+ /** Abbreviate an items list for single-line display. */
37
+ function formatItems(items) {
38
+ if (items.length === 0)
39
+ return '(none)';
40
+ if (items.length <= 3)
41
+ return items.join(', ');
42
+ return `${items.slice(0, 3).join(', ')} + ${items.length - 3} more`;
43
+ }
44
+ /**
45
+ * Buid a HistoryProvider for the given target. Throws with a friendly
46
+ * message when history is disabled — prevents the CLI from silently
47
+ * returning an empty list for a target the user explicitly targeted.
48
+ */
49
+ async function buildHistory(ctx) {
50
+ if (!isHistoryEnabled(ctx.config)) {
51
+ throw new Error(`History disabled on target "${ctx.targetName}" (site.yaml: history.enabled: false)`);
52
+ }
53
+ const { createStorageProvider } = await import('../targets.js');
54
+ const storage = await createStorageProvider(ctx.config.storage, ctx.siteDir, ctx.targetName);
55
+ const maybeInit = storage;
56
+ if (typeof maybeInit.init === 'function')
57
+ await maybeInit.init();
58
+ const history = createHistoryProvider({ storage, retention: getHistoryRetention(ctx.config) });
59
+ const contentRoot = createContentRoot(storage);
60
+ return { history, contentRoot, storage };
61
+ }
62
+ /**
63
+ * `gazetta history [target]` — print the revision list, newest first.
64
+ */
65
+ export async function runHistoryList(ctx, opts = {}) {
66
+ const { history } = await buildHistory(ctx);
67
+ const revisions = await history.listRevisions(opts.limit ?? 50);
68
+ if (revisions.length === 0) {
69
+ console.log(`\n No revisions on "${ctx.targetName}" yet. Saves and publishes will record here.\n`);
70
+ return;
71
+ }
72
+ console.log(`\n History — ${ctx.targetName} (${revisions.length} revision${revisions.length === 1 ? '' : 's'})\n`);
73
+ for (const rev of revisions) {
74
+ const op = rev.operation.padEnd(8);
75
+ const time = formatTimestamp(rev.timestamp);
76
+ const suffix = rev.source ? ` (from ${rev.source})` : '';
77
+ const message = rev.message ? ` — ${rev.message}` : '';
78
+ console.log(` ${rev.id} ${op} ${time}${suffix}${message}`);
79
+ console.log(` items: ${formatItems(rev.items)}`);
80
+ }
81
+ console.log();
82
+ }
83
+ async function confirm(prompt) {
84
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
85
+ try {
86
+ const ans = (await rl.question(`${prompt} [y/N] `)).trim().toLowerCase();
87
+ return ans === 'y' || ans === 'yes';
88
+ }
89
+ finally {
90
+ rl.close();
91
+ }
92
+ }
93
+ /**
94
+ * Production targets require explicit confirmation. In CI (`CI=true`)
95
+ * the only way to confirm is `--yes` — we never prompt a non-tty.
96
+ */
97
+ async function confirmDestructive(ctx, action, flagYes) {
98
+ const isProd = getEnvironment(ctx.config) === 'production';
99
+ if (!isProd)
100
+ return true;
101
+ if (flagYes)
102
+ return true;
103
+ if (process.env.CI) {
104
+ throw new Error(`${action} on production target "${ctx.targetName}" in CI requires --yes to proceed`);
105
+ }
106
+ return confirm(` ${action} on production target "${ctx.targetName}" — continue?`);
107
+ }
108
+ /**
109
+ * `gazetta undo [target]` — restore the revision just before head.
110
+ * Needs at least two revisions (baseline + one write). Records a
111
+ * forward rollback.
112
+ */
113
+ export async function runHistoryUndo(ctx, opts = {}) {
114
+ const { history, contentRoot } = await buildHistory(ctx);
115
+ const recent = await history.listRevisions(2);
116
+ if (recent.length < 2) {
117
+ throw new Error(`Nothing to undo — no prior revision on "${ctx.targetName}"`);
118
+ }
119
+ const [head, prior] = recent;
120
+ const proceed = await confirmDestructive(ctx, 'Undo', !!opts.yes);
121
+ if (!proceed) {
122
+ console.log(' Cancelled.');
123
+ return;
124
+ }
125
+ const restored = await restoreRevision({
126
+ history,
127
+ contentRoot,
128
+ revisionId: prior.id,
129
+ message: `Undo ${head.operation} (rev ${head.id})`,
130
+ });
131
+ console.log(`\n ✓ Undone. ${ctx.targetName} is now at ${prior.id} (${prior.operation} @ ${formatTimestamp(prior.timestamp)})`);
132
+ console.log(` Forward revision: ${restored.id}\n`);
133
+ }
134
+ /**
135
+ * `gazetta rollback <rev> [target]` — restore an arbitrary revision.
136
+ * Records a forward rollback.
137
+ */
138
+ export async function runHistoryRollback(ctx, revisionId, opts = {}) {
139
+ if (!revisionId)
140
+ throw new Error('rollback: missing revision id (pass as positional, e.g. gazetta rollback rev-1776337441608)');
141
+ const { history, contentRoot } = await buildHistory(ctx);
142
+ // Fail early if the revision doesn't exist — readRevision gives a
143
+ // clear ENOENT-style error otherwise, but we can frame it better here.
144
+ let target;
145
+ try {
146
+ target = await history.readRevision(revisionId);
147
+ }
148
+ catch {
149
+ throw new Error(`Unknown revision "${revisionId}" on target "${ctx.targetName}"`);
150
+ }
151
+ const proceed = await confirmDestructive(ctx, `Rollback to ${revisionId}`, !!opts.yes);
152
+ if (!proceed) {
153
+ console.log(' Cancelled.');
154
+ return;
155
+ }
156
+ const restored = await restoreRevision({
157
+ history,
158
+ contentRoot,
159
+ revisionId,
160
+ message: `Rollback to ${revisionId}`,
161
+ });
162
+ console.log(`\n ✓ Rolled back. ${ctx.targetName} is now at ${revisionId} (${target.operation} @ ${formatTimestamp(target.timestamp)})`);
163
+ console.log(` Forward revision: ${restored.id}\n`);
164
+ }
165
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"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"}