clearcote 0.40.1 → 0.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +8 -1
  2. package/dist/cli-commands.d.ts +2 -4
  3. package/dist/cli-commands.d.ts.map +1 -1
  4. package/dist/cli-commands.js +11 -7
  5. package/dist/cli-commands.js.map +1 -1
  6. package/dist/cloud.d.ts.map +1 -1
  7. package/dist/cloud.js +5 -2
  8. package/dist/cloud.js.map +1 -1
  9. package/dist/colorscheme.d.ts +27 -0
  10. package/dist/colorscheme.d.ts.map +1 -0
  11. package/dist/colorscheme.js +20 -0
  12. package/dist/colorscheme.js.map +1 -0
  13. package/dist/docker.d.ts +22 -0
  14. package/dist/docker.d.ts.map +1 -1
  15. package/dist/docker.js +146 -34
  16. package/dist/docker.js.map +1 -1
  17. package/dist/download.d.ts +37 -1
  18. package/dist/download.d.ts.map +1 -1
  19. package/dist/download.js +609 -29
  20. package/dist/download.js.map +1 -1
  21. package/dist/fonts.d.ts +84 -3
  22. package/dist/fonts.d.ts.map +1 -1
  23. package/dist/fonts.js +486 -12
  24. package/dist/fonts.js.map +1 -1
  25. package/dist/geometry.d.ts +3 -1
  26. package/dist/geometry.d.ts.map +1 -1
  27. package/dist/geometry.js +6 -2
  28. package/dist/geometry.js.map +1 -1
  29. package/dist/humanize.d.ts +11 -0
  30. package/dist/humanize.d.ts.map +1 -1
  31. package/dist/humanize.js +152 -30
  32. package/dist/humanize.js.map +1 -1
  33. package/dist/index.d.ts +30 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +44 -21
  36. package/dist/index.js.map +1 -1
  37. package/dist/isolated.d.ts +1 -0
  38. package/dist/isolated.d.ts.map +1 -1
  39. package/dist/isolated.js +2 -0
  40. package/dist/isolated.js.map +1 -1
  41. package/dist/launchopts.d.ts +21 -0
  42. package/dist/launchopts.d.ts.map +1 -1
  43. package/dist/launchopts.js +46 -0
  44. package/dist/launchopts.js.map +1 -1
  45. package/dist/motion.d.ts +23 -0
  46. package/dist/motion.d.ts.map +1 -1
  47. package/dist/motion.js +43 -0
  48. package/dist/motion.js.map +1 -1
  49. package/dist/personaenv.d.ts +33 -0
  50. package/dist/personaenv.d.ts.map +1 -0
  51. package/dist/personaenv.js +117 -0
  52. package/dist/personaenv.js.map +1 -0
  53. package/dist/warnings.d.ts +9 -1
  54. package/dist/warnings.d.ts.map +1 -1
  55. package/dist/warnings.js +32 -4
  56. package/dist/warnings.js.map +1 -1
  57. package/dist/widevine.d.ts +10 -0
  58. package/dist/widevine.d.ts.map +1 -1
  59. package/dist/widevine.js +18 -0
  60. package/dist/widevine.js.map +1 -1
  61. package/dist/winlaunch.d.ts +2 -1
  62. package/dist/winlaunch.d.ts.map +1 -1
  63. package/dist/winlaunch.js +2 -1
  64. package/dist/winlaunch.js.map +1 -1
  65. package/docker-seccomp.json +909 -0
  66. package/package.json +2 -1
package/dist/fonts.js CHANGED
@@ -9,13 +9,420 @@
9
9
  // At launch we materialize the template (substituting the real fonts dir + a writable
10
10
  // cache dir) and point FONTCONFIG_FILE at it, so the clones resolve without depending on
11
11
  // the host's /etc/fonts. No-op on non-Linux and on older binaries that ship no `fonts/`.
12
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
13
- import { dirname, join } from "node:path";
14
- import { tmpdir } from "node:os";
15
- /** Returns `{ FONTCONFIG_FILE }` on Linux when the font bundle is present, else `{}`. */
16
- export function linuxFontEnv(exePath) {
12
+ //
13
+ // Because the template is self-contained, fonts installed on the host are invisible to the
14
+ // browser. Two settings add directories to it (the same as the Python SDK's _fonts.py):
15
+ //
16
+ // * `fontDirs` / CLEARCOTE_FONT_DIRS — your own fonts, typically a copy of a Windows machine's
17
+ // Fonts folder. Listed ahead of the bundle. On an engine that lets a genuine face win over its
18
+ // substitute (it carries GENUINE_FACES_SWITCH; PRO r32+), every family they provide is also used as
19
+ // itself: its lookalike rule (Arial->Arimo, Segoe UI->Selawik, …) is dropped, and the names and CSS
20
+ // generics that resolve to it on Windows (Helvetica->Arial, sans-serif->Arial, system-ui->Segoe UI,
21
+ // …) point at it. An older engine still draws every family a persona lists through its own
22
+ // substitute, so the rules stay there: changing them would split Helvetica from Arial. The
23
+ // directories still serve the characters the bundle cannot draw.
24
+ // * CLEARCOTE_FALLBACK_FONT_DIRS — fonts used only for characters nothing else covers (CJK, Indic,
25
+ // emoji, …). Listed after the bundle and change no rules. The Docker image sets it to the script
26
+ // fonts it installs.
27
+ //
28
+ // Both are lists separated by the path delimiter. Never point either at all of /usr/share/fonts:
29
+ // the host's Latin families then compete with the clones and change the Windows widths.
30
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, statSync, writeFileSync } from "node:fs";
31
+ import { createHash } from "node:crypto";
32
+ import { delimiter, dirname, join, resolve } from "node:path";
33
+ import { homedir, tmpdir } from "node:os";
34
+ import { engineSupportsSwitch } from "./launchopts.js";
35
+ export const FONT_DIRS_ENV = "CLEARCOTE_FONT_DIRS";
36
+ export const FALLBACK_FONT_DIRS_ENV = "CLEARCOTE_FALLBACK_FONT_DIRS";
37
+ const FONT_EXTS = [".ttf", ".otf", ".ttc", ".otc"];
38
+ /** Carried by an engine that lets a genuine Windows face installed here win over its substitute (PRO
39
+ * r32+). The SDK never passes it: its presence in the binary is the marker. Measured on an engine without
40
+ * it: with a genuine Arial in CLEARCOTE_FONT_DIRS and the rules changed, "Helvetica" reached the genuine
41
+ * file while "Arial" stayed on the engine's Arimo -- two widths no Windows machine has. */
42
+ export const GENUINE_FACES_SWITCH = "disable-genuine-font-faces";
43
+ /** Whether the engine at `exePath` lets a genuine face from your own fonts win (see GENUINE_FACES_SWITCH). */
44
+ export function engineHonoursGenuineFaces(exePath) {
45
+ return engineSupportsSwitch(exePath, GENUINE_FACES_SWITCH);
46
+ }
47
+ /** The Windows family each non-Windows name in the template stands for (the Windows registry's
48
+ * FontSubstitutes): when the genuine family is present, the rule points at it instead of a clone. */
49
+ const WINDOWS_ALIASES = { helvetica: "Arial", times: "Times New Roman", courier: "Courier New" };
50
+ /** What each CSS generic resolves to in Chrome on Windows (measured: see fonts.conf.template). */
51
+ const GENERIC_WINDOWS = {
52
+ "sans-serif": "Arial", serif: "Times New Roman", monospace: "Consolas", "system-ui": "Segoe UI",
53
+ };
54
+ /** The Windows families the bundle stands in for with a lookalike; `clearcote info` reports which of
55
+ * them your own fonts provide for real. */
56
+ export const KEY_WINDOWS_FAMILIES = ["Arial", "Segoe UI", "Calibri", "Cambria", "Consolas", "Courier New", "Georgia",
57
+ "Times New Roman", "Verdana", "Tahoma", "Trebuchet MS", "Comic Sans MS", "Impact"];
58
+ /** One character per script that Windows 10/11 renders out of the box. A script with no font for its
59
+ * character draws empty boxes, which a page tells apart from real glyphs with one fillText. */
60
+ export const SCRIPT_SAMPLES = [
61
+ ["Latin", 0x0041], ["Greek", 0x03a9], ["Cyrillic", 0x0416], ["Hebrew", 0x05d0], ["Arabic", 0x0628],
62
+ ["Armenian", 0x0531], ["Georgian", 0x10d0], ["Devanagari", 0x0915], ["Bengali", 0x0995],
63
+ ["Gurmukhi", 0x0a15], ["Gujarati", 0x0a95], ["Oriya", 0x0b15], ["Tamil", 0x0b95], ["Telugu", 0x0c15],
64
+ ["Kannada", 0x0c95], ["Malayalam", 0x0d15], ["Sinhala", 0x0d9a], ["Thai", 0x0e01], ["Lao", 0x0e81],
65
+ ["Tibetan", 0x0f40], ["Myanmar", 0x1000], ["Ethiopic", 0x1200], ["Cherokee", 0x13a0],
66
+ ["Khmer", 0x1780], ["Mongolian", 0x1820], ["Hangul", 0xac00], ["Kana", 0x3042],
67
+ ["CJK ideographs", 0x4e2d], ["Emoji", 0x1f600],
68
+ ];
69
+ /** Emoji count only from a colour font: a monochrome glyph (DejaVu has one) is not what Windows draws. */
70
+ const COLOR_TABLES = ["COLR", "CBDT", "sbix", "SVG "];
71
+ // --- reading font files (just the name and cmap tables; no fontconfig needed) --------------------
72
+ function readAt(fd, offset, length) {
73
+ const buf = Buffer.alloc(Math.max(0, length));
74
+ const n = length > 0 ? readSync(fd, buf, 0, length, offset) : 0;
75
+ return buf.subarray(0, n);
76
+ }
77
+ /** Offsets of the sfnt faces in a font file: one for .ttf/.otf, several for a collection. */
78
+ function faces(fd) {
79
+ const head = readAt(fd, 0, 12);
80
+ if (head.length < 12)
81
+ return [];
82
+ if (head.toString("latin1", 0, 4) === "ttcf") {
83
+ const count = Math.min(head.readUInt32BE(8), 1024);
84
+ const data = readAt(fd, 12, 4 * count);
85
+ const out = [];
86
+ for (let i = 0; i + 4 <= data.length; i += 4)
87
+ out.push(data.readUInt32BE(i));
88
+ return out;
89
+ }
90
+ return [0];
91
+ }
92
+ function tables(fd, offset) {
93
+ const head = readAt(fd, offset, 12);
94
+ const out = new Map();
95
+ if (head.length < 12)
96
+ return out;
97
+ const num = head.readUInt16BE(4);
98
+ const data = readAt(fd, offset + 12, 16 * num);
99
+ for (let i = 0; i + 16 <= data.length; i += 16) {
100
+ out.set(data.toString("latin1", i, i + 4), [data.readUInt32BE(i + 8), data.readUInt32BE(i + 12)]);
101
+ }
102
+ return out;
103
+ }
104
+ function macRoman(raw) {
105
+ try {
106
+ return new TextDecoder("macintosh").decode(raw);
107
+ }
108
+ catch {
109
+ return raw.toString("latin1"); // a Node without the legacy encodings: right for ASCII names
110
+ }
111
+ }
112
+ /** Family names (name IDs 1 and 16, every language) of one face, lower-cased. */
113
+ function families(fd, [off, length]) {
114
+ const data = readAt(fd, off, length);
115
+ const names = new Set();
116
+ if (data.length < 6)
117
+ return names;
118
+ const count = data.readUInt16BE(2);
119
+ const strings = data.readUInt16BE(4);
120
+ for (let i = 0; i < count; i++) {
121
+ const at = 6 + 12 * i;
122
+ if (at + 12 > data.length)
123
+ break;
124
+ const platform = data.readUInt16BE(at), encoding = data.readUInt16BE(at + 2), nameId = data.readUInt16BE(at + 6);
125
+ const n = data.readUInt16BE(at + 8), o = data.readUInt16BE(at + 10);
126
+ if (nameId !== 1 && nameId !== 16)
127
+ continue;
128
+ const raw = data.subarray(strings + o, strings + o + n);
129
+ let text;
130
+ if (platform === 0 || platform === 3) {
131
+ if (raw.length % 2)
132
+ continue;
133
+ text = Buffer.from(raw).swap16().toString("utf16le");
134
+ }
135
+ else if (platform === 1 && encoding === 0) {
136
+ text = macRoman(raw);
137
+ }
138
+ else {
139
+ continue;
140
+ }
141
+ if (text.trim())
142
+ names.add(text.trim().toLowerCase());
143
+ }
144
+ return names;
145
+ }
146
+ /** Which of `codepoints` the face maps to a real glyph (format 4 and 12 subtables). */
147
+ function cmapCovers(fd, [off, length], codepoints) {
148
+ const data = readAt(fd, off, length);
149
+ if (data.length < 4)
150
+ return new Set();
151
+ const count = data.readUInt16BE(2);
152
+ const subtables = new Map();
153
+ for (let i = 0; i < count; i++) {
154
+ const at = 4 + 8 * i;
155
+ if (at + 8 > data.length)
156
+ break;
157
+ const sub = data.readUInt32BE(at + 4);
158
+ if (sub + 2 <= data.length) {
159
+ const key = `${data.readUInt16BE(at)},${data.readUInt16BE(at + 2)},${data.readUInt16BE(sub)}`;
160
+ if (!subtables.has(key))
161
+ subtables.set(key, sub);
162
+ }
163
+ }
164
+ for (const key of ["3,10,12", "0,6,12", "0,4,12", "3,1,4", "0,3,4", "0,2,4", "0,1,4", "0,0,4"]) {
165
+ const sub = subtables.get(key);
166
+ if (sub !== undefined)
167
+ return key.endsWith(",12") ? fmt12(data, sub, codepoints) : fmt4(data, sub, codepoints);
168
+ }
169
+ return new Set();
170
+ }
171
+ function fmt12(data, sub, codepoints) {
172
+ const out = new Set();
173
+ if (sub + 16 > data.length)
174
+ return out;
175
+ const groups = Math.min(data.readUInt32BE(sub + 12), Math.floor((data.length - sub - 16) / 12));
176
+ for (let i = 0; i < groups; i++) {
177
+ const at = sub + 16 + 12 * i;
178
+ const start = data.readUInt32BE(at), end = data.readUInt32BE(at + 4), glyph = data.readUInt32BE(at + 8);
179
+ for (const c of codepoints)
180
+ if (c >= start && c <= end && glyph + (c - start) !== 0)
181
+ out.add(c);
182
+ }
183
+ return out;
184
+ }
185
+ function fmt4(data, sub, codepoints) {
186
+ const out = new Set();
187
+ if (sub + 14 > data.length)
188
+ return out;
189
+ const seg2 = data.readUInt16BE(sub + 6);
190
+ const endsAt = sub + 14, startsAt = endsAt + seg2 + 2, deltasAt = startsAt + seg2, rangesAt = deltasAt + seg2;
191
+ if (rangesAt + seg2 > data.length)
192
+ return out;
193
+ for (const c of codepoints) {
194
+ if (c > 0xffff)
195
+ continue;
196
+ for (let i = 0; i < seg2 / 2; i++) {
197
+ if (c > data.readUInt16BE(endsAt + 2 * i))
198
+ continue;
199
+ const start = data.readUInt16BE(startsAt + 2 * i);
200
+ if (c < start)
201
+ break;
202
+ const delta = data.readInt16BE(deltasAt + 2 * i);
203
+ const rangeOff = data.readUInt16BE(rangesAt + 2 * i);
204
+ let glyph;
205
+ if (rangeOff === 0) {
206
+ glyph = (c + delta) & 0xffff;
207
+ }
208
+ else {
209
+ const at = rangesAt + 2 * i + rangeOff + 2 * (c - start);
210
+ if (at + 2 > data.length)
211
+ break;
212
+ glyph = data.readUInt16BE(at);
213
+ if (glyph)
214
+ glyph = (glyph + delta) & 0xffff;
215
+ }
216
+ if (glyph)
217
+ out.add(c);
218
+ break;
219
+ }
220
+ }
221
+ return out;
222
+ }
223
+ /** A font file's family names (lower-cased, every face of a collection), which of `codepoints` it
224
+ * covers, and whether a face with a colour table covers any of them. Empty for a file that is not a
225
+ * readable font. */
226
+ export function readFont(path, codepoints = []) {
227
+ const info = { families: new Set(), covered: new Set(), color: false };
228
+ let fd;
229
+ try {
230
+ fd = openSync(path, "r");
231
+ for (const face of faces(fd)) {
232
+ const t = tables(fd, face);
233
+ const name = t.get("name");
234
+ if (name)
235
+ for (const f of families(fd, name))
236
+ info.families.add(f);
237
+ const cmap = t.get("cmap");
238
+ if (codepoints.length && cmap) {
239
+ const got = cmapCovers(fd, cmap, codepoints);
240
+ for (const c of got)
241
+ info.covered.add(c);
242
+ if (got.size && COLOR_TABLES.some((tag) => t.has(tag)))
243
+ info.color = true;
244
+ }
245
+ }
246
+ }
247
+ catch {
248
+ return { families: new Set(), covered: new Set(), color: false };
249
+ }
250
+ finally {
251
+ if (fd !== undefined)
252
+ closeSync(fd);
253
+ }
254
+ return info;
255
+ }
256
+ /** Every font file under `dirs` (recursively, as fontconfig reads a `<dir>`), sorted. */
257
+ export function fontFiles(dirs) {
258
+ const found = [];
259
+ const walk = (d) => {
260
+ let entries;
261
+ try {
262
+ entries = readdirSync(d, { withFileTypes: true });
263
+ }
264
+ catch {
265
+ return;
266
+ }
267
+ for (const e of entries) {
268
+ const p = join(d, e.name);
269
+ if (e.isDirectory())
270
+ walk(p);
271
+ else if (FONT_EXTS.some((x) => e.name.toLowerCase().endsWith(x)))
272
+ found.push(p);
273
+ }
274
+ };
275
+ for (const d of dirs)
276
+ walk(d);
277
+ return found.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
278
+ }
279
+ const familyCache = new Map();
280
+ /** Lower-cased family names of every font under `dirs` (cached per file size and mtime). */
281
+ export function dirFamilies(dirs) {
282
+ const fams = new Set();
283
+ for (const path of fontFiles(dirs)) {
284
+ let key;
285
+ try {
286
+ const st = statSync(path);
287
+ key = `${path}\0${st.size}\0${st.mtimeMs}`;
288
+ }
289
+ catch {
290
+ continue;
291
+ }
292
+ if (!familyCache.has(key))
293
+ familyCache.set(key, readFont(path).families);
294
+ for (const f of familyCache.get(key))
295
+ fams.add(f);
296
+ }
297
+ return fams;
298
+ }
299
+ // --- which directories -----------------------------------------------------------------------------
300
+ function expand(p) {
301
+ return resolve(p === "~" || p.startsWith("~/") ? join(homedir(), p.slice(1)) : p);
302
+ }
303
+ function split(value) {
304
+ if (!value)
305
+ return [];
306
+ return value.split(delimiter).map((p) => p.trim()).filter(Boolean).map(expand);
307
+ }
308
+ function isDir(p) {
309
+ try {
310
+ return statSync(p).isDirectory();
311
+ }
312
+ catch {
313
+ return false;
314
+ }
315
+ }
316
+ /** The `fontDirs` launch option as a list of absolute paths. Throws TypeError for a wrong type, and on
317
+ * Linux for a path that is not a directory: a typo must not silently fall back to the lookalikes.
318
+ * (Elsewhere the option does nothing: Windows and macOS have their own fonts.) */
319
+ export function checkFontDirs(fontDirs, platform = process.platform) {
320
+ if (fontDirs === undefined || fontDirs === null)
321
+ return [];
322
+ const list = typeof fontDirs === "string" ? [fontDirs] : fontDirs;
323
+ if (!Array.isArray(list) || !list.every((d) => typeof d === "string")) {
324
+ throw new TypeError("fontDirs must be a directory path or an array of them");
325
+ }
326
+ const dirs = list.map(expand);
327
+ if (platform === "linux") {
328
+ for (const d of dirs)
329
+ if (!isDir(d))
330
+ throw new TypeError(`fontDirs: ${d} is not a directory`);
331
+ }
332
+ return dirs;
333
+ }
334
+ /** The option's directories then CLEARCOTE_FONT_DIRS (`user`), and CLEARCOTE_FALLBACK_FONT_DIRS
335
+ * (`fallback`), each without duplicates; `ignored` lists entries from the environment that are not
336
+ * directories (the option throws for those instead). */
337
+ export function resolveFontDirs(fontDirs, env = process.env) {
338
+ const user = [], fallback = [], ignored = [];
339
+ for (const d of checkFontDirs(fontDirs))
340
+ if (!user.includes(d))
341
+ user.push(d);
342
+ for (const d of split(env[FONT_DIRS_ENV])) {
343
+ if (!isDir(d))
344
+ ignored.push(d);
345
+ else if (!user.includes(d))
346
+ user.push(d);
347
+ }
348
+ for (const d of split(env[FALLBACK_FONT_DIRS_ENV])) {
349
+ if (!isDir(d))
350
+ ignored.push(d);
351
+ else if (!user.includes(d) && !fallback.includes(d))
352
+ fallback.push(d);
353
+ }
354
+ return { user, fallback, ignored };
355
+ }
356
+ // --- the generated fontconfig file -----------------------------------------------------------------
357
+ const xml = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
358
+ const unxml = (s) => s.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&amp;/g, "&").trim();
359
+ const RULE = /[ \t]*<match\b[^>]*>\s*<test\b[^>]*name="family"[^>]*>\s*<string>([^<]*)<\/string>\s*<\/test>\s*<edit\b[^>]*name="family"[^>]*>\s*<string>([^<]*)<\/string>(\s*<\/edit>\s*<\/match>)[ \t]*\n?/g;
360
+ const ALIAS = /(<alias\b[^>]*>\s*<family>([^<]*)<\/family>\s*<prefer>\s*<family>)([^<]*)(<\/family>)/g;
361
+ const BUNDLE_DIR = /<dir>\s*@FONTS_DIR@\s*<\/dir>/;
362
+ /** `template` with the lookalike rules and generics adjusted to the `genuine` families (lower-cased
363
+ * names your own fonts provide). A family that is genuinely present loses its rule; a non-Windows name
364
+ * whose Windows family is present (Helvetica -> Arial) and a generic that resolves to it on Windows
365
+ * (sans-serif -> Arial) point at the genuine family. */
366
+ export function genuineRules(template, genuine) {
367
+ if (!genuine.size)
368
+ return template;
369
+ return template
370
+ .replace(RULE, (whole, fam, clone, tail) => {
371
+ const family = unxml(fam);
372
+ if (genuine.has(family.toLowerCase()))
373
+ return "";
374
+ const target = WINDOWS_ALIASES[family.toLowerCase()];
375
+ if (target && genuine.has(target.toLowerCase()) && unxml(clone) !== target) {
376
+ return whole.replace(`<string>${clone}</string>${tail}`, `<string>${xml(target)}</string>${tail}`);
377
+ }
378
+ return whole;
379
+ })
380
+ .replace(ALIAS, (whole, head, generic, _prefer, close) => {
381
+ const target = GENERIC_WINDOWS[unxml(generic).toLowerCase()];
382
+ return target && genuine.has(target.toLowerCase()) ? head + xml(target) + close : whole;
383
+ });
384
+ }
385
+ /** The fontconfig file for one launch: the template with its directories filled in, your own
386
+ * directories ahead of the bundle, the fallback ones after it, and the rules adjusted to the families
387
+ * your own fonts genuinely provide. */
388
+ export function buildConf(template, fontsDir, cacheDir, userDirs = [], fallbackDirs = [], genuine = new Set()) {
389
+ let conf = genuineRules(template, genuine);
390
+ if (userDirs.length || fallbackDirs.length) {
391
+ const mine = userDirs.map((d) => `<dir>${xml(d)}</dir>`);
392
+ const after = fallbackDirs.map((d) => `<dir>${xml(d)}</dir>`);
393
+ if (BUNDLE_DIR.test(conf)) {
394
+ conf = conf.replace(BUNDLE_DIR, () => [...mine, "<dir>@FONTS_DIR@</dir>", ...after].join("\n "));
395
+ }
396
+ else { // a template without the usual line: still list everything, the bundle's place unknown
397
+ conf = conf.replace("</fontconfig>", ` ${[...mine, ...after].join("\n ")}\n</fontconfig>`);
398
+ }
399
+ }
400
+ return conf.split("@FONTS_DIR@").join(fontsDir).split("@CACHE_DIR@").join(cacheDir);
401
+ }
402
+ function writeAtomic(path, text) {
403
+ const tmp = `${path}.${process.pid}.tmp`;
404
+ writeFileSync(tmp, text);
405
+ renameSync(tmp, path);
406
+ }
407
+ /**
408
+ * Returns `{ FONTCONFIG_FILE }` on Linux when the font bundle is present, else `{}`.
409
+ *
410
+ * `fontDirs` (and CLEARCOTE_FONT_DIRS / CLEARCOTE_FALLBACK_FONT_DIRS) add directories: see the top of
411
+ * this file. Without any, the file is `fonts.generated.conf` exactly as before; with some, each
412
+ * distinct result gets its own `fonts.generated-<hash>.conf`, so launches with different directories
413
+ * never rewrite each other's file. `args` is the engine's command line (see genuineFacesDisabled).
414
+ */
415
+ /** Whether the launch turns genuine faces off itself (`--disable-genuine-font-faces` in `args`). The engine
416
+ * then keeps every substitute, so the rules must stay as the template has them: measured on an engine with
417
+ * the switch, retargeting anyway sent Helvetica to the genuine file while Arial stayed on its substitute. */
418
+ export function genuineFacesDisabled(args) {
419
+ const flag = `--${GENUINE_FACES_SWITCH}`;
420
+ return (args ?? []).some((a) => typeof a === "string" && (a === flag || a.startsWith(`${flag}=`)));
421
+ }
422
+ export function linuxFontEnv(exePath, fontDirs, args) {
17
423
  if (process.platform !== "linux")
18
424
  return {};
425
+ const { user, fallback } = resolveFontDirs(fontDirs);
19
426
  const fontsDir = join(dirname(exePath), "fonts");
20
427
  const template = join(fontsDir, "fonts.conf.template");
21
428
  if (!existsSync(template))
@@ -23,17 +430,84 @@ export function linuxFontEnv(exePath) {
23
430
  try {
24
431
  const cacheDir = join(tmpdir(), "cc-fc-cache");
25
432
  mkdirSync(cacheDir, { recursive: true });
26
- const conf = readFileSync(template, "utf8")
27
- .split("@FONTS_DIR@").join(fontsDir)
28
- .split("@CACHE_DIR@").join(cacheDir);
29
- const confPath = join(fontsDir, "fonts.generated.conf");
30
- writeFileSync(confPath, conf);
433
+ // The rules follow your fonts only on an engine that draws them (GENUINE_FACES_SWITCH).
434
+ const genuine = user.length && engineHonoursGenuineFaces(exePath) && !genuineFacesDisabled(args)
435
+ ? dirFamilies(user) : new Set();
436
+ const conf = buildConf(readFileSync(template, "utf8"), fontsDir, cacheDir, user, fallback, genuine);
437
+ const name = user.length || fallback.length
438
+ ? `fonts.generated-${createHash("sha256").update(conf, "utf8").digest("hex").slice(0, 12)}.conf`
439
+ : "fonts.generated.conf";
440
+ const confPath = join(fontsDir, name);
441
+ writeAtomic(confPath, conf);
31
442
  return { FONTCONFIG_FILE: confPath };
32
443
  }
33
444
  catch {
34
445
  return {}; // never block a launch on font wiring
35
446
  }
36
447
  }
448
+ /** What `clearcote info` says about fonts on Linux (the `fonts` key of its JSON): whether the build
449
+ * bundles fonts, which scripts the fonts a launch would see can draw, and which of the key Windows
450
+ * families your own fonts provide for real. `undefined` when the build ships no bundle. */
451
+ export function linuxFontReport(exePath, fontDirs, env = process.env) {
452
+ const fontsDir = join(dirname(exePath), "fonts");
453
+ if (!existsSync(join(fontsDir, "fonts.conf.template")))
454
+ return undefined;
455
+ const { user, fallback, ignored } = resolveFontDirs(fontDirs, env);
456
+ const wanted = SCRIPT_SAMPLES.map(([, cp]) => cp);
457
+ const covered = new Set(), color = new Set();
458
+ for (const path of fontFiles([fontsDir, ...user, ...fallback])) {
459
+ const f = readFont(path, wanted);
460
+ for (const c of f.covered) {
461
+ covered.add(c);
462
+ if (f.color)
463
+ color.add(c);
464
+ }
465
+ }
466
+ const emoji = SCRIPT_SAMPLES.find(([name]) => name === "Emoji")[1];
467
+ const ok = SCRIPT_SAMPLES.filter(([, cp]) => (cp === emoji ? color : covered).has(cp)).map(([name]) => name);
468
+ const report = {
469
+ bundled: true,
470
+ note: "metric-compatible Windows font clones are bundled with this build",
471
+ scripts: { covered: ok, missing: SCRIPT_SAMPLES.map(([name]) => name).filter((n) => !ok.includes(n)) },
472
+ fontDirs: user,
473
+ fallbackFontDirs: fallback,
474
+ };
475
+ if (ignored.length)
476
+ report.ignoredFontDirs = ignored;
477
+ if (user.length) {
478
+ const genuine = dirFamilies(user);
479
+ report.genuineWindowsFamilies = KEY_WINDOWS_FAMILIES.filter((f) => genuine.has(f.toLowerCase()));
480
+ report.lookalikeWindowsFamilies = KEY_WINDOWS_FAMILIES.filter((f) => !genuine.has(f.toLowerCase()));
481
+ report.genuineFacesSupported = engineHonoursGenuineFaces(exePath);
482
+ }
483
+ return report;
484
+ }
485
+ /** The Linux font lines of `clearcote info` (same text as the Python CLI). */
486
+ export function fontLines(f) {
487
+ const lines = [`Fonts ${f.note}`];
488
+ if (f.scripts) {
489
+ const total = f.scripts.covered.length + f.scripts.missing.length;
490
+ lines.push(f.scripts.missing.length
491
+ ? `Scripts ${f.scripts.covered.length} of ${total} render; no font for ${f.scripts.missing.join(", ")} (they draw as empty boxes)`
492
+ : `Scripts all ${total} render`);
493
+ }
494
+ for (const d of f.fontDirs ?? [])
495
+ lines.push(`Your fonts ${d}`);
496
+ if (f.fontDirs?.length) {
497
+ const genuine = f.genuineWindowsFamilies ?? [], lookalike = f.lookalikeWindowsFamilies ?? [];
498
+ lines.push(` real: ${genuine.length ? genuine.join(", ") : "none of the key Windows families"}`);
499
+ if (lookalike.length)
500
+ lines.push(` lookalike: ${lookalike.join(", ")}`);
501
+ if (genuine.length && f.genuineFacesSupported === false) {
502
+ lines.push(" this engine still draws its lookalikes for them (real faces need PRO r32 or newer)");
503
+ }
504
+ }
505
+ for (const d of f.fallbackFontDirs ?? [])
506
+ lines.push(`Fallback fonts ${d}`);
507
+ for (const d of f.ignoredFontDirs ?? [])
508
+ lines.push(`Ignored ${d} (not a directory)`);
509
+ return lines;
510
+ }
37
511
  /**
38
512
  * `{ LANGUAGE: <ui locale> }` on Linux when `args` pin a UI locale with `--lang`, else `{}`.
39
513
  *
@@ -61,8 +535,8 @@ export function linuxLocaleEnv(args, platform = process.platform) {
61
535
  * the bundled-font FONTCONFIG_FILE + locale, then any caller-supplied `env` (caller wins).
62
536
  * Returns `undefined` when there is nothing to add (preserve Playwright's default env).
63
537
  */
64
- export function fontLaunchEnv(exePath, userEnv, args) {
65
- const fontEnv = { ...linuxFontEnv(exePath), ...linuxLocaleEnv(args) };
538
+ export function fontLaunchEnv(exePath, userEnv, args, fontDirs) {
539
+ const fontEnv = { ...linuxFontEnv(exePath, fontDirs, args), ...linuxLocaleEnv(args) };
66
540
  if (Object.keys(fontEnv).length === 0 && !userEnv)
67
541
  return undefined;
68
542
  return { ...process.env, ...fontEnv, ...(userEnv ?? {}) };
package/dist/fonts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,EAAE;AACF,8EAA8E;AAC9E,oFAAoF;AACpF,wFAAwF;AACxF,yFAAyF;AACzF,wFAAwF;AACxF,EAAE;AACF,sFAAsF;AACtF,yFAAyF;AACzF,yFAAyF;AAEzF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,yFAAyF;AACzF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;aACxC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;aACnC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACxD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,sCAAsC;IACnD,CAAC;AACH,CAAC;AAID;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAmC,EAAE,WAAmB,OAAO,CAAC,QAAQ;IACrG,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,IAAwB,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,4BAA4B;IACnI,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAgB,EAAE,IAAwB;IACvF,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,9 @@ export interface DisplayFingerprint {
59
59
  availWidth?: number;
60
60
  availHeight?: number;
61
61
  }
62
- export type AppliedGeometry = {
62
+ export type AppliedGeometry =
63
+ /** On Linux, args carries the persona's real headless display (`--screen-info`). */
64
+ {
63
65
  mode: "persona";
64
66
  args: string[];
65
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
package/dist/geometry.js CHANGED
@@ -182,8 +182,12 @@ export function applyHeadlessGeometry(opts, seed, args, fp = {}) {
182
182
  if ("viewport" in opts || "screen" in opts)
183
183
  return null;
184
184
  opts.viewport = null;
185
- if (personaActive(args))
186
- return { mode: "persona", args: [] };
185
+ if (personaActive(args)) {
186
+ const display = process.platform === "linux" && !callerSetTheDisplay(args)
187
+ ? servedDisplay({ ...fp, seed, args, lightStealth: false })
188
+ : null;
189
+ return { mode: "persona", args: display ? [screenInfoSwitch(display)] : [] };
190
+ }
187
191
  // Not lightStealth's own row, unlike serve(): launch() keeps the seed -> screen row the Python and
188
192
  // .NET launch() pick (headlessGeometry). An imported profile's screen still wins over it.
189
193
  const display = callerSetTheDisplay(args) ? null : servedDisplay({ ...fp, seed, args, lightStealth: false });