@caelo-cms/shared 0.10.53 → 0.10.57

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 (88) hide show
  1. package/dist/auto-update.d.ts +17 -3
  2. package/dist/auto-update.d.ts.map +1 -1
  3. package/dist/auto-update.js +21 -9
  4. package/dist/auto-update.js.map +1 -1
  5. package/dist/fonts.d.ts +12 -0
  6. package/dist/fonts.d.ts.map +1 -1
  7. package/dist/fonts.js +37 -1
  8. package/dist/fonts.js.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/link-refs.d.ts +250 -0
  14. package/dist/link-refs.d.ts.map +1 -0
  15. package/dist/link-refs.js +416 -0
  16. package/dist/link-refs.js.map +1 -0
  17. package/dist/media.d.ts +1 -1
  18. package/dist/nested-module-render.d.ts +4 -1
  19. package/dist/nested-module-render.d.ts.map +1 -1
  20. package/dist/nested-module-render.js +14 -2
  21. package/dist/nested-module-render.js.map +1 -1
  22. package/dist/platform-updates.d.ts +27 -6
  23. package/dist/platform-updates.d.ts.map +1 -1
  24. package/dist/platform-updates.js +37 -3
  25. package/dist/platform-updates.js.map +1 -1
  26. package/dist/preview-compose.d.ts +10 -0
  27. package/dist/preview-compose.d.ts.map +1 -1
  28. package/dist/preview-compose.js +58 -20
  29. package/dist/preview-compose.js.map +1 -1
  30. package/dist/proposal-status.d.ts +1 -1
  31. package/dist/raw-text-escape.d.ts +18 -0
  32. package/dist/raw-text-escape.d.ts.map +1 -0
  33. package/dist/raw-text-escape.js +40 -0
  34. package/dist/raw-text-escape.js.map +1 -0
  35. package/dist/redirect-emit-gcp.d.ts +11 -1
  36. package/dist/redirect-emit-gcp.d.ts.map +1 -1
  37. package/dist/redirect-emit-gcp.js +16 -2
  38. package/dist/redirect-emit-gcp.js.map +1 -1
  39. package/dist/release-manifest.d.ts +14 -4
  40. package/dist/release-manifest.d.ts.map +1 -1
  41. package/dist/release-manifest.js +19 -3
  42. package/dist/release-manifest.js.map +1 -1
  43. package/dist/responsive-images.d.ts.map +1 -1
  44. package/dist/responsive-images.js +3 -3
  45. package/dist/responsive-images.js.map +1 -1
  46. package/dist/seo.js +1 -1
  47. package/dist/seo.js.map +1 -1
  48. package/dist/template-balance.d.ts +3 -0
  49. package/dist/template-balance.d.ts.map +1 -0
  50. package/dist/template-balance.js +214 -0
  51. package/dist/template-balance.js.map +1 -0
  52. package/dist/template-engine.d.ts +11 -0
  53. package/dist/template-engine.d.ts.map +1 -1
  54. package/dist/template-engine.js +12 -0
  55. package/dist/template-engine.js.map +1 -1
  56. package/dist/theme-render.d.ts +2 -2
  57. package/dist/theme-render.d.ts.map +1 -1
  58. package/dist/theme-render.js +29 -5
  59. package/dist/theme-render.js.map +1 -1
  60. package/dist/version.d.ts +2 -2
  61. package/dist/version.js +1 -1
  62. package/package.json +2 -2
  63. package/src/auto-update.test.ts +74 -4
  64. package/src/auto-update.ts +31 -9
  65. package/src/fonts.test.ts +37 -0
  66. package/src/fonts.ts +38 -1
  67. package/src/index.ts +2 -0
  68. package/src/link-refs.test.ts +552 -0
  69. package/src/link-refs.ts +569 -0
  70. package/src/nested-module-render.ts +18 -1
  71. package/src/platform-updates.test.ts +5 -0
  72. package/src/platform-updates.ts +39 -3
  73. package/src/preview-compose-deferrals.test.ts +103 -0
  74. package/src/preview-compose.ts +73 -24
  75. package/src/raw-text-escape.ts +44 -0
  76. package/src/redirect-emit-gcp.ts +16 -2
  77. package/src/redirect-emit.test.ts +6 -4
  78. package/src/release-manifest.ts +39 -7
  79. package/src/responsive-images.test.ts +10 -0
  80. package/src/responsive-images.ts +6 -3
  81. package/src/seo.test.ts +7 -0
  82. package/src/seo.ts +1 -1
  83. package/src/template-balance.test.ts +97 -0
  84. package/src/template-balance.ts +216 -0
  85. package/src/template-engine.ts +23 -0
  86. package/src/theme-render-sanitize.test.ts +40 -0
  87. package/src/theme-render.ts +40 -8
  88. package/src/version.ts +1 -1
