@turntrout/subfont 1.10.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../src/concurrencyLimit.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAEpD,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C"}
1
+ {"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../src/concurrencyLimit.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAMpD,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
@@ -5,15 +5,13 @@ exports.getMaxConcurrency = getMaxConcurrency;
5
5
  const os = require("os");
6
6
  // Approximate memory footprint of each worker thread (jsdom + font-tracer).
7
7
  exports.WORKER_MEMORY_BYTES = 50 * 1024 * 1024; // 50 MB
8
+ function positiveOrOne(n) {
9
+ return n > 0 ? n : 1;
10
+ }
8
11
  function getMaxConcurrency() {
9
- const freeMem = os.freemem();
10
- const byMemory = freeMem > 0 && exports.WORKER_MEMORY_BYTES > 0
11
- ? Math.floor(freeMem / exports.WORKER_MEMORY_BYTES)
12
- : 1;
13
- const cpus = os.cpus();
14
- // Font tracing is CPU-bound (not I/O), so match the pool size to the
15
- // core count directly — no multiplier.
16
- const byCpu = cpus.length || 1;
12
+ const freeMem = positiveOrOne(os.freemem());
13
+ const byCpu = positiveOrOne(os.cpus().length);
14
+ const byMemory = Math.floor(freeMem / exports.WORKER_MEMORY_BYTES);
17
15
  return Math.max(1, Math.min(byMemory, byCpu));
18
16
  }
19
17
  //# sourceMappingURL=concurrencyLimit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyLimit.js","sourceRoot":"","sources":["../src/concurrencyLimit.ts"],"names":[],"mappings":";;;AAKA,8CAWC;AAhBD,yBAA0B;AAE1B,4EAA4E;AAC/D,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE7D,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GACZ,OAAO,GAAG,CAAC,IAAI,2BAAmB,GAAG,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,2BAAmB,CAAC;QAC3C,CAAC,CAAC,CAAC,CAAC;IACR,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,qEAAqE;IACrE,uCAAuC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"concurrencyLimit.js","sourceRoot":"","sources":["../src/concurrencyLimit.ts"],"names":[],"mappings":";;;AASA,8CAKC;AAdD,yBAA0B;AAE1B,4EAA4E;AAC/D,QAAA,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAE7D,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,2BAAmB,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"extractVisibleText.d.ts","sourceRoot":"","sources":["../src/extractVisibleText.ts"],"names":[],"mappings":"AAoJA,UAAU,kBAAkB;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC;wBAK8B,kBAAkB;AAAjD,kBAAkD"}
1
+ {"version":3,"file":"extractVisibleText.d.ts","sourceRoot":"","sources":["../src/extractVisibleText.ts"],"names":[],"mappings":"AAwLA,UAAU,kBAAkB;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC;wBAK8B,kBAAkB;AAAjD,kBAAkD"}
@@ -90,54 +90,82 @@ function decodeEntities(str) {
90
90
  return match;
91
91
  });
92
92
  }
93
- /**
94
- * Fast extraction of visible text content from HTML source.
95
- * Used as a lightweight alternative to full font-tracer for pages
96
- * that share the same CSS configuration as an already-traced page.
97
- */
98
- function extractVisibleText(html) {
99
- if (!html)
100
- return '';
101
- // Reset lastIndex on global regexes — a prior call that threw
102
- // mid-function would leave them in an indeterminate state.
93
+ // --- Pipeline stages ---
94
+ // Each stage takes an HTML string and returns a transformed string or
95
+ // extracted data. Ordering is enforced by the pipeline structure: stages
96
+ // that must run on "clean" HTML (invisible blocks removed) receive the
97
+ // output of stripInvisible, not the original HTML.
98
+ function resetGlobalRegexes() {
103
99
  invisibleBlockRe.lastIndex = 0;
104
100
  hiddenInputRe.lastIndex = 0;
105
101
  attrRe.lastIndex = 0;
106
- const parts = [];
107
- // Collect hidden-input value attrs that should be excluded.
108
- const hiddenInputValues = new Set();
109
- let hiddenMatch;
110
- while ((hiddenMatch = hiddenInputRe.exec(html)) !== null) {
111
- const fragment = hiddenMatch[0];
102
+ }
103
+ function collectHiddenInputValues(html) {
104
+ hiddenInputRe.lastIndex = 0;
105
+ const values = new Set();
106
+ let match;
107
+ while ((match = hiddenInputRe.exec(html)) !== null) {
108
+ const fragment = match[0];
112
109
  let m;
113
110
  const localAttrRe = /\bvalue\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]*))/gi;
114
111
  while ((m = localAttrRe.exec(fragment)) !== null) {
115
112
  const val = m[1] ?? m[2] ?? m[3];
116
113
  if (val)
117
- hiddenInputValues.add(val);
114
+ values.add(val);
118
115
  }
119
116
  }
120
- // Strip invisible blocks and comments first so attributes inside
121
- // <script>/<style>/etc. are excluded from extraction.
122
- let text = html;
123
- text = text.replace(invisibleBlockRe, ' ');
117
+ return values;
118
+ }
119
+ function stripInvisible(html) {
120
+ invisibleBlockRe.lastIndex = 0;
121
+ let text = html.replace(invisibleBlockRe, ' ');
124
122
  text = text.replace(commentRe, ' ');
125
- // Extract text attributes before stripping tags.
123
+ return text;
124
+ }
125
+ function extractAttributes(cleanedHtml, hiddenInputValues) {
126
126
  attrRe.lastIndex = 0;
127
- let attrMatch;
128
- while ((attrMatch = attrRe.exec(text)) !== null) {
129
- const attrName = attrMatch[1].toLowerCase();
130
- const val = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4];
127
+ const parts = [];
128
+ let match;
129
+ while ((match = attrRe.exec(cleanedHtml)) !== null) {
130
+ const attrName = match[1].toLowerCase();
131
+ const val = match[2] ?? match[3] ?? match[4];
131
132
  if (!val)
132
133
  continue;
133
134
  if (attrName === 'value' && hiddenInputValues.has(val))
134
135
  continue;
135
136
  parts.push(decodeEntities(val));
136
137
  }
137
- text = text.replace(tagRe, ' ');
138
- text = decodeEntities(text);
139
- parts.push(text);
140
- return parts.join(' ');
138
+ return parts;
139
+ }
140
+ function stripTagsAndDecode(cleanedHtml) {
141
+ const text = cleanedHtml.replace(tagRe, ' ');
142
+ return decodeEntities(text);
143
+ }
144
+ /**
145
+ * Fast extraction of visible text content from HTML source.
146
+ * Used as a lightweight alternative to full font-tracer for pages
147
+ * that share the same CSS configuration as an already-traced page.
148
+ *
149
+ * Pipeline:
150
+ * 1. Collect hidden-input values (for exclusion)
151
+ * 2. Strip invisible blocks + comments
152
+ * 3. Extract text-bearing attributes from cleaned HTML
153
+ * 4. Strip remaining tags and decode entities
154
+ */
155
+ function extractVisibleText(html) {
156
+ if (!html)
157
+ return '';
158
+ resetGlobalRegexes();
159
+ // Stage 1: identify hidden-input values (on original HTML, since
160
+ // hidden inputs are visible elements whose values we want to exclude)
161
+ const hiddenInputValues = collectHiddenInputValues(html);
162
+ // Stage 2: remove invisible content
163
+ const cleaned = stripInvisible(html);
164
+ // Stage 3: extract attributes from cleaned HTML (not original!)
165
+ const attrTexts = extractAttributes(cleaned, hiddenInputValues);
166
+ // Stage 4: strip tags and decode remaining text content
167
+ const bodyText = stripTagsAndDecode(cleaned);
168
+ return [...attrTexts, bodyText].join(' ');
141
169
  }
142
170
  extractVisibleText.INVISIBLE_ELEMENTS =
143
171
  INVISIBLE_ELEMENTS;
@@ -1 +1 @@
1
- {"version":3,"file":"extractVisibleText.js","sourceRoot":"","sources":["../src/extractVisibleText.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractVisibleText.js","sourceRoot":"","sources":["../src/extractVisibleText.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fontConverter.d.ts","sourceRoot":"","sources":["../src/fontConverter.ts"],"names":[],"mappings":"AAwIA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7C"}
1
+ {"version":3,"file":"fontConverter.d.ts","sourceRoot":"","sources":["../src/fontConverter.ts"],"names":[],"mappings":"AA8IA,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,GAAG,UAAU,EAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7C"}
@@ -8,10 +8,14 @@ const worker_threads_1 = require("worker_threads");
8
8
  const workerPath = pathModule.join(__dirname, 'fontConverterWorker.js');
9
9
  const CONVERT_TIMEOUT_MS = 120_000;
10
10
  const POOL_SIZE = Math.max(1, Math.min(os.cpus().length, 8));
11
+ // Worker lifecycle: Created → Idle → Busy → Idle | Discarded
12
+ // Only Idle workers may be handed to callers. Discarded workers are
13
+ // terminated and never reused. This structure makes it impossible
14
+ // to accidentally reuse a worker that encountered an error.
15
+ const _idle = [];
16
+ const _alive = new Set();
11
17
  let _activeCount = 0;
12
18
  const _queue = [];
13
- const _idleWorkers = [];
14
- const _allWorkers = new Set();
15
19
  function acquireSlot() {
16
20
  if (_activeCount < POOL_SIZE) {
17
21
  _activeCount++;
@@ -33,23 +37,23 @@ function releaseSlot() {
33
37
  function createWorker() {
34
38
  const worker = new worker_threads_1.Worker(workerPath);
35
39
  worker.unref();
36
- _allWorkers.add(worker);
37
- // Drop crashed idle workers from the cache so we never hand a zombie
38
- // to a future caller. doConvert attaches its own short-lived exit
39
- // handler for the in-flight case; both can fire harmlessly.
40
+ _alive.add(worker);
40
41
  worker.on('exit', () => {
41
- _allWorkers.delete(worker);
42
- const idx = _idleWorkers.indexOf(worker);
42
+ _alive.delete(worker);
43
+ const idx = _idle.indexOf(worker);
43
44
  if (idx !== -1)
44
- _idleWorkers.splice(idx, 1);
45
+ _idle.splice(idx, 1);
45
46
  });
46
47
  return worker;
47
48
  }
48
- function discardWorker(worker) {
49
- _allWorkers.delete(worker);
50
- const idx = _idleWorkers.indexOf(worker);
49
+ function returnToIdle(worker) {
50
+ _idle.push(worker);
51
+ }
52
+ function discard(worker) {
53
+ _alive.delete(worker);
54
+ const idx = _idle.indexOf(worker);
51
55
  if (idx !== -1)
52
- _idleWorkers.splice(idx, 1);
56
+ _idle.splice(idx, 1);
53
57
  worker.terminate().catch(() => { });
54
58
  }
55
59
  function doConvert(worker, buffer, targetFormat, sourceFormat) {
@@ -60,7 +64,7 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
60
64
  return;
61
65
  settled = true;
62
66
  cleanup();
63
- discardWorker(worker);
67
+ discard(worker);
64
68
  reject(new Error(`Font conversion to ${targetFormat} timed out after ${CONVERT_TIMEOUT_MS}ms`));
65
69
  }, CONVERT_TIMEOUT_MS);
66
70
  timer.unref();
@@ -76,11 +80,11 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
76
80
  settled = true;
77
81
  cleanup();
78
82
  if (msg.type === 'result' && msg.buffer) {
79
- _idleWorkers.push(worker);
83
+ returnToIdle(worker);
80
84
  resolve(Buffer.from(msg.buffer));
81
85
  }
82
86
  else {
83
- discardWorker(worker);
87
+ discard(worker);
84
88
  reject(new Error(msg.error || `Font conversion to ${targetFormat} failed`));
85
89
  }
86
90
  };
@@ -89,7 +93,7 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
89
93
  return;
90
94
  settled = true;
91
95
  cleanup();
92
- discardWorker(worker);
96
+ discard(worker);
93
97
  reject(err);
94
98
  };
95
99
  const onExit = (code) => {
@@ -97,7 +101,7 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
97
101
  return;
98
102
  settled = true;
99
103
  cleanup();
100
- discardWorker(worker);
104
+ discard(worker);
101
105
  reject(new Error(`Font converter worker exited unexpectedly with code ${code}`));
102
106
  };
103
107
  worker.on('message', onMessage);
@@ -109,7 +113,7 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
109
113
  catch (err) {
110
114
  settled = true;
111
115
  cleanup();
112
- discardWorker(worker);
116
+ discard(worker);
113
117
  reject(err);
114
118
  }
115
119
  });
@@ -117,7 +121,7 @@ function doConvert(worker, buffer, targetFormat, sourceFormat) {
117
121
  async function convert(buffer, targetFormat, sourceFormat) {
118
122
  await acquireSlot();
119
123
  try {
120
- const worker = _idleWorkers.pop() ?? createWorker();
124
+ const worker = _idle.pop() ?? createWorker();
121
125
  return await doConvert(worker, buffer, targetFormat, sourceFormat);
122
126
  }
123
127
  finally {
@@ -126,9 +130,9 @@ async function convert(buffer, targetFormat, sourceFormat) {
126
130
  }
127
131
  async function destroy() {
128
132
  _queue.length = 0;
129
- _idleWorkers.length = 0;
130
- const workers = Array.from(_allWorkers);
131
- _allWorkers.clear();
133
+ _idle.length = 0;
134
+ const workers = Array.from(_alive);
135
+ _alive.clear();
132
136
  await Promise.all(workers.map((w) => w.terminate()));
133
137
  }
134
138
  //# sourceMappingURL=fontConverter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fontConverter.js","sourceRoot":"","sources":["../src/fontConverter.ts"],"names":[],"mappings":";;AAwIA,0BAYC;AAED,0BAMC;AA5JD,mCAAoC;AACpC,yBAA0B;AAC1B,mDAAwC;AAExC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACxE,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAQ7D,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,MAAM,GAAsB,EAAE,CAAC;AACrC,MAAM,YAAY,GAAa,EAAE,CAAC;AAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AAEtC,SAAS,WAAW;IAClB,IAAI,YAAY,GAAG,SAAS,EAAE,CAAC;QAC7B,YAAY,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,YAAY,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,IAAI,IAAI;QAAE,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,IAAI,uBAAM,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,qEAAqE;IACrE,kEAAkE;IAClE,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,MAA2B,EAC3B,YAAoB,EACpB,YAAgC;IAEhC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,CACJ,IAAI,KAAK,CACP,sBAAsB,YAAY,oBAAoB,kBAAkB,IAAI,CAC7E,CACF,CAAC;QACJ,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAkB,EAAE,EAAE;YACvC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,MAAM,CAAC,CAAC;gBACtB,MAAM,CACJ,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,sBAAsB,YAAY,SAAS,CAAC,CACpE,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,CACJ,IAAI,KAAK,CAAC,uDAAuD,IAAI,EAAE,CAAC,CACzE,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,MAA2B,EAC3B,YAAoB,EACpB,YAAqB;IAErB,MAAM,WAAW,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,YAAY,EAAE,CAAC;QACpD,OAAO,MAAM,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;YAAS,CAAC;QACT,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,OAAO;IAC3B,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"fontConverter.js","sourceRoot":"","sources":["../src/fontConverter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"injectSubsetDefinitions.d.ts","sourceRoot":"","sources":["../src/injectSubsetDefinitions.ts"],"names":[],"mappings":"AAEA,iBAAS,uBAAuB,CAC9B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,eAAe,EAAE,OAAO,GACvB,MAAM,CAwDR;AAED,SAAS,uBAAuB,CAAC"}
1
+ {"version":3,"file":"injectSubsetDefinitions.d.ts","sourceRoot":"","sources":["../src/injectSubsetDefinitions.ts"],"names":[],"mappings":"AAQA,iBAAS,uBAAuB,CAC9B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,eAAe,EAAE,OAAO,GACvB,MAAM,CAkER;AAED,SAAS,uBAAuB,CAAC"}
@@ -3,32 +3,35 @@ const postcssValueParser = require("postcss-value-parser");
3
3
  function injectSubsetDefinitions(cssValue, webfontNameMap, replaceOriginal) {
4
4
  const subsetFontNames = new Set(Object.values(webfontNameMap).map((name) => name.toLowerCase()));
5
5
  const rootNode = postcssValueParser(cssValue);
6
- let isPrecededByWords = false;
6
+ let state = 'awaiting';
7
7
  for (const [i, node] of rootNode.nodes.entries()) {
8
8
  let possibleFontFamily;
9
9
  let lastFontFamilyTokenIndex = i;
10
- if (node.type === 'string') {
11
- possibleFontFamily = node.value;
12
- isPrecededByWords = false;
13
- }
14
- else if (node.type === 'word' || node.type === 'space') {
15
- if (!isPrecededByWords) {
16
- const wordSequence = [];
17
- for (let j = i; j < rootNode.nodes.length; j += 1) {
18
- if (rootNode.nodes[j].type === 'word') {
19
- wordSequence.push(rootNode.nodes[j].value);
20
- lastFontFamilyTokenIndex = j;
21
- }
22
- else if (rootNode.nodes[j].type !== 'space') {
23
- break;
10
+ switch (node.type) {
11
+ case 'string':
12
+ possibleFontFamily = node.value;
13
+ state = 'awaiting';
14
+ break;
15
+ case 'word':
16
+ case 'space':
17
+ if (state === 'awaiting') {
18
+ const wordSequence = [];
19
+ for (let j = i; j < rootNode.nodes.length; j += 1) {
20
+ if (rootNode.nodes[j].type === 'word') {
21
+ wordSequence.push(rootNode.nodes[j].value);
22
+ lastFontFamilyTokenIndex = j;
23
+ }
24
+ else if (rootNode.nodes[j].type !== 'space') {
25
+ break;
26
+ }
24
27
  }
28
+ possibleFontFamily = wordSequence.join(' ');
25
29
  }
26
- possibleFontFamily = wordSequence.join(' ');
27
- }
28
- isPrecededByWords = true;
29
- }
30
- else {
31
- isPrecededByWords = false;
30
+ state = 'inside-bareword';
31
+ break;
32
+ default:
33
+ state = 'awaiting';
34
+ break;
32
35
  }
33
36
  if (possibleFontFamily) {
34
37
  const possibleFontFamilyLowerCase = possibleFontFamily.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"injectSubsetDefinitions.js","sourceRoot":"","sources":["../src/injectSubsetDefinitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"injectSubsetDefinitions.js","sourceRoot":"","sources":["../src/injectSubsetDefinitions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@turntrout/subfont",
3
- "version": "1.10.1",
3
+ "version": "1.10.2",
4
4
  "description": "Automatically subset web fonts to only the characters used on your pages. Fork of Munter/subfont with modern defaults.",
5
5
  "engines": {
6
6
  "node": ">=18.0.0"