@turntrout/subfont 1.6.0 → 1.7.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 (39) hide show
  1. package/README.md +43 -43
  2. package/lib/FontTracerPool.d.ts +37 -0
  3. package/lib/FontTracerPool.d.ts.map +1 -0
  4. package/lib/FontTracerPool.js +212 -173
  5. package/lib/FontTracerPool.js.map +1 -0
  6. package/lib/HeadlessBrowser.js +11 -3
  7. package/lib/cli.d.ts +3 -0
  8. package/lib/cli.d.ts.map +1 -0
  9. package/lib/cli.js +15 -12
  10. package/lib/cli.js.map +1 -0
  11. package/lib/collectTextsByPage.js +425 -352
  12. package/lib/escapeJsStringLiteral.js +13 -0
  13. package/lib/extractVisibleText.js +6 -2
  14. package/lib/fontConverter.js +25 -0
  15. package/lib/fontConverterWorker.js +16 -0
  16. package/lib/fontFaceHelpers.js +16 -4
  17. package/lib/gatherStylesheetsWithPredicates.js +4 -5
  18. package/lib/normalizeFontPropertyValue.js +1 -1
  19. package/lib/sfntCache.js +10 -7
  20. package/lib/subfont.d.ts +33 -0
  21. package/lib/subfont.d.ts.map +1 -0
  22. package/lib/subfont.js +533 -591
  23. package/lib/subfont.js.map +1 -0
  24. package/lib/subsetFontWithGlyphs.d.ts +17 -0
  25. package/lib/subsetFontWithGlyphs.d.ts.map +1 -0
  26. package/lib/subsetFontWithGlyphs.js +231 -253
  27. package/lib/subsetFontWithGlyphs.js.map +1 -0
  28. package/lib/subsetFonts.d.ts +59 -0
  29. package/lib/subsetFonts.d.ts.map +1 -0
  30. package/lib/subsetFonts.js +921 -1180
  31. package/lib/subsetFonts.js.map +1 -0
  32. package/lib/subsetGeneration.d.ts +39 -0
  33. package/lib/subsetGeneration.d.ts.map +1 -0
  34. package/lib/subsetGeneration.js +294 -324
  35. package/lib/subsetGeneration.js.map +1 -0
  36. package/lib/unquote.js +9 -4
  37. package/lib/warnAboutMissingGlyphs.js +36 -25
  38. package/lib/wasmQueue.js +6 -2
  39. package/package.json +11 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subfont.js","sourceRoot":"","sources":["../src/subfont.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ type VariationAxisValue = number | {
2
+ min: number;
3
+ max: number;
4
+ default?: number;
5
+ };
6
+ interface SubsetFontWithGlyphsOptions {
7
+ targetFormat?: string;
8
+ glyphIds?: number[];
9
+ variationAxes?: Record<string, VariationAxisValue>;
10
+ }
11
+ interface SubsetFontWithGlyphsFn {
12
+ (originalFont: Buffer | Uint8Array, text: string, options?: SubsetFontWithGlyphsOptions): Promise<Buffer>;
13
+ warmup(): Promise<void>;
14
+ }
15
+ declare const _default: SubsetFontWithGlyphsFn;
16
+ export = _default;
17
+ //# sourceMappingURL=subsetFontWithGlyphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subsetFontWithGlyphs.d.ts","sourceRoot":"","sources":["../src/subsetFontWithGlyphs.ts"],"names":[],"mappings":"AAiEA,KAAK,kBAAkB,GACnB,MAAM,GACN;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnD,UAAU,2BAA2B;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACpD;AA8PD,UAAU,sBAAsB;IAC9B,CACE,YAAY,EAAE,MAAM,GAAG,UAAU,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;wBAyEgC,sBAAsB;AAAvD,kBAAwD"}
@@ -1,305 +1,283 @@
1
- const os = require('os');
2
- const { readFile } = require('fs').promises;
3
- const fontverter = require('fontverter');
4
- const { toSfnt } = require('./sfntCache');
5
-
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ const os = require("os");
36
+ const promises_1 = require("fs/promises");
37
+ const fontverter = __importStar(require("fontverter"));
38
+ const sfntCache_1 = require("./sfntCache");
39
+ const fontConverter_1 = require("./fontConverter");
6
40
  // hb_subset_sets_t enum values — https://github.com/harfbuzz/harfbuzz/blob/main/src/hb-subset.h
7
41
  const HB_SUBSET_SETS_GLYPH_INDEX = 0;
8
42
  const HB_SUBSET_SETS_DROP_TABLE_TAG = 5;
9
43
  const HB_SUBSET_SETS_LAYOUT_FEATURE_TAG = 6;
10
44
  const HB_SUBSET_SETS_NAME_ID = 4;
11
-
12
45
  // hb_subset_flags_t
13
46
  const HB_SUBSET_FLAGS_NO_HINTING = 0x00000001;
14
-
15
47
  // Pool of WASM instances for parallel subsetting. Each instance has its
16
48
  // own linear memory so concurrent calls are safe. The module is compiled
17
49
  // once and instantiated N times (N = CPU count, capped at 8).
18
50
  let _compilePromise;
19
51
  function compileModule() {
20
- if (!_compilePromise) {
21
- // Assign the promise synchronously so concurrent callers share it
22
- // (an async function would await readFile before the assignment).
23
- _compilePromise = readFile(
24
- require.resolve('harfbuzzjs/hb-subset.wasm')
25
- ).then((buf) => WebAssembly.compile(buf));
26
- }
27
- return _compilePromise;
52
+ if (!_compilePromise) {
53
+ // Assign the promise synchronously so concurrent callers share it
54
+ // (an async function would await readFile before the assignment).
55
+ _compilePromise = (0, promises_1.readFile)(require.resolve('harfbuzzjs/hb-subset.wasm')).then((buf) => WebAssembly.compile(buf));
56
+ }
57
+ return _compilePromise;
28
58
  }
29
-
30
- const _pool = []; // Array of { exports, busy: boolean }
59
+ const _pool = [];
31
60
  let _poolReady;
32
61
  const POOL_SIZE = Math.max(1, Math.min(os.cpus().length, 8));
33
-
34
62
  async function initPool() {
35
- if (!_poolReady) {
36
- _poolReady = (async () => {
37
- const mod = await compileModule();
38
- const instantiations = [];
39
- for (let i = 0; i < POOL_SIZE; i++) {
40
- instantiations.push(
41
- WebAssembly.instantiate(mod).then(({ exports }) => {
42
- _pool.push({ exports, busy: false });
43
- })
44
- );
45
- }
46
- await Promise.all(instantiations);
47
- })();
48
- }
49
- return _poolReady;
63
+ if (!_poolReady) {
64
+ _poolReady = (async () => {
65
+ const mod = await compileModule();
66
+ const instantiations = [];
67
+ for (let i = 0; i < POOL_SIZE; i++) {
68
+ instantiations.push(WebAssembly.instantiate(mod).then((inst) => {
69
+ _pool.push({
70
+ // WebAssembly.Exports is opaque (Record<string, ExportValue>);
71
+ // bridge it to our typed surface in one place.
72
+ // eslint-disable-next-line no-restricted-syntax
73
+ exports: inst.exports,
74
+ busy: false,
75
+ });
76
+ }));
77
+ }
78
+ await Promise.all(instantiations);
79
+ })();
80
+ }
81
+ return _poolReady;
50
82
  }
51
-
52
83
  // Waiters queue: callers waiting for an idle WASM instance.
53
84
  const _waiters = [];
54
-
85
+ const ACQUIRE_TIMEOUT_MS = 120_000;
55
86
  async function acquireInstance() {
56
- await initPool();
57
- const idle = _pool.find((inst) => !inst.busy);
58
- if (idle) {
59
- idle.busy = true;
60
- return idle;
61
- }
62
- // All instances busy — wait for one to be released.
63
- return new Promise((resolve) => _waiters.push(resolve));
87
+ await initPool();
88
+ const idle = _pool.find((inst) => !inst.busy);
89
+ if (idle) {
90
+ idle.busy = true;
91
+ return idle;
92
+ }
93
+ // All instances busy — wait for one to be released.
94
+ return new Promise((resolve, reject) => {
95
+ const timer = setTimeout(() => {
96
+ const idx = _waiters.indexOf(entry);
97
+ if (idx !== -1)
98
+ _waiters.splice(idx, 1);
99
+ reject(new Error(`Timed out waiting for a WASM subsetting instance after ${ACQUIRE_TIMEOUT_MS}ms`));
100
+ }, ACQUIRE_TIMEOUT_MS);
101
+ timer.unref();
102
+ const entry = (inst) => {
103
+ clearTimeout(timer);
104
+ resolve(inst);
105
+ };
106
+ _waiters.push(entry);
107
+ });
64
108
  }
65
-
66
109
  function releaseInstance(inst) {
67
- inst.busy = false;
68
- if (_waiters.length > 0) {
69
- inst.busy = true;
70
- _waiters.shift()(inst);
71
- }
72
- }
73
-
74
- // Serialize fontverter.convert calls — the wawoff2 module (used internally by
75
- // fontverter for WOFF2 compression) has a shared WASM instance whose memory
76
- // is corrupted by concurrent calls. Only woff2 paths need this; woff and
77
- // truetype conversions use separate synchronous/JS libraries that are safe
78
- // to call in parallel.
79
- const convertLimiter = require('p-limit')(1);
80
-
81
- function usesWawoff2(buffer) {
82
- return buffer.length >= 4 && buffer.toString('ascii', 0, 4) === 'wOF2';
110
+ inst.busy = false;
111
+ if (_waiters.length > 0) {
112
+ inst.busy = true;
113
+ const waiter = _waiters.shift();
114
+ if (waiter)
115
+ waiter(inst);
116
+ }
83
117
  }
84
-
118
+ // woff2 encode/decode uses wawoff2's WASM module, which has a shared
119
+ // instance that corrupts memory under concurrent use. Instead of
120
+ // serializing to p-limit(1) in the main thread, we route woff2
121
+ // operations through fontConverterPool — each worker thread loads its
122
+ // own wawoff2 instance, enabling safe parallel compression.
85
123
  // Re-create on every call — WASM memory.buffer is detached when memory grows,
86
124
  // so a cached Uint8Array would silently read/write stale data.
87
125
  function getHeapu8(exports) {
88
- return new Uint8Array(exports.memory.buffer);
126
+ return new Uint8Array(exports.memory.buffer);
89
127
  }
90
-
128
+ // >>> 0 keeps the accumulator unsigned; without it, tags whose first byte
129
+ // exceeds 0x7F would overflow into negative i32 territory after << 24.
91
130
  function HB_TAG(str) {
92
- return str.split('').reduce(function (a, ch) {
93
- return (a << 8) + ch.charCodeAt(0);
94
- }, 0);
131
+ return str.split('').reduce(function (a, ch) {
132
+ return ((a << 8) >>> 0) + ch.charCodeAt(0);
133
+ }, 0);
95
134
  }
96
-
97
135
  function pinAxisLocation(exports, input, face, axisName, value) {
98
- const ok = exports.hb_subset_input_pin_axis_location(
99
- input,
100
- face,
101
- HB_TAG(axisName),
102
- value
103
- );
104
- if (!ok) {
105
- throw new Error(`Failed to pin axis ${axisName} to ${value}`);
106
- }
136
+ const ok = exports.hb_subset_input_pin_axis_location(input, face, HB_TAG(axisName), value);
137
+ if (!ok) {
138
+ throw new Error(`Failed to pin axis ${axisName} to ${value}`);
139
+ }
107
140
  }
108
-
109
141
  function setAxisRange(exports, input, face, axisName, value) {
110
- const ok = exports.hb_subset_input_set_axis_range(
111
- input,
112
- face,
113
- HB_TAG(axisName),
114
- value.min,
115
- value.max,
116
- value.default ?? NaN
117
- );
118
- if (!ok) {
119
- throw new Error(`Failed to set axis range for ${axisName}`);
120
- }
142
+ const ok = exports.hb_subset_input_set_axis_range(input, face, HB_TAG(axisName), value.min, value.max, value.default ?? NaN);
143
+ if (!ok) {
144
+ throw new Error(`Failed to set axis range for ${axisName}`);
145
+ }
121
146
  }
122
-
123
147
  // Tables unnecessary for web rendering — safe to drop unconditionally.
124
148
  // gasp is only meaningful when hinting is present (which we strip above).
125
149
  const DROP_TABLE_TAGS = ['DSIG', 'LTSH', 'VDMX', 'hdmx', 'gasp', 'PCLT'];
126
-
127
150
  // Name IDs needed for web fonts: family (1), subfamily (2), full name (4),
128
151
  // PostScript name (6). Copyright (0), unique ID (3), version (5), and
129
152
  // everything above 6 are display/license metadata that browsers never read.
130
153
  const KEEP_NAME_IDS = [1, 2, 4, 6];
131
-
132
- function configureSubsetInput(
133
- exports,
134
- input,
135
- face,
136
- text,
137
- glyphIds,
138
- variationAxes
139
- ) {
140
- // --- Retain all layout features ---
141
- const layoutFeatures = exports.hb_subset_input_set(
142
- input,
143
- HB_SUBSET_SETS_LAYOUT_FEATURE_TAG
144
- );
145
- exports.hb_set_clear(layoutFeatures);
146
- exports.hb_set_invert(layoutFeatures);
147
-
148
- // --- Strip hinting instructions (ignored by modern browsers) ---
149
- const flags = exports.hb_subset_input_get_flags(input);
150
- exports.hb_subset_input_set_flags(input, flags | HB_SUBSET_FLAGS_NO_HINTING);
151
-
152
- // --- Keep only essential name table entries ---
153
- const nameIdSet = exports.hb_subset_input_set(input, HB_SUBSET_SETS_NAME_ID);
154
- exports.hb_set_clear(nameIdSet);
155
- for (const id of KEEP_NAME_IDS) {
156
- exports.hb_set_add(nameIdSet, id);
157
- }
158
-
159
- // --- Drop tables not needed for web rendering ---
160
- const dropTableSet = exports.hb_subset_input_set(
161
- input,
162
- HB_SUBSET_SETS_DROP_TABLE_TAG
163
- );
164
- for (const tag of DROP_TABLE_TAGS) {
165
- exports.hb_set_add(dropTableSet, HB_TAG(tag));
166
- }
167
-
168
- // --- Add unicode codepoints ---
169
- const inputUnicodes = exports.hb_subset_input_unicode_set(input);
170
- // Include codepoints from both NFC and NFD normalized forms so the
171
- // subsetter covers precomposed and decomposed character variants.
172
- // This guards against harfbuzz subsetter not always expanding
173
- // codepoints to their NFC/NFD equivalents (harfbuzz issue #2283).
174
- const nfc = text.normalize('NFC');
175
- const nfd = text.normalize('NFD');
176
- for (const c of nfc) {
177
- exports.hb_set_add(inputUnicodes, c.codePointAt(0));
178
- }
179
- for (const c of nfd) {
180
- exports.hb_set_add(inputUnicodes, c.codePointAt(0));
181
- }
182
-
183
- // --- Add explicit glyph IDs (from feature glyph collection) ---
184
- if (glyphIds && glyphIds.length > 0) {
185
- const glyphSet = exports.hb_subset_input_set(
186
- input,
187
- HB_SUBSET_SETS_GLYPH_INDEX
188
- );
189
- for (const gid of glyphIds) {
190
- exports.hb_set_add(glyphSet, gid);
154
+ function configureSubsetInput(exports, input, face, text, glyphIds, variationAxes) {
155
+ // --- Retain all layout features ---
156
+ const layoutFeatures = exports.hb_subset_input_set(input, HB_SUBSET_SETS_LAYOUT_FEATURE_TAG);
157
+ exports.hb_set_clear(layoutFeatures);
158
+ exports.hb_set_invert(layoutFeatures);
159
+ // --- Strip hinting instructions (ignored by modern browsers) ---
160
+ const flags = exports.hb_subset_input_get_flags(input);
161
+ exports.hb_subset_input_set_flags(input, flags | HB_SUBSET_FLAGS_NO_HINTING);
162
+ // --- Keep only essential name table entries ---
163
+ const nameIdSet = exports.hb_subset_input_set(input, HB_SUBSET_SETS_NAME_ID);
164
+ exports.hb_set_clear(nameIdSet);
165
+ for (const id of KEEP_NAME_IDS) {
166
+ exports.hb_set_add(nameIdSet, id);
167
+ }
168
+ // --- Drop tables not needed for web rendering ---
169
+ const dropTableSet = exports.hb_subset_input_set(input, HB_SUBSET_SETS_DROP_TABLE_TAG);
170
+ for (const tag of DROP_TABLE_TAGS) {
171
+ exports.hb_set_add(dropTableSet, HB_TAG(tag));
191
172
  }
192
- }
193
-
194
- // --- Pin/reduce variation axes ---
195
- if (variationAxes) {
196
- for (const [axisName, value] of Object.entries(variationAxes)) {
197
- if (typeof value === 'number') {
198
- pinAxisLocation(exports, input, face, axisName, value);
199
- } else if (value && typeof value === 'object') {
200
- setAxisRange(exports, input, face, axisName, value);
201
- }
173
+ // --- Add unicode codepoints ---
174
+ const inputUnicodes = exports.hb_subset_input_unicode_set(input);
175
+ // Include codepoints from both NFC and NFD normalized forms so the
176
+ // subsetter covers precomposed and decomposed character variants.
177
+ // This guards against harfbuzz subsetter not always expanding
178
+ // codepoints to their NFC/NFD equivalents (harfbuzz issue #2283).
179
+ const nfc = text.normalize('NFC');
180
+ const nfd = text.normalize('NFD');
181
+ for (const c of nfc) {
182
+ exports.hb_set_add(inputUnicodes, c.codePointAt(0));
183
+ }
184
+ for (const c of nfd) {
185
+ exports.hb_set_add(inputUnicodes, c.codePointAt(0));
186
+ }
187
+ // --- Add explicit glyph IDs (from feature glyph collection) ---
188
+ if (glyphIds && glyphIds.length > 0) {
189
+ const glyphSet = exports.hb_subset_input_set(input, HB_SUBSET_SETS_GLYPH_INDEX);
190
+ for (const gid of glyphIds) {
191
+ exports.hb_set_add(glyphSet, gid);
192
+ }
193
+ }
194
+ // --- Pin/reduce variation axes ---
195
+ if (variationAxes) {
196
+ for (const [axisName, value] of Object.entries(variationAxes)) {
197
+ if (typeof value === 'number') {
198
+ pinAxisLocation(exports, input, face, axisName, value);
199
+ }
200
+ else if (value && typeof value === 'object') {
201
+ setAxisRange(exports, input, face, axisName, value);
202
+ }
203
+ }
202
204
  }
203
- }
204
205
  }
205
-
206
206
  function extractSubsetFont(exports, subset) {
207
- const result = exports.hb_face_reference_blob(subset);
208
- const offset = exports.hb_blob_get_data(result, 0);
209
- const subsetByteLength = exports.hb_blob_get_length(result);
210
-
211
- if (subsetByteLength === 0) {
212
- exports.hb_blob_destroy(result);
213
- throw new Error('Failed to create subset font');
214
- }
215
-
216
- // Fresh view AFTER the WASM calls above — memory.buffer may have been
217
- // detached by a grow during hb_face_reference_blob / hb_blob_get_data.
218
- const heapu8 = getHeapu8(exports);
219
-
220
- if (offset + subsetByteLength > heapu8.byteLength) {
207
+ const result = exports.hb_face_reference_blob(subset);
208
+ const offset = exports.hb_blob_get_data(result, 0);
209
+ const subsetByteLength = exports.hb_blob_get_length(result);
210
+ if (subsetByteLength === 0) {
211
+ exports.hb_blob_destroy(result);
212
+ throw new Error('Failed to create subset font');
213
+ }
214
+ // Fresh view AFTER the WASM calls above — memory.buffer may have been
215
+ // detached by a grow during hb_face_reference_blob / hb_blob_get_data.
216
+ const heapu8 = getHeapu8(exports);
217
+ if (offset + subsetByteLength > heapu8.byteLength) {
218
+ exports.hb_blob_destroy(result);
219
+ throw new Error(`WASM returned out-of-bounds offset ${offset} + length ${subsetByteLength} (heap size ${heapu8.byteLength})`);
220
+ }
221
+ const subsetFont = Buffer.from(heapu8.subarray(offset, offset + subsetByteLength));
221
222
  exports.hb_blob_destroy(result);
222
- throw new Error(
223
- `WASM returned out-of-bounds offset ${offset} + length ${subsetByteLength} (heap size ${heapu8.byteLength})`
224
- );
225
- }
226
-
227
- const subsetFont = Buffer.from(
228
- heapu8.subarray(offset, offset + subsetByteLength)
229
- );
230
- exports.hb_blob_destroy(result);
231
- return subsetFont;
223
+ return subsetFont;
232
224
  }
233
-
234
- async function subsetFontWithGlyphs(
235
- originalFont,
236
- text,
237
- { targetFormat, glyphIds, variationAxes } = {}
238
- ) {
239
- // Reuse cached sfnt conversion when available (same buffer may have
240
- // been converted by getFontInfo or collectFeatureGlyphIds already).
241
- // Serialize through convertLimiter when the source is woff2 — toSfnt
242
- // would call wawoff2.decompress which isn't concurrency-safe.
243
- const ttf = usesWawoff2(originalFont)
244
- ? await convertLimiter(() => toSfnt(originalFont))
245
- : await toSfnt(originalFont);
246
-
247
- const inst = await acquireInstance();
248
- const { exports } = inst;
249
- let released = false;
250
- try {
251
- const fontBuffer = exports.malloc(ttf.byteLength);
252
- // Fresh view — memory.buffer may have been detached by a prior malloc/grow.
253
- getHeapu8(exports).set(new Uint8Array(ttf), fontBuffer);
254
-
255
- const blob = exports.hb_blob_create(fontBuffer, ttf.byteLength, 2, 0, 0);
256
- const face = exports.hb_face_create(blob, 0);
257
- exports.hb_blob_destroy(blob);
258
-
259
- const input = exports.hb_subset_input_create_or_fail();
260
- if (input === 0) {
261
- exports.hb_face_destroy(face);
262
- exports.free(fontBuffer);
263
- throw new Error('hb_subset_input_create_or_fail returned zero');
264
- }
265
-
266
- let subsetFont;
267
- let subset = 0;
225
+ async function subsetFontWithGlyphs(originalFont, text, { targetFormat, glyphIds, variationAxes } = {}) {
226
+ // Reuse cached sfnt conversion when available (same buffer may have
227
+ // been converted by getFontInfo or collectFeatureGlyphIds already).
228
+ // sfntCache routes woff2 decompression through the worker pool.
229
+ const ttf = await (0, sfntCache_1.toSfnt)(originalFont);
230
+ const inst = await acquireInstance();
231
+ const { exports } = inst;
232
+ let released = false;
268
233
  try {
269
- configureSubsetInput(exports, input, face, text, glyphIds, variationAxes);
270
-
271
- subset = exports.hb_subset_or_fail(face, input);
272
- if (subset === 0) {
273
- throw new Error('hb_subset_or_fail returned zero');
274
- }
275
-
276
- subsetFont = extractSubsetFont(exports, subset);
277
- } finally {
278
- // Clean up all WASM resources while we still own the instance.
279
- if (subset) exports.hb_face_destroy(subset);
280
- exports.hb_subset_input_destroy(input);
281
- exports.hb_face_destroy(face);
282
- exports.free(fontBuffer);
234
+ const fontBuffer = exports.malloc(ttf.byteLength);
235
+ // Fresh view — memory.buffer may have been detached by a prior malloc/grow.
236
+ getHeapu8(exports).set(new Uint8Array(ttf), fontBuffer);
237
+ const blob = exports.hb_blob_create(fontBuffer, ttf.byteLength, 2, 0, 0);
238
+ const face = exports.hb_face_create(blob, 0);
239
+ exports.hb_blob_destroy(blob);
240
+ const input = exports.hb_subset_input_create_or_fail();
241
+ if (input === 0) {
242
+ exports.hb_face_destroy(face);
243
+ exports.free(fontBuffer);
244
+ throw new Error('hb_subset_input_create_or_fail returned zero');
245
+ }
246
+ let subsetFont;
247
+ let subset = 0;
248
+ try {
249
+ configureSubsetInput(exports, input, face, text, glyphIds, variationAxes);
250
+ subset = exports.hb_subset_or_fail(face, input);
251
+ if (subset === 0) {
252
+ throw new Error('hb_subset_or_fail returned zero');
253
+ }
254
+ subsetFont = extractSubsetFont(exports, subset);
255
+ }
256
+ finally {
257
+ // Clean up all WASM resources while we still own the instance.
258
+ if (subset)
259
+ exports.hb_face_destroy(subset);
260
+ exports.hb_subset_input_destroy(input);
261
+ exports.hb_face_destroy(face);
262
+ exports.free(fontBuffer);
263
+ }
264
+ // Instance is fully cleaned up — release it so other subsetting
265
+ // calls can proceed while we wait for the serialized WOFF2 step.
266
+ released = true;
267
+ releaseInstance(inst);
268
+ // Route woff2 compression to a worker thread (each spawns its own
269
+ // wawoff2 WASM instance). Non-woff2 formats use JS-based converters
270
+ // that are safe to call concurrently in the main thread.
271
+ return targetFormat === 'woff2'
272
+ ? (0, fontConverter_1.convert)(subsetFont, targetFormat, 'truetype')
273
+ : fontverter.convert(subsetFont, targetFormat, 'truetype');
274
+ }
275
+ finally {
276
+ if (!released)
277
+ releaseInstance(inst);
283
278
  }
284
-
285
- // Instance is fully cleaned up — release it so other subsetting
286
- // calls can proceed while we wait for the serialized WOFF2 step.
287
- released = true;
288
- releaseInstance(inst);
289
-
290
- // Only serialize through convertLimiter when targeting woff2 —
291
- // woff and truetype conversions don't use wawoff2.
292
- return targetFormat === 'woff2'
293
- ? convertLimiter(() =>
294
- fontverter.convert(subsetFont, targetFormat, 'truetype')
295
- )
296
- : fontverter.convert(subsetFont, targetFormat, 'truetype');
297
- } finally {
298
- if (!released) releaseInstance(inst);
299
- }
300
279
  }
301
-
302
280
  // Pre-warm the WASM pool: call early to overlap compilation with other work.
303
281
  subsetFontWithGlyphs.warmup = () => initPool();
304
-
305
282
  module.exports = subsetFontWithGlyphs;
283
+ //# sourceMappingURL=subsetFontWithGlyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subsetFontWithGlyphs.js","sourceRoot":"","sources":["../src/subsetFontWithGlyphs.ts"],"names":[],"mappings":"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"}