@@ -0,0 +1,416 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Internal links as REFERENCES, not literal paths (epic #724).
4
+ *
5
+ * A link to one of the site's own pages or media assets is stored as a
6
+ * plain-string reference and turned into a URL only when a page is
7
+ * rendered — for the page being rendered, in the environment it is
8
+ * rendered for. Renaming or moving a page then changes no stored link.
9
+ *
10
+ * Grammar (one form for every place a link can live — `link` / `url`
11
+ * fields, `link-list` items, `*_href` values, module HTML attributes,
12
+ * rich text, structured-set items, field defaults):
13
+ *
14
+ * caelo:page/<pageId>[?query][#anchor]
15
+ * caelo:media/<mediaId>[/<variant>]
16
+ *
17
+ * `<pageId>` / `<mediaId>` are lowercase UUIDs. `query` and `anchor` are
18
+ * carried verbatim (`?ref=nav`, `#pricing`). `variant` is a media
19
+ * variant tag (`webp-800`, `square-400`); absent means the original.
20
+ * Because a reference is a plain string, every surface carries it
21
+ * without a schema change, and a reference inside HTML (`href="…"`,
22
+ * `src="…"`, a `srcset` entry) is found by the same scanner as a whole
23
+ * field value.
24
+ *
25
+ * Who sees the grammar: nobody who authors content. Humans and the AI
26
+ * keep writing `/about`; the write path canonicalises it to a reference
27
+ * (rollout C — until then nothing writes references), and every read
28
+ * that shows content back (tool results, editor fields) turns references
29
+ * into human paths again ({@link humaniseLinkRefs}). The grammar is a
30
+ * storage form, not an authoring form (CLAUDE.md §1A).
31
+ *
32
+ * Resolution is ONE interface ({@link LinkResolver}) used by the
33
+ * template engine, the composer, the editor preview, live-edit and the
34
+ * static generator. A reference whose target does not exist is a loud
35
+ * failure (`link-target-missing:<kind>/<id>` in `missingSlots`, the raw
36
+ * reference left in the output — CLAUDE.md §2); one whose target exists
37
+ * but is not published in the environment being rendered resolves to
38
+ * its URL and is reported as `unpublished` so the caller can apply the
39
+ * environment's policy (warn at Stage, block at Publish live — the
40
+ * blocking check is rollout F).
41
+ *
42
+ * Seams for the later rollout steps:
43
+ * - D (locale composition point): {@link SiteLinkIndex.forPage} is the
44
+ * per-rendering-page hook. A `link-resolve` contribution maps the
45
+ * target to the rendering page's same-locale sibling there; nothing
46
+ * in the engine or composer changes.
47
+ * - E (data migration): {@link mapLinkRefsDeep} / the canonicaliser's
48
+ * pure core walk the same shapes the migration rewrites.
49
+ * - F (reference integrity): {@link RecordingLinkResolver.observed}
50
+ * lists every reference a render touched with its resolution, and
51
+ * {@link linkIssueSeverity} is the per-environment policy.
52
+ */
53
+ import { buildMediaUrl } from "./media.js";
54
+ import { trimSlashes } from "./url.js";
55
+ /** The scheme every internal reference starts with. */
56
+ export const LINK_REF_SCHEME = "caelo:";
57
+ /**
58
+ * `missingSlots` marker for a link value that starts like a reference
59
+ * (`caelo:page/`, `caelo:media/`) but does not match the grammar — a
60
+ * truncated or uppercased id, an id followed by stray characters
61
+ * (`caelo:page/<id>/team`), an unknown media variant form. Reported as
62
+ * `link-ref-malformed:<the text as written>` and left raw: a guessed
63
+ * target would be a silent fallback (CLAUDE.md §2), and ignoring it
64
+ * would ship a dead `caelo:` href. Only link positions count (a whole
65
+ * value, an attribute value, a srcset entry); prose that mentions the
66
+ * grammar is left alone.
67
+ */
68
+ export const LINK_REF_MALFORMED = "link-ref-malformed";
69
+ // Pieces of the grammar. Every quantifier is bounded or runs over a
70
+ // character class that cannot overlap its neighbour, and every
71
+ // alternative starts with a literal, so scanning is linear (CodeQL
72
+ // js/polynomial-redos; the budget tests in link-refs.test.ts pin it).
73
+ const UUID_SRC = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
74
+ // Query: URL query characters, `&amp;`-escaped ampersands included; no
75
+ // quote, space, angle bracket, `#` or comma (a comma ends a srcset entry).
76
+ const QUERY_SRC = "[A-Za-z0-9_\\-.~%=&;+/:@!$()*]{1,512}";
77
+ // Fragment: what an HTML id / URL fragment realistically carries.
78
+ const ANCHOR_SRC = "[A-Za-z0-9_\\-.~%:]{1,256}";
79
+ const VARIANT_SRC = "[a-z][a-z0-9-]{0,63}";
80
+ // `caelo:` is a scheme only where a scheme can start: `xcaelo:page/…`
81
+ // is some other scheme's text, not a reference.
82
+ const REF_START_SRC = "(?<![A-Za-z0-9+.\\-])caelo:";
83
+ // An id (or media variant) must END where the grammar says: a following
84
+ // id or path character (`<id>abc`, `<id>/team`, `/webp-800/x`) makes the
85
+ // whole thing malformed instead of resolving the prefix and gluing the
86
+ // rest onto the URL.
87
+ const ID_END_SRC = "(?![A-Za-z0-9_/\\-])";
88
+ // Fallback alternative: tried only where both grammar alternatives fail
89
+ // at the same position, and only in LINK positions — the start of the
90
+ // string (a whole field value), of an attribute value (after a quote or
91
+ // `=`) or of a srcset entry (after a comma). Prose that talks about the
92
+ // grammar (`<code>caelo:page/&lt;id&gt;</code>` in a docs page) is text,
93
+ // not a broken link. Captures a bounded snippet for the marker.
94
+ const MALFORMED_SRC = "(?<=^|[\"'=,]|, )caelo:(?:page|media)/[^\\s\"'<>,]{0,96}";
95
+ const PAGE_BODY_SRC = `page/(${UUID_SRC})${ID_END_SRC}(?:\\?(${QUERY_SRC}))?(?:#(${ANCHOR_SRC}))?`;
96
+ const MEDIA_BODY_SRC = `media/(${UUID_SRC})(?:/(${VARIANT_SRC}))?${ID_END_SRC}`;
97
+ /**
98
+ * Global scanner for references embedded anywhere in a string. Groups:
99
+ * 1-3 page (id, query, anchor), 4-5 media (id, variant); a match with
100
+ * neither is malformed.
101
+ */
102
+ function linkRefScanner() {
103
+ // A fresh RegExp per call: global regexes carry `lastIndex` state.
104
+ // No alternative accepts a quote, so scanning an HTML attribute value
105
+ // stops at its boundary.
106
+ return new RegExp(`${REF_START_SRC}(?:${PAGE_BODY_SRC}|${MEDIA_BODY_SRC})|${MALFORMED_SRC}`, "g");
107
+ }
108
+ const PAGE_REF_EXACT = new RegExp(`^caelo:${PAGE_BODY_SRC}$`);
109
+ const MEDIA_REF_EXACT = new RegExp(`^caelo:${MEDIA_BODY_SRC}$`);
110
+ /** The reference a scanner match denotes, or null for a malformed one. */
111
+ function refFromMatch(m) {
112
+ if (m[1] !== undefined) {
113
+ return { kind: "page", pageId: m[1], query: m[2] ?? null, anchor: m[3] ?? null };
114
+ }
115
+ if (m[4] !== undefined)
116
+ return { kind: "media", mediaId: m[4], variant: m[5] ?? null };
117
+ return null;
118
+ }
119
+ /**
120
+ * Parse a string that IS exactly one reference (a whole field value).
121
+ * Returns null for anything else — a path, an external URL, or a string
122
+ * that merely contains a reference.
123
+ */
124
+ export function parseLinkRef(value) {
125
+ if (!value.startsWith(LINK_REF_SCHEME))
126
+ return null;
127
+ const page = PAGE_REF_EXACT.exec(value);
128
+ if (page) {
129
+ return {
130
+ kind: "page",
131
+ pageId: page[1],
132
+ query: page[2] ?? null,
133
+ anchor: page[3] ?? null,
134
+ };
135
+ }
136
+ const media = MEDIA_REF_EXACT.exec(value);
137
+ if (media)
138
+ return { kind: "media", mediaId: media[1], variant: media[2] ?? null };
139
+ return null;
140
+ }
141
+ /**
142
+ * Serialise a reference to its stored string form.
143
+ *
144
+ * @throws when the result would not parse back (an id that is not a
145
+ * lowercase UUID, a query / anchor / variant outside the grammar's
146
+ * character classes): storing it would write a link no render can
147
+ * resolve. Callers validate author input before building a ref.
148
+ */
149
+ export function formatLinkRef(ref) {
150
+ const out = ref.kind === "media"
151
+ ? `${LINK_REF_SCHEME}media/${ref.mediaId}${ref.variant ? `/${ref.variant}` : ""}`
152
+ : `${LINK_REF_SCHEME}page/${ref.pageId}` +
153
+ (ref.query ? `?${ref.query}` : "") +
154
+ (ref.anchor ? `#${ref.anchor}` : "");
155
+ if (parseLinkRef(out) === null) {
156
+ throw new Error(`formatLinkRef: ${JSON.stringify(out)} is not a valid internal reference ` +
157
+ "(ids are lowercase UUIDs; query, anchor and variant must use the grammar's characters, see link-refs.ts)");
158
+ }
159
+ return out;
160
+ }
161
+ /**
162
+ * The target-identity half of a reference, `page/<id>` / `media/<id>` —
163
+ * what failure markers and integrity reports name (query, anchor and
164
+ * variant do not change whether the target exists).
165
+ */
166
+ export function linkRefTargetKey(ref) {
167
+ return ref.kind === "page" ? `page/${ref.pageId}` : `media/${ref.mediaId}`;
168
+ }
169
+ /** Cheap pre-check: can `text` contain a reference at all? */
170
+ export function mayContainLinkRef(text) {
171
+ return text.includes(LINK_REF_SCHEME);
172
+ }
173
+ /**
174
+ * Every well-formed reference embedded in `text`, in order (duplicates
175
+ * kept). Malformed ones are not references; see
176
+ * {@link findMalformedLinkRefs}.
177
+ */
178
+ export function findLinkRefs(text) {
179
+ if (!mayContainLinkRef(text))
180
+ return [];
181
+ const out = [];
182
+ for (const m of text.matchAll(linkRefScanner())) {
183
+ const ref = refFromMatch(m);
184
+ if (ref)
185
+ out.push(ref);
186
+ }
187
+ return out;
188
+ }
189
+ /**
190
+ * Every piece of `text` that starts like a reference (`caelo:page/`,
191
+ * `caelo:media/`) but breaks the grammar, exactly as written (bounded
192
+ * snippet), in order.
193
+ */
194
+ export function findMalformedLinkRefs(text) {
195
+ if (!mayContainLinkRef(text))
196
+ return [];
197
+ const out = [];
198
+ for (const m of text.matchAll(linkRefScanner())) {
199
+ if (refFromMatch(m) === null)
200
+ out.push(m[0]);
201
+ }
202
+ return out;
203
+ }
204
+ /**
205
+ * Replace every well-formed reference embedded in `text` with
206
+ * `replacer`'s answer. `raw` is the reference exactly as it appeared, so
207
+ * a replacer can leave it in place (return `raw`) — the loud-raw
208
+ * convention for a target that cannot be resolved. Malformed references
209
+ * are left untouched.
210
+ */
211
+ export function replaceLinkRefs(text, replacer) {
212
+ if (!mayContainLinkRef(text))
213
+ return text;
214
+ return text.replace(linkRefScanner(), (...args) => {
215
+ const raw = args[0];
216
+ const ref = refFromMatch(args.slice(0, 6));
217
+ return ref ? replacer(ref, raw) : raw;
218
+ });
219
+ }
220
+ /**
221
+ * Walk a JSON value (content values, field defaults, set items) and map
222
+ * every string through {@link replaceLinkRefs}. Returns the SAME
223
+ * reference when nothing changed, so callers can cheaply detect no-ops.
224
+ */
225
+ export function mapLinkRefsDeep(value, replacer) {
226
+ if (typeof value === "string")
227
+ return replaceLinkRefs(value, replacer);
228
+ if (Array.isArray(value)) {
229
+ let changed = false;
230
+ const next = value.map((v) => {
231
+ const r = mapLinkRefsDeep(v, replacer);
232
+ if (r !== v)
233
+ changed = true;
234
+ return r;
235
+ });
236
+ return changed ? next : value;
237
+ }
238
+ if (value !== null && typeof value === "object") {
239
+ let changed = false;
240
+ const out = {};
241
+ for (const [k, v] of Object.entries(value)) {
242
+ const r = mapLinkRefsDeep(v, replacer);
243
+ if (r !== v)
244
+ changed = true;
245
+ out[k] = r;
246
+ }
247
+ return changed ? out : value;
248
+ }
249
+ return value;
250
+ }
251
+ /** Every reference anywhere inside a JSON value. */
252
+ export function collectLinkRefsDeep(value) {
253
+ const out = [];
254
+ mapLinkRefsDeep(value, (ref, raw) => {
255
+ out.push(ref);
256
+ return raw;
257
+ });
258
+ return out;
259
+ }
260
+ /**
261
+ * `missingSlots` marker for a reference whose target does not exist:
262
+ * `link-target-missing:page/<id>` / `link-target-missing:media/<id>`.
263
+ * The editor's missing-content surface and the static generator's
264
+ * render gate read these literal strings.
265
+ */
266
+ export const LINK_TARGET_MISSING = "link-target-missing";
267
+ /**
268
+ * `missingSlots` marker for a reference rendered by a caller that gave
269
+ * the engine no resolver — never legitimate output; a deploy refuses it.
270
+ */
271
+ export const LINK_RESOLVER_UNAVAILABLE = "link-resolver-unavailable";
272
+ /**
273
+ * True for every link failure marker: a missing target, a malformed
274
+ * reference and a render without a resolver. The static generator's
275
+ * render gate and the nested-module echo filter both key on this, so a
276
+ * new marker added here blocks a deploy everywhere at once.
277
+ */
278
+ export function isLinkFailureMarker(marker) {
279
+ return (marker.startsWith(`${LINK_TARGET_MISSING}:`) ||
280
+ marker.startsWith(`${LINK_REF_MALFORMED}:`) ||
281
+ marker.startsWith(`${LINK_RESOLVER_UNAVAILABLE}:`));
282
+ }
283
+ /** The link failure markers among `markers`, in order. */
284
+ export function linkMarkersOf(markers) {
285
+ return markers.filter(isLinkFailureMarker);
286
+ }
287
+ /**
288
+ * Resolve every reference embedded in rendered HTML. Unresolvable
289
+ * references stay in the output verbatim (loud-raw, CLAUDE.md §2) and
290
+ * push a marker onto `missing`; `unpublished` ones render their URL and
291
+ * push nothing — that is a per-environment policy, not a render failure.
292
+ *
293
+ * Text that starts like a reference but breaks the grammar stays raw
294
+ * and pushes {@link LINK_REF_MALFORMED}, with or without a resolver.
295
+ *
296
+ * @param resolver undefined = the caller has no resolver; every
297
+ * reference then fails with {@link LINK_RESOLVER_UNAVAILABLE}.
298
+ */
299
+ export function resolveLinkRefsInHtml(html, resolver, missing) {
300
+ for (const raw of findMalformedLinkRefs(html))
301
+ missing.push(`${LINK_REF_MALFORMED}:${raw}`);
302
+ return replaceLinkRefs(html, (ref, raw) => {
303
+ if (!resolver) {
304
+ missing.push(`${LINK_RESOLVER_UNAVAILABLE}:${linkRefTargetKey(ref)}`);
305
+ return raw;
306
+ }
307
+ const r = resolver.resolve(ref);
308
+ if (r.status === "missing") {
309
+ missing.push(`${LINK_TARGET_MISSING}:${linkRefTargetKey(ref)}`);
310
+ return raw;
311
+ }
312
+ return r.url;
313
+ });
314
+ }
315
+ /**
316
+ * The per-environment policy for a reference that did not resolve
317
+ * cleanly (maintainer decision on #724): a missing target blocks
318
+ * everywhere; an unpublished one is a warning at Stage and blocks
319
+ * Publish live / promote. The editor preview shows drafts, so nothing
320
+ * there is an issue beyond a missing target.
321
+ */
322
+ export function linkIssueSeverity(env, status) {
323
+ if (status === "missing")
324
+ return "block";
325
+ if (status === "unpublished") {
326
+ if (env === "production")
327
+ return "block";
328
+ if (env === "staging")
329
+ return "warning";
330
+ }
331
+ return null;
332
+ }
333
+ /**
334
+ * The URL path a page is served at under `style`: `/` for the root,
335
+ * `/a/b/` (directory) or `/a/b` (no-extension) otherwise. Same shape as
336
+ * the path half of `resolveCanonicalUrl`.
337
+ */
338
+ export function pageHrefForStyle(path, style) {
339
+ const trimmed = trimSlashes(path);
340
+ if (trimmed.length === 0)
341
+ return "/";
342
+ return style === "no-extension" ? `/${trimmed}` : `/${trimmed}/`;
343
+ }
344
+ /** Build the URL a resolved page reference renders as. */
345
+ function pageRefUrl(ref, path, style) {
346
+ return (pageHrefForStyle(path, style) +
347
+ (ref.query ? `?${ref.query}` : "") +
348
+ (ref.anchor ? `#${ref.anchor}` : ""));
349
+ }
350
+ /**
351
+ * Build the render-wide link index. Media references resolve to the
352
+ * editor-served media URL (`/_caelo/media/<slug>[/<variant>]`) — the
353
+ * same URL a literal embed carries — so the preview's responsive-image
354
+ * enrichment and the static generator's media pass (content-hashed
355
+ * `/_assets/…`, srcset ladders) apply to them unchanged (#162 parity).
356
+ */
357
+ export function createSiteLinkIndex(input) {
358
+ const pages = new Map(input.pages.map((p) => [p.id, p]));
359
+ const media = new Map(input.media.map((m) => [m.id, m]));
360
+ const resolve = (ref) => {
361
+ if (ref.kind === "media") {
362
+ const asset = media.get(ref.mediaId);
363
+ if (!asset)
364
+ return { status: "missing" };
365
+ return { status: "resolved", url: buildMediaUrl(asset.slug, ref.variant ?? "orig") };
366
+ }
367
+ const page = pages.get(ref.pageId);
368
+ if (!page)
369
+ return { status: "missing" };
370
+ const url = pageRefUrl(ref, page.path, input.pageUrlStyle);
371
+ if (input.env !== "preview" && page.status !== "published") {
372
+ return { status: "unpublished", url };
373
+ }
374
+ return { status: "resolved", url };
375
+ };
376
+ return {
377
+ env: input.env,
378
+ pathOf: (pageId) => pages.get(pageId)?.path ?? null,
379
+ forPage: () => {
380
+ const observed = [];
381
+ return {
382
+ observed,
383
+ resolve(ref) {
384
+ const resolution = resolve(ref);
385
+ observed.push({ ref, resolution });
386
+ return resolution;
387
+ },
388
+ };
389
+ },
390
+ };
391
+ }
392
+ /**
393
+ * Turn stored references back into what an author writes: `/about`,
394
+ * `/about#team`, `/_caelo/media/hero`. Applied to every read that shows
395
+ * content to the AI or the operator, so neither ever has to learn the
396
+ * grammar (CLAUDE.md §1A); writing the humanised form back
397
+ * canonicalises to the same reference.
398
+ *
399
+ * A reference whose target is gone stays raw — it is broken, and a
400
+ * plausible-looking path would hide that.
401
+ */
402
+ export function humaniseLinkRefs(value, lookup) {
403
+ return mapLinkRefsDeep(value, (ref, raw) => {
404
+ if (ref.kind === "media") {
405
+ const slug = lookup.mediaSlug(ref.mediaId);
406
+ if (slug === null)
407
+ return raw;
408
+ return buildMediaUrl(slug, ref.variant ?? "orig");
409
+ }
410
+ const path = lookup.pagePath(ref.pageId);
411
+ if (path === null)
412
+ return raw;
413
+ return `${path}${ref.query ? `?${ref.query}` : ""}${ref.anchor ? `#${ref.anchor}` : ""}`;
414
+ });
415
+ }
416
+ //# sourceMappingURL=link-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-refs.js","sourceRoot":"","sources":["../src/link-refs.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,uDAAuD;AACvD,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AAuBxC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,oEAAoE;AACpE,+DAA+D;AAC/D,mEAAmE;AACnE,sEAAsE;AACtE,MAAM,QAAQ,GAAG,8DAA8D,CAAC;AAChF,uEAAuE;AACvE,2EAA2E;AAC3E,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,kEAAkE;AAClE,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAChD,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,sEAAsE;AACtE,gDAAgD;AAChD,MAAM,aAAa,GAAG,6BAA6B,CAAC;AACpD,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,qBAAqB;AACrB,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,wEAAwE;AACxE,yEAAyE;AACzE,gEAAgE;AAChE,MAAM,aAAa,GAAG,0DAA0D,CAAC;AAEjF,MAAM,aAAa,GAAG,SAAS,QAAQ,IAAI,UAAU,UAAU,SAAS,WAAW,UAAU,KAAK,CAAC;AACnG,MAAM,cAAc,GAAG,UAAU,QAAQ,SAAS,WAAW,MAAM,UAAU,EAAE,CAAC;AAEhF;;;;GAIG;AACH,SAAS,cAAc;IACrB,mEAAmE;IACnE,sEAAsE;IACtE,yBAAyB;IACzB,OAAO,IAAI,MAAM,CAAC,GAAG,aAAa,MAAM,aAAa,IAAI,cAAc,KAAK,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,UAAU,aAAa,GAAG,CAAC,CAAC;AAC9D,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,UAAU,cAAc,GAAG,CAAC,CAAC;AAEhE,0EAA0E;AAC1E,SAAS,YAAY,CAAC,CAAgC;IACpD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACvF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAW;YACzB,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;YACtB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;SACxB,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5F,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,GAAG,GACP,GAAG,CAAC,IAAI,KAAK,OAAO;QAClB,CAAC,CAAC,GAAG,eAAe,SAAS,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACjF,CAAC,CAAC,GAAG,eAAe,QAAQ,GAAG,CAAC,MAAM,EAAE;YACtC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAqC;YACxE,0GAA0G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,CAAC;AAC7E,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAChD,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAA+C;IAE/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAA2B,CAAC,CAAC;QACrE,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,QAA+C;IAE/C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,GAAG,IAAI,CAAC;YAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AA6CD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,CACL,MAAM,CAAC,UAAU,CAAC,GAAG,mBAAmB,GAAG,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,GAAG,yBAAyB,GAAG,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,OAAO,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,QAAkC,EAClC,OAAiB;IAEjB,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5F,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,GAAG,yBAAyB,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,mBAAmB,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAkB,EAClB,MAAgC;IAEhC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,IAAI,GAAG,KAAK,YAAY;YAAE,OAAO,OAAO,CAAC;QACzC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAqDD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAmB;IAChE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC;AACnE,CAAC;AAED,0DAA0D;AAC1D,SAAS,UAAU,CAAC,GAAgB,EAAE,IAAY,EAAE,KAAmB;IACrE,OAAO,CACL,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACrC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,CAAC,GAAY,EAAkB,EAAE;QAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC,CAAC;IACF,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI;QACnD,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,QAAQ,GAA6B,EAAE,CAAC;YAC9C,OAAO;gBACL,QAAQ;gBACR,OAAO,CAAC,GAAG;oBACT,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;oBACnC,OAAO,UAAU,CAAC;gBACpB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAYD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAAQ,EAAE,MAA0B;IACtE,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACzC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,GAAG,CAAC;YAC9B,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAC9B,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3F,CAAC,CAAM,CAAC;AACV,CAAC"}
package/dist/media.d.ts CHANGED
@@ -185,8 +185,8 @@ export declare const mediaListInputSchema: z.ZodObject<{
185
185
  }>>;
186
186
  visibility: z.ZodDefault<z.ZodEnum<{
187
187
  reference: "reference";
188
- all: "all";
189
188
  library: "library";
189
+ all: "all";
190
190
  }>>;
191
191
  limit: z.ZodDefault<z.ZodNumber>;
192
192
  offset: z.ZodDefault<z.ZodNumber>;
@@ -54,6 +54,7 @@
54
54
  * of band so the page's <head>/<style> + footer scripts are stable.
55
55
  */
56
56
  import type { ModuleFieldKind } from "./content.js";
57
+ import { type LinkResolver } from "./link-refs.js";
57
58
  import { type TemplateField } from "./template-engine.js";
58
59
  /** A module the recursion can render: its code plus its field schema. */
59
60
  export interface NestedModuleResource {
@@ -134,7 +135,7 @@ export interface NestedRenderThemeAssets {
134
135
  export declare function renderModuleWithContent(moduleId: string, contentInstanceId: string, resolver: NestedRenderResolver, themeAssets?: NestedRenderThemeAssets, pluginLists?: {
135
136
  readonly dataLists: Readonly<Record<string, ReadonlyArray<Readonly<Record<string, string>>>>>;
136
137
  readonly dormantDataLists: Readonly<Record<string, string>>;
137
- }): NestedRenderResult;
138
+ }, linkResolver?: LinkResolver): NestedRenderResult;
138
139
  /**
139
140
  * A module as the composer places it: its HTML, fields and the values
140
141
  * that fill them (a content instance's values, possibly replaced by a
@@ -160,6 +161,8 @@ export declare function renderPlacedModule(placement: NestedRenderPlacement, res
160
161
  readonly themeAssets?: NestedRenderThemeAssets;
161
162
  readonly dataLists?: Readonly<Record<string, ReadonlyArray<Readonly<Record<string, string>>>>>;
162
163
  readonly dormantDataLists?: Readonly<Record<string, string>>;
164
+ /** Epic #724 — resolves internal references (see `link-refs.ts`). */
165
+ readonly linkResolver?: LinkResolver;
163
166
  }): NestedRenderResult;
