@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.
- package/dist/auto-update.d.ts +17 -3
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +21 -9
- package/dist/auto-update.js.map +1 -1
- package/dist/fonts.d.ts +12 -0
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +37 -1
- package/dist/fonts.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/link-refs.d.ts +250 -0
- package/dist/link-refs.d.ts.map +1 -0
- package/dist/link-refs.js +416 -0
- package/dist/link-refs.js.map +1 -0
- package/dist/media.d.ts +1 -1
- package/dist/nested-module-render.d.ts +4 -1
- package/dist/nested-module-render.d.ts.map +1 -1
- package/dist/nested-module-render.js +14 -2
- package/dist/nested-module-render.js.map +1 -1
- package/dist/platform-updates.d.ts +27 -6
- package/dist/platform-updates.d.ts.map +1 -1
- package/dist/platform-updates.js +37 -3
- package/dist/platform-updates.js.map +1 -1
- package/dist/preview-compose.d.ts +10 -0
- package/dist/preview-compose.d.ts.map +1 -1
- package/dist/preview-compose.js +58 -20
- package/dist/preview-compose.js.map +1 -1
- package/dist/proposal-status.d.ts +1 -1
- package/dist/raw-text-escape.d.ts +18 -0
- package/dist/raw-text-escape.d.ts.map +1 -0
- package/dist/raw-text-escape.js +40 -0
- package/dist/raw-text-escape.js.map +1 -0
- package/dist/redirect-emit-gcp.d.ts +11 -1
- package/dist/redirect-emit-gcp.d.ts.map +1 -1
- package/dist/redirect-emit-gcp.js +16 -2
- package/dist/redirect-emit-gcp.js.map +1 -1
- package/dist/release-manifest.d.ts +14 -4
- package/dist/release-manifest.d.ts.map +1 -1
- package/dist/release-manifest.js +19 -3
- package/dist/release-manifest.js.map +1 -1
- package/dist/responsive-images.d.ts.map +1 -1
- package/dist/responsive-images.js +3 -3
- package/dist/responsive-images.js.map +1 -1
- package/dist/seo.js +1 -1
- package/dist/seo.js.map +1 -1
- package/dist/template-balance.d.ts +3 -0
- package/dist/template-balance.d.ts.map +1 -0
- package/dist/template-balance.js +214 -0
- package/dist/template-balance.js.map +1 -0
- package/dist/template-engine.d.ts +11 -0
- package/dist/template-engine.d.ts.map +1 -1
- package/dist/template-engine.js +12 -0
- package/dist/template-engine.js.map +1 -1
- package/dist/theme-render.d.ts +2 -2
- package/dist/theme-render.d.ts.map +1 -1
- package/dist/theme-render.js +29 -5
- package/dist/theme-render.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/src/auto-update.test.ts +74 -4
- package/src/auto-update.ts +31 -9
- package/src/fonts.test.ts +37 -0
- package/src/fonts.ts +38 -1
- package/src/index.ts +2 -0
- package/src/link-refs.test.ts +552 -0
- package/src/link-refs.ts +569 -0
- package/src/nested-module-render.ts +18 -1
- package/src/platform-updates.test.ts +5 -0
- package/src/platform-updates.ts +39 -3
- package/src/preview-compose-deferrals.test.ts +103 -0
- package/src/preview-compose.ts +73 -24
- package/src/raw-text-escape.ts +44 -0
- package/src/redirect-emit-gcp.ts +16 -2
- package/src/redirect-emit.test.ts +6 -4
- package/src/release-manifest.ts +39 -7
- package/src/responsive-images.test.ts +10 -0
- package/src/responsive-images.ts +6 -3
- package/src/seo.test.ts +7 -0
- package/src/seo.ts +1 -1
- package/src/template-balance.test.ts +97 -0
- package/src/template-balance.ts +216 -0
- package/src/template-engine.ts +23 -0
- package/src/theme-render-sanitize.test.ts +40 -0
- package/src/theme-render.ts +40 -8
- package/src/version.ts +1 -1
package/dist/theme-render.d.ts
CHANGED
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
import { type ThemeDocument } from "./themes.js";
|
|
31
31
|
/** Renderer-level error for cyclic / unresolved aliases. */
|
|
32
32
|
export declare class ThemeRenderError extends Error {
|
|
33
|
-
readonly kind: "cyclic-alias" | "missing-alias";
|
|
33
|
+
readonly kind: "cyclic-alias" | "missing-alias" | "invalid-selector";
|
|
34
34
|
readonly path: string;
|
|
35
|
-
constructor(kind: "cyclic-alias" | "missing-alias", path: string, message: string);
|
|
35
|
+
constructor(kind: "cyclic-alias" | "missing-alias" | "invalid-selector", path: string, message: string);
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Optional render options. The `selector` parameter (v0.11.1, issue #76)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-render.d.ts","sourceRoot":"","sources":["../src/theme-render.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpF,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"theme-render.d.ts","sourceRoot":"","sources":["../src/theme-render.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpF,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEpB,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,kBAAkB,EAC3D,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;CAOlB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAuBjG;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAElE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE,CAmB7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmB5E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgBnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA8ChE"}
|
package/dist/theme-render.js
CHANGED
|
@@ -53,6 +53,9 @@ export class ThemeRenderError extends Error {
|
|
|
53
53
|
*/
|
|
54
54
|
export function renderThemeCss(tokens, options = {}) {
|
|
55
55
|
const selector = options.selector ?? ":root";
|
|
56
|
+
if (/[{};]|<\/style|<!--|--!?>/i.test(selector)) {
|
|
57
|
+
throw new ThemeRenderError("invalid-selector", selector, `Invalid CSS selector for theme rendering: '${selector}'`);
|
|
58
|
+
}
|
|
56
59
|
const flat = flattenTokens(tokens);
|
|
57
60
|
const resolveCache = new Map();
|
|
58
61
|
const lightLines = [];
|
|
@@ -300,6 +303,27 @@ function lookupPath(doc, path) {
|
|
|
300
303
|
// ────────────────────────────────────────────────────────────────────
|
|
301
304
|
// Per-category CSS emission
|
|
302
305
|
// ────────────────────────────────────────────────────────────────────
|
|
306
|
+
/**
|
|
307
|
+
* Serialize a token-path segment as part of a CSS custom-property name, the
|
|
308
|
+
* way `CSS.escape` does: ASCII letters, digits, `-`, `_` and every
|
|
309
|
+
* non-ASCII character stay as they are (so `color.grün` is still
|
|
310
|
+
* `--color-grün`), anything else becomes a hex escape. A theme key can
|
|
311
|
+
* therefore never end the declaration, the rule, or the surrounding
|
|
312
|
+
* `<style>` element.
|
|
313
|
+
*/
|
|
314
|
+
function escapeCssIdentPart(part) {
|
|
315
|
+
let out = "";
|
|
316
|
+
for (const ch of part) {
|
|
317
|
+
const cp = ch.codePointAt(0) ?? 0;
|
|
318
|
+
if (cp === 0)
|
|
319
|
+
out += "\\fffd ";
|
|
320
|
+
else if (/[A-Za-z0-9_-]/.test(ch) || cp >= 0x80)
|
|
321
|
+
out += ch;
|
|
322
|
+
else
|
|
323
|
+
out += `\\${cp.toString(16)} `;
|
|
324
|
+
}
|
|
325
|
+
return out;
|
|
326
|
+
}
|
|
303
327
|
function emitTokenLines(category, path, value, lightLines, darkLines) {
|
|
304
328
|
// Strip the category prefix to get the rest of the path. e.g.
|
|
305
329
|
// `color.brand.primary` → `brand-primary` becomes `--color-brand-primary`.
|
|
@@ -315,10 +339,10 @@ function emitTokenLines(category, path, value, lightLines, darkLines) {
|
|
|
315
339
|
// every category (color/spacing/radius/etc.) so any future
|
|
316
340
|
// DTCG-group-with-DEFAULT-alias works the same way.
|
|
317
341
|
const restRaw = path.slice(category.length + 1);
|
|
318
|
-
const rest = restRaw.endsWith(".DEFAULT")
|
|
342
|
+
const rest = escapeCssIdentPart(restRaw.endsWith(".DEFAULT")
|
|
319
343
|
? restRaw.slice(0, -".DEFAULT".length).replace(/\./g, "-")
|
|
320
|
-
: restRaw.replace(/\./g, "-");
|
|
321
|
-
const baseName = `--${category === "ease" ? "ease" : category}-${rest}`;
|
|
344
|
+
: restRaw.replace(/\./g, "-"));
|
|
345
|
+
const baseName = `--${category === "ease" ? "ease" : escapeCssIdentPart(category)}-${rest}`;
|
|
322
346
|
switch (category) {
|
|
323
347
|
case "color":
|
|
324
348
|
emitColor(baseName, value, lightLines, darkLines);
|
|
@@ -384,9 +408,9 @@ function emitTypography(rest, value, out) {
|
|
|
384
408
|
}
|
|
385
409
|
function emitShadow(baseName, value, out) {
|
|
386
410
|
// Literal CSS box-shadow string (the tolerant `shadowValueString` form).
|
|
387
|
-
//
|
|
411
|
+
// Scrubbed through sanitizeCssTokenValue like every other token value.
|
|
388
412
|
if (typeof value === "string") {
|
|
389
|
-
const s = value.trim();
|
|
413
|
+
const s = sanitizeCssTokenValue(value.trim());
|
|
390
414
|
if (s.length > 0)
|
|
391
415
|
out.push(`${baseName}:${s};`);
|
|
392
416
|
return;
|
package/dist/theme-render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-render.js","sourceRoot":"","sources":["../src/theme-render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-render.js","sourceRoot":"","sources":["../src/theme-render.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
|
|
20
20
|
* follow standard SemVer.
|
|
21
21
|
*/
|
|
22
|
-
export declare const CAELO_VERSION = "0.10.
|
|
22
|
+
export declare const CAELO_VERSION = "0.10.57";
|
|
23
23
|
/**
|
|
24
24
|
* Deprecated alias for back-compat — early P17 work spelled this
|
|
25
25
|
* `CALEO_VERSION` (typo of "Caelo"). New code should import
|
|
@@ -31,7 +31,7 @@ export declare const CAELO_VERSION = "0.10.53";
|
|
|
31
31
|
*
|
|
32
32
|
* @deprecated use CAELO_VERSION
|
|
33
33
|
*/
|
|
34
|
-
export declare const CALEO_VERSION = "0.10.
|
|
34
|
+
export declare const CALEO_VERSION = "0.10.57";
|
|
35
35
|
/**
|
|
36
36
|
* Parsed shape — major/minor/patch + optional pre-release tag.
|
|
37
37
|
* Stable interface for callers that need to feature-gate (rare —
|
package/dist/version.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
|
|
21
21
|
* follow standard SemVer.
|
|
22
22
|
*/
|
|
23
|
-
export const CAELO_VERSION = "0.10.
|
|
23
|
+
export const CAELO_VERSION = "0.10.57";
|
|
24
24
|
/**
|
|
25
25
|
* Deprecated alias for back-compat — early P17 work spelled this
|
|
26
26
|
* `CALEO_VERSION` (typo of "Caelo"). New code should import
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caelo-cms/shared",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.57",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"description": "Shared Zod schemas + types + the two-pass HTML composer used by every Caelo CMS workspace package. Stable enough for plugin authors and embedders to depend on directly.",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"colorjs.io": "^0.7.1",
|
|
39
39
|
"htmlparser2": "^12.0.0",
|
|
40
40
|
"mustache": "^4.2.0",
|
|
41
|
-
"zod": "4.6.
|
|
41
|
+
"zod": "4.6.7"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/mustache": "^4.2.6"
|
package/src/auto-update.test.ts
CHANGED
|
@@ -19,6 +19,7 @@ const POLICY: StoredUpdatePolicy = {
|
|
|
19
19
|
autoSecurity: true,
|
|
20
20
|
autoPatch: true,
|
|
21
21
|
autoMinor: false,
|
|
22
|
+
autoConverge: false,
|
|
22
23
|
channel: "stable",
|
|
23
24
|
windowStart: null,
|
|
24
25
|
windowEnd: null,
|
|
@@ -56,6 +57,7 @@ function input(over: Partial<AutoUpdateInput> & { version?: string; publishedHou
|
|
|
56
57
|
release: { version, publishedAt: hoursAgo(publishedHoursAgo) },
|
|
57
58
|
facts: FACTS,
|
|
58
59
|
upgraderAvailable: true,
|
|
60
|
+
convergeAvailable: true,
|
|
59
61
|
now: NOW,
|
|
60
62
|
...rest,
|
|
61
63
|
} satisfies AutoUpdateInput;
|
|
@@ -244,10 +246,12 @@ describe("decideAutoUpdate — pause", () => {
|
|
|
244
246
|
|
|
245
247
|
describe("decideAutoUpdate — releases that never install automatically", () => {
|
|
246
248
|
const cases: [string, Partial<AutoUpdateInput>, string][] = [
|
|
247
|
-
|
|
249
|
+
// autoConverge is off by default: the Owner installs it (#819).
|
|
250
|
+
["infra change", { facts: { ...FACTS, infraChange: true } }, "manual"],
|
|
251
|
+
["infra change on a security fix", { facts: { ...SECURITY, infraChange: true } }, "manual"],
|
|
248
252
|
[
|
|
249
|
-
"infra change on
|
|
250
|
-
{ facts: { ...
|
|
253
|
+
"infra change, no converge job on this install",
|
|
254
|
+
{ facts: { ...FACTS, infraChange: true }, convergeAvailable: false },
|
|
251
255
|
"needs_cloud_shell",
|
|
252
256
|
],
|
|
253
257
|
["destructive migrations", { facts: { ...FACTS, contractMigrations: true } }, "manual"],
|
|
@@ -259,6 +263,73 @@ describe("decideAutoUpdate — releases that never install automatically", () =>
|
|
|
259
263
|
expect(decideAutoUpdate({ ...input({}), ...over }).action).toBe(action);
|
|
260
264
|
});
|
|
261
265
|
|
|
266
|
+
it("auto_converge on installs a cloud-setup change through the converge job (#819)", () => {
|
|
267
|
+
const everything = {
|
|
268
|
+
...POLICY,
|
|
269
|
+
autoSecurity: true,
|
|
270
|
+
autoPatch: true,
|
|
271
|
+
autoMinor: true,
|
|
272
|
+
autoConverge: true,
|
|
273
|
+
};
|
|
274
|
+
for (const facts of [
|
|
275
|
+
{ ...FACTS, infraChange: true },
|
|
276
|
+
{ ...SECURITY, infraChange: true },
|
|
277
|
+
]) {
|
|
278
|
+
for (const version of [VERSIONS.patch, VERSIONS.minor]) {
|
|
279
|
+
const d = decideAutoUpdate(input({ policy: everything, facts, version }));
|
|
280
|
+
expect(d.action).toBe("install");
|
|
281
|
+
expect(d.action === "install" && d.route).toBe("converge");
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
it("auto_converge only widens WHERE a release may install, never WHICH kinds", () => {
|
|
287
|
+
const d = decideAutoUpdate(
|
|
288
|
+
input({
|
|
289
|
+
policy: { ...POLICY, autoPatch: false, autoSecurity: false, autoConverge: true },
|
|
290
|
+
facts: { ...FACTS, infraChange: true },
|
|
291
|
+
}),
|
|
292
|
+
);
|
|
293
|
+
expect(d.action).toBe("notify");
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it("auto_converge still waits for the soak period and never takes destructive migrations", () => {
|
|
297
|
+
const on = { ...POLICY, autoPatch: true, autoConverge: true };
|
|
298
|
+
const soaking = decideAutoUpdate(
|
|
299
|
+
input({ policy: on, facts: { ...FACTS, infraChange: true }, publishedHoursAgo: 1 }),
|
|
300
|
+
);
|
|
301
|
+
expect(soaking.action).toBe("wait");
|
|
302
|
+
expect(soaking.action === "wait" && soaking.route).toBe("converge");
|
|
303
|
+
const destructive = decideAutoUpdate(
|
|
304
|
+
input({ policy: on, facts: { ...FACTS, infraChange: true, contractMigrations: true } }),
|
|
305
|
+
);
|
|
306
|
+
expect(destructive.action).toBe("manual");
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
it("a converge-route install needs the converge job, not the upgrader", () => {
|
|
310
|
+
const on = { ...POLICY, autoPatch: true, autoConverge: true };
|
|
311
|
+
const d = decideAutoUpdate(
|
|
312
|
+
input({ policy: on, facts: { ...FACTS, infraChange: true }, upgraderAvailable: false }),
|
|
313
|
+
);
|
|
314
|
+
expect(d.action).toBe("install");
|
|
315
|
+
const none = decideAutoUpdate(
|
|
316
|
+
input({ policy: on, facts: { ...FACTS, infraChange: true }, convergeAvailable: false }),
|
|
317
|
+
);
|
|
318
|
+
expect(none.action).toBe("needs_cloud_shell");
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
it("auto_converge off: the Owner installs it from Settings → Updates", () => {
|
|
322
|
+
const d = decideAutoUpdate(input({ facts: { ...FACTS, infraChange: true } }));
|
|
323
|
+
expect(d.action).toBe("manual");
|
|
324
|
+
expect(d.reason).toContain("Settings → Updates");
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
it("auto_converge does not touch releases without a cloud-setup change", () => {
|
|
328
|
+
const off = decideAutoUpdate(input({}));
|
|
329
|
+
const on = decideAutoUpdate(input({ policy: { ...POLICY, autoConverge: true } }));
|
|
330
|
+
expect(on).toEqual(off);
|
|
331
|
+
});
|
|
332
|
+
|
|
262
333
|
it("infra unknown here is left to the upgrader (it checks install.json)", () => {
|
|
263
334
|
expect(decideAutoUpdate(input({ facts: { ...FACTS, infraChange: null } })).action).toBe(
|
|
264
335
|
"install",
|
|
@@ -289,7 +360,6 @@ describe("decideAutoUpdate — modes and versions", () => {
|
|
|
289
360
|
it.each([
|
|
290
361
|
["up to date", { version: INSTALLED }, "none"],
|
|
291
362
|
["older release", { version: "0.10.40" }, "none"],
|
|
292
|
-
["notices off", { policy: { ...POLICY, mode: "off" as const } }, "none"],
|
|
293
363
|
["notify mode", { policy: { ...POLICY, mode: "notify" as const } }, "notify"],
|
|
294
364
|
[
|
|
295
365
|
"notify mode, infra change",
|
package/src/auto-update.ts
CHANGED
|
@@ -20,11 +20,16 @@
|
|
|
20
20
|
* the soak period.
|
|
21
21
|
*
|
|
22
22
|
* Rules, in order (maintainer decisions on #696):
|
|
23
|
-
* 1. nothing newer
|
|
23
|
+
* 1. nothing newer → none (there is no "notices off": security
|
|
24
|
+
* releases are always announced, #862);
|
|
24
25
|
* 2. off the stable channel, or the policy only notifies → notify;
|
|
25
26
|
* 3. major → notify (never automatic before 1.0);
|
|
26
27
|
* 4. release information unreadable → blocked (fails loudly, no guess);
|
|
27
|
-
* 5. changes the cloud setup
|
|
28
|
+
* 5. changes the cloud setup (#819): with no converge job on this
|
|
29
|
+
* install → needs_cloud_shell (the terminal path); with one but
|
|
30
|
+
* `autoConverge` off → manual (the Owner installs it from Settings →
|
|
31
|
+
* Updates); with `autoConverge` on → on through the rules below, and
|
|
32
|
+
* an install it decides goes to the converge job (`route: converge`);
|
|
28
33
|
* 6. destructive database changes → manual (never automatic);
|
|
29
34
|
* 7. the kind is not switched on (security / patch / minor) → notify;
|
|
30
35
|
* 8. no upgrader on this install → blocked;
|
|
@@ -36,6 +41,7 @@
|
|
|
36
41
|
|
|
37
42
|
import {
|
|
38
43
|
inMaintenanceWindow,
|
|
44
|
+
type PlatformUpdateRoute,
|
|
39
45
|
type StoredUpdatePolicy,
|
|
40
46
|
type UpdateKind,
|
|
41
47
|
updateKind,
|
|
@@ -106,6 +112,11 @@ export interface AutoUpdateInput {
|
|
|
106
112
|
readonly facts: ReleaseFacts | { readonly unavailable: string };
|
|
107
113
|
/** This install has an upgrader the admin can hand a request to. */
|
|
108
114
|
readonly upgraderAvailable: boolean;
|
|
115
|
+
/**
|
|
116
|
+
* This install has a converge job the admin can start (#819): releases
|
|
117
|
+
* that change the cloud setup can install from Caelo at all.
|
|
118
|
+
*/
|
|
119
|
+
readonly convergeAvailable: boolean;
|
|
109
120
|
/** Why it has none right now, in plain words (null: none set up at all). */
|
|
110
121
|
readonly upgraderProblem?: string | null;
|
|
111
122
|
readonly now: Date;
|
|
@@ -125,6 +136,8 @@ export type AutoUpdateDecision =
|
|
|
125
136
|
readonly version: string;
|
|
126
137
|
readonly kind: UpdateKind;
|
|
127
138
|
readonly basis: AutoUpdateBasis;
|
|
139
|
+
/** Which job installs it once the wait is over. */
|
|
140
|
+
readonly route: PlatformUpdateRoute;
|
|
128
141
|
readonly reason: string;
|
|
129
142
|
/** When it becomes installable; null = until the Owner resumes. */
|
|
130
143
|
readonly until: Date | null;
|
|
@@ -136,6 +149,8 @@ export type AutoUpdateDecision =
|
|
|
136
149
|
readonly version: string;
|
|
137
150
|
readonly kind: UpdateKind;
|
|
138
151
|
readonly basis: AutoUpdateBasis;
|
|
152
|
+
/** Which job installs it: the upgrader, or the converge job (#819). */
|
|
153
|
+
readonly route: PlatformUpdateRoute;
|
|
139
154
|
readonly reason: string;
|
|
140
155
|
};
|
|
141
156
|
|
|
@@ -194,9 +209,6 @@ export function decideAutoUpdate(input: AutoUpdateInput): AutoUpdateDecision {
|
|
|
194
209
|
if (kind === null) {
|
|
195
210
|
return { action: "none", reason: `v${input.installedVersion} is the newest release.` };
|
|
196
211
|
}
|
|
197
|
-
if (policy.mode === "off") {
|
|
198
|
-
return { action: "none", reason: "Update notices are switched off in the update policy." };
|
|
199
|
-
}
|
|
200
212
|
const v = release.version;
|
|
201
213
|
const base = { version: v, kind } as const;
|
|
202
214
|
if (!isStable(v)) {
|
|
@@ -228,13 +240,22 @@ export function decideAutoUpdate(input: AutoUpdateInput): AutoUpdateDecision {
|
|
|
228
240
|
};
|
|
229
241
|
}
|
|
230
242
|
const facts = input.facts;
|
|
231
|
-
|
|
243
|
+
const converge = facts.infraChange === true;
|
|
244
|
+
if (converge && !input.convergeAvailable) {
|
|
232
245
|
return {
|
|
233
246
|
action: "needs_cloud_shell",
|
|
234
247
|
...base,
|
|
235
|
-
reason: `v${v} changes this install's cloud setup,
|
|
248
|
+
reason: `v${v} changes this install's cloud setup, and this install has no converge job to do that from Caelo. The Owner installs it once with their own account in Cloud Shell or from the computer they installed from.`,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
if (converge && !policy.autoConverge) {
|
|
252
|
+
return {
|
|
253
|
+
action: "manual",
|
|
254
|
+
...base,
|
|
255
|
+
reason: `v${v} changes this install's cloud setup. The update policy does not install those automatically; the Owner installs it from Settings → Updates.`,
|
|
236
256
|
};
|
|
237
257
|
}
|
|
258
|
+
const route: PlatformUpdateRoute = converge ? "converge" : "app_roll";
|
|
238
259
|
if (facts.contractMigrations) {
|
|
239
260
|
return {
|
|
240
261
|
action: "manual",
|
|
@@ -258,7 +279,8 @@ export function decideAutoUpdate(input: AutoUpdateInput): AutoUpdateDecision {
|
|
|
258
279
|
reason: `v${v} is a ${what}; the update policy does not install those automatically. The Owner installs it.`,
|
|
259
280
|
};
|
|
260
281
|
}
|
|
261
|
-
|
|
282
|
+
// A converge-route install needs the converge job (checked above), not the upgrader.
|
|
283
|
+
if (!converge && !input.upgraderAvailable) {
|
|
262
284
|
return {
|
|
263
285
|
action: "blocked",
|
|
264
286
|
...base,
|
|
@@ -267,7 +289,7 @@ export function decideAutoUpdate(input: AutoUpdateInput): AutoUpdateDecision {
|
|
|
267
289
|
: `v${v} could install automatically, but this install has no upgrader the admin can start. Run the upgrade command from Settings → Updates once; it sets the upgrader up.`,
|
|
268
290
|
};
|
|
269
291
|
}
|
|
270
|
-
const auto = { ...base, basis } as const;
|
|
292
|
+
const auto = { ...base, basis, route } as const;
|
|
271
293
|
if (isPausedAt(policy, now)) {
|
|
272
294
|
const until = policy.pausedUntil === null ? null : new Date(policy.pausedUntil);
|
|
273
295
|
const who = policy.pausedByOwner ? "by the Owner" : "after a failed automatic install";
|
package/src/fonts.test.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { describe, expect, it } from "bun:test";
|
|
|
10
10
|
import {
|
|
11
11
|
buildFontFaceCss,
|
|
12
12
|
extractThemeFontRequests,
|
|
13
|
+
fontFaceProblem,
|
|
13
14
|
fontUnresolvableMarker,
|
|
14
15
|
googleFontsCssUrl,
|
|
15
16
|
isSystemFontFamily,
|
|
@@ -155,3 +156,39 @@ describe("fontUnresolvableMarker", () => {
|
|
|
155
156
|
expect(fontUnresolvableMarker("Poppins")).toBe("theme-font-unresolvable:Poppins");
|
|
156
157
|
});
|
|
157
158
|
});
|
|
159
|
+
|
|
160
|
+
describe("buildFontFaceCss descriptor validation", () => {
|
|
161
|
+
const good = {
|
|
162
|
+
family: "Inter",
|
|
163
|
+
style: "normal",
|
|
164
|
+
weight: "400",
|
|
165
|
+
unicodeRange: "U+0000-00FF, U+0131, U+0152-0153",
|
|
166
|
+
publicUrl: "/_assets/fonts/inter/abc123.woff2",
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
it("accepts the descriptor shapes a css2 response carries", () => {
|
|
170
|
+
expect(fontFaceProblem(good)).toBeNull();
|
|
171
|
+
expect(fontFaceProblem({ ...good, style: "italic", weight: "100 900" })).toBeNull();
|
|
172
|
+
expect(fontFaceProblem({ ...good, style: "oblique 0deg 10deg" })).toBeNull();
|
|
173
|
+
expect(fontFaceProblem({ ...good, unicodeRange: null })).toBeNull();
|
|
174
|
+
expect(fontFaceProblem({ ...good, unicodeRange: "U+4??" })).toBeNull();
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("refuses descriptors that could close the <style> or add rules, instead of scrubbing them", () => {
|
|
178
|
+
expect(fontFaceProblem({ ...good, style: "normal;}</style><script>" })).toMatch(/font-style/);
|
|
179
|
+
expect(fontFaceProblem({ ...good, weight: "400;}</style>" })).toMatch(/font-weight/);
|
|
180
|
+
expect(fontFaceProblem({ ...good, unicodeRange: "U+0000-00FF;</style>" })).toMatch(
|
|
181
|
+
/unicode-range/,
|
|
182
|
+
);
|
|
183
|
+
expect(fontFaceProblem({ ...good, publicUrl: "/x.woff2)</style>" })).toMatch(/url/);
|
|
184
|
+
expect(() => buildFontFaceCss([{ ...good, weight: "400}</style>" }])).toThrow(
|
|
185
|
+
/invalid font-weight/,
|
|
186
|
+
);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it("writes a family name's < as a CSS escape so it cannot spell </style", () => {
|
|
190
|
+
const css = buildFontFaceCss([{ ...good, family: "Evil</style><script>alert(1)</script>" }]);
|
|
191
|
+
expect(css.toLowerCase()).not.toContain("</style");
|
|
192
|
+
expect(css).toContain("Evil\\3c /style>");
|
|
193
|
+
});
|
|
194
|
+
});
|
package/src/fonts.ts
CHANGED
|
@@ -224,16 +224,53 @@ export function parseFontsCss(cssText: string): ParsedFontFace[] {
|
|
|
224
224
|
return faces;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
const FONT_STYLE_RE = /^(?:normal|italic|oblique(?: +-?\d{1,3}(?:\.\d+)?deg){0,2})$/i;
|
|
228
|
+
const FONT_WEIGHT_RE = /^(?:normal|bold|\d{1,4}(?: +\d{1,4})?)$/i;
|
|
229
|
+
const UNICODE_RANGE_ITEM = "U\\+[0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?";
|
|
230
|
+
const UNICODE_RANGE_RE = new RegExp(`^${UNICODE_RANGE_ITEM}(?:, *${UNICODE_RANGE_ITEM})*$`, "i");
|
|
231
|
+
/** A same-site asset path: no quotes, parens, whitespace or `<`. */
|
|
232
|
+
const FONT_URL_RE = /^[A-Za-z0-9._~/:%+-]+$/;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Why `face` cannot be emitted as an `@font-face` rule, or null when it can.
|
|
236
|
+
* The descriptors come from a remote fonts-CSS payload, so each one is held
|
|
237
|
+
* to the grammar a real descriptor has instead of being scrubbed: a value
|
|
238
|
+
* outside it could close the surrounding `<style>` or add rules, and a
|
|
239
|
+
* scrubbed value would ship a silently different font.
|
|
240
|
+
*/
|
|
241
|
+
export function fontFaceProblem(face: ResolvedFontFace): string | null {
|
|
242
|
+
if (!FONT_STYLE_RE.test(face.style)) return `font-style ${JSON.stringify(face.style)}`;
|
|
243
|
+
if (!FONT_WEIGHT_RE.test(face.weight)) return `font-weight ${JSON.stringify(face.weight)}`;
|
|
244
|
+
if (face.unicodeRange !== null && !UNICODE_RANGE_RE.test(face.unicodeRange)) {
|
|
245
|
+
return `unicode-range ${JSON.stringify(face.unicodeRange)}`;
|
|
246
|
+
}
|
|
247
|
+
if (!FONT_URL_RE.test(face.publicUrl)) return `url ${JSON.stringify(face.publicUrl)}`;
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
|
|
227
251
|
/**
|
|
228
252
|
* Emit self-hosted @font-face CSS. `font-display: swap` always — text
|
|
229
253
|
* must render in the fallback while the woff2 loads.
|
|
254
|
+
*
|
|
255
|
+
* Throws on a face {@link fontFaceProblem} refuses; the resolver checks
|
|
256
|
+
* faces first and reports a bad family as unresolved, so reaching the
|
|
257
|
+
* throw means a caller skipped that check.
|
|
230
258
|
*/
|
|
231
259
|
export function buildFontFaceCss(faces: readonly ResolvedFontFace[]): string {
|
|
232
260
|
return faces
|
|
233
261
|
.map((f) => {
|
|
262
|
+
const problem = fontFaceProblem(f);
|
|
263
|
+
if (problem !== null) {
|
|
264
|
+
throw new Error(
|
|
265
|
+
`fonts: refusing the @font-face for ${JSON.stringify(f.family)} — invalid ${problem}. Re-fetch the family or pick another font.`,
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
// A CSS string; `<` is written as its CSS escape so no family name
|
|
269
|
+
// can spell `</style` in the surrounding HTML.
|
|
270
|
+
const family = JSON.stringify(f.family).replaceAll("<", "\\3c ");
|
|
234
271
|
const range = f.unicodeRange !== null ? `unicode-range:${f.unicodeRange};` : "";
|
|
235
272
|
return (
|
|
236
|
-
`@font-face{font-family:${
|
|
273
|
+
`@font-face{font-family:${family};` +
|
|
237
274
|
`font-style:${f.style};font-weight:${f.weight};font-display:swap;` +
|
|
238
275
|
`src:url(${f.publicUrl}) format('woff2');${range}}`
|
|
239
276
|
);
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from "./genesis-inventory.js";
|
|
|
25
25
|
export * from "./google-models.js";
|
|
26
26
|
export * from "./image-capabilities.js";
|
|
27
27
|
export * from "./interactions.js";
|
|
28
|
+
export * from "./link-refs.js";
|
|
28
29
|
export {
|
|
29
30
|
type LogContext,
|
|
30
31
|
type Logger,
|
|
@@ -47,6 +48,7 @@ export * from "./preview-scanner.js";
|
|
|
47
48
|
export * from "./proposal-status.js";
|
|
48
49
|
export * from "./provisioning-command.js";
|
|
49
50
|
export * from "./publish-live-parity.js";
|
|
51
|
+
export * from "./raw-text-escape.js";
|
|
50
52
|
export * from "./redirect-emit-caddy.js";
|
|
51
53
|
export * from "./redirect-emit-cloudfront.js";
|
|
52
54
|
export * from "./redirect-emit-front-door.js";
|