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
package/dist/publish.js CHANGED
@@ -1,16 +1,21 @@
1
1
  import { join } from 'node:path';
2
+ import { listSidecars } from './sidecars.js';
3
+ import { mapLimit } from './concurrency.js';
2
4
  /**
3
5
  * Copy items from source storage to target storage.
4
6
  * Items are relative paths like "pages/home" or "fragments/header".
5
7
  * All files under each item directory are copied recursively.
6
8
  */
7
- export async function publishItems(sourceStorage, sourceBase, targetStorage, targetBase, items) {
8
- let copiedFiles = 0;
9
- for (const item of items) {
9
+ export async function publishItems(sourceRoot, targetRoot, items) {
10
+ const { storage: sourceStorage, rootPath: sourceBase } = sourceRoot;
11
+ const { storage: targetStorage, rootPath: targetBase } = targetRoot;
12
+ // Copy items in parallel (bounded).
13
+ const counts = await mapLimit(items, async (item) => {
10
14
  const sourcePath = join(sourceBase, item);
11
15
  const targetPath = join(targetBase, item);
12
- copiedFiles += await copyRecursive(sourceStorage, sourcePath, targetStorage, targetPath);
13
- }
16
+ return copyRecursive(sourceStorage, sourcePath, targetStorage, targetPath);
17
+ });
18
+ let copiedFiles = counts.reduce((a, b) => a + b, 0);
14
19
  // Also copy site.yaml
15
20
  try {
16
21
  const siteYaml = await sourceStorage.readFile(join(sourceBase, 'site.yaml'));
@@ -23,7 +28,6 @@ export async function publishItems(sourceStorage, sourceBase, targetStorage, tar
23
28
  return { copiedFiles };
24
29
  }
25
30
  async function copyRecursive(source, sourcePath, target, targetPath) {
26
- let count = 0;
27
31
  // Check if sourcePath is a file
28
32
  try {
29
33
  const content = await source.readFile(sourcePath);
@@ -35,23 +39,23 @@ async function copyRecursive(source, sourcePath, target, targetPath) {
35
39
  // Not a file — try as directory
36
40
  }
37
41
  // Try as directory
38
- if (!await source.exists(sourcePath))
42
+ if (!(await source.exists(sourcePath)))
39
43
  return 0;
40
44
  const entries = await source.readDir(sourcePath);
41
45
  await target.mkdir(targetPath);
42
- for (const entry of entries) {
46
+ // Bounded-parallel copy of children. Sequential would be O(n) wall time;
47
+ // at 10k files on cloud storage that's minutes of serial I/O latency.
48
+ const counts = await mapLimit(entries, async (entry) => {
43
49
  const childSource = join(sourcePath, entry.name);
44
50
  const childTarget = join(targetPath, entry.name);
45
51
  if (entry.isDirectory) {
46
- count += await copyRecursive(source, childSource, target, childTarget);
47
- }
48
- else {
49
- const content = await source.readFile(childSource);
50
- await target.writeFile(childTarget, content);
51
- count++;
52
+ return copyRecursive(source, childSource, target, childTarget);
52
53
  }
53
- }
54
- return count;
54
+ const content = await source.readFile(childSource);
55
+ await target.writeFile(childTarget, content);
56
+ return 1;
57
+ });
58
+ return counts.reduce((a, b) => a + b, 0);
55
59
  }
56
60
  function dirname(path) {
57
61
  const parts = path.split('/');
@@ -62,7 +66,8 @@ function dirname(path) {
62
66
  * Resolve dependencies for published items.
63
67
  * Given a list of items (pages/fragments), find all referenced templates and fragments.
64
68
  */
65
- export async function resolveDependencies(storage, siteBase, items) {
69
+ export async function resolveDependencies(sourceRoot, items) {
70
+ const { storage, rootPath: siteBase } = sourceRoot;
66
71
  const allItems = new Set(items);
67
72
  const visited = new Set();
68
73
  for (const item of items) {
@@ -113,4 +118,148 @@ async function collectComponentDeps(components, storage, siteBase, allItems, vis
113
118
  }
114
119
  }
115
120
  }
121
+ /**
122
+ * Reverse-dependency lookup: given a fragment name, return the pages and
123
+ * fragments that reference it (transitively). Used by the admin UI to show
124
+ * "publishing @header affects: home, about, blog".
125
+ *
126
+ * On static targets, those pages need to be republished too — fragments are
127
+ * baked into pages at publish time. On ESI targets, republishing the fragment
128
+ * alone suffices because the edge composer resolves @fragments per request.
129
+ */
130
+ export async function findFragmentDependents(sourceRoot, fragmentName) {
131
+ return findFragmentDependentsImpl(sourceRoot.storage, sourceRoot.rootPath, fragmentName);
132
+ }
133
+ async function findFragmentDependentsImpl(storage, siteBase, fragmentName) {
134
+ const pages = new Set();
135
+ const fragments = new Set();
136
+ // Build an index of every manifest → direct @ references
137
+ const manifestsToScan = [];
138
+ for (const kind of ['pages', 'fragments']) {
139
+ try {
140
+ const entries = await storage.readDir(join(siteBase, kind));
141
+ for (const e of entries) {
142
+ if (e.isDirectory)
143
+ manifestsToScan.push({ kind: kind === 'pages' ? 'page' : 'fragment', name: e.name });
144
+ }
145
+ }
146
+ catch {
147
+ /* missing dir */
148
+ }
149
+ }
150
+ function walkComponents(components, out) {
151
+ if (!Array.isArray(components))
152
+ return;
153
+ for (const entry of components) {
154
+ if (typeof entry === 'string' && entry.startsWith('@'))
155
+ out.push(entry.slice(1));
156
+ else if (typeof entry === 'object' && entry !== null) {
157
+ walkComponents(entry.components, out);
158
+ }
159
+ }
160
+ }
161
+ // Read every manifest in parallel (bounded) and index refs in memory.
162
+ // Past this point the BFS is a map lookup, not storage I/O — so it stays
163
+ // fast even at 10k items.
164
+ const directRefs = new Map();
165
+ await mapLimit(manifestsToScan, async (item) => {
166
+ const refs = [];
167
+ const manifestName = item.kind === 'page' ? 'page.json' : 'fragment.json';
168
+ const dir = item.kind === 'page' ? 'pages' : 'fragments';
169
+ try {
170
+ const raw = await storage.readFile(join(siteBase, dir, item.name, manifestName));
171
+ const manifest = JSON.parse(raw);
172
+ walkComponents(manifest.components, refs);
173
+ }
174
+ catch {
175
+ /* skip unreadable */
176
+ }
177
+ directRefs.set(`${item.kind}:${item.name}`, refs);
178
+ });
179
+ // BFS: find everything that transitively references `fragmentName`.
180
+ const queue = [fragmentName];
181
+ const seen = new Set([fragmentName]);
182
+ while (queue.length) {
183
+ const current = queue.shift();
184
+ for (const item of manifestsToScan) {
185
+ const key = `${item.kind}:${item.name}`;
186
+ if (seen.has(key))
187
+ continue;
188
+ const refs = directRefs.get(key) ?? [];
189
+ if (refs.includes(current)) {
190
+ seen.add(key);
191
+ if (item.kind === 'page')
192
+ pages.add(item.name);
193
+ else {
194
+ fragments.add(item.name);
195
+ queue.push(item.name);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ return { pages: [...pages].sort(), fragments: [...fragments].sort() };
201
+ }
202
+ /**
203
+ * Fast path for finding dependents against a *published* target.
204
+ *
205
+ * Uses `.uses-{fragment}` and `.tpl-{template}` sidecar filenames (written by
206
+ * writeSidecar in publish-rendered.ts). Needs listings only — no content
207
+ * reads, no JSON parsing. Scales to 10k pages at the cost of one LIST call
208
+ * per item directory.
209
+ *
210
+ * Handles transitive fragment→fragment dependencies: if @inner is referenced
211
+ * by @outer which is referenced by pages/home, querying "@inner" returns
212
+ * home and @outer.
213
+ *
214
+ * Works against target storage (rooted at target base) or source storage
215
+ * (pass `baseDir: siteDir` so the walker descends into `siteDir/pages`).
216
+ */
217
+ export async function findDependentsFromSidecars(sourceRoot, query) {
218
+ const { storage } = sourceRoot;
219
+ const pagesRoot = sourceRoot.path('pages');
220
+ const fragmentsRoot = sourceRoot.path('fragments');
221
+ // Single listing pass per root, then all reasoning is in-memory.
222
+ const [pagesList, fragmentsList] = await Promise.all([
223
+ listSidecars(storage, pagesRoot),
224
+ listSidecars(storage, fragmentsRoot),
225
+ ]);
226
+ const pagesIndex = new Map();
227
+ for (const [name, state] of pagesList) {
228
+ pagesIndex.set(name, { uses: new Set(state.uses), template: state.template });
229
+ }
230
+ const fragmentsIndex = new Map();
231
+ for (const [name, state] of fragmentsList) {
232
+ fragmentsIndex.set(name, { uses: new Set(state.uses), template: state.template });
233
+ }
234
+ // Now walk the indexes in-memory. No more storage calls from this point.
235
+ const pages = new Set();
236
+ const fragments = new Set();
237
+ if ('template' in query) {
238
+ for (const [name, info] of pagesIndex)
239
+ if (info.template === query.template)
240
+ pages.add(name);
241
+ for (const [name, info] of fragmentsIndex)
242
+ if (info.template === query.template)
243
+ fragments.add(name);
244
+ return { pages: [...pages].sort(), fragments: [...fragments].sort() };
245
+ }
246
+ // Fragment query with transitive walk
247
+ const queue = [query.fragment];
248
+ const seen = new Set([query.fragment]);
249
+ while (queue.length) {
250
+ const current = queue.shift();
251
+ for (const [name, info] of pagesIndex) {
252
+ if (info.uses.has(current))
253
+ pages.add(name);
254
+ }
255
+ for (const [name, info] of fragmentsIndex) {
256
+ if (info.uses.has(current) && !seen.has(name)) {
257
+ seen.add(name);
258
+ fragments.add(name);
259
+ queue.push(name);
260
+ }
261
+ }
262
+ }
263
+ return { pages: [...pages].sort(), fragments: [...fragments].sort() };
264
+ }
116
265
  //# sourceMappingURL=publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
- import type { RenderOutput, ResolvedComponent } from './types.js';
2
- export declare function renderComponent(component: ResolvedComponent, routeParams?: Record<string, string>): Promise<RenderOutput>;
3
- export declare function renderFragment(component: ResolvedComponent): Promise<string>;
4
- export declare function renderPage(component: ResolvedComponent, routeParams?: Record<string, string>): Promise<string>;
1
+ import type { RenderOutput, ResolvedComponent, PageMetadata } from './types.js';
2
+ import { type SeoContext } from './seo.js';
3
+ export { type SeoContext } from './seo.js';
4
+ export declare function renderComponent(component: ResolvedComponent, routeParams?: Record<string, string>, locale?: string): Promise<RenderOutput>;
5
+ export declare function renderFragment(component: ResolvedComponent, locale?: string): Promise<string>;
6
+ export interface RenderPageOptions {
7
+ routeParams?: Record<string, string>;
8
+ metadata?: PageMetadata;
9
+ /** Page route (e.g. "/about") — used for canonical URL fallback. */
10
+ route?: string;
11
+ /** Site-level SEO context for fallback chains. */
12
+ seo?: SeoContext;
13
+ }
14
+ export declare function renderPage(component: ResolvedComponent, optsOrParams?: RenderPageOptions | Record<string, string>): Promise<string>;
5
15
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGjE,wBAAsB,eAAe,CAAC,SAAS,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB/H;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlF;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,iBAAiB,EAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE/E,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAEtE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,wBAAsB,eAAe,CACnC,SAAS,EAAE,iBAAiB,EAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,MAAM,SAAO,GACZ,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBnG;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,GAAG,CAAC,EAAE,UAAU,CAAA;CACjB;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,iBAAiB,EAC5B,YAAY,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACxD,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
package/dist/renderer.js CHANGED
@@ -1,12 +1,10 @@
1
1
  import { hashPath, scopeHtml, scopeCss } from './scope.js';
2
- export async function renderComponent(component, routeParams) {
3
- const children = await Promise.all(component.children.map(c => renderComponent(c, routeParams)));
4
- const output = await component.template({ content: component.content, children, params: routeParams });
2
+ import { resolveSeoTags, escapeAttr } from './seo.js';
3
+ export async function renderComponent(component, routeParams, locale = 'en') {
4
+ const children = await Promise.all(component.children.map(c => renderComponent(c, routeParams, locale)));
5
+ const output = await component.template({ content: component.content, children, params: routeParams, locale });
5
6
  const scopeId = hashPath(component.treePath ?? '');
6
- const headParts = [
7
- ...children.map(c => c.head).filter(Boolean),
8
- output.head,
9
- ].filter(Boolean);
7
+ const headParts = [...children.map(c => c.head).filter(Boolean), output.head].filter(Boolean);
10
8
  return {
11
9
  html: scopeHtml(output.html, scopeId),
12
10
  css: scopeCss(output.css, scopeId),
@@ -14,15 +12,13 @@ export async function renderComponent(component, routeParams) {
14
12
  head: headParts.length ? headParts.join('\n') : undefined,
15
13
  };
16
14
  }
17
- export async function renderFragment(component) {
18
- const children = await Promise.all(component.children.map(c => renderComponent(c)));
19
- const output = await component.template({ content: component.content, children });
20
- const headContent = [
21
- ...children.map(c => c.head).filter(Boolean),
22
- output.head,
23
- ].filter(Boolean).join('\n ');
15
+ export async function renderFragment(component, locale) {
16
+ const lang = locale || 'en';
17
+ const children = await Promise.all(component.children.map(c => renderComponent(c, undefined, lang)));
18
+ const output = await component.template({ content: component.content, children, locale: lang });
19
+ const headContent = [...children.map(c => c.head).filter(Boolean), output.head].filter(Boolean).join('\n ');
24
20
  return `<!DOCTYPE html>
25
- <html lang="en">
21
+ <html lang="${lang}">
26
22
  <head>
27
23
  <meta charset="UTF-8">
28
24
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -34,15 +30,31 @@ ${output.html}${output.js ? `\n<script type="module">${output.js}</script>` : ''
34
30
  </body>
35
31
  </html>`;
36
32
  }
37
- export async function renderPage(component, routeParams) {
38
- const children = await Promise.all(component.children.map(c => renderComponent(c, routeParams)));
39
- const output = await component.template({ content: component.content, children, params: routeParams });
40
- const headContent = [
41
- ...children.map(c => c.head).filter(Boolean),
42
- output.head,
43
- ].filter(Boolean).join('\n ');
33
+ export async function renderPage(component, optsOrParams) {
34
+ const opts = optsOrParams &&
35
+ ('metadata' in optsOrParams || 'routeParams' in optsOrParams || 'seo' in optsOrParams || 'route' in optsOrParams)
36
+ ? optsOrParams
37
+ : { routeParams: optsOrParams };
38
+ const seo = opts.seo ?? {};
39
+ const lang = seo.locale || 'en';
40
+ const children = await Promise.all(component.children.map(c => renderComponent(c, opts.routeParams, lang)));
41
+ const output = await component.template({
42
+ content: component.content,
43
+ children,
44
+ params: opts.routeParams,
45
+ locale: lang,
46
+ });
47
+ const templateHead = [...children.map(c => c.head).filter(Boolean), output.head].filter(Boolean).join('\n ');
48
+ const seoHead = resolveSeoTags({
49
+ metadata: opts.metadata,
50
+ content: component.content,
51
+ route: opts.route,
52
+ seo,
53
+ templateHead,
54
+ });
55
+ const headContent = [seoHead, templateHead].filter(Boolean).join('\n ');
44
56
  return `<!DOCTYPE html>
45
- <html lang="en">
57
+ <html lang="${escapeAttr(lang)}">
46
58
  <head>
47
59
  <meta charset="UTF-8">
48
60
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,18 @@
1
1
  import type { ResolvedComponent, ComponentEntry } from './types.js';
2
2
  import type { Site } from './site-loader.js';
3
+ import { type ResolvedLocales } from './locale.js';
3
4
  interface ResolveContext {
4
5
  site: Site;
5
6
  templatesDir: string;
6
7
  visited: Set<string>;
7
8
  path: string[];
9
+ /** When set, fragment references resolve the locale-specific variant first. */
10
+ locale?: string;
11
+ /** Resolved site locales — cached for fallback resolution. */
12
+ resolvedLocales?: ResolvedLocales;
8
13
  }
9
14
  export declare function resolveComponent(entry: ComponentEntry, ctx: ResolveContext): Promise<ResolvedComponent>;
10
- export declare function resolveFragment(fragmentName: string, site: Site): Promise<ResolvedComponent>;
11
- export declare function resolvePage(pageName: string, site: Site): Promise<ResolvedComponent>;
15
+ export declare function resolveFragment(fragmentName: string, site: Site, locale?: string): Promise<ResolvedComponent>;
16
+ export declare function resolvePage(pageName: string, site: Site, locale?: string): Promise<ResolvedComponent>;
12
17
  export {};
13
18
  //# sourceMappingURL=resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAA;AAGpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAE5C,UAAU,cAAc;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAa5B;AAkED,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsBlG;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsB1F"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAmB,MAAM,YAAY,CAAA;AAGpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7F,UAAU,cAAc;IACtB,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAa7G;AA4ED,wBAAsB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8CnH;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiC3G"}
package/dist/resolver.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { loadTemplate } from './template-loader.js';
2
2
  import { processContent } from './content.js';
3
+ import { resolveLocaleFallback, resolveSiteLocales } from './locale.js';
3
4
  export async function resolveComponent(entry, ctx) {
4
5
  if (typeof entry === 'string') {
5
6
  if (!entry.startsWith('@')) {
@@ -14,12 +15,22 @@ export async function resolveComponent(entry, ctx) {
14
15
  async function resolveFragmentRef(fragmentName, ctx) {
15
16
  const key = `@${fragmentName}`;
16
17
  if (ctx.visited.has(key)) {
17
- throw new Error(`Circular reference detected: ${key}\n` +
18
- ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
18
+ throw new Error(`Circular reference detected: ${key}\n` + ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
19
19
  }
20
20
  ctx.visited.add(key);
21
21
  ctx.path.push(key);
22
- const fragment = ctx.site.fragments.get(fragmentName);
22
+ // Resolve locale-specific fragment variant, falling back through the chain
23
+ let fragment = ctx.site.fragments.get(fragmentName) ?? null;
24
+ if (ctx.locale && ctx.resolvedLocales) {
25
+ const localeEntry = ctx.site.fragmentLocales.get(fragmentName);
26
+ if (localeEntry) {
27
+ const available = new Set(localeEntry.locales.keys());
28
+ const bestLocale = resolveLocaleFallback(ctx.locale, available, ctx.resolvedLocales);
29
+ const localeVariant = localeEntry.locales.get(bestLocale);
30
+ if (localeVariant)
31
+ fragment = localeVariant;
32
+ }
33
+ }
23
34
  if (!fragment) {
24
35
  const available = [...ctx.site.fragments.keys()];
25
36
  ctx.path.pop();
@@ -38,13 +49,18 @@ async function resolveFragmentRef(fragmentName, ctx) {
38
49
  const treePath = ctx.path.slice(1).join('/');
39
50
  ctx.path.pop();
40
51
  ctx.visited.delete(key);
41
- return { template: loaded.render, content: processContent(fragment.content, loaded.schema), children, path: fragment.dir, treePath };
52
+ return {
53
+ template: loaded.render,
54
+ content: processContent(fragment.content, loaded.schema),
55
+ children,
56
+ path: fragment.dir,
57
+ treePath,
58
+ };
42
59
  }
43
60
  async function resolveInlineComponent(comp, ctx) {
44
61
  const key = comp.name;
45
62
  if (ctx.visited.has(key)) {
46
- throw new Error(`Circular reference detected: ${key}\n` +
47
- ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
63
+ throw new Error(`Circular reference detected: ${key}\n` + ` Resolution path: ${ctx.path.join(' → ')} → ${key}`);
48
64
  }
49
65
  ctx.visited.add(key);
50
66
  ctx.path.push(comp.name);
@@ -60,15 +76,34 @@ async function resolveInlineComponent(comp, ctx) {
60
76
  ctx.visited.delete(key);
61
77
  return { template: loaded.render, content: processContent(comp.content, loaded.schema), children, treePath };
62
78
  }
63
- export async function resolveFragment(fragmentName, site) {
64
- const fragment = site.fragments.get(fragmentName);
79
+ export async function resolveFragment(fragmentName, site, locale) {
80
+ // Resolve locale-specific fragment variant
81
+ let fragment = site.fragments.get(fragmentName) ?? null;
82
+ const resolvedLocales = locale ? (resolveSiteLocales(site.manifest) ?? undefined) : undefined;
83
+ if (locale && resolvedLocales) {
84
+ const localeEntry = site.fragmentLocales.get(fragmentName);
85
+ if (localeEntry) {
86
+ const available = new Set(localeEntry.locales.keys());
87
+ const bestLocale = resolveLocaleFallback(locale, available, resolvedLocales);
88
+ const localeVariant = localeEntry.locales.get(bestLocale);
89
+ if (localeVariant)
90
+ fragment = localeVariant;
91
+ }
92
+ }
65
93
  if (!fragment) {
66
94
  const available = [...site.fragments.keys()];
67
95
  throw new Error(`Fragment "${fragmentName}" not found.\n` +
68
96
  ` Available fragments: ${available.length > 0 ? available.join(', ') : '(none)'}`);
69
97
  }
70
98
  const templatesDir = site.templatesDir;
71
- const ctx = { site, templatesDir, visited: new Set(), path: ['', `@${fragmentName}`] };
99
+ const ctx = {
100
+ site,
101
+ templatesDir,
102
+ visited: new Set(),
103
+ path: ['', `@${fragmentName}`],
104
+ locale,
105
+ resolvedLocales,
106
+ };
72
107
  const loaded = await loadTemplate(site.storage, templatesDir, fragment.template);
73
108
  const children = [];
74
109
  if (fragment.components) {
@@ -76,17 +111,27 @@ export async function resolveFragment(fragmentName, site) {
76
111
  children.push(await resolveComponent(child, ctx));
77
112
  }
78
113
  }
79
- return { template: loaded.render, content: processContent(fragment.content, loaded.schema), children, path: fragment.dir, treePath: '' };
114
+ return {
115
+ template: loaded.render,
116
+ content: processContent(fragment.content, loaded.schema),
117
+ children,
118
+ path: fragment.dir,
119
+ treePath: '',
120
+ };
80
121
  }
81
- export async function resolvePage(pageName, site) {
82
- const page = site.pages.get(pageName);
83
- if (!page) {
122
+ export async function resolvePage(pageName, site, locale) {
123
+ const defaultPage = site.pages.get(pageName);
124
+ if (!defaultPage) {
84
125
  const available = [...site.pages.keys()];
85
126
  throw new Error(`Page "${pageName}" not found.\n` +
86
127
  ` Available pages: ${available.length > 0 ? available.join(', ') : '(none)'}`);
87
128
  }
129
+ // Use locale variant's content/components when available, fall back to default
130
+ const localeEntry = locale ? site.pageLocales.get(pageName) : undefined;
131
+ const page = localeEntry?.locales.get(locale) ?? defaultPage;
88
132
  const templatesDir = site.templatesDir;
89
- const ctx = { site, templatesDir, visited: new Set(), path: [pageName] };
133
+ const resolvedLocales = locale ? (resolveSiteLocales(site.manifest) ?? undefined) : undefined;
134
+ const ctx = { site, templatesDir, visited: new Set(), path: [pageName], locale, resolvedLocales };
90
135
  const loaded = await loadTemplate(site.storage, templatesDir, page.template);
91
136
  const children = [];
92
137
  if (page.components) {
@@ -94,6 +139,12 @@ export async function resolvePage(pageName, site) {
94
139
  children.push(await resolveComponent(child, ctx));
95
140
  }
96
141
  }
97
- return { template: loaded.render, content: processContent(page.content, loaded.schema), children, path: page.dir, treePath: '' };
142
+ return {
143
+ template: loaded.render,
144
+ content: processContent(page.content, loaded.schema),
145
+ children,
146
+ path: page.dir,
147
+ treePath: '',
148
+ };
98
149
  }
99
150
  //# sourceMappingURL=resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Robots.txt generation — produces a default robots.txt or copies
3
+ * a user-authored one from the site directory.
4
+ *
5
+ * SRP: this module owns robots.txt content resolution. The caller
6
+ * checks for a user file and writes the result to storage.
7
+ *
8
+ * Strategy:
9
+ * 1. If the site has a `robots.txt` file, use it verbatim.
10
+ * 2. Otherwise, generate a permissive default with a Sitemap
11
+ * reference (when siteUrl is available).
12
+ */
13
+ export interface GenerateRobotsOptions {
14
+ /** Absolute base URL — used for the Sitemap directive. Optional. */
15
+ siteUrl?: string;
16
+ }
17
+ /**
18
+ * Generate a default robots.txt. Permissive (allow all crawlers)
19
+ * with a Sitemap reference when siteUrl is available.
20
+ */
21
+ export declare function generateRobotsTxt(opts: GenerateRobotsOptions): string;
22
+ //# sourceMappingURL=robots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAOrE"}
package/dist/robots.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Robots.txt generation — produces a default robots.txt or copies
3
+ * a user-authored one from the site directory.
4
+ *
5
+ * SRP: this module owns robots.txt content resolution. The caller
6
+ * checks for a user file and writes the result to storage.
7
+ *
8
+ * Strategy:
9
+ * 1. If the site has a `robots.txt` file, use it verbatim.
10
+ * 2. Otherwise, generate a permissive default with a Sitemap
11
+ * reference (when siteUrl is available).
12
+ */
13
+ /**
14
+ * Generate a default robots.txt. Permissive (allow all crawlers)
15
+ * with a Sitemap reference when siteUrl is available.
16
+ */
17
+ export function generateRobotsTxt(opts) {
18
+ const lines = ['User-agent: *', 'Allow: /'];
19
+ if (opts.siteUrl) {
20
+ const base = opts.siteUrl.replace(/\/+$/, '');
21
+ lines.push('', `Sitemap: ${base}/sitemap.xml`);
22
+ }
23
+ return lines.join('\n') + '\n';
24
+ }
25
+ //# sourceMappingURL=robots.js.map