164
167
  /**
165
168
  * Walk a content_instance's values to find every nested-module reference
@@ -1 +1 @@
1
- {"version":3,"file":"nested-module-render.d.ts","sourceRoot":"","sources":["../src/nested-module-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nested-module-render.d.ts","sourceRoot":"","sources":["../src/nested-module-render.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  // SPDX-License-Identifier: MPL-2.0
2
+ import { isLinkFailureMarker } from "./link-refs.js";
2
3
  import { caeloMissingComment, renderTemplate } from "./template-engine.js";
3
4
  const MAX_RECURSION_DEPTH = 8;
4
5
  function isNestedRef(v) {
@@ -20,7 +21,7 @@ function fail(ctx, reason) {
20
21
  * Render a module's HTML against a content_instance's values, recursing
21
22
  * into nested-module fields.
22
23
  */
23
- export function renderModuleWithContent(moduleId, contentInstanceId, resolver, themeAssets, pluginLists) {
24
+ export function renderModuleWithContent(moduleId, contentInstanceId, resolver, themeAssets, pluginLists, linkResolver) {
24
25
  const touched = new Set();
25
26
  const missing = [];
26
27
  const failures = [];
@@ -35,6 +36,7 @@ export function renderModuleWithContent(moduleId, contentInstanceId, resolver, t
35
36
  themeAssets,
36
37
  dataLists: pluginLists?.dataLists ?? {},
37
38
  dormantDataLists: pluginLists?.dormantDataLists ?? {},
39
+ linkResolver,
38
40
  });
39
41
  return { html, touchedModuleIds: touched, missingSlots: missing, failures };
40
42
  }
