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
@@ -1,31 +1,48 @@
1
1
  import { Hono } from 'hono';
2
2
  import { streamSSE } from 'hono/streaming';
3
- import { getPublishMode, getEnvironment } from '../../types.js';
4
- import { publishItems, resolveDependencies } from '../../publish.js';
5
- import { publishPageRendered, publishPageStatic, publishFragmentRendered, publishSiteManifest, publishFragmentIndex, createCloudflarePurge, lookupCloudflareZoneId } from '../../publish-rendered.js';
6
- import { loadSite } from '../../site-loader.js';
3
+ import { getType, getEnvironment, isEditable, isHistoryEnabled, getHistoryRetention } from '../../types.js';
4
+ import { publishItems, resolveDependencies, findFragmentDependents, findDependentsFromSidecars } from '../../publish.js';
5
+ import { mapLimitStream } from '../../concurrency.js';
6
+ import { publishPageStatic, publishSiteManifest, publishFragmentIndex, createCloudflarePurge, lookupCloudflareZoneId, } from '../../publish-rendered.js';
7
+ import { loadSiteFromSource } from '../source-context.js';
8
+ import { publishPageAllLocales, publishFragmentAllLocales } from '../../publish-locale.js';
7
9
  import { resolveEnvVars } from '../../targets.js';
8
10
  import { scanTemplates, templateHashesFrom } from '../../templates-scan.js';
9
11
  import { hashManifest } from '../../hash.js';
10
- export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConfigs, templatesDir) {
12
+ import { createContentRoot } from '../../content-root.js';
13
+ import { createHistoryProvider } from '../../history-provider.js';
14
+ import { recordWrite } from '../../history-recorder.js';
15
+ export function publishRoutes(resolve, preInitTargets, targetConfigs, templatesDir,
16
+ // Optional injected scanner — the admin-api server memoizes it and
17
+ // clears the cache via its template file watcher. Default: fresh scan
18
+ // on every call (used by the CLI and tests).
19
+ scanTemplatesInjected) {
20
+ const scan = scanTemplatesInjected ?? scanTemplates;
11
21
  const app = new Hono();
12
- // Background target initialization
22
+ // Background target initialization — lazy, needs the resolved source's
23
+ // projectSiteDir to resolve filesystem target paths. We call resolve()
24
+ // once with undefined (→ default editable) to obtain projectSiteDir.
13
25
  let targets = preInitTargets ?? null;
14
- const initPromise = preInitTargets
15
- ? Promise.resolve(preInitTargets)
16
- : (!targetConfigs || Object.keys(targetConfigs).length === 0)
17
- ? Promise.resolve(new Map())
18
- : (async () => {
19
- const { createTargetRegistry } = await import('../../targets.js');
20
- targets = await createTargetRegistry(targetConfigs, siteDir);
21
- return targets;
22
- })();
23
- if (!preInitTargets) {
24
- initPromise.then(t => { targets = t; }).catch(() => { targets = new Map(); });
25
- }
26
+ let initPromise = null;
26
27
  async function getTargets() {
27
28
  if (targets)
28
29
  return targets;
30
+ if (!targetConfigs || Object.keys(targetConfigs).length === 0) {
31
+ targets = new Map();
32
+ return targets;
33
+ }
34
+ if (!initPromise) {
35
+ initPromise = (async () => {
36
+ const { createTargetRegistry } = await import('../../targets.js');
37
+ const bootstrapSource = await resolve(undefined);
38
+ const t = await createTargetRegistry(targetConfigs, bootstrapSource.projectSiteDir);
39
+ targets = t;
40
+ return t;
41
+ })().catch(() => {
42
+ targets = new Map();
43
+ return targets;
44
+ });
45
+ }
29
46
  return initPromise;
30
47
  }
31
48
  function getTargetConfig(name) {
@@ -35,9 +52,76 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
35
52
  const t = await getTargets();
36
53
  return c.json([...t.keys()].map(name => {
37
54
  const cfg = getTargetConfig(name);
38
- return { name, environment: cfg ? getEnvironment(cfg) : 'local' };
55
+ return {
56
+ name,
57
+ environment: cfg ? getEnvironment(cfg) : 'local',
58
+ type: cfg ? getType(cfg) : 'static',
59
+ editable: cfg ? isEditable(cfg) : true,
60
+ };
39
61
  }));
40
62
  });
63
+ /**
64
+ * Reverse-dependency lookup for publish UI impact preview.
65
+ * GET /api/dependents?item=fragments/header[&target=staging]
66
+ * → { pages: string[], fragments: string[] }
67
+ *
68
+ * Without `target`: scans local source manifests (authoritative for the
69
+ * current draft state — what's about to be published). Slow-ish on very
70
+ * large sites since it reads every manifest.
71
+ *
72
+ * With `target`: uses published .uses-* / .tpl-* sidecars on that target.
73
+ * Listings only, no content reads — scales to 10k+ items at the cost of
74
+ * reflecting only what's been published (not unsaved local changes).
75
+ * Useful for answering "what pages would need republish if this fragment
76
+ * changed" on large sites.
77
+ */
78
+ app.get('/api/dependents', async (c) => {
79
+ const item = c.req.query('item');
80
+ if (!item || !item.startsWith('fragments/')) {
81
+ return c.json({ error: 'Missing or invalid "item" query (must be fragments/<name>)' }, 400);
82
+ }
83
+ const fragmentName = item.slice('fragments/'.length);
84
+ // `target` — specific published target's sidecars (read-only listing).
85
+ // Useful for "what would need republish on staging?" queries
86
+ // where sidecars reflect the last publish, not the draft.
87
+ // `source` — the editable source target (authoritative for the draft).
88
+ // When target === source (common case: client sends the
89
+ // active editable target), route through source so the
90
+ // sidecar writer can backfill missing entries.
91
+ const targetName = c.req.query('target');
92
+ const sourceName = c.req.query('source');
93
+ try {
94
+ const source = await resolve(sourceName);
95
+ // Treat `target=local` (the active editable target) the same as no
96
+ // target — the source path is the authoritative one for the draft,
97
+ // and it's the only path that knows how to backfill sidecars on a
98
+ // fresh dev server.
99
+ const isTargetTheSource = !targetName || targetName === source.targetName;
100
+ if (!isTargetTheSource) {
101
+ const t = await getTargets();
102
+ const targetStorage = t.get(targetName);
103
+ if (!targetStorage)
104
+ return c.json({ error: `Unknown target: ${targetName}` }, 400);
105
+ const result = await findDependentsFromSidecars(createContentRoot(targetStorage), { fragment: fragmentName });
106
+ return c.json(result);
107
+ }
108
+ // Source-side path: ensure every item has a sidecar before reading.
109
+ // The writer memoizes the backfill — concurrent tree badges on a
110
+ // fresh dev server share one pass instead of racing to an empty index.
111
+ const sidecarWriter = source.sidecarWriter;
112
+ if (sidecarWriter) {
113
+ await sidecarWriter.ensureBackfilled();
114
+ const result = await findDependentsFromSidecars(source.contentRoot, { fragment: fragmentName });
115
+ return c.json(result);
116
+ }
117
+ // No writer injected (legacy setup) — fall back to the manifest walker.
118
+ const result = await findFragmentDependents(source.contentRoot, fragmentName);
119
+ return c.json(result);
120
+ }
121
+ catch (err) {
122
+ return c.json({ error: err.message }, 500);
123
+ }
124
+ });
41
125
  /**
42
126
  * Run a publish, yielding progress events. Both the synchronous
43
127
  * /api/publish route and the streaming /api/publish/stream route consume
@@ -48,7 +132,7 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
48
132
  * Pre-flight validation (unknown targets, invalid templates) is reported as
49
133
  * 'fatal' before any 'target-start' event so callers can map to a 4xx.
50
134
  */
51
- async function* runPublish(items, targetNames) {
135
+ async function* runPublish(items, targetNames, sourceName) {
52
136
  if (!items?.length) {
53
137
  yield { kind: 'fatal', error: 'No items specified' };
54
138
  return;
@@ -57,6 +141,16 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
57
141
  yield { kind: 'fatal', error: 'No targets specified' };
58
142
  return;
59
143
  }
144
+ // Resolve the source editable target for this publish run.
145
+ let source;
146
+ try {
147
+ source = await resolve(sourceName);
148
+ }
149
+ catch (err) {
150
+ yield { kind: 'fatal', error: err.message };
151
+ return;
152
+ }
153
+ const { projectSiteDir } = source;
60
154
  const t = await getTargets();
61
155
  for (const name of targetNames) {
62
156
  if (!t.has(name)) {
@@ -64,13 +158,13 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
64
158
  return;
65
159
  }
66
160
  }
67
- const allItems = await resolveDependencies(sourceStorage, siteDir, items);
161
+ const allItems = await resolveDependencies(source.contentRoot, items);
68
162
  console.log(` Publishing to ${targetNames.length} target(s):`);
69
163
  console.log(` Items: ${items.join(', ')} (+ ${allItems.length - items.length} dependencies)`);
70
164
  console.log(` Targets: ${targetNames.join(', ')}`);
71
- const tdir = templatesDir ?? `${siteDir}/templates`;
72
- const projectRoot = siteDir.replace(/\/sites\/[^/]+$/, '');
73
- const templateInfos = await scanTemplates(tdir, projectRoot);
165
+ const tdir = templatesDir ?? `${projectSiteDir}/templates`;
166
+ const projectRoot = projectSiteDir.replace(/\/sites\/[^/]+$/, '');
167
+ const templateInfos = await scan(tdir, projectRoot);
74
168
  const invalidTpls = templateInfos.filter(t => !t.valid);
75
169
  if (invalidTpls.length) {
76
170
  yield {
@@ -81,78 +175,181 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
81
175
  return;
82
176
  }
83
177
  const templateHashes = templateHashesFrom(templateInfos);
84
- const site = await loadSite({ siteDir, storage: sourceStorage, templatesDir: tdir });
178
+ const site = await loadSiteFromSource(source, { templatesDir: tdir });
85
179
  yield { kind: 'start', targets: targetNames, itemsPerTarget: allItems.length };
86
180
  const results = [];
87
181
  for (const targetName of targetNames) {
88
182
  const targetStorage = t.get(targetName);
89
183
  const config = getTargetConfig(targetName);
90
- const isStatic = config ? getPublishMode(config) === 'static' : true;
184
+ const isStatic = config ? getType(config) === 'static' : true;
91
185
  const purgeConfig = config?.cache?.purge;
186
+ // Static mode bakes fragments into pages at publish time — if the user
187
+ // picked @header, we must also republish every page that uses it.
188
+ // Expand per-target so ESI targets still get the narrow item set.
189
+ let targetItems = allItems;
190
+ if (isStatic) {
191
+ const fragmentItems = items.filter(i => i.startsWith('fragments/'));
192
+ if (fragmentItems.length) {
193
+ const expanded = new Set(allItems);
194
+ for (const frag of fragmentItems) {
195
+ const name = frag.replace('fragments/', '');
196
+ const deps = await findFragmentDependents(source.contentRoot, name);
197
+ for (const p of deps.pages)
198
+ expanded.add(`pages/${p}`);
199
+ }
200
+ targetItems = [...expanded];
201
+ }
202
+ }
92
203
  // Step count: source-copy + per-item render + manifest+index + (purge?)
93
- const total = 1 + allItems.length + 1 + (purgeConfig?.type === 'cloudflare' ? 1 : 0);
204
+ const total = 1 + targetItems.length + 1 + (purgeConfig?.type === 'cloudflare' ? 1 : 0);
94
205
  yield { kind: 'target-start', target: targetName, total };
95
206
  let current = 0;
96
207
  try {
97
208
  let totalFiles = 0;
209
+ const targetRoot = createContentRoot(targetStorage);
210
+ // History must record BEFORE the writes so the baseline
211
+ // revision (emitted automatically by recordWrite on the first
212
+ // call against this target) captures pre-publish state.
213
+ // Otherwise "undo this publish" would restore the post-
214
+ // publish state and no-op. See pages.ts save handler.
215
+ if (config && isHistoryEnabled(config)) {
216
+ try {
217
+ const history = createHistoryProvider({
218
+ storage: targetStorage,
219
+ retention: getHistoryRetention(config),
220
+ });
221
+ const items = await collectPublishedItemsForHistory(source.contentRoot, targetRoot, targetItems);
222
+ await recordWrite({
223
+ history,
224
+ contentRoot: targetRoot,
225
+ operation: 'publish',
226
+ source: sourceName,
227
+ items,
228
+ });
229
+ }
230
+ catch (err) {
231
+ // History is a best-effort audit layer — a write failure
232
+ // here must not break the publish itself.
233
+ console.warn(` ${targetName}: history record failed — ${err.message}`);
234
+ }
235
+ }
98
236
  // 1. Source copy
99
- const { copiedFiles } = await publishItems(sourceStorage, siteDir, targetStorage, '', allItems);
237
+ const { copiedFiles } = await publishItems(source.contentRoot, targetRoot, targetItems);
100
238
  totalFiles += copiedFiles;
101
239
  current++;
102
240
  yield { kind: 'progress', target: targetName, current, total, label: 'source files' };
103
- // 2. Render each item
104
- for (const item of allItems) {
241
+ // 2. Render items in bounded parallel. Progress events are yielded
242
+ // in completion order the UI shows X/N + whatever finished last,
243
+ // which stays meaningful without needing input-order. Preserves the
244
+ // event contract: one 'progress' per item between 'target-start'
245
+ // and 'target-result'.
246
+ // Static-mode page hashes must include fragment hashes (a fragment
247
+ // change invalidates every page that bakes it in). Matches the
248
+ // combination used by compareTargets.
249
+ const fragmentHashes = new Map();
250
+ if (isStatic) {
251
+ for (const [fragName, frag] of site.fragments) {
252
+ fragmentHashes.set(fragName, hashManifest(frag, { templateHashes }));
253
+ }
254
+ }
255
+ const pageHashOpts = isStatic ? { templateHashes, fragmentHashes } : { templateHashes };
256
+ // SEO context for this target — built once, shared across all page renders.
257
+ const seo = {
258
+ siteName: site.manifest.name,
259
+ siteUrl: config?.siteUrl,
260
+ locale: site.manifest.locale,
261
+ defaultOgImage: site.manifest.defaultOgImage,
262
+ };
263
+ const renderItem = async (item) => {
105
264
  if (item.startsWith('pages/')) {
106
- const pageName = item.replace('pages/', '');
265
+ const raw = item.replace('pages/', '');
266
+ // Support locale-qualified items: pages/home:fr → publish only FR
267
+ const [pageName, itemLocale] = raw.includes(':') ? raw.split(':') : [raw, undefined];
107
268
  const page = site.pages.get(pageName);
108
- const manifestHash = page ? hashManifest(page, { templateHashes }) : undefined;
269
+ const manifestHash = page ? hashManifest(page, pageHashOpts) : undefined;
109
270
  if (isStatic) {
110
- const { files } = await publishPageStatic(pageName, sourceStorage, siteDir, targetStorage, tdir, manifestHash);
111
- totalFiles += files;
112
- }
113
- else {
114
- const { files } = await publishPageRendered(pageName, sourceStorage, siteDir, targetStorage, config?.cache, tdir, manifestHash);
115
- totalFiles += files;
271
+ return publishPageStatic(pageName, source.contentRoot, targetStorage, tdir, manifestHash, site, seo, itemLocale);
116
272
  }
273
+ // When a specific locale is requested, only publish that one
274
+ const onlyLocales = itemLocale ? [itemLocale] : undefined;
275
+ const { files } = await publishPageAllLocales(pageName, source.contentRoot, targetStorage, site, pageHashOpts, { cache: config?.cache, templatesDir: tdir, seo, targetLocales: onlyLocales ?? config?.locales });
276
+ return { files };
117
277
  }
118
- else if (item.startsWith('fragments/')) {
119
- if (!isStatic) {
120
- const fragName = item.replace('fragments/', '');
121
- const frag = site.fragments.get(fragName);
122
- const manifestHash = frag ? hashManifest(frag, { templateHashes }) : undefined;
123
- const { files } = await publishFragmentRendered(fragName, sourceStorage, siteDir, targetStorage, tdir, manifestHash);
124
- totalFiles += files;
125
- }
278
+ if (item.startsWith('fragments/') && !isStatic) {
279
+ const raw = item.replace('fragments/', '');
280
+ const [fragName, itemLocale] = raw.includes(':') ? raw.split(':') : [raw, undefined];
281
+ const onlyLocales = itemLocale ? [itemLocale] : undefined;
282
+ const { files } = await publishFragmentAllLocales(fragName, source.contentRoot, targetStorage, site, { templateHashes }, { templatesDir: tdir, targetLocales: onlyLocales ?? config?.locales });
283
+ return { files };
126
284
  }
285
+ return { files: 0 }; // skipped (e.g. fragment on static target)
286
+ };
287
+ // Render concurrency is lower than listing concurrency — each render
288
+ // may do multiple writes, so 10 in flight is the safe default.
289
+ for await (const { item, result } of mapLimitStream(targetItems, renderItem, 10)) {
290
+ totalFiles += result.files;
127
291
  current++;
128
292
  yield { kind: 'progress', target: targetName, current, total, label: item };
129
293
  }
130
294
  // 3. Site manifest + fragment index
131
- await publishSiteManifest(sourceStorage, siteDir, targetStorage);
132
- await publishFragmentIndex(sourceStorage, siteDir, targetStorage);
295
+ await publishSiteManifest(source.contentRoot, targetStorage, site);
296
+ await publishFragmentIndex(source.contentRoot, targetStorage, site);
133
297
  totalFiles += 2;
134
298
  current++;
135
299
  yield { kind: 'progress', target: targetName, current, total, label: 'site manifest' };
300
+ // 3b. Sitemap + robots.txt
301
+ const siteUrl = config?.siteUrl;
302
+ if (siteUrl) {
303
+ const { listSidecars } = await import('../../sidecars.js');
304
+ const { generateSitemap } = await import('../../sitemap.js');
305
+ const { generateRobotsTxt } = await import('../../robots.js');
306
+ const targetPageSidecars = await listSidecars(targetStorage, 'pages');
307
+ const sitemapXml = generateSitemap({
308
+ siteUrl,
309
+ pages: targetPageSidecars,
310
+ systemPages: site.manifest.systemPages,
311
+ });
312
+ if (sitemapXml) {
313
+ await targetStorage.writeFile('sitemap.xml', sitemapXml);
314
+ totalFiles++;
315
+ }
316
+ // robots.txt only at domain root — Google ignores it at subpaths.
317
+ const isRootDeploy = !new URL(siteUrl).pathname.replace(/\/+$/, '');
318
+ if (isRootDeploy) {
319
+ let robotsTxt;
320
+ try {
321
+ robotsTxt = await source.contentRoot.storage.readFile(source.contentRoot.path('robots.txt'));
322
+ }
323
+ catch {
324
+ robotsTxt = generateRobotsTxt({ siteUrl });
325
+ }
326
+ await targetStorage.writeFile('robots.txt', robotsTxt);
327
+ totalFiles++;
328
+ }
329
+ }
136
330
  // 4. Purge CDN cache
137
331
  if (purgeConfig?.type === 'cloudflare') {
138
332
  const apiToken = resolveEnvVars(purgeConfig.apiToken);
139
- const zoneId = resolveEnvVars(purgeConfig.zoneId) ?? (config?.siteUrl && apiToken ? await lookupCloudflareZoneId(config.siteUrl, apiToken) : null);
333
+ const zoneId = resolveEnvVars(purgeConfig.zoneId) ??
334
+ (config?.siteUrl && apiToken ? await lookupCloudflareZoneId(config.siteUrl, apiToken) : null);
140
335
  if (apiToken && zoneId) {
141
336
  const purge = createCloudflarePurge(zoneId, apiToken);
142
- const hasFragments = allItems.some(i => i.startsWith('fragments/'));
337
+ const hasFragments = targetItems.some(i => i.startsWith('fragments/'));
143
338
  if (hasFragments) {
144
339
  await purge.purgeAll();
145
340
  console.log(` ${targetName}: cache purged (all)`);
146
341
  }
147
342
  else if (config?.siteUrl) {
148
- const siteForUrls = await loadSite({ siteDir, storage: sourceStorage, templatesDir });
149
- const urls = allItems
150
- .filter(i => i.startsWith('pages/'))
151
- .map(i => {
152
- const page = siteForUrls.pages.get(i.replace('pages/', ''));
153
- return page ? `${config.siteUrl}${page.route}` : null;
154
- })
155
- .filter(Boolean);
343
+ const siteForUrls = await loadSiteFromSource(source, { templatesDir });
344
+ const publishedPageNames = new Set(targetItems.filter(i => i.startsWith('pages/')).map(i => i.replace('pages/', '')));
345
+ // Collect URLs for all published pages including locale variants
346
+ const urls = [];
347
+ const { allPageEntries } = await import('../../site-loader.js');
348
+ for (const { name, page } of allPageEntries(siteForUrls)) {
349
+ if (publishedPageNames.has(name)) {
350
+ urls.push(`${config.siteUrl}${page.route}`);
351
+ }
352
+ }
156
353
  if (urls.length > 0) {
157
354
  await purge.purgeUrls(urls);
158
355
  console.log(` ${targetName}: cache purged (${urls.join(', ')})`);
@@ -178,10 +375,10 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
178
375
  yield { kind: 'done', results };
179
376
  }
180
377
  app.post('/api/publish', async (c) => {
181
- const body = await c.req.json();
378
+ const body = (await c.req.json());
182
379
  let results = [];
183
380
  let fatal = null;
184
- for await (const ev of runPublish(body.items, body.targets)) {
381
+ for await (const ev of runPublish(body.items, body.targets, body.source)) {
185
382
  if (ev.kind === 'fatal')
186
383
  fatal = ev;
187
384
  else if (ev.kind === 'done')
@@ -195,10 +392,10 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
195
392
  return c.json({ results }, allSuccess ? 200 : 207);
196
393
  });
197
394
  app.post('/api/publish/stream', async (c) => {
198
- const body = await c.req.json();
395
+ const body = (await c.req.json());
199
396
  return streamSSE(c, async (stream) => {
200
397
  try {
201
- for await (const ev of runPublish(body.items, body.targets)) {
398
+ for await (const ev of runPublish(body.items, body.targets, body.source)) {
202
399
  if (stream.aborted)
203
400
  return;
204
401
  await stream.writeSSE({ event: ev.kind, data: JSON.stringify(ev) });
@@ -206,19 +403,33 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
206
403
  }
207
404
  catch (err) {
208
405
  if (!stream.aborted) {
209
- await stream.writeSSE({ event: 'fatal', data: JSON.stringify({ kind: 'fatal', error: err.message }) });
406
+ await stream.writeSSE({
407
+ event: 'fatal',
408
+ data: JSON.stringify({ kind: 'fatal', error: err.message }),
409
+ });
210
410
  }
211
411
  }
212
412
  });
213
413
  });
214
414
  app.post('/api/fetch', async (c) => {
215
- const body = await c.req.json();
415
+ // `source` (body) target to fetch FROM (a published target)
416
+ // `destination` (body) — optional editable target to write INTO; defaults
417
+ // to the resolver's default editable target (the author's current source)
418
+ const body = (await c.req.json());
216
419
  if (!body.source)
217
420
  return c.json({ error: 'Missing "source" target name' }, 400);
218
421
  const t = await getTargets();
219
422
  const targetStorage = t.get(body.source);
220
423
  if (!targetStorage)
221
424
  return c.json({ error: `Unknown target: ${body.source}` }, 400);
425
+ // Resolve the destination editable target for this fetch.
426
+ let destination;
427
+ try {
428
+ destination = await resolve(body.destination);
429
+ }
430
+ catch (err) {
431
+ return c.json({ error: err.message }, 400);
432
+ }
222
433
  let items;
223
434
  if (body.items?.length) {
224
435
  items = body.items;
@@ -257,7 +468,8 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
257
468
  console.log(` Fetching ${items.length} items from "${body.source}":`);
258
469
  console.log(` Items: ${items.join(', ')}`);
259
470
  try {
260
- const { copiedFiles } = await publishItems(targetStorage, '', sourceStorage, siteDir, items);
471
+ const targetRoot = createContentRoot(targetStorage);
472
+ const { copiedFiles } = await publishItems(targetRoot, destination.contentRoot, items);
261
473
  console.log(` ${copiedFiles} files copied to working copy`);
262
474
  return c.json({ success: true, copiedFiles, items });
263
475
  }
@@ -269,4 +481,33 @@ export function publishRoutes(siteDir, sourceStorage, preInitTargets, targetConf
269
481
  });
270
482
  return app;
271
483
  }
484
+ /**
485
+ * Build the history `items` for a publish — one entry per published
486
+ * item, content = the source-side manifest. Records semantic authored
487
+ * state (JSON manifests) rather than target-side artifacts (static
488
+ * HTML, fragment indexes), so Restore is a content-level operation.
489
+ *
490
+ * `_targetRoot` is accepted for symmetry with `recordWrite`'s other
491
+ * path-building needs; it's unused today because we hash source
492
+ * content directly and let recordWrite overlay paths relative to the
493
+ * target's rootPath (which is `''` for target-rooted storage, the
494
+ * common case).
495
+ */
496
+ async function collectPublishedItemsForHistory(sourceRoot, _targetRoot, publishedItems) {
497
+ const out = [];
498
+ for (const item of publishedItems) {
499
+ const manifestName = item.startsWith('pages/') ? 'page.json' : 'fragment.json';
500
+ const key = `${item}/${manifestName}`;
501
+ const sourcePath = sourceRoot.path(key);
502
+ try {
503
+ const content = await sourceRoot.storage.readFile(sourcePath);
504
+ out.push({ path: key, content });
505
+ }
506
+ catch {
507
+ // Item missing on source (unusual — publish normally reads from
508
+ // source manifests). Skip; snapshot stays as-was for this item.
509
+ }
510
+ }
511
+ return out;
512
+ }
272
513
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/admin-api/routes/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/admin-api/routes/publish.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { Hono } from 'hono';
2
- import type { StorageProvider } from '../../types.js';
3
- export declare function siteRoutes(siteDir: string, storage: StorageProvider): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
2
+ import type { SourceContextResolver } from '../source-context.js';
3
+ export declare function siteRoutes(resolve: SourceContextResolver): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
4
4
  //# sourceMappingURL=site.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,8EASnE"}
1
+ {"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGjE,wBAAgB,UAAU,CAAC,OAAO,EAAE,qBAAqB,8EA2BxD"}
@@ -1,10 +1,33 @@
1
1
  import { Hono } from 'hono';
2
- import { loadSite } from '../../site-loader.js';
3
- export function siteRoutes(siteDir, storage) {
2
+ import { parseSiteManifest } from '../../manifest.js';
3
+ import { createFilesystemProvider } from '../../providers/filesystem.js';
4
+ import { loadSiteFromSource } from '../source-context.js';
5
+ export function siteRoutes(resolve) {
4
6
  const app = new Hono();
5
7
  app.get('/api/site', async (c) => {
6
- const site = await loadSite(siteDir, storage);
7
- return c.json(site.manifest);
8
+ const source = await resolve(c.req.query('target'));
9
+ // Return the project-level manifest if available on the source context.
10
+ if (source.manifest)
11
+ return c.json(source.manifest);
12
+ // Fallback: read from projectSiteDir filesystem.
13
+ try {
14
+ const projectStorage = createFilesystemProvider(source.projectSiteDir);
15
+ const manifest = await parseSiteManifest(projectStorage, 'site.yaml');
16
+ return c.json(manifest);
17
+ }
18
+ catch {
19
+ // Last resort: read from target content root.
20
+ try {
21
+ const site = await loadSiteFromSource(source);
22
+ return c.json(site.manifest);
23
+ }
24
+ catch (err) {
25
+ if (err.message.includes('No site.yaml found')) {
26
+ return c.json({ name: '(empty)', targets: {} });
27
+ }
28
+ throw err;
29
+ }
30
+ }
8
31
  });
9
32
  return app;
10
33
  }