@arcblock/did-connect-service 4.1.59 → 4.1.61
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/og/font-fallback.d.ts +135 -0
- package/dist/og/font-fallback.d.ts.map +1 -0
- package/dist/og/font-fallback.js +229 -0
- package/dist/og/font-fallback.js.map +1 -0
- package/dist/og/font-subset.d.ts +14 -6
- package/dist/og/font-subset.d.ts.map +1 -1
- package/dist/og/font-subset.js +22 -15
- package/dist/og/font-subset.js.map +1 -1
- package/dist/og/generator.d.ts +2 -2
- package/dist/og/generator.d.ts.map +1 -1
- package/dist/og/generator.js +64 -10
- package/dist/og/generator.js.map +1 -1
- package/dist/og/node-font-files.d.ts +93 -0
- package/dist/og/node-font-files.d.ts.map +1 -0
- package/dist/og/node-font-files.js +298 -0
- package/dist/og/node-font-files.js.map +1 -0
- package/dist/og/subset-fonts.generated.d.ts +40 -6
- package/dist/og/subset-fonts.generated.d.ts.map +1 -1
- package/dist/og/subset-fonts.generated.js +24 -19
- package/dist/og/subset-fonts.generated.js.map +1 -1
- package/dist/og/tree-node.d.ts +14 -10
- package/dist/og/tree-node.d.ts.map +1 -1
- package/dist/og/tree-node.js +45 -111
- package/dist/og/tree-node.js.map +1 -1
- package/dist/og/worker.d.ts +44 -5
- package/dist/og/worker.d.ts.map +1 -1
- package/dist/og/worker.js +301 -94
- package/dist/og/worker.js.map +1 -1
- package/package.json +3 -3
- package/dist/http/security-headers.d.ts +0 -38
- package/dist/http/security-headers.d.ts.map +0 -1
- package/dist/http/security-headers.js +0 -67
- package/dist/http/security-headers.js.map +0 -1
package/dist/og/worker.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import stringify from "fast-json-stable-stringify";
|
|
2
2
|
import satori from "satori/standalone";
|
|
3
3
|
import { consoleLogger } from "../logger.js";
|
|
4
|
-
import {
|
|
4
|
+
import { OG_CJK_FALLBACK_PREFERENCE, ogFallbackIgnorable, ogFontSetBytes, ogFontSetFits, ogPrimaryUsesSubset, planOgFontFallbacks, } from "./font-fallback.js";
|
|
5
|
+
import { collectOgTreeCodepoints, ogFontSha256, ogFullFontMaps, ogSubsetFontKey, ogSubsetFontSets, } from "./font-subset.js";
|
|
5
6
|
import { initializeRendererWasm, Resvg } from "./resvg-runtime.js";
|
|
6
7
|
import { prepareOgRender } from "./shared.js";
|
|
7
8
|
import { getTemplate } from "./templates.js";
|
|
8
9
|
import { createSerialQueue, OG_RENDER_UNAVAILABLE_CODES, OG_TREE_ERROR_CODES, OgRenderUnavailableError, OgTreeRenderError, ogImageMime, prepareOgTree, sniffOgImageKind, wantsBold, withTimeout, } from "./tree.js";
|
|
10
|
+
export { OG_CJK_FALLBACK_PREFERENCE, OG_FONT_RENDER_BUDGET_BYTES } from "./font-fallback.js";
|
|
9
11
|
export { OG_SUBSET_FONTS, OG_SUBSET_PREFIX } from "./font-subset.js";
|
|
10
12
|
export { inspectOgImage, OG_RENDER_UNAVAILABLE_CODES, OG_TREE_ERROR_CODES, OG_TREE_FONT_FAMILY, OG_TREE_LIMITS, OgRenderUnavailableError, OgTreeRenderError, sniffOgImageKind, validateOgTree, } from "./tree.js";
|
|
11
13
|
/** Default deadline for one font object read from the bucket. */
|
|
@@ -34,9 +36,28 @@ export const OG_WORKER_BOLD_FONT_KEYS = {
|
|
|
34
36
|
const TRANSPARENT_PNG_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
|
35
37
|
const CACHE_ORIGIN = "https://og-cache.invalid";
|
|
36
38
|
let wasmInitialization;
|
|
37
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Raw font bytes kept between renders (ArcBlock/did#300, arc#8832): an LRU of
|
|
41
|
+
* font objects by bucket key, bounded by {@link OG_WORKER_FONT_CACHE_BYTES}.
|
|
42
|
+
* A render may need more than one family (its locale's primary plus
|
|
43
|
+
* cross-script fallbacks, `font-fallback.ts`), so the cache is keyed by object,
|
|
44
|
+
* not by locale. The least recently used objects are dropped once the resident
|
|
45
|
+
* total exceeds the budget; a different bucket clears it. Objects that are
|
|
46
|
+
* missing (or fail their sha256 check) are remembered as `null` for
|
|
47
|
+
* {@link MISSING_RECHECK_MS}, then probed again.
|
|
48
|
+
*
|
|
49
|
+
* Parsed fonts are never kept: each render hands satori fresh copies (see
|
|
50
|
+
* `font-subset.ts` for why a resident parse would grow without bound).
|
|
51
|
+
*/
|
|
52
|
+
export const OG_WORKER_FONT_CACHE_BYTES = 20 * 1024 * 1024;
|
|
53
|
+
const MISSING_RECHECK_MS = 5 * 60_000;
|
|
54
|
+
let cacheBucket;
|
|
55
|
+
const fontCache = new Map();
|
|
56
|
+
/** Locale of the most recent render (for {@link getOgWorkerFontCacheStats}). */
|
|
57
|
+
let lastLocale;
|
|
38
58
|
let boldMissingWarned = false;
|
|
39
59
|
let subsetMissingWarned = false;
|
|
60
|
+
let fallbackMissingWarned = false;
|
|
40
61
|
/** Every satori + resvg pass in this isolate runs through this FIFO queue. */
|
|
41
62
|
const serialRender = createSerialQueue();
|
|
42
63
|
export function normalizeOgLocale(locale) {
|
|
@@ -70,39 +91,67 @@ export function resetOgWorkerWasmForTesting() {
|
|
|
70
91
|
function readFontObject(bucket, key, timeoutMs) {
|
|
71
92
|
return withTimeout(bucket.get(key).then(async (object) => (object ? new Uint8Array(await object.arrayBuffer()) : null)), timeoutMs, () => new OgRenderUnavailableError(OG_RENDER_UNAVAILABLE_CODES.fontTimeout, `font read exceeded ${timeoutMs}ms`));
|
|
72
93
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
94
|
+
function evictOver(keep) {
|
|
95
|
+
let total = 0;
|
|
96
|
+
for (const entry of fontCache.values())
|
|
97
|
+
total += entry.bytes;
|
|
98
|
+
for (const [key, entry] of fontCache) {
|
|
99
|
+
if (total <= OG_WORKER_FONT_CACHE_BYTES)
|
|
100
|
+
break;
|
|
101
|
+
if (key === keep || entry.bytes === 0)
|
|
102
|
+
continue;
|
|
103
|
+
fontCache.delete(key);
|
|
104
|
+
total -= entry.bytes;
|
|
105
|
+
}
|
|
78
106
|
}
|
|
79
|
-
/**
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
107
|
+
/** `load()` through the LRU; a rejection is not cached, so the next render retries. */
|
|
108
|
+
function cachedFont(bucket, key, load) {
|
|
109
|
+
if (cacheBucket !== bucket) {
|
|
110
|
+
fontCache.clear();
|
|
111
|
+
cacheBucket = bucket;
|
|
112
|
+
}
|
|
113
|
+
const hit = fontCache.get(key);
|
|
114
|
+
fontCache.delete(key);
|
|
115
|
+
if (hit && (hit.missingAt === undefined || Date.now() - hit.missingAt < MISSING_RECHECK_MS)) {
|
|
116
|
+
fontCache.set(key, hit); // most recently used
|
|
117
|
+
return hit.promise;
|
|
90
118
|
}
|
|
91
|
-
|
|
119
|
+
const entry = { promise: Promise.resolve(null), bytes: 0 };
|
|
120
|
+
entry.promise = load().then((bytes) => {
|
|
121
|
+
if (fontCache.get(key) === entry) {
|
|
122
|
+
if (bytes) {
|
|
123
|
+
entry.bytes = bytes.byteLength;
|
|
124
|
+
evictOver(key);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
entry.missingAt = Date.now();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return bytes;
|
|
131
|
+
});
|
|
132
|
+
entry.promise.catch(() => {
|
|
133
|
+
if (fontCache.get(key) === entry)
|
|
134
|
+
fontCache.delete(key);
|
|
135
|
+
});
|
|
136
|
+
fontCache.set(key, entry);
|
|
137
|
+
return entry.promise;
|
|
138
|
+
}
|
|
139
|
+
/** A full font object, or `null` when it is missing from the bucket. */
|
|
140
|
+
function loadFullObject(bucket, key, timeoutMs) {
|
|
141
|
+
return cachedFont(bucket, key, () => readFontObject(bucket, key, timeoutMs));
|
|
92
142
|
}
|
|
93
|
-
/** Full Regular bytes for `locale
|
|
94
|
-
function loadRegularFont(bucket, locale, timeoutMs) {
|
|
143
|
+
/** Full Regular bytes for `locale` (the primary: missing is an error). */
|
|
144
|
+
async function loadRegularFont(bucket, locale, timeoutMs) {
|
|
95
145
|
const key = OG_WORKER_FONT_KEYS[locale];
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}));
|
|
146
|
+
const bytes = await loadFullObject(bucket, key, timeoutMs);
|
|
147
|
+
if (!bytes)
|
|
148
|
+
throw new Error(`OG font unavailable: ${key}`);
|
|
149
|
+
return bytes;
|
|
101
150
|
}
|
|
102
151
|
/** Full Bold bytes for `locale`, or `null` (warned once per isolate) when the object is missing. */
|
|
103
152
|
async function loadBoldFont(bucket, locale, logger, timeoutMs) {
|
|
104
153
|
const key = OG_WORKER_BOLD_FONT_KEYS[locale];
|
|
105
|
-
const bytes = await
|
|
154
|
+
const bytes = await loadFullObject(bucket, key, timeoutMs);
|
|
106
155
|
if (!bytes && !boldMissingWarned) {
|
|
107
156
|
boldMissingWarned = true;
|
|
108
157
|
logger.warn({
|
|
@@ -115,84 +164,183 @@ async function loadBoldFont(bucket, locale, logger, timeoutMs) {
|
|
|
115
164
|
return bytes;
|
|
116
165
|
}
|
|
117
166
|
/** One subset object, or `null` when it is missing or not the build's bytes (warned once per isolate). */
|
|
118
|
-
|
|
167
|
+
function loadSubsetObject(bucket, file, locale, logger, timeoutMs) {
|
|
119
168
|
const key = ogSubsetFontKey(file.file);
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
subsetMissingWarned
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
169
|
+
return cachedFont(bucket, key, async () => {
|
|
170
|
+
const bytes = await readFontObject(bucket, key, timeoutMs);
|
|
171
|
+
const reason = !bytes ? "missing" : (await ogFontSha256(bytes)) !== file.sha256 ? "sha256 mismatch" : undefined;
|
|
172
|
+
if (!reason)
|
|
173
|
+
return bytes;
|
|
174
|
+
if (!subsetMissingWarned) {
|
|
175
|
+
subsetMissingWarned = true;
|
|
176
|
+
logger.warn({ message: `[og] subset font ${reason}; rendering with the full font`, mod: "og", key, locale });
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
});
|
|
129
180
|
}
|
|
130
181
|
/**
|
|
131
|
-
* Subset Regular (+ Bold when `bold`)
|
|
132
|
-
*
|
|
182
|
+
* Subset Regular (+ Bold when `bold`) of `locale`'s set, or `null` when there
|
|
183
|
+
* is no usable subset — every requested weight must be present, else the
|
|
133
184
|
* render uses the full fonts. A read error / timeout rejects like a full-font
|
|
134
|
-
* read (503), and the
|
|
185
|
+
* read (503), and the next render retries.
|
|
135
186
|
*/
|
|
136
187
|
async function loadSubsetFonts(bucket, locale, bold, logger, timeoutMs) {
|
|
137
188
|
const set = ogSubsetFontSets()[locale];
|
|
138
189
|
if (!set || (bold && !set.bold))
|
|
139
190
|
return null;
|
|
140
|
-
const
|
|
141
|
-
const regular = await memo(slot, "subsetRegular", () => readSubsetObject(bucket, set.regular, locale, logger, timeoutMs));
|
|
191
|
+
const regular = await loadSubsetObject(bucket, set.regular, locale, logger, timeoutMs);
|
|
142
192
|
if (!regular)
|
|
143
193
|
return null;
|
|
144
194
|
if (!bold)
|
|
145
195
|
return { regular, bold: null };
|
|
146
|
-
const boldBytes = await
|
|
196
|
+
const boldBytes = await loadSubsetObject(bucket, set.bold, locale, logger, timeoutMs);
|
|
147
197
|
return boldBytes ? { regular, bold: boldBytes } : null;
|
|
148
198
|
}
|
|
149
199
|
/**
|
|
150
|
-
* Whether `
|
|
151
|
-
*
|
|
200
|
+
* Whether `locale`'s primary should load its subset for `codepoints`
|
|
201
|
+
* ({@link ogPrimaryUsesSubset}: the subset covers the text, or the fallbacks
|
|
202
|
+
* the text needs anyway draw what only the full primary has). A locale
|
|
203
|
+
* without a subset counts as covered, so the render reports `"absent"`, not
|
|
204
|
+
* `"miss"`.
|
|
152
205
|
*/
|
|
153
|
-
function
|
|
206
|
+
function primarySubsetForLocale(locale, codepoints, bold) {
|
|
154
207
|
const set = ogSubsetFontSets()[locale];
|
|
155
|
-
|
|
208
|
+
if (!set)
|
|
209
|
+
return true;
|
|
210
|
+
return ogPrimaryUsesSubset({ primary: set, primaryCjk: locale !== "en", codepoints, candidates: fallbackCandidates(), bold });
|
|
211
|
+
}
|
|
212
|
+
/** The fallback families this renderer can load (every CJK family the subset table describes). */
|
|
213
|
+
function fallbackCandidates() {
|
|
214
|
+
const sets = ogSubsetFontSets();
|
|
215
|
+
return OG_CJK_FALLBACK_PREFERENCE.flatMap((family) => (sets[family] ? [{ family, set: sets[family] }] : []));
|
|
216
|
+
}
|
|
217
|
+
/** Loads one planned fallback: its subset when planned and usable, else its full font (if still within budget). */
|
|
218
|
+
async function loadFallback(bucket, choice, bold, fullAllowed, logger, timeoutMs) {
|
|
219
|
+
if (choice.subset) {
|
|
220
|
+
const subset = await loadSubsetFonts(bucket, choice.family, bold, logger, timeoutMs);
|
|
221
|
+
if (subset)
|
|
222
|
+
return { key: ogSubsetFontKey(choice.set.regular.file), ...subset };
|
|
223
|
+
if (!fullAllowed)
|
|
224
|
+
return "over-budget";
|
|
225
|
+
}
|
|
226
|
+
const key = OG_WORKER_FONT_KEYS[choice.family];
|
|
227
|
+
const [regular, boldBytes] = await Promise.all([
|
|
228
|
+
loadFullObject(bucket, key, timeoutMs),
|
|
229
|
+
bold ? loadFullObject(bucket, OG_WORKER_BOLD_FONT_KEYS[choice.family], timeoutMs) : Promise.resolve(null),
|
|
230
|
+
]);
|
|
231
|
+
if (!regular) {
|
|
232
|
+
if (!fallbackMissingWarned) {
|
|
233
|
+
fallbackMissingWarned = true;
|
|
234
|
+
logger.warn({ message: "[og] fallback font missing; its characters render as .notdef", mod: "og", key, family: choice.family });
|
|
235
|
+
}
|
|
236
|
+
return "missing";
|
|
237
|
+
}
|
|
238
|
+
return { key, regular, bold: boldBytes };
|
|
156
239
|
}
|
|
157
240
|
/**
|
|
158
|
-
* The fonts for one render: the locale's subset when `covered`
|
|
159
|
-
*
|
|
241
|
+
* The fonts for one render: the locale's subset when `covered` (chosen by
|
|
242
|
+
* {@link primarySubsetForLocale}) and available,
|
|
243
|
+
* else its full fonts (Bold only when `bold`); then the cross-script fallbacks
|
|
244
|
+
* planned from the ACTUAL primary bytes (`font-fallback.ts`).
|
|
160
245
|
*/
|
|
161
|
-
async function loadRenderFonts(bucket, locale, covered, bold, logger, timeoutMs) {
|
|
246
|
+
async function loadRenderFonts(bucket, locale, codepoints, covered, bold, logger, timeoutMs) {
|
|
247
|
+
lastLocale = locale;
|
|
248
|
+
let primary;
|
|
162
249
|
if (covered) {
|
|
163
250
|
const subset = await loadSubsetFonts(bucket, locale, bold, logger, timeoutMs);
|
|
164
251
|
if (subset)
|
|
165
|
-
|
|
252
|
+
primary = { ...subset, fontSubset: "hit" };
|
|
166
253
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
254
|
+
if (!primary) {
|
|
255
|
+
const [regular, boldBytes] = await Promise.all([
|
|
256
|
+
loadRegularFont(bucket, locale, timeoutMs),
|
|
257
|
+
bold ? loadBoldFont(bucket, locale, logger, timeoutMs) : Promise.resolve(null),
|
|
258
|
+
]);
|
|
259
|
+
primary = { regular, bold: boldBytes, fontSubset: covered ? "absent" : "miss" };
|
|
260
|
+
}
|
|
261
|
+
const fonts = { ...primary, fallbacks: [], skipped: [], degraded: false };
|
|
262
|
+
const primarySet = ogSubsetFontSets()[locale];
|
|
263
|
+
if (!primarySet)
|
|
264
|
+
return fonts;
|
|
265
|
+
const primaryBytes = primary.regular.byteLength + (primary.bold?.byteLength ?? 0);
|
|
266
|
+
const planPrimary = { primaryBytes, primaryFull: primary.fontSubset !== "hit", primaryCjk: locale !== "en" };
|
|
267
|
+
const plan = planOgFontFallbacks({
|
|
268
|
+
primary: primarySet,
|
|
269
|
+
...planPrimary,
|
|
270
|
+
codepoints,
|
|
271
|
+
candidates: fallbackCandidates(),
|
|
272
|
+
bold,
|
|
273
|
+
});
|
|
274
|
+
fonts.skipped.push(...plan.overBudget);
|
|
275
|
+
if (!plan.fallbacks.length)
|
|
276
|
+
return fonts;
|
|
277
|
+
// Planned subsets/fulls load in parallel; a planned subset whose object is
|
|
278
|
+
// unusable may then load its full font, one at a time, only while the whole
|
|
279
|
+
// set (with the upgrades accepted so far) still fits the budget.
|
|
280
|
+
const loaded = await Promise.all(plan.fallbacks.map((choice) => loadFallback(bucket, choice, bold, false, logger, timeoutMs)));
|
|
281
|
+
const effective = plan.fallbacks.map((c) => ({ subset: c.subset, bytes: c.bytes }));
|
|
282
|
+
for (const [i, choice] of plan.fallbacks.entries()) {
|
|
283
|
+
if (loaded[i] !== "over-budget")
|
|
284
|
+
continue;
|
|
285
|
+
fonts.degraded = true; // its subset object is missing / not the build's bytes
|
|
286
|
+
const asFull = effective.map((e, j) => (j === i ? { subset: false, bytes: ogFontSetBytes(choice.set, false, bold) } : e));
|
|
287
|
+
if (!ogFontSetFits(planPrimary, asFull))
|
|
288
|
+
continue;
|
|
289
|
+
loaded[i] = await loadFallback(bucket, { ...choice, subset: false }, bold, true, logger, timeoutMs);
|
|
290
|
+
if (typeof loaded[i] !== "string")
|
|
291
|
+
effective[i] = asFull[i];
|
|
292
|
+
}
|
|
293
|
+
plan.fallbacks.forEach((choice, i) => {
|
|
294
|
+
const result = loaded[i];
|
|
295
|
+
if (typeof result === "string") {
|
|
296
|
+
fonts.skipped.push(choice.family);
|
|
297
|
+
if (result === "missing")
|
|
298
|
+
fonts.degraded = true;
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
// A missing fallback Bold draws 700 with its Regular: do not cache that for a year either.
|
|
302
|
+
if (bold && !result.bold)
|
|
303
|
+
fonts.degraded = true;
|
|
304
|
+
fonts.fallbacks.push({ family: choice.family, ...result });
|
|
305
|
+
});
|
|
306
|
+
return fonts;
|
|
172
307
|
}
|
|
173
|
-
/** Test isolation: drop the raw font
|
|
308
|
+
/** Test isolation: drop the raw font cache and re-arm the warnings. */
|
|
174
309
|
export function resetOgWorkerFontCacheForTesting() {
|
|
175
|
-
|
|
310
|
+
fontCache.clear();
|
|
311
|
+
cacheBucket = undefined;
|
|
312
|
+
lastLocale = undefined;
|
|
176
313
|
boldMissingWarned = false;
|
|
177
314
|
subsetMissingWarned = false;
|
|
315
|
+
fallbackMissingWarned = false;
|
|
178
316
|
}
|
|
179
317
|
/**
|
|
180
|
-
* Introspection for tests/benchmarks:
|
|
181
|
-
*
|
|
182
|
-
* subset objects)
|
|
318
|
+
* Introspection for tests/benchmarks: the most recent render's locale and how
|
|
319
|
+
* many of its bytes are resident (`regularBytes` / `boldBytes`: its full
|
|
320
|
+
* fonts; `subset*`: its subset objects), plus every resident object
|
|
321
|
+
* (`totalBytes`, `keys`, least recently used first).
|
|
183
322
|
*/
|
|
184
323
|
export async function getOgWorkerFontCacheStats() {
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
324
|
+
const size = async (key) => key && fontCache.has(key) ? ((await fontCache.get(key).promise.catch(() => null))?.byteLength ?? 0) : 0;
|
|
325
|
+
const keys = [];
|
|
326
|
+
let totalBytes = 0;
|
|
327
|
+
for (const [key, entry] of fontCache) {
|
|
328
|
+
const bytes = await entry.promise.catch(() => null);
|
|
329
|
+
if (!bytes)
|
|
330
|
+
continue;
|
|
331
|
+
keys.push(key);
|
|
332
|
+
totalBytes += bytes.byteLength;
|
|
333
|
+
}
|
|
334
|
+
const locale = lastLocale;
|
|
335
|
+
const set = locale ? ogSubsetFontSets()[locale] : undefined;
|
|
190
336
|
return {
|
|
191
|
-
locale
|
|
192
|
-
regularBytes: await size(
|
|
193
|
-
boldBytes: await size(
|
|
194
|
-
subsetRegularBytes: await size(
|
|
195
|
-
subsetBoldBytes: await size(
|
|
337
|
+
locale,
|
|
338
|
+
regularBytes: await size(locale && OG_WORKER_FONT_KEYS[locale]),
|
|
339
|
+
boldBytes: await size(locale && OG_WORKER_BOLD_FONT_KEYS[locale]),
|
|
340
|
+
subsetRegularBytes: await size(set && ogSubsetFontKey(set.regular.file)),
|
|
341
|
+
subsetBoldBytes: await size(set?.bold && ogSubsetFontKey(set.bold.file)),
|
|
342
|
+
totalBytes,
|
|
343
|
+
keys,
|
|
196
344
|
};
|
|
197
345
|
}
|
|
198
346
|
async function sha256(value) {
|
|
@@ -238,21 +386,33 @@ export function resolveOgWorkerLogoDataUri(asset) {
|
|
|
238
386
|
// WebP (RIFF….WEBP) or anything else satori/resvg cannot rasterize.
|
|
239
387
|
return { skipped: "unsupported-format" };
|
|
240
388
|
}
|
|
389
|
+
/** satori font name of a fallback family (distinct from the trees' `Noto`, so weights match per family). */
|
|
390
|
+
const fallbackFontName = (family) => `Noto ${family}`;
|
|
241
391
|
/**
|
|
242
392
|
* satori → resvg for one tree. Callers hold the {@link serialRender} queue.
|
|
243
393
|
* The fonts are copied per render (`slice()`), so satori's parse of them is
|
|
244
|
-
* garbage once this returns — only the raw bytes stay in
|
|
245
|
-
*
|
|
246
|
-
*
|
|
394
|
+
* garbage once this returns — only the raw bytes stay in the font cache.
|
|
395
|
+
* satori gets the primary (`Noto`) first, then each fallback family under its
|
|
396
|
+
* own name: it draws every character with the first font that maps it.
|
|
397
|
+
* resvg gets the primary Regular only, as before: satori already turns tree
|
|
398
|
+
* text into paths, and resvg-wasm draws no text inside embedded SVG images
|
|
399
|
+
* whatever fonts it is given (og-font-fallback.test.ts), so a fallback buffer
|
|
400
|
+
* there would only grow its wasm heap.
|
|
247
401
|
*/
|
|
248
|
-
async function rasterizeTree(tree, width, height,
|
|
249
|
-
const
|
|
250
|
-
if (bold)
|
|
251
|
-
|
|
252
|
-
|
|
402
|
+
async function rasterizeTree(tree, width, height, fonts) {
|
|
403
|
+
const satoriFonts = [{ name: "Noto", data: fonts.regular.slice().buffer, weight: 400, style: "normal" }];
|
|
404
|
+
if (fonts.bold)
|
|
405
|
+
satoriFonts.push({ name: "Noto", data: fonts.bold.slice().buffer, weight: 700, style: "normal" });
|
|
406
|
+
for (const fallback of fonts.fallbacks) {
|
|
407
|
+
const name = fallbackFontName(fallback.family);
|
|
408
|
+
satoriFonts.push({ name, data: fallback.regular.slice().buffer, weight: 400, style: "normal" });
|
|
409
|
+
if (fallback.bold)
|
|
410
|
+
satoriFonts.push({ name, data: fallback.bold.slice().buffer, weight: 700, style: "normal" });
|
|
411
|
+
}
|
|
412
|
+
const svg = await satori(tree, { width, height, fonts: satoriFonts });
|
|
253
413
|
const resvg = new Resvg(svg, {
|
|
254
414
|
fitTo: { mode: "original" },
|
|
255
|
-
font: { fontBuffers: [regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
|
|
415
|
+
font: { fontBuffers: [fonts.regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
|
|
256
416
|
});
|
|
257
417
|
try {
|
|
258
418
|
const rendered = resvg.render();
|
|
@@ -267,6 +427,38 @@ async function rasterizeTree(tree, width, height, regular, bold) {
|
|
|
267
427
|
resvg.free();
|
|
268
428
|
}
|
|
269
429
|
}
|
|
430
|
+
/** The `og-render` fields describing the fallbacks of one render. */
|
|
431
|
+
function fallbackEventFields(fonts) {
|
|
432
|
+
return {
|
|
433
|
+
...(fonts.fallbacks.length ? { fontFallbacks: fonts.fallbacks.map((f) => f.key) } : {}),
|
|
434
|
+
...(fonts.skipped.length ? { fontFallbacksSkipped: [...new Set(fonts.skipped)] } : {}),
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* True when some text of an og.png template's params is missing from the
|
|
439
|
+
* locale's full font but another CJK family has it — the card renders with a
|
|
440
|
+
* fallback, which earlier renderers did not. Such cards get a distinct cache
|
|
441
|
+
* key, so a card cached before arc#8832 (drawn with .notdef) is not served.
|
|
442
|
+
* Every other card keeps its existing key.
|
|
443
|
+
*/
|
|
444
|
+
function paramsNeedFallback(locale, params) {
|
|
445
|
+
const primary = ogSubsetFontSets()[locale];
|
|
446
|
+
if (!primary)
|
|
447
|
+
return false;
|
|
448
|
+
const candidates = fallbackCandidates().filter((c) => c.set !== primary);
|
|
449
|
+
for (const value of Object.values(params)) {
|
|
450
|
+
if (typeof value !== "string" || value.startsWith("data:"))
|
|
451
|
+
continue;
|
|
452
|
+
for (const ch of value) {
|
|
453
|
+
const cp = ch.codePointAt(0);
|
|
454
|
+
if (cp < 0x80 || ogFallbackIgnorable(cp) || ogFullFontMaps(primary, cp))
|
|
455
|
+
continue;
|
|
456
|
+
if (candidates.some((c) => ogFullFontMaps(c.set, cp)))
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
return false;
|
|
461
|
+
}
|
|
270
462
|
/**
|
|
271
463
|
* Renders a caller-built satori tree to PNG (ArcBlock/did#300).
|
|
272
464
|
*
|
|
@@ -279,6 +471,10 @@ async function rasterizeTree(tree, width, height, regular, bold) {
|
|
|
279
471
|
* (`fonts/subset-v1/…`, ArcBlock/arc#8800) those are used instead — same
|
|
280
472
|
* pixels, a fraction of the parse; otherwise, or when the subset object is
|
|
281
473
|
* missing (one warning per isolate), the full fonts.
|
|
474
|
+
* - Characters the locale's full font does not have at all are drawn by
|
|
475
|
+
* cross-script fallback families added after it (arc#8832,
|
|
476
|
+
* `font-fallback.ts`; subset or full, within a per-render byte budget); a
|
|
477
|
+
* missing fallback object renders without it (one warning per isolate).
|
|
282
478
|
* - Runs inside the isolate-wide serial queue, so concurrent calls never
|
|
283
479
|
* parse fonts or grow the wasm heap in parallel.
|
|
284
480
|
* - No cache: callers version and cache the result themselves.
|
|
@@ -290,23 +486,24 @@ export async function renderOgTree(options) {
|
|
|
290
486
|
const logger = options.logger ?? consoleLogger;
|
|
291
487
|
const fontTimeout = options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS;
|
|
292
488
|
const bold = wantsBold(options.weights);
|
|
293
|
-
const
|
|
294
|
-
const
|
|
489
|
+
const codepoints = collectOgTreeCodepoints(tree);
|
|
490
|
+
const covered = primarySubsetForLocale(locale, codepoints, bold);
|
|
491
|
+
const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
|
|
295
492
|
const fontStart = performance.now();
|
|
296
493
|
const [fonts] = await Promise.all([
|
|
297
|
-
loadRenderFonts(options.fontBucket, locale, covered, bold, logger, fontTimeout),
|
|
494
|
+
loadRenderFonts(options.fontBucket, locale, codepoints, covered, bold, logger, fontTimeout),
|
|
298
495
|
ensureWasm(),
|
|
299
496
|
]);
|
|
300
497
|
const fontReadMs = performance.now() - fontStart;
|
|
301
498
|
let body;
|
|
302
499
|
try {
|
|
303
|
-
body = await rasterizeTree(tree, options.width, options.height, fonts
|
|
500
|
+
body = await rasterizeTree(tree, options.width, options.height, fonts);
|
|
304
501
|
}
|
|
305
502
|
catch {
|
|
306
503
|
// satori/resvg messages can quote the input; report a generic 400.
|
|
307
504
|
throw new OgTreeRenderError(OG_TREE_ERROR_CODES.renderFailed, "the tree could not be rendered");
|
|
308
505
|
}
|
|
309
|
-
return { body, queueMs, fontReadMs,
|
|
506
|
+
return { body, queueMs, fontReadMs, fonts };
|
|
310
507
|
}, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
|
|
311
508
|
options.observer?.({
|
|
312
509
|
locale,
|
|
@@ -314,9 +511,10 @@ export async function renderOgTree(options) {
|
|
|
314
511
|
durationMs: performance.now() - startedAt,
|
|
315
512
|
queueMs,
|
|
316
513
|
fontReadMs,
|
|
317
|
-
fontSubset,
|
|
514
|
+
fontSubset: fonts.fontSubset,
|
|
515
|
+
...fallbackEventFields(fonts),
|
|
318
516
|
template: "tree",
|
|
319
|
-
...(bold && !
|
|
517
|
+
...(bold && !fonts.bold ? { boldFallback: true } : {}),
|
|
320
518
|
});
|
|
321
519
|
return body;
|
|
322
520
|
}
|
|
@@ -365,6 +563,11 @@ export function createOgWorkerRenderer(options) {
|
|
|
365
563
|
// changes supported/unsupported format.
|
|
366
564
|
logoHash,
|
|
367
565
|
params,
|
|
566
|
+
// Only cards drawn with a cross-script fallback (arc#8832) get a new key.
|
|
567
|
+
// 2: their primary may now load its subset, which lets a fallback cut
|
|
568
|
+
// by the budget under the full primary draw (did 4.1.60 cached such
|
|
569
|
+
// cards with .notdef as `fontFallback: 1`).
|
|
570
|
+
...(paramsNeedFallback(locale, params) ? { fontFallback: 2 } : {}),
|
|
368
571
|
}));
|
|
369
572
|
const cacheRequest = new Request(`${CACHE_ORIGIN}/${OG_WORKER_RENDERER_VERSION}/${cacheHash}`);
|
|
370
573
|
const cache = options.cache ?? defaultCache();
|
|
@@ -387,23 +590,26 @@ export function createOgWorkerRenderer(options) {
|
|
|
387
590
|
const { dataUri: logoDataUri, skipped: logoSkipped } = resolveOgWorkerLogoDataUri(logoAsset ?? undefined);
|
|
388
591
|
params.logo = logoDataUri ?? TRANSPARENT_PNG_DATA_URI;
|
|
389
592
|
const tree = await getTemplate(params);
|
|
390
|
-
const
|
|
593
|
+
const codepoints = collectOgTreeCodepoints(tree);
|
|
594
|
+
const covered = primarySubsetForLocale(locale, codepoints, false);
|
|
391
595
|
const logger = options.logger ?? consoleLogger;
|
|
392
|
-
const { body, queueMs, fontReadMs,
|
|
596
|
+
const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
|
|
393
597
|
const fontStart = performance.now();
|
|
394
598
|
const [fonts] = await Promise.all([
|
|
395
|
-
loadRenderFonts(options.fontBucket, locale, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
|
|
599
|
+
loadRenderFonts(options.fontBucket, locale, codepoints, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
|
|
396
600
|
ensureWasm(),
|
|
397
601
|
]);
|
|
398
602
|
const fontReadMs = performance.now() - fontStart;
|
|
399
|
-
const body = await rasterizeTree(tree, params.width, params.height, fonts
|
|
400
|
-
return { body, queueMs, fontReadMs,
|
|
603
|
+
const body = await rasterizeTree(tree, params.width, params.height, fonts);
|
|
604
|
+
return { body, queueMs, fontReadMs, fonts };
|
|
401
605
|
}, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
|
|
402
606
|
const responseBody = body.slice().buffer;
|
|
403
607
|
const response = new Response(responseBody, {
|
|
404
608
|
headers: { "Content-Type": "image/png", "Cache-Control": "public, max-age=31536000, immutable" },
|
|
405
609
|
});
|
|
406
|
-
|
|
610
|
+
// A card missing a fallback object would be cached for a year as drawn
|
|
611
|
+
// now (with .notdef): serve it, but render again until the object exists.
|
|
612
|
+
if (!prepared.nocache && !fonts.degraded) {
|
|
407
613
|
try {
|
|
408
614
|
await cache.put(cacheRequest, response.clone());
|
|
409
615
|
}
|
|
@@ -418,7 +624,8 @@ export function createOgWorkerRenderer(options) {
|
|
|
418
624
|
durationMs: performance.now() - startedAt,
|
|
419
625
|
queueMs,
|
|
420
626
|
fontReadMs,
|
|
421
|
-
fontSubset,
|
|
627
|
+
fontSubset: fonts.fontSubset,
|
|
628
|
+
...fallbackEventFields(fonts),
|
|
422
629
|
template: params.template,
|
|
423
630
|
...(logoSkipped ? { logoSkipped } : {}),
|
|
424
631
|
});
|
package/dist/og/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/og/worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/og/worker.ts"],"names":[],"mappings":"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"}
|