@@ -76,6 +78,7 @@ function renderInner(moduleId, contentInstanceId, ctx) {
76
78
  themeAssets: ctx.themeAssets,
77
79
  dataLists: ctx.dataLists,
78
80
  dormantDataLists: ctx.dormantDataLists,
81
+ linkResolver: ctx.linkResolver,
79
82
  };
80
83
  return substituteWithRecursion(mod.html, mod.fields, ci.values, childCtx);
81
84
  }
@@ -124,9 +127,17 @@ function substituteWithRecursion(html, fields, values, ctx) {
124
127
  themeAssets: ctx.themeAssets,
125
128
  dataLists: ctx.dataLists,
126
129
  dormantDataLists: ctx.dormantDataLists,
130
+ linkResolver: ctx.linkResolver,
127
131
  });
128
- for (const m of result.missingSlots)
132
+ for (const m of result.missingSlots) {
133
+ // A broken reference inside a nested module stays raw in the partial
134
+ // HTML (loud-raw), so the enclosing module's render meets it again.
135
+ // The nested render already reported it with the precise field
136
+ // trail; drop the echo instead of reporting one broken link twice.
137
+ if (isLinkFailureMarker(m) && ctx.missing.includes(m))
138
+ continue;
129
139
  fail(ctx, m);
140
+ }
130
141
  return result.html;
131
142
  }
132
143
  /**
@@ -193,6 +204,7 @@ export function renderPlacedModule(placement, resolver, options) {
193
204
  themeAssets: options.themeAssets,
194
205
  dataLists: options.dataLists ?? {},
195
206
  dormantDataLists: options.dormantDataLists ?? {},
207
+ linkResolver: options.linkResolver,
196
208
  });
197
209
  return { html, touchedModuleIds: touched, missingSlots: missing, failures };
198
210
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nested-module-render.js","sourceRoot":"","sources":["../src/nested-module-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nested-module-render.js","sourceRoot":"","sources":["../src/nested-module-render.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { z } from "zod";
8
8
  /** Every state of an update request (`platform_update_requests.status`). */
9
- export declare const PLATFORM_UPDATE_STATUSES: readonly ["pending", "running", "succeeded", "rolled_back", "failed", "refused", "needs_cloud_shell", "cancelled"];
9
+ export declare const PLATFORM_UPDATE_STATUSES: readonly ["pending", "running", "succeeded", "rolled_back", "failed", "refused", "needs_cloud_shell", "cancelled", "superseded"];
10
10
  export type PlatformUpdateStatusValue = (typeof PLATFORM_UPDATE_STATUSES)[number];
11
11
  /** States in which a request is still in flight (at most one at a time). */
12
12
  export declare const ACTIVE_UPDATE_STATUSES: readonly PlatformUpdateStatusValue[];
@@ -14,10 +14,27 @@ export declare const ACTIVE_UPDATE_STATUSES: readonly PlatformUpdateStatusValue[
14
14
  export declare function isFinishedUpdateStatus(status: PlatformUpdateStatusValue): boolean;
15
15
  /**
16
16
  * The phases of an upgrader run, in order (`platform_update_events.phase`).
17
- * `rollback` only appears when a roll had to be undone.
17
+ * `rollback` only appears when a roll had to be undone; `converge` only on
18
+ * the converge route (#819), where the install's cloud setup is brought to
19
+ * what the release expects before and around the roll.
18
20
  */
19
- export declare const PLATFORM_UPDATE_PHASES: readonly ["queued", "start", "verify", "assess", "backup", "health-baseline", "migrations", "roll", "health", "rollback", "record", "self-update", "finish"];
21
+ export declare const PLATFORM_UPDATE_PHASES: readonly ["queued", "start", "verify", "assess", "backup", "converge", "health-baseline", "migrations", "roll", "health", "rollback", "record", "self-update", "finish"];
20
22
  export type PlatformUpdatePhase = (typeof PLATFORM_UPDATE_PHASES)[number];
23
+ /**
24
+ * Which in-cloud job installs a request (#819, `platform_update_requests.route`):
25
+ *
26
+ * - `app_roll` — the upgrader job (its own narrow service account): new
27
+ * images + expand-only migrations, nothing in the cloud setup changes;
28
+ * - `converge` — the converge job, running as the install's existing
29
+ * `caelo-provisioner` account: the same upgrade an Owner runs from a
30
+ * terminal (backup, converge, roll, health check, rollback), for a
31
+ * release that raises the infrastructure contract.
32
+ *
33
+ * The admin picks the route from the release manifest before the click;
34
+ * either job re-checks everything against the signed manifest.
35
+ */
36
+ export declare const PLATFORM_UPDATE_ROUTES: readonly ["app_roll", "converge"];
37
+ export type PlatformUpdateRoute = (typeof PLATFORM_UPDATE_ROUTES)[number];
21
38
  /** Severity of one timeline line. */
22
39
  export declare const PLATFORM_UPDATE_EVENT_LEVELS: readonly ["info", "success", "warn", "error"];
23
40
  export type PlatformUpdateEventLevel = (typeof PLATFORM_UPDATE_EVENT_LEVELS)[number];
@@ -50,8 +67,12 @@ export type UpdateKind = "major" | "minor" | "patch";
50
67
  * @example updateKind("0.10.45", "0.10.46") // → "patch"
51
68
  */
52
69
  export declare function updateKind(from: string, to: string): UpdateKind | null;
53
- /** The automatic-update modes. */
54
- export declare const UPDATE_POLICY_MODES: readonly ["off", "notify", "auto"];
70
+ /**
71
+ * The automatic-update modes. There is no "off": security releases are
72
+ * always announced (maintainer decision on #862; migration 0301 moved
73
+ * stored `off` rows to `notify`).
74
+ */
75
+ export declare const UPDATE_POLICY_MODES: readonly ["notify", "auto"];
55
76
  export type UpdatePolicyMode = (typeof UPDATE_POLICY_MODES)[number];
56
77
  /** Release channels a policy may follow (only `stable` installs automatically). */
57
78
  export declare const UPDATE_POLICY_CHANNELS: readonly ["stable", "rc", "beta", "alpha"];
@@ -65,12 +86,12 @@ export declare function isKnownTimeZone(tz: string): boolean;
65
86
  export declare const updatePolicySchema: z.ZodObject<{
66
87
  mode: z.ZodEnum<{
67
88
  auto: "auto";
68
- off: "off";
69
89
  notify: "notify";
70
90
  }>;
71
91
  autoSecurity: z.ZodBoolean;
72
92
  autoPatch: z.ZodBoolean;
73
93
  autoMinor: z.ZodBoolean;
94
+ autoConverge: z.ZodBoolean;
74
95
  channel: z.ZodEnum<{
75
96
  stable: "stable";
76
97
  rc: "rc";