@arcblock/did-connect-service 4.1.59 → 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.
- package/dist/og/font-fallback.d.ts +105 -0
- package/dist/og/font-fallback.d.ts.map +1 -0
- package/dist/og/font-fallback.js +170 -0
- package/dist/og/font-fallback.js.map +1 -0
- package/dist/og/font-subset.d.ts +4 -0
- package/dist/og/font-subset.d.ts.map +1 -1
- package/dist/og/font-subset.js +17 -12
- 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 +86 -0
- package/dist/og/node-font-files.d.ts.map +1 -0
- package/dist/og/node-font-files.js +280 -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 +11 -8
- package/dist/og/tree-node.d.ts.map +1 -1
- package/dist/og/tree-node.js +39 -109
- package/dist/og/tree-node.js.map +1 -1
- package/dist/og/worker.d.ts +42 -5
- package/dist/og/worker.d.ts.map +1 -1
- package/dist/og/worker.js +290 -92
- 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, planOgFontFallbacks, } from "./font-fallback.js";
|
|
5
|
+
import { collectOgTreeCodepoints, ogFontSha256, ogFullFontMaps, ogSubsetCovers, 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,177 @@ 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 `
|
|
200
|
+
* Whether `codepoints` are covered by `locale`'s subset. A locale without a
|
|
151
201
|
* subset counts as covered, so the render reports `"absent"`, not `"miss"`.
|
|
152
202
|
*/
|
|
153
|
-
function
|
|
203
|
+
function coveredForLocale(locale, codepoints) {
|
|
154
204
|
const set = ogSubsetFontSets()[locale];
|
|
155
|
-
return !set ||
|
|
205
|
+
return !set || ogSubsetCovers(set, codepoints);
|
|
206
|
+
}
|
|
207
|
+
/** The fallback families this renderer can load (every CJK family the subset table describes). */
|
|
208
|
+
function fallbackCandidates() {
|
|
209
|
+
const sets = ogSubsetFontSets();
|
|
210
|
+
return OG_CJK_FALLBACK_PREFERENCE.flatMap((family) => (sets[family] ? [{ family, set: sets[family] }] : []));
|
|
211
|
+
}
|
|
212
|
+
/** Loads one planned fallback: its subset when planned and usable, else its full font (if still within budget). */
|
|
213
|
+
async function loadFallback(bucket, choice, bold, fullAllowed, logger, timeoutMs) {
|
|
214
|
+
if (choice.subset) {
|
|
215
|
+
const subset = await loadSubsetFonts(bucket, choice.family, bold, logger, timeoutMs);
|
|
216
|
+
if (subset)
|
|
217
|
+
return { key: ogSubsetFontKey(choice.set.regular.file), ...subset };
|
|
218
|
+
if (!fullAllowed)
|
|
219
|
+
return "over-budget";
|
|
220
|
+
}
|
|
221
|
+
const key = OG_WORKER_FONT_KEYS[choice.family];
|
|
222
|
+
const [regular, boldBytes] = await Promise.all([
|
|
223
|
+
loadFullObject(bucket, key, timeoutMs),
|
|
224
|
+
bold ? loadFullObject(bucket, OG_WORKER_BOLD_FONT_KEYS[choice.family], timeoutMs) : Promise.resolve(null),
|
|
225
|
+
]);
|
|
226
|
+
if (!regular) {
|
|
227
|
+
if (!fallbackMissingWarned) {
|
|
228
|
+
fallbackMissingWarned = true;
|
|
229
|
+
logger.warn({ message: "[og] fallback font missing; its characters render as .notdef", mod: "og", key, family: choice.family });
|
|
230
|
+
}
|
|
231
|
+
return "missing";
|
|
232
|
+
}
|
|
233
|
+
return { key, regular, bold: boldBytes };
|
|
156
234
|
}
|
|
157
235
|
/**
|
|
158
236
|
* The fonts for one render: the locale's subset when `covered` and available,
|
|
159
|
-
* else
|
|
237
|
+
* else its full fonts (Bold only when `bold`); then the cross-script fallbacks
|
|
238
|
+
* planned from the ACTUAL primary bytes (`font-fallback.ts`).
|
|
160
239
|
*/
|
|
161
|
-
async function loadRenderFonts(bucket, locale, covered, bold, logger, timeoutMs) {
|
|
240
|
+
async function loadRenderFonts(bucket, locale, codepoints, covered, bold, logger, timeoutMs) {
|
|
241
|
+
lastLocale = locale;
|
|
242
|
+
let primary;
|
|
162
243
|
if (covered) {
|
|
163
244
|
const subset = await loadSubsetFonts(bucket, locale, bold, logger, timeoutMs);
|
|
164
245
|
if (subset)
|
|
165
|
-
|
|
246
|
+
primary = { ...subset, fontSubset: "hit" };
|
|
166
247
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
248
|
+
if (!primary) {
|
|
249
|
+
const [regular, boldBytes] = await Promise.all([
|
|
250
|
+
loadRegularFont(bucket, locale, timeoutMs),
|
|
251
|
+
bold ? loadBoldFont(bucket, locale, logger, timeoutMs) : Promise.resolve(null),
|
|
252
|
+
]);
|
|
253
|
+
primary = { regular, bold: boldBytes, fontSubset: covered ? "absent" : "miss" };
|
|
254
|
+
}
|
|
255
|
+
const fonts = { ...primary, fallbacks: [], skipped: [], degraded: false };
|
|
256
|
+
const primarySet = ogSubsetFontSets()[locale];
|
|
257
|
+
if (!primarySet)
|
|
258
|
+
return fonts;
|
|
259
|
+
const primaryBytes = primary.regular.byteLength + (primary.bold?.byteLength ?? 0);
|
|
260
|
+
const planPrimary = { primaryBytes, primaryFull: primary.fontSubset !== "hit", primaryCjk: locale !== "en" };
|
|
261
|
+
const plan = planOgFontFallbacks({
|
|
262
|
+
primary: primarySet,
|
|
263
|
+
...planPrimary,
|
|
264
|
+
codepoints,
|
|
265
|
+
candidates: fallbackCandidates(),
|
|
266
|
+
bold,
|
|
267
|
+
});
|
|
268
|
+
fonts.skipped.push(...plan.overBudget);
|
|
269
|
+
if (!plan.fallbacks.length)
|
|
270
|
+
return fonts;
|
|
271
|
+
// Planned subsets/fulls load in parallel; a planned subset whose object is
|
|
272
|
+
// unusable may then load its full font, one at a time, only while the whole
|
|
273
|
+
// set (with the upgrades accepted so far) still fits the budget.
|
|
274
|
+
const loaded = await Promise.all(plan.fallbacks.map((choice) => loadFallback(bucket, choice, bold, false, logger, timeoutMs)));
|
|
275
|
+
const effective = plan.fallbacks.map((c) => ({ subset: c.subset, bytes: c.bytes }));
|
|
276
|
+
for (const [i, choice] of plan.fallbacks.entries()) {
|
|
277
|
+
if (loaded[i] !== "over-budget")
|
|
278
|
+
continue;
|
|
279
|
+
fonts.degraded = true; // its subset object is missing / not the build's bytes
|
|
280
|
+
const asFull = effective.map((e, j) => (j === i ? { subset: false, bytes: ogFontSetBytes(choice.set, false, bold) } : e));
|
|
281
|
+
if (!ogFontSetFits(planPrimary, asFull))
|
|
282
|
+
continue;
|
|
283
|
+
loaded[i] = await loadFallback(bucket, { ...choice, subset: false }, bold, true, logger, timeoutMs);
|
|
284
|
+
if (typeof loaded[i] !== "string")
|
|
285
|
+
effective[i] = asFull[i];
|
|
286
|
+
}
|
|
287
|
+
plan.fallbacks.forEach((choice, i) => {
|
|
288
|
+
const result = loaded[i];
|
|
289
|
+
if (typeof result === "string") {
|
|
290
|
+
fonts.skipped.push(choice.family);
|
|
291
|
+
if (result === "missing")
|
|
292
|
+
fonts.degraded = true;
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
// A missing fallback Bold draws 700 with its Regular: do not cache that for a year either.
|
|
296
|
+
if (bold && !result.bold)
|
|
297
|
+
fonts.degraded = true;
|
|
298
|
+
fonts.fallbacks.push({ family: choice.family, ...result });
|
|
299
|
+
});
|
|
300
|
+
return fonts;
|
|
172
301
|
}
|
|
173
|
-
/** Test isolation: drop the raw font
|
|
302
|
+
/** Test isolation: drop the raw font cache and re-arm the warnings. */
|
|
174
303
|
export function resetOgWorkerFontCacheForTesting() {
|
|
175
|
-
|
|
304
|
+
fontCache.clear();
|
|
305
|
+
cacheBucket = undefined;
|
|
306
|
+
lastLocale = undefined;
|
|
176
307
|
boldMissingWarned = false;
|
|
177
308
|
subsetMissingWarned = false;
|
|
309
|
+
fallbackMissingWarned = false;
|
|
178
310
|
}
|
|
179
311
|
/**
|
|
180
|
-
* Introspection for tests/benchmarks:
|
|
181
|
-
*
|
|
182
|
-
* subset objects)
|
|
312
|
+
* Introspection for tests/benchmarks: the most recent render's locale and how
|
|
313
|
+
* many of its bytes are resident (`regularBytes` / `boldBytes`: its full
|
|
314
|
+
* fonts; `subset*`: its subset objects), plus every resident object
|
|
315
|
+
* (`totalBytes`, `keys`, least recently used first).
|
|
183
316
|
*/
|
|
184
317
|
export async function getOgWorkerFontCacheStats() {
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
318
|
+
const size = async (key) => key && fontCache.has(key) ? ((await fontCache.get(key).promise.catch(() => null))?.byteLength ?? 0) : 0;
|
|
319
|
+
const keys = [];
|
|
320
|
+
let totalBytes = 0;
|
|
321
|
+
for (const [key, entry] of fontCache) {
|
|
322
|
+
const bytes = await entry.promise.catch(() => null);
|
|
323
|
+
if (!bytes)
|
|
324
|
+
continue;
|
|
325
|
+
keys.push(key);
|
|
326
|
+
totalBytes += bytes.byteLength;
|
|
327
|
+
}
|
|
328
|
+
const locale = lastLocale;
|
|
329
|
+
const set = locale ? ogSubsetFontSets()[locale] : undefined;
|
|
190
330
|
return {
|
|
191
|
-
locale
|
|
192
|
-
regularBytes: await size(
|
|
193
|
-
boldBytes: await size(
|
|
194
|
-
subsetRegularBytes: await size(
|
|
195
|
-
subsetBoldBytes: await size(
|
|
331
|
+
locale,
|
|
332
|
+
regularBytes: await size(locale && OG_WORKER_FONT_KEYS[locale]),
|
|
333
|
+
boldBytes: await size(locale && OG_WORKER_BOLD_FONT_KEYS[locale]),
|
|
334
|
+
subsetRegularBytes: await size(set && ogSubsetFontKey(set.regular.file)),
|
|
335
|
+
subsetBoldBytes: await size(set?.bold && ogSubsetFontKey(set.bold.file)),
|
|
336
|
+
totalBytes,
|
|
337
|
+
keys,
|
|
196
338
|
};
|
|
197
339
|
}
|
|
198
340
|
async function sha256(value) {
|
|
@@ -238,21 +380,33 @@ export function resolveOgWorkerLogoDataUri(asset) {
|
|
|
238
380
|
// WebP (RIFF….WEBP) or anything else satori/resvg cannot rasterize.
|
|
239
381
|
return { skipped: "unsupported-format" };
|
|
240
382
|
}
|
|
383
|
+
/** satori font name of a fallback family (distinct from the trees' `Noto`, so weights match per family). */
|
|
384
|
+
const fallbackFontName = (family) => `Noto ${family}`;
|
|
241
385
|
/**
|
|
242
386
|
* satori → resvg for one tree. Callers hold the {@link serialRender} queue.
|
|
243
387
|
* 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
|
-
*
|
|
388
|
+
* garbage once this returns — only the raw bytes stay in the font cache.
|
|
389
|
+
* satori gets the primary (`Noto`) first, then each fallback family under its
|
|
390
|
+
* own name: it draws every character with the first font that maps it.
|
|
391
|
+
* resvg gets the primary Regular only, as before: satori already turns tree
|
|
392
|
+
* text into paths, and resvg-wasm draws no text inside embedded SVG images
|
|
393
|
+
* whatever fonts it is given (og-font-fallback.test.ts), so a fallback buffer
|
|
394
|
+
* there would only grow its wasm heap.
|
|
247
395
|
*/
|
|
248
|
-
async function rasterizeTree(tree, width, height,
|
|
249
|
-
const
|
|
250
|
-
if (bold)
|
|
251
|
-
|
|
252
|
-
|
|
396
|
+
async function rasterizeTree(tree, width, height, fonts) {
|
|
397
|
+
const satoriFonts = [{ name: "Noto", data: fonts.regular.slice().buffer, weight: 400, style: "normal" }];
|
|
398
|
+
if (fonts.bold)
|
|
399
|
+
satoriFonts.push({ name: "Noto", data: fonts.bold.slice().buffer, weight: 700, style: "normal" });
|
|
400
|
+
for (const fallback of fonts.fallbacks) {
|
|
401
|
+
const name = fallbackFontName(fallback.family);
|
|
402
|
+
satoriFonts.push({ name, data: fallback.regular.slice().buffer, weight: 400, style: "normal" });
|
|
403
|
+
if (fallback.bold)
|
|
404
|
+
satoriFonts.push({ name, data: fallback.bold.slice().buffer, weight: 700, style: "normal" });
|
|
405
|
+
}
|
|
406
|
+
const svg = await satori(tree, { width, height, fonts: satoriFonts });
|
|
253
407
|
const resvg = new Resvg(svg, {
|
|
254
408
|
fitTo: { mode: "original" },
|
|
255
|
-
font: { fontBuffers: [regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
|
|
409
|
+
font: { fontBuffers: [fonts.regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
|
|
256
410
|
});
|
|
257
411
|
try {
|
|
258
412
|
const rendered = resvg.render();
|
|
@@ -267,6 +421,38 @@ async function rasterizeTree(tree, width, height, regular, bold) {
|
|
|
267
421
|
resvg.free();
|
|
268
422
|
}
|
|
269
423
|
}
|
|
424
|
+
/** The `og-render` fields describing the fallbacks of one render. */
|
|
425
|
+
function fallbackEventFields(fonts) {
|
|
426
|
+
return {
|
|
427
|
+
...(fonts.fallbacks.length ? { fontFallbacks: fonts.fallbacks.map((f) => f.key) } : {}),
|
|
428
|
+
...(fonts.skipped.length ? { fontFallbacksSkipped: [...new Set(fonts.skipped)] } : {}),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* True when some text of an og.png template's params is missing from the
|
|
433
|
+
* locale's full font but another CJK family has it — the card renders with a
|
|
434
|
+
* fallback, which earlier renderers did not. Such cards get a distinct cache
|
|
435
|
+
* key, so a card cached before arc#8832 (drawn with .notdef) is not served.
|
|
436
|
+
* Every other card keeps its existing key.
|
|
437
|
+
*/
|
|
438
|
+
function paramsNeedFallback(locale, params) {
|
|
439
|
+
const primary = ogSubsetFontSets()[locale];
|
|
440
|
+
if (!primary)
|
|
441
|
+
return false;
|
|
442
|
+
const candidates = fallbackCandidates().filter((c) => c.set !== primary);
|
|
443
|
+
for (const value of Object.values(params)) {
|
|
444
|
+
if (typeof value !== "string" || value.startsWith("data:"))
|
|
445
|
+
continue;
|
|
446
|
+
for (const ch of value) {
|
|
447
|
+
const cp = ch.codePointAt(0);
|
|
448
|
+
if (cp < 0x80 || ogFallbackIgnorable(cp) || ogFullFontMaps(primary, cp))
|
|
449
|
+
continue;
|
|
450
|
+
if (candidates.some((c) => ogFullFontMaps(c.set, cp)))
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
270
456
|
/**
|
|
271
457
|
* Renders a caller-built satori tree to PNG (ArcBlock/did#300).
|
|
272
458
|
*
|
|
@@ -279,6 +465,10 @@ async function rasterizeTree(tree, width, height, regular, bold) {
|
|
|
279
465
|
* (`fonts/subset-v1/…`, ArcBlock/arc#8800) those are used instead — same
|
|
280
466
|
* pixels, a fraction of the parse; otherwise, or when the subset object is
|
|
281
467
|
* missing (one warning per isolate), the full fonts.
|
|
468
|
+
* - Characters the locale's full font does not have at all are drawn by
|
|
469
|
+
* cross-script fallback families added after it (arc#8832,
|
|
470
|
+
* `font-fallback.ts`; subset or full, within a per-render byte budget); a
|
|
471
|
+
* missing fallback object renders without it (one warning per isolate).
|
|
282
472
|
* - Runs inside the isolate-wide serial queue, so concurrent calls never
|
|
283
473
|
* parse fonts or grow the wasm heap in parallel.
|
|
284
474
|
* - No cache: callers version and cache the result themselves.
|
|
@@ -290,23 +480,24 @@ export async function renderOgTree(options) {
|
|
|
290
480
|
const logger = options.logger ?? consoleLogger;
|
|
291
481
|
const fontTimeout = options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS;
|
|
292
482
|
const bold = wantsBold(options.weights);
|
|
293
|
-
const
|
|
294
|
-
const
|
|
483
|
+
const codepoints = collectOgTreeCodepoints(tree);
|
|
484
|
+
const covered = coveredForLocale(locale, codepoints);
|
|
485
|
+
const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
|
|
295
486
|
const fontStart = performance.now();
|
|
296
487
|
const [fonts] = await Promise.all([
|
|
297
|
-
loadRenderFonts(options.fontBucket, locale, covered, bold, logger, fontTimeout),
|
|
488
|
+
loadRenderFonts(options.fontBucket, locale, codepoints, covered, bold, logger, fontTimeout),
|
|
298
489
|
ensureWasm(),
|
|
299
490
|
]);
|
|
300
491
|
const fontReadMs = performance.now() - fontStart;
|
|
301
492
|
let body;
|
|
302
493
|
try {
|
|
303
|
-
body = await rasterizeTree(tree, options.width, options.height, fonts
|
|
494
|
+
body = await rasterizeTree(tree, options.width, options.height, fonts);
|
|
304
495
|
}
|
|
305
496
|
catch {
|
|
306
497
|
// satori/resvg messages can quote the input; report a generic 400.
|
|
307
498
|
throw new OgTreeRenderError(OG_TREE_ERROR_CODES.renderFailed, "the tree could not be rendered");
|
|
308
499
|
}
|
|
309
|
-
return { body, queueMs, fontReadMs,
|
|
500
|
+
return { body, queueMs, fontReadMs, fonts };
|
|
310
501
|
}, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
|
|
311
502
|
options.observer?.({
|
|
312
503
|
locale,
|
|
@@ -314,9 +505,10 @@ export async function renderOgTree(options) {
|
|
|
314
505
|
durationMs: performance.now() - startedAt,
|
|
315
506
|
queueMs,
|
|
316
507
|
fontReadMs,
|
|
317
|
-
fontSubset,
|
|
508
|
+
fontSubset: fonts.fontSubset,
|
|
509
|
+
...fallbackEventFields(fonts),
|
|
318
510
|
template: "tree",
|
|
319
|
-
...(bold && !
|
|
511
|
+
...(bold && !fonts.bold ? { boldFallback: true } : {}),
|
|
320
512
|
});
|
|
321
513
|
return body;
|
|
322
514
|
}
|
|
@@ -365,6 +557,8 @@ export function createOgWorkerRenderer(options) {
|
|
|
365
557
|
// changes supported/unsupported format.
|
|
366
558
|
logoHash,
|
|
367
559
|
params,
|
|
560
|
+
// Only cards drawn with a cross-script fallback (arc#8832) get a new key.
|
|
561
|
+
...(paramsNeedFallback(locale, params) ? { fontFallback: 1 } : {}),
|
|
368
562
|
}));
|
|
369
563
|
const cacheRequest = new Request(`${CACHE_ORIGIN}/${OG_WORKER_RENDERER_VERSION}/${cacheHash}`);
|
|
370
564
|
const cache = options.cache ?? defaultCache();
|
|
@@ -387,23 +581,26 @@ export function createOgWorkerRenderer(options) {
|
|
|
387
581
|
const { dataUri: logoDataUri, skipped: logoSkipped } = resolveOgWorkerLogoDataUri(logoAsset ?? undefined);
|
|
388
582
|
params.logo = logoDataUri ?? TRANSPARENT_PNG_DATA_URI;
|
|
389
583
|
const tree = await getTemplate(params);
|
|
390
|
-
const
|
|
584
|
+
const codepoints = collectOgTreeCodepoints(tree);
|
|
585
|
+
const covered = coveredForLocale(locale, codepoints);
|
|
391
586
|
const logger = options.logger ?? consoleLogger;
|
|
392
|
-
const { body, queueMs, fontReadMs,
|
|
587
|
+
const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
|
|
393
588
|
const fontStart = performance.now();
|
|
394
589
|
const [fonts] = await Promise.all([
|
|
395
|
-
loadRenderFonts(options.fontBucket, locale, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
|
|
590
|
+
loadRenderFonts(options.fontBucket, locale, codepoints, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
|
|
396
591
|
ensureWasm(),
|
|
397
592
|
]);
|
|
398
593
|
const fontReadMs = performance.now() - fontStart;
|
|
399
|
-
const body = await rasterizeTree(tree, params.width, params.height, fonts
|
|
400
|
-
return { body, queueMs, fontReadMs,
|
|
594
|
+
const body = await rasterizeTree(tree, params.width, params.height, fonts);
|
|
595
|
+
return { body, queueMs, fontReadMs, fonts };
|
|
401
596
|
}, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
|
|
402
597
|
const responseBody = body.slice().buffer;
|
|
403
598
|
const response = new Response(responseBody, {
|
|
404
599
|
headers: { "Content-Type": "image/png", "Cache-Control": "public, max-age=31536000, immutable" },
|
|
405
600
|
});
|
|
406
|
-
|
|
601
|
+
// A card missing a fallback object would be cached for a year as drawn
|
|
602
|
+
// now (with .notdef): serve it, but render again until the object exists.
|
|
603
|
+
if (!prepared.nocache && !fonts.degraded) {
|
|
407
604
|
try {
|
|
408
605
|
await cache.put(cacheRequest, response.clone());
|
|
409
606
|
}
|
|
@@ -418,7 +615,8 @@ export function createOgWorkerRenderer(options) {
|
|
|
418
615
|
durationMs: performance.now() - startedAt,
|
|
419
616
|
queueMs,
|
|
420
617
|
fontReadMs,
|
|
421
|
-
fontSubset,
|
|
618
|
+
fontSubset: fonts.fontSubset,
|
|
619
|
+
...fallbackEventFields(fonts),
|
|
422
620
|
template: params.template,
|
|
423
621
|
...(logoSkipped ? { logoSkipped } : {}),
|
|
424
622
|
});
|
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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"}
|