@turntrout/subfont 1.10.2 → 1.10.3

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.
@@ -2,11 +2,10 @@
2
2
  const lines_and_columns_1 = require("lines-and-columns");
3
3
  const getFontInfo = require("./getFontInfo");
4
4
  const unicodeRange = require("./unicodeRange");
5
- async function warnAboutMissingGlyphs(htmlOrSvgAssetTextsWithProps, assetGraph) {
6
- const missingGlyphsErrors = [];
7
- // Collect all unique subset buffers and parse them concurrently.
8
- // getFontInfo internally serializes harfbuzzjs WASM calls, so
9
- // Promise.all just queues them up rather than running in parallel.
5
+ // Collect all unique subset buffers and parse them concurrently.
6
+ // getFontInfo internally serializes harfbuzzjs WASM calls, so
7
+ // Promise.all just queues them up rather than running in parallel.
8
+ async function buildSubsetCharSetCache(htmlOrSvgAssetTextsWithProps, assetGraph) {
10
9
  const uniqueSubsetBuffers = new Map();
11
10
  for (const { fontUsages } of htmlOrSvgAssetTextsWithProps) {
12
11
  for (const fontUsage of fontUsages) {
@@ -15,137 +14,158 @@ async function warnAboutMissingGlyphs(htmlOrSvgAssetTextsWithProps, assetGraph)
15
14
  const subsetBuffer = Object.values(fontUsage.subsets)[0];
16
15
  if (!subsetBuffer)
17
16
  continue;
18
- if (!uniqueSubsetBuffers.has(subsetBuffer)) {
19
- uniqueSubsetBuffers.set(subsetBuffer, getFontInfo(subsetBuffer)
20
- .then((info) => new Set(info.characterSet))
21
- // eslint-disable-next-line no-restricted-syntax
22
- .catch((rawErr) => {
23
- assetGraph.warn(rawErr instanceof Error ? rawErr : new Error(String(rawErr)));
24
- return null;
25
- }));
26
- }
17
+ if (uniqueSubsetBuffers.has(subsetBuffer))
18
+ continue;
19
+ uniqueSubsetBuffers.set(subsetBuffer, getFontInfo(subsetBuffer)
20
+ .then((info) => new Set(info.characterSet))
21
+ // eslint-disable-next-line no-restricted-syntax
22
+ .catch((rawErr) => {
23
+ assetGraph.warn(rawErr instanceof Error ? rawErr : new Error(String(rawErr)));
24
+ return null;
25
+ }));
27
26
  }
28
27
  }
29
28
  const subsetCharSetCache = new Map();
30
29
  await Promise.all([...uniqueSubsetBuffers.entries()].map(async ([buffer, promise]) => {
31
30
  subsetCharSetCache.set(buffer, await promise);
32
31
  }));
32
+ return subsetCharSetCache;
33
+ }
34
+ // Create a closure that locates the first occurrence of a character in
35
+ // the page text and counts the remaining occurrences. Caches per-char so
36
+ // repeated scans for the same missing glyph (common on KaTeX-heavy pages)
37
+ // don't redo the O(N) walk.
38
+ function makeCharLocator(htmlOrSvgAsset) {
39
+ let linesAndColumns;
40
+ const cache = new Map();
41
+ return (char) => {
42
+ const cached = cache.get(char);
43
+ if (cached)
44
+ return cached;
45
+ let firstLocation;
46
+ let occurrences = 0;
47
+ if (char.length > 0) {
48
+ const sourceText = htmlOrSvgAsset.text;
49
+ let searchIdx = 0;
50
+ while (true) {
51
+ const charIdx = sourceText.indexOf(char, searchIdx);
52
+ if (charIdx === -1)
53
+ break;
54
+ occurrences++;
55
+ if (occurrences === 1) {
56
+ if (!linesAndColumns) {
57
+ linesAndColumns = new lines_and_columns_1.LinesAndColumns(sourceText);
58
+ }
59
+ const position = linesAndColumns.locationForIndex(charIdx);
60
+ firstLocation = `${htmlOrSvgAsset.urlOrDescription}:${position.line + 1}:${position.column + 1}`;
61
+ }
62
+ searchIdx = charIdx + char.length;
63
+ }
64
+ }
65
+ if (!firstLocation) {
66
+ firstLocation = `${htmlOrSvgAsset.urlOrDescription} (generated content)`;
67
+ }
68
+ const result = { firstLocation, occurrences };
69
+ cache.set(char, result);
70
+ return result;
71
+ };
72
+ }
73
+ function recordFontFaceUnicodeRange(accumulatedFontFaceDeclarations, fontUsage, unicodeRangeAccumulator) {
74
+ for (const fontFace of accumulatedFontFaceDeclarations) {
75
+ const family = fontFace['font-family'];
76
+ if (!family || !fontUsage.fontFamilies.has(family))
77
+ continue;
78
+ const relation = fontFace.relations[0];
79
+ const node = relation.node;
80
+ if (node.some((decl) => decl.prop === 'unicode-range'))
81
+ continue;
82
+ let entry = unicodeRangeAccumulator.get(node);
83
+ if (!entry) {
84
+ entry = { relation, codepoints: new Set() };
85
+ unicodeRangeAccumulator.set(node, entry);
86
+ }
87
+ for (const cp of fontUsage.codepoints?.original ?? []) {
88
+ entry.codepoints.add(cp);
89
+ }
90
+ }
91
+ }
92
+ function findMissingGlyphsForUsage(htmlOrSvgAsset, fontUsage, characterSetLookup, lookupChar, missingGlyphsErrors) {
93
+ let missedAny = false;
94
+ if (!fontUsage.pageText)
95
+ return false;
96
+ for (const char of fontUsage.pageText) {
97
+ // Turns out that browsers don't mind that these are missing:
98
+ if (char === '\t' || char === '\n')
99
+ continue;
100
+ const codePoint = char.codePointAt(0);
101
+ if (codePoint === undefined)
102
+ continue;
103
+ if (characterSetLookup.has(codePoint))
104
+ continue;
105
+ // Report only the first location plus a count of remaining
106
+ // occurrences. A character like U+200B can appear thousands of
107
+ // times on a page and per-occurrence lines drown the log.
108
+ const { firstLocation, occurrences } = lookupChar(char);
109
+ missingGlyphsErrors.push({
110
+ codePoint,
111
+ char,
112
+ htmlOrSvgAsset,
113
+ fontUsage,
114
+ location: firstLocation,
115
+ occurrences,
116
+ });
117
+ missedAny = true;
118
+ }
119
+ return missedAny;
120
+ }
121
+ function flushUnicodeRanges(unicodeRangeAccumulator) {
122
+ for (const { relation, codepoints } of unicodeRangeAccumulator.values()) {
123
+ relation.node.append({
124
+ prop: 'unicode-range',
125
+ value: unicodeRange([...codepoints]),
126
+ });
127
+ relation.from.markDirty();
128
+ }
129
+ }
130
+ function reportMissingGlyphs(missingGlyphsErrors, assetGraph) {
131
+ if (missingGlyphsErrors.length === 0)
132
+ return;
133
+ const errorLog = missingGlyphsErrors.map(({ char, fontUsage, location, occurrences }) => {
134
+ const extra = occurrences > 1 ? ` (+${occurrences - 1} more)` : '';
135
+ return `- \\u{${char.codePointAt(0).toString(16)}} (${char}) in font-family '${fontUsage.props['font-family']}' (${fontUsage.props['font-weight']}/${fontUsage.props['font-style']}) at ${location}${extra}`;
136
+ });
137
+ const message = `Missing glyph fallback detected.
138
+ When your primary webfont doesn't contain the glyphs you use, browsers that don't support unicode-range will load your fallback fonts, which will be a potential waste of bandwidth.
139
+ These glyphs are used on your site, but they don't exist in the font you applied to them:`;
140
+ assetGraph.info(new Error(`${message}\n${errorLog.join('\n')}`));
141
+ }
142
+ async function warnAboutMissingGlyphs(htmlOrSvgAssetTextsWithProps, assetGraph) {
143
+ const missingGlyphsErrors = [];
144
+ const subsetCharSetCache = await buildSubsetCharSetCache(htmlOrSvgAssetTextsWithProps, assetGraph);
33
145
  // Codepoint unions per @font-face declaration, keyed by the at-rule node.
34
146
  // Built across all fontUsages on a page, then flushed in a single append
35
147
  // per @font-face so multiple fontUsages sharing a family don't lose data.
36
148
  const unicodeRangeAccumulator = new Map();
37
149
  for (const { htmlOrSvgAsset, fontUsages, accumulatedFontFaceDeclarations, } of htmlOrSvgAssetTextsWithProps) {
38
- let linesAndColumns;
39
- // Dedupe scans for the same missing char across different fontUsages on
40
- // this page. On KaTeX-heavy pages the same symbol is often missing in
41
- // several font-families, and each scan is an O(N) walk of the HTML text.
42
- const charLookupCache = new Map();
43
- const lookupChar = (char) => {
44
- const cachedHit = charLookupCache.get(char);
45
- if (cachedHit)
46
- return cachedHit;
47
- let firstLocation;
48
- let occurrences = 0;
49
- if (char.length > 0) {
50
- const sourceText = htmlOrSvgAsset.text;
51
- let searchIdx = 0;
52
- while (true) {
53
- const charIdx = sourceText.indexOf(char, searchIdx);
54
- if (charIdx === -1)
55
- break;
56
- occurrences++;
57
- if (occurrences === 1) {
58
- if (!linesAndColumns) {
59
- linesAndColumns = new lines_and_columns_1.LinesAndColumns(sourceText);
60
- }
61
- const position = linesAndColumns.locationForIndex(charIdx);
62
- firstLocation = `${htmlOrSvgAsset.urlOrDescription}:${position.line + 1}:${position.column + 1}`;
63
- }
64
- searchIdx = charIdx + char.length;
65
- }
66
- }
67
- if (!firstLocation) {
68
- firstLocation = `${htmlOrSvgAsset.urlOrDescription} (generated content)`;
69
- }
70
- const result = { firstLocation, occurrences };
71
- charLookupCache.set(char, result);
72
- return result;
73
- };
150
+ const lookupChar = makeCharLocator(htmlOrSvgAsset);
74
151
  for (const fontUsage of fontUsages) {
75
152
  if (!fontUsage.subsets)
76
153
  continue;
77
154
  const subsetBuffer = Object.values(fontUsage.subsets)[0];
78
155
  const characterSetLookup = subsetCharSetCache.get(subsetBuffer);
156
+ // getFontInfo failed on subset; already warned
79
157
  if (!characterSetLookup)
80
- continue; // getFontInfo failed on subset; already warned
81
- let missedAny = false;
82
- if (!fontUsage.pageText)
83
158
  continue;
84
- for (const char of fontUsage.pageText) {
85
- // Turns out that browsers don't mind that these are missing:
86
- if (char === '\t' || char === '\n') {
87
- continue;
88
- }
89
- const codePoint = char.codePointAt(0);
90
- if (codePoint === undefined)
91
- continue;
92
- const isMissing = !characterSetLookup.has(codePoint);
93
- if (isMissing) {
94
- // Report only the first location plus a count of remaining
95
- // occurrences. A character like U+200B can appear thousands of
96
- // times on a page and per-occurrence lines drown the log.
97
- const { firstLocation, occurrences } = lookupChar(char);
98
- missingGlyphsErrors.push({
99
- codePoint,
100
- char,
101
- htmlOrSvgAsset,
102
- fontUsage,
103
- location: firstLocation,
104
- occurrences,
105
- });
106
- missedAny = true;
107
- }
108
- }
159
+ const missedAny = findMissingGlyphsForUsage(htmlOrSvgAsset, fontUsage, characterSetLookup, lookupChar, missingGlyphsErrors);
109
160
  if (missedAny) {
110
- for (const fontFace of accumulatedFontFaceDeclarations) {
111
- const family = fontFace['font-family'];
112
- if (!family || !fontUsage.fontFamilies.has(family))
113
- continue;
114
- const relation = fontFace.relations[0];
115
- const node = relation.node;
116
- if (node.some((decl) => decl.prop === 'unicode-range'))
117
- continue;
118
- let entry = unicodeRangeAccumulator.get(node);
119
- if (!entry) {
120
- entry = { relation, codepoints: new Set() };
121
- unicodeRangeAccumulator.set(node, entry);
122
- }
123
- for (const cp of fontUsage.codepoints?.original ?? []) {
124
- entry.codepoints.add(cp);
125
- }
126
- }
161
+ recordFontFaceUnicodeRange(accumulatedFontFaceDeclarations, fontUsage, unicodeRangeAccumulator);
127
162
  }
128
163
  }
129
164
  }
130
165
  // Flush accumulated unicode-range declarations: one append per @font-face,
131
166
  // covering every fontUsage that mapped to it.
132
- for (const { relation, codepoints } of unicodeRangeAccumulator.values()) {
133
- relation.node.append({
134
- prop: 'unicode-range',
135
- value: unicodeRange([...codepoints]),
136
- });
137
- relation.from.markDirty();
138
- }
139
- if (missingGlyphsErrors.length) {
140
- const errorLog = missingGlyphsErrors.map(({ char, fontUsage, location, occurrences }) => {
141
- const extra = occurrences > 1 ? ` (+${occurrences - 1} more)` : '';
142
- return `- \\u{${char.codePointAt(0).toString(16)}} (${char}) in font-family '${fontUsage.props['font-family']}' (${fontUsage.props['font-weight']}/${fontUsage.props['font-style']}) at ${location}${extra}`;
143
- });
144
- const message = `Missing glyph fallback detected.
145
- When your primary webfont doesn't contain the glyphs you use, browsers that don't support unicode-range will load your fallback fonts, which will be a potential waste of bandwidth.
146
- These glyphs are used on your site, but they don't exist in the font you applied to them:`;
147
- assetGraph.info(new Error(`${message}\n${errorLog.join('\n')}`));
148
- }
167
+ flushUnicodeRanges(unicodeRangeAccumulator);
168
+ reportMissingGlyphs(missingGlyphsErrors, assetGraph);
149
169
  }
150
170
  module.exports = warnAboutMissingGlyphs;
151
171
  //# sourceMappingURL=warnAboutMissingGlyphs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"warnAboutMissingGlyphs.js","sourceRoot":"","sources":["../src/warnAboutMissingGlyphs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"warnAboutMissingGlyphs.js","sourceRoot":"","sources":["../src/warnAboutMissingGlyphs.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.2",
3
+ "version": "1.10.3",
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"