@arcblock/did-connect-service 4.1.58 → 4.1.60

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.
@@ -1,7 +1,9 @@
1
1
  import { type Logger } from "../logger.js";
2
+ import { FONT_FETCH_TIMEOUT_MS } from "./node-font-files.js";
2
3
  import type { CreateOgGeneratorOptions, OgGenerator } from "./types.js";
3
- /** Deadline for downloading a remote font (Node). */
4
- export declare const FONT_FETCH_TIMEOUT_MS = 10000;
4
+ /** The bundled Regular face (also the default for `og-node`'s `renderOgTree`). */
5
+ export declare const FONT_PATH: string;
6
+ export { FONT_FETCH_TIMEOUT_MS };
5
7
  export interface FontSource {
6
8
  fontUrl?: string;
7
9
  fontCacheDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAU1D,OAAO,KAAK,EAAE,wBAAwB,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAW3F,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5D;AAyOD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,WAAW,CAmErF"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAK1D,OAAO,EAAE,qBAAqB,EAAiF,MAAM,sBAAsB,CAAC;AAO5I,OAAO,KAAK,EAAE,wBAAwB,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAC;AAS3F,kFAAkF;AAClF,eAAO,MAAM,SAAS,QAAiE,CAAC;AAExF,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,gHAAgH;AAChH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5D;AAwRD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,WAAW,CA6ErF"}
@@ -3,11 +3,13 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
3
  import { readFile } from "node:fs/promises";
4
4
  import { tmpdir } from "node:os";
5
5
  import { dirname, join } from "node:path";
6
- import { fileURLToPath } from "node:url";
6
+ import { fileURLToPath, pathToFileURL } from "node:url";
7
7
  import stringify from "fast-json-stable-stringify";
8
8
  import { consoleLogger } from "../logger.js";
9
9
  import { loadDynamicAsset } from "./emoji.js";
10
+ import { collectOgTreeCodepoints } from "./font-subset.js";
10
11
  import { resolveNodeOgConfig } from "./node-config.js";
12
+ import { FONT_FETCH_TIMEOUT_MS, loadNodeFallbackFonts, nodeFallbackFamiliesWanted, nodeParamsFallbackFamilies } from "./node-font-files.js";
11
13
  import { rasterizeSvgToPngWithWasm } from "./node-wasm-fallback.js";
12
14
  import { prepareOgRender } from "./shared.js";
13
15
  import { assertFetchableUrl, readBodyCapped } from "./ssrf-guard.js";
@@ -19,9 +21,9 @@ import { MAX_IMAGE_DIMENSION, MAX_IMAGE_SIZE, OgValidationError } from "./types.
19
21
  // ---------------------------------------------------------------------------
20
22
  const __dirname = dirname(fileURLToPath(import.meta.url));
21
23
  // dist/og/generator.js → ../../assets/fonts/…
22
- const FONT_PATH = join(__dirname, "../../assets/fonts/noto-sans-sc-regular.otf");
23
- /** Deadline for downloading a remote font (Node). */
24
- export const FONT_FETCH_TIMEOUT_MS = 10_000;
24
+ /** The bundled Regular face (also the default for `og-node`'s `renderOgTree`). */
25
+ export const FONT_PATH = join(__dirname, "../../assets/fonts/noto-sans-sc-regular.otf");
26
+ export { FONT_FETCH_TIMEOUT_MS };
25
27
  // Keyed by fontUrl (or "bundled") so multiple generator instances share one
26
28
  // in-memory copy. Rejections are evicted so transient network failures don't
27
29
  // poison the cache forever.
@@ -210,6 +212,12 @@ async function rasterize(svg, fontData, background, logger, forceWasm) {
210
212
  }
211
213
  return rasterizeSvgToPngWithWasm(svg, fontData);
212
214
  }
215
+ /** Images rendered while a wanted fallback font file was missing (not cached, see generate()). */
216
+ const degradedImages = new WeakSet();
217
+ /** The resolved Regular font URL of `source` (the bundled face when unset). */
218
+ function regularFontUrl(source) {
219
+ return source.fontUrl ?? pathToFileURL(FONT_PATH).href;
220
+ }
213
221
  async function generateOgImage(params, tmpDir, emojiType, fetchImpl, lookupImpl, fontSource, rasterizer) {
214
222
  const { default: satori } = await import("satori");
215
223
  await ensureExternalImages(params, tmpDir, fetchImpl, lookupImpl, fontSource.logger);
@@ -217,10 +225,40 @@ async function generateOgImage(params, tmpDir, emojiType, fetchImpl, lookupImpl,
217
225
  if (params.format === "html")
218
226
  return Buffer.from(raw);
219
227
  const fontData = await loadFont(fontSource);
228
+ // Cross-script fallbacks (arc#8832): sibling CJK families of the configured
229
+ // font that draw what it lacks. A failure renders without them.
230
+ const codepoints = collectOgTreeCodepoints(raw);
231
+ let fallbacks = [];
232
+ let degraded = false;
233
+ const fallbackInput = {
234
+ regularUrl: regularFontUrl(fontSource),
235
+ primaryBytes: fontData.byteLength,
236
+ primaryFull: true,
237
+ codepoints,
238
+ bold: false,
239
+ fontCacheDir: fontSource.fontCacheDir,
240
+ fetchImpl: fontSource.fetchImpl,
241
+ logger: fontSource.logger,
242
+ };
243
+ try {
244
+ // Bounded like loadFont: a fetchImpl that ignores its AbortSignal must not
245
+ // leave this render (and every later one needing the family) hanging.
246
+ const timeoutMs = fontSource.timeoutMs ?? FONT_FETCH_TIMEOUT_MS + 1000;
247
+ ({ fallbacks, degraded } = await withTimeout(loadNodeFallbackFonts(fallbackInput), timeoutMs, () => new OgRenderUnavailableError(OG_RENDER_UNAVAILABLE_CODES.fontTimeout, `fallback font load exceeded ${timeoutMs}ms`)));
248
+ }
249
+ catch (err) {
250
+ // A read error / timeout (5xx, network): render without the fallbacks, but
251
+ // as DEGRADED — never written to the cache, so a later request renders again.
252
+ degraded = nodeFallbackFamiliesWanted(fallbackInput).length > 0;
253
+ fontSource.logger.warn({ message: "[og] fallback font load failed; rendering without fallbacks", mod: "og", err });
254
+ }
220
255
  const svg = await satori(raw, {
221
256
  width: Math.min(params.width, MAX_IMAGE_DIMENSION),
222
257
  height: Math.min(params.height, MAX_IMAGE_DIMENSION),
223
- fonts: [{ name: "Noto", data: fontData, weight: 400, style: "normal" }],
258
+ fonts: [
259
+ { name: "Noto", data: fontData, weight: 400, style: "normal" },
260
+ ...fallbacks.map((f) => ({ name: `Noto ${f.family}`, data: f.regular, weight: 400, style: "normal" })),
261
+ ],
224
262
  // loadDynamicAsset may return undefined for non-emoji segments;
225
263
  // satori expects string | FontOptions[] so we coerce undefined → "".
226
264
  loadAdditionalAsset: async (lang, segment) => {
@@ -228,9 +266,16 @@ async function generateOgImage(params, tmpDir, emojiType, fetchImpl, lookupImpl,
228
266
  return result ?? "";
229
267
  },
230
268
  });
231
- if (params.format === "svg")
232
- return Buffer.from(svg);
233
- return rasterize(svg, fontData, params.background, fontSource.logger, rasterizer === "wasm");
269
+ if (params.format === "svg") {
270
+ const out = Buffer.from(svg);
271
+ if (degraded)
272
+ degradedImages.add(out);
273
+ return out;
274
+ }
275
+ const image = await rasterize(svg, fontData, params.background, fontSource.logger, rasterizer === "wasm");
276
+ if (degraded)
277
+ degradedImages.add(image);
278
+ return image;
234
279
  }
235
280
  // ---------------------------------------------------------------------------
236
281
  // Public factory
@@ -249,6 +294,10 @@ export function createOgGenerator(options = {}) {
249
294
  const defaultCacheDir = options.cacheDir ?? nodeOgConfig.cacheDir;
250
295
  const defaultTmpDir = options.tmpDir ?? nodeOgConfig.tmpDir;
251
296
  const generateTasks = new Map();
297
+ const fallbackKey = (params) => {
298
+ const families = nodeParamsFallbackFamilies(regularFontUrl(fontSource), params);
299
+ return families.length ? { fontFallbacks: families } : {};
300
+ };
252
301
  async function generate(opts) {
253
302
  const { input, info, format } = opts;
254
303
  const cacheDir = opts.cacheDir ?? defaultCacheDir;
@@ -268,6 +317,8 @@ export function createOgGenerator(options = {}) {
268
317
  color: fullParams.color,
269
318
  format,
270
319
  info: { name: info.name, did: info.did, appUrl: info.appUrl },
320
+ // Only cards drawn with a cross-script fallback (arc#8832) get a new key.
321
+ ...fallbackKey(fullParams),
271
322
  }));
272
323
  const nocache = prepared.nocache;
273
324
  const destPath = getCacheFilePath(cacheDir, `${cacheKey}.${format}`);
@@ -282,9 +333,13 @@ export function createOgGenerator(options = {}) {
282
333
  generateTasks.set(cacheKey, task);
283
334
  }
284
335
  const buffer = await task;
285
- mkdirSync(dirname(destPath), { recursive: true });
286
- writeFileSync(destPath, buffer);
287
- return destPath;
336
+ // A card rendered while a fallback font file was missing must not be served
337
+ // from the cache once the file exists: write it outside the cache path
338
+ // (one file per key, overwritten), so the next request renders again.
339
+ const outPath = degradedImages.has(buffer) ? join(tmpDir, "og-degraded", `${cacheKey}.${format}`) : destPath;
340
+ mkdirSync(dirname(outPath), { recursive: true });
341
+ writeFileSync(outPath, buffer);
342
+ return outPath;
288
343
  }
289
344
  return { generate };
290
345
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/og/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Node font files shared by `og-node`'s tree renderer (`tree-node.ts`) and
3
+ * og.png generator (`generator.ts`): subset siblings (ArcBlock/arc#8800) and
4
+ * cross-script fallback siblings (ArcBlock/arc#8832) of the configured
5
+ * Regular font.
6
+ *
7
+ * Layout, relative to the Regular font URL (the bundled face, or
8
+ * `CONNECT_OG_FONT_URL`, `file:` URLs included):
9
+ * - Bold: `…Regular…` → `…Bold…` in the file name ({@link deriveBoldFontUrl});
10
+ * - subset: `subset-v1/<same file name>` ({@link deriveSubsetFontUrl});
11
+ * - fallback families: the R2 file names next to it (`NotoSansSC-Regular.otf`,
12
+ * `NotoSansJP-Regular.otf`, `NotoSansTC-Regular.otf`, with their Bold and
13
+ * subset siblings) — the layout of the font bucket, so a `CONNECT_OG_FONT_URL`
14
+ * pointing at it gets fallbacks for free. The npm package bundles only Noto
15
+ * Sans SC Regular (the widest CJK face: 30 890 codepoints, including 歩 and
16
+ * most Japanese shinjitai), so the bundled default has no fallback siblings;
17
+ * each missing sibling is remembered and warned about once per process.
18
+ */
19
+ import type { Logger } from "../logger.js";
20
+ import { type OgCjkFamily } from "./font-fallback.js";
21
+ import { type OgSubsetFontSet } from "./font-subset.js";
22
+ /** Deadline for downloading a remote font (Node). */
23
+ export declare const FONT_FETCH_TIMEOUT_MS = 10000;
24
+ export declare function md5(s: string): string;
25
+ /** `…Regular…` → `…Bold…` in the last path segment; undefined when the name has no Regular marker. */
26
+ export declare function deriveBoldFontUrl(regularUrl: string | undefined): string | undefined;
27
+ /** `…/NotoSansSC-Regular.otf` → `…/subset-v1/NotoSansSC-Regular.otf` (and the file name). */
28
+ export declare function deriveSubsetFontUrl(url: string | undefined): {
29
+ url: string;
30
+ file: string;
31
+ } | undefined;
32
+ /** A subset file, checked against the build's sha256 (`null` = missing or mismatch, warned once per process). */
33
+ export declare function loadSubsetFile(url: string, sha256: string, fontCacheDir: string, fetchImpl: typeof fetch, logger: Logger): Promise<Buffer | null>;
34
+ /** Test isolation: forget cached subset / fallback bytes and re-arm the warnings. */
35
+ export declare function resetOgNodeFontFilesForTesting(): void;
36
+ /** The subset-table set (and CJK family) of the Regular font at `regularUrl`, matched by file name. */
37
+ export declare function nodeFontSetFor(regularUrl: string): {
38
+ set: OgSubsetFontSet;
39
+ family?: OgCjkFamily;
40
+ subsetUrl: string;
41
+ } | undefined;
42
+ export interface NodeFallbackFonts {
43
+ fallbacks: Array<{
44
+ family: OgCjkFamily;
45
+ url: string;
46
+ regular: Buffer;
47
+ bold: Buffer | null;
48
+ }>;
49
+ /** Families the text needed but the render did not load (over budget, or files missing). */
50
+ skipped: OgCjkFamily[];
51
+ /** A wanted fallback file was missing: the output may change once it is there (do not cache it). */
52
+ degraded: boolean;
53
+ }
54
+ /**
55
+ * Plans (`font-fallback.ts`) and loads the cross-script fallbacks of one Node
56
+ * render. `regularUrl` is the resolved Regular font URL (bundled face
57
+ * included); `primaryBytes` what the primary loaded. A missing sibling is
58
+ * skipped (warned once per process); a read error / timeout rejects like a
59
+ * primary font read.
60
+ */
61
+ export interface NodeFallbackInput {
62
+ regularUrl: string;
63
+ primaryBytes: number;
64
+ /** The primary loaded its full font (not its subset). */
65
+ primaryFull: boolean;
66
+ codepoints: ReadonlySet<number>;
67
+ bold: boolean;
68
+ fontCacheDir: string;
69
+ fetchImpl: typeof fetch;
70
+ logger: Logger;
71
+ }
72
+ /**
73
+ * Every fallback family the render wanted (planned or cut by the budget) —
74
+ * what a render that could not load its fallbacks at all (a read error or
75
+ * timeout) reports as skipped.
76
+ */
77
+ export declare function nodeFallbackFamiliesWanted(input: Pick<NodeFallbackInput, "regularUrl" | "primaryBytes" | "primaryFull" | "codepoints" | "bold">): OgCjkFamily[];
78
+ export declare function loadNodeFallbackFonts(input: NodeFallbackInput): Promise<NodeFallbackFonts>;
79
+ /**
80
+ * The fallback families an og.png's params text needs (missing from the primary,
81
+ * mapped by another family), for the generator's cache key: a card that now
82
+ * renders with a fallback must not be served from a cache entry drawn before
83
+ * arc#8832. Empty for every other card (its key is unchanged).
84
+ */
85
+ export declare function nodeParamsFallbackFamilies(regularUrl: string, params: Record<string, unknown>): OgCjkFamily[];
86
+ //# sourceMappingURL=node-font-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-font-files.d.ts","sourceRoot":"","sources":["../../src/og/node-font-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAoB,KAAK,eAAe,EAAkD,MAAM,kBAAkB,CAAC;AAE1H,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AAED,sGAAsG;AACtG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOpF;AAID,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAmBtG;AAyCD,iHAAiH;AACjH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,KAAK,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAOD,qFAAqF;AACrF,wBAAgB,8BAA8B,IAAI,IAAI,CAIrD;AAED,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUhI;AAmBD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7F,4FAA4F;IAC5F,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC,GAAG,WAAW,EAAE,CAI/J;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmEhG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,EAAE,CAc7G"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Node font files shared by `og-node`'s tree renderer (`tree-node.ts`) and
3
+ * og.png generator (`generator.ts`): subset siblings (ArcBlock/arc#8800) and
4
+ * cross-script fallback siblings (ArcBlock/arc#8832) of the configured
5
+ * Regular font.
6
+ *
7
+ * Layout, relative to the Regular font URL (the bundled face, or
8
+ * `CONNECT_OG_FONT_URL`, `file:` URLs included):
9
+ * - Bold: `…Regular…` → `…Bold…` in the file name ({@link deriveBoldFontUrl});
10
+ * - subset: `subset-v1/<same file name>` ({@link deriveSubsetFontUrl});
11
+ * - fallback families: the R2 file names next to it (`NotoSansSC-Regular.otf`,
12
+ * `NotoSansJP-Regular.otf`, `NotoSansTC-Regular.otf`, with their Bold and
13
+ * subset siblings) — the layout of the font bucket, so a `CONNECT_OG_FONT_URL`
14
+ * pointing at it gets fallbacks for free. The npm package bundles only Noto
15
+ * Sans SC Regular (the widest CJK face: 30 890 codepoints, including 歩 and
16
+ * most Japanese shinjitai), so the bundled default has no fallback siblings;
17
+ * each missing sibling is remembered and warned about once per process.
18
+ */
19
+ import { createHash } from "node:crypto";
20
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
21
+ import { readFile } from "node:fs/promises";
22
+ import { dirname, join } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+ import { OG_CJK_FALLBACK_PREFERENCE, ogFallbackIgnorable, ogFontSetBytes, ogFontSetFits, planOgFontFallbacks, } from "./font-fallback.js";
25
+ import { OG_SUBSET_PREFIX, ogFontSha256, ogFullFontMaps, ogSubsetFontSets } from "./font-subset.js";
26
+ /** Deadline for downloading a remote font (Node). */
27
+ export const FONT_FETCH_TIMEOUT_MS = 10_000;
28
+ export function md5(s) {
29
+ return createHash("md5").update(s).digest("hex");
30
+ }
31
+ /** `…Regular…` → `…Bold…` in the last path segment; undefined when the name has no Regular marker. */
32
+ export function deriveBoldFontUrl(regularUrl) {
33
+ if (!regularUrl)
34
+ return undefined;
35
+ const slash = regularUrl.lastIndexOf("/");
36
+ const head = regularUrl.slice(0, slash + 1);
37
+ const name = regularUrl.slice(slash + 1);
38
+ const bold = name.replace(/Regular/, "Bold").replace(/regular/, "bold");
39
+ return bold === name ? undefined : head + bold;
40
+ }
41
+ const SUBSET_DIR = OG_SUBSET_PREFIX.slice(OG_SUBSET_PREFIX.lastIndexOf("/") + 1);
42
+ /** `…/NotoSansSC-Regular.otf` → `…/subset-v1/NotoSansSC-Regular.otf` (and the file name). */
43
+ export function deriveSubsetFontUrl(url) {
44
+ if (!url)
45
+ return undefined;
46
+ let parsed;
47
+ try {
48
+ parsed = new URL(url);
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ const slash = parsed.pathname.lastIndexOf("/");
54
+ const name = parsed.pathname.slice(slash + 1);
55
+ if (!name)
56
+ return undefined;
57
+ parsed.pathname = `${parsed.pathname.slice(0, slash + 1)}${SUBSET_DIR}/${name}`;
58
+ let file;
59
+ try {
60
+ file = decodeURIComponent(name);
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ return { url: parsed.href, file };
66
+ }
67
+ /** A font file that may not exist: `null` on 404 / 403 / ENOENT; other failures throw. Remote files are disk-cached. */
68
+ async function readOptionalFontFile(url, fontCacheDir, fetchImpl) {
69
+ if (url.startsWith("file:")) {
70
+ try {
71
+ return await readFile(fileURLToPath(url));
72
+ }
73
+ catch (err) {
74
+ if (err.code === "ENOENT")
75
+ return null;
76
+ throw err;
77
+ }
78
+ }
79
+ const diskPath = join(fontCacheDir, `${md5(url)}.font`);
80
+ if (existsSync(diskPath))
81
+ return readFile(diskPath);
82
+ const res = await fetchImpl(url, { signal: AbortSignal.timeout(FONT_FETCH_TIMEOUT_MS) });
83
+ if (res.status === 404 || res.status === 403)
84
+ return null;
85
+ if (!res.ok)
86
+ throw new Error(`font fetch failed: ${res.status}`);
87
+ const buf = Buffer.from(await res.arrayBuffer());
88
+ mkdirSync(dirname(diskPath), { recursive: true });
89
+ writeFileSync(diskPath, buf);
90
+ return buf;
91
+ }
92
+ /** Memoized file bytes by URL; `null` (missing / not the build's bytes) is cached, errors are not. */
93
+ const files = new Map();
94
+ let subsetMissingWarned = false;
95
+ let fallbackMissingWarned = false;
96
+ function memoFile(url, load) {
97
+ let entry = files.get(url);
98
+ if (!entry) {
99
+ const created = load();
100
+ created.catch(() => {
101
+ if (files.get(url) === created)
102
+ files.delete(url);
103
+ });
104
+ files.set(url, created);
105
+ entry = created;
106
+ }
107
+ return entry;
108
+ }
109
+ /** A subset file, checked against the build's sha256 (`null` = missing or mismatch, warned once per process). */
110
+ export function loadSubsetFile(url, sha256, fontCacheDir, fetchImpl, logger) {
111
+ return memoFile(url, () => readOptionalFontFile(url, fontCacheDir, fetchImpl).then(async (bytes) => {
112
+ const reason = !bytes ? "missing" : (await ogFontSha256(bytes)) !== sha256 ? "sha256 mismatch" : undefined;
113
+ if (!reason)
114
+ return bytes;
115
+ // A stale / corrupt download must not stay on disk for the next process.
116
+ if (bytes && !url.startsWith("file:"))
117
+ rmSync(join(fontCacheDir, `${md5(url)}.font`), { force: true });
118
+ if (!subsetMissingWarned) {
119
+ subsetMissingWarned = true;
120
+ logger.warn({ message: `[og] subset font ${reason}; rendering with the full font`, mod: "og" });
121
+ }
122
+ return null;
123
+ }));
124
+ }
125
+ /** A full fallback font file, or `null` when it is not there. */
126
+ function loadOptionalFullFile(url, fontCacheDir, fetchImpl) {
127
+ return memoFile(url, () => readOptionalFontFile(url, fontCacheDir, fetchImpl));
128
+ }
129
+ /** Test isolation: forget cached subset / fallback bytes and re-arm the warnings. */
130
+ export function resetOgNodeFontFilesForTesting() {
131
+ files.clear();
132
+ subsetMissingWarned = false;
133
+ fallbackMissingWarned = false;
134
+ }
135
+ /** The subset-table set (and CJK family) of the Regular font at `regularUrl`, matched by file name. */
136
+ export function nodeFontSetFor(regularUrl) {
137
+ const derived = deriveSubsetFontUrl(regularUrl);
138
+ if (!derived)
139
+ return undefined;
140
+ const sets = ogSubsetFontSets();
141
+ const entry = Object.entries(sets).find(([, candidate]) => candidate.regular.file === derived.file);
142
+ if (!entry)
143
+ return undefined;
144
+ const [id, set] = entry;
145
+ // The bundled face is Noto Sans SC.
146
+ const family = id === "node-bundled" ? "zh-CN" : OG_CJK_FALLBACK_PREFERENCE.includes(id) ? id : undefined;
147
+ return { set, family, subsetUrl: derived.url };
148
+ }
149
+ /** Fallback families next to `regularUrl`, excluding the primary's own family. */
150
+ function fallbackCandidates(regularUrl, primaryFamily) {
151
+ const sets = ogSubsetFontSets();
152
+ return OG_CJK_FALLBACK_PREFERENCE.flatMap((family) => family !== primaryFamily && sets[family] && !knownMissing.has(siblingUrl(regularUrl, sets[family].regular.file))
153
+ ? [{ family, set: sets[family] }]
154
+ : []);
155
+ }
156
+ /** Full Regular URLs of fallback families found missing (not probed again by this process). */
157
+ const knownMissing = new Set();
158
+ function siblingUrl(regularUrl, file) {
159
+ return new URL(encodeURIComponent(file), regularUrl).href;
160
+ }
161
+ function planNodeFallbacks(input) {
162
+ const primary = nodeFontSetFor(input.regularUrl);
163
+ if (!primary)
164
+ return undefined;
165
+ const planPrimary = { primaryBytes: input.primaryBytes, primaryFull: input.primaryFull, primaryCjk: !!primary.family };
166
+ const plan = planOgFontFallbacks({
167
+ primary: primary.set,
168
+ ...planPrimary,
169
+ codepoints: input.codepoints,
170
+ candidates: fallbackCandidates(input.regularUrl, primary.family),
171
+ bold: input.bold,
172
+ });
173
+ return { planPrimary, plan };
174
+ }
175
+ /**
176
+ * Every fallback family the render wanted (planned or cut by the budget) —
177
+ * what a render that could not load its fallbacks at all (a read error or
178
+ * timeout) reports as skipped.
179
+ */
180
+ export function nodeFallbackFamiliesWanted(input) {
181
+ const planned = planNodeFallbacks(input);
182
+ if (!planned)
183
+ return [];
184
+ return [...new Set([...planned.plan.fallbacks.map((f) => f.family), ...planned.plan.overBudget])];
185
+ }
186
+ export async function loadNodeFallbackFonts(input) {
187
+ const out = { fallbacks: [], skipped: [], degraded: false };
188
+ const planned = planNodeFallbacks(input);
189
+ if (!planned)
190
+ return out;
191
+ const { regularUrl, bold, fontCacheDir, fetchImpl, logger } = input;
192
+ const { planPrimary, plan } = planned;
193
+ out.skipped.push(...plan.overBudget);
194
+ const loadFull = async (choice) => {
195
+ const fullUrl = siblingUrl(regularUrl, choice.set.regular.file);
196
+ const fullBoldUrl = choice.set.bold ? siblingUrl(regularUrl, choice.set.bold.file) : undefined;
197
+ const [regularBytes, boldBytes] = await Promise.all([
198
+ loadOptionalFullFile(fullUrl, fontCacheDir, fetchImpl),
199
+ bold && fullBoldUrl ? loadOptionalFullFile(fullBoldUrl, fontCacheDir, fetchImpl) : Promise.resolve(null),
200
+ ]);
201
+ if (!regularBytes) {
202
+ knownMissing.add(fullUrl);
203
+ if (!fallbackMissingWarned) {
204
+ fallbackMissingWarned = true;
205
+ logger.warn({ message: "[og] fallback font missing; its characters render as .notdef", mod: "og", family: choice.family });
206
+ }
207
+ return "missing";
208
+ }
209
+ return { family: choice.family, url: fullUrl, regular: regularBytes, bold: boldBytes };
210
+ };
211
+ const loadPlanned = async (choice) => {
212
+ if (!choice.subset)
213
+ return loadFull(choice);
214
+ const fullUrl = siblingUrl(regularUrl, choice.set.regular.file);
215
+ const subsetRegular = deriveSubsetFontUrl(fullUrl).url;
216
+ const regularBytes = await loadSubsetFile(subsetRegular, choice.set.regular.sha256, fontCacheDir, fetchImpl, logger);
217
+ const boldBytes = regularBytes && bold && choice.set.bold
218
+ ? await loadSubsetFile(deriveSubsetFontUrl(siblingUrl(regularUrl, choice.set.bold.file)).url, choice.set.bold.sha256, fontCacheDir, fetchImpl, logger)
219
+ : null;
220
+ if (regularBytes && (!bold || boldBytes))
221
+ return { family: choice.family, url: subsetRegular, regular: regularBytes, bold: boldBytes };
222
+ return "subset-unusable";
223
+ };
224
+ // Planned fonts in parallel; then a planned subset that is unusable may load
225
+ // its full font, one at a time, only while the whole set still fits.
226
+ const loaded = await Promise.all(plan.fallbacks.map(loadPlanned));
227
+ const effective = plan.fallbacks.map((c) => ({ subset: c.subset, bytes: c.bytes }));
228
+ for (const [i, choice] of plan.fallbacks.entries()) {
229
+ if (loaded[i] !== "subset-unusable")
230
+ continue;
231
+ out.degraded = true;
232
+ const asFull = effective.map((e, j) => (j === i ? { subset: false, bytes: ogFontSetBytes(choice.set, false, bold) } : e));
233
+ if (!ogFontSetFits(planPrimary, asFull))
234
+ continue;
235
+ loaded[i] = await loadFull(choice);
236
+ if (typeof loaded[i] !== "string")
237
+ effective[i] = asFull[i];
238
+ }
239
+ plan.fallbacks.forEach((choice, i) => {
240
+ const result = loaded[i];
241
+ if (typeof result === "string") {
242
+ out.skipped.push(choice.family);
243
+ if (result === "missing")
244
+ out.degraded = true;
245
+ return;
246
+ }
247
+ if (bold && !result.bold)
248
+ out.degraded = true;
249
+ out.fallbacks.push(result);
250
+ });
251
+ out.skipped = [...new Set(out.skipped)];
252
+ return out;
253
+ }
254
+ /**
255
+ * The fallback families an og.png's params text needs (missing from the primary,
256
+ * mapped by another family), for the generator's cache key: a card that now
257
+ * renders with a fallback must not be served from a cache entry drawn before
258
+ * arc#8832. Empty for every other card (its key is unchanged).
259
+ */
260
+ export function nodeParamsFallbackFamilies(regularUrl, params) {
261
+ const primary = nodeFontSetFor(regularUrl);
262
+ if (!primary)
263
+ return [];
264
+ const candidates = fallbackCandidates(regularUrl, primary.family);
265
+ const needed = new Set();
266
+ for (const value of Object.values(params)) {
267
+ if (typeof value !== "string" || value.startsWith("data:"))
268
+ continue;
269
+ for (const ch of value) {
270
+ const cp = ch.codePointAt(0);
271
+ if (cp < 0x80 || ogFallbackIgnorable(cp) || ogFullFontMaps(primary.set, cp))
272
+ continue;
273
+ for (const c of candidates)
274
+ if (ogFullFontMaps(c.set, cp))
275
+ needed.add(c.family);
276
+ }
277
+ }
278
+ return OG_CJK_FALLBACK_PREFERENCE.filter((family) => needed.has(family));
279
+ }
280
+ //# sourceMappingURL=node-font-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-font-files.js","sourceRoot":"","sources":["../../src/og/node-font-files.ts"],"names":[],"mappings":"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"}