@turntrout/subfont 1.7.0 → 1.8.0
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/CLAUDE.md +39 -13
- package/README.md +24 -14
- package/lib/FontTracerPool.d.ts +38 -0
- package/lib/FontTracerPool.d.ts.map +1 -0
- package/lib/FontTracerPool.js +230 -217
- package/lib/FontTracerPool.js.map +1 -0
- package/lib/HeadlessBrowser.d.ts +18 -0
- package/lib/HeadlessBrowser.d.ts.map +1 -0
- package/lib/HeadlessBrowser.js +216 -210
- package/lib/HeadlessBrowser.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +15 -12
- package/lib/cli.js.map +1 -0
- package/lib/codepointMaps.d.ts +4 -0
- package/lib/codepointMaps.d.ts.map +1 -0
- package/lib/codepointMaps.js +99 -0
- package/lib/codepointMaps.js.map +1 -0
- package/lib/collectFeatureGlyphIds.d.ts +3 -0
- package/lib/collectFeatureGlyphIds.d.ts.map +1 -0
- package/lib/collectFeatureGlyphIds.js +124 -138
- package/lib/collectFeatureGlyphIds.js.map +1 -0
- package/lib/collectTextsByPage.d.ts +41 -0
- package/lib/collectTextsByPage.d.ts.map +1 -0
- package/lib/collectTextsByPage.js +726 -965
- package/lib/collectTextsByPage.js.map +1 -0
- package/lib/concurrencyLimit.d.ts +3 -0
- package/lib/concurrencyLimit.d.ts.map +1 -0
- package/lib/concurrencyLimit.js +12 -11
- package/lib/concurrencyLimit.js.map +1 -0
- package/lib/escapeJsStringLiteral.d.ts +3 -0
- package/lib/escapeJsStringLiteral.d.ts.map +1 -0
- package/lib/escapeJsStringLiteral.js +7 -6
- package/lib/escapeJsStringLiteral.js.map +1 -0
- package/lib/extractReferencedCustomPropertyNames.d.ts +3 -0
- package/lib/extractReferencedCustomPropertyNames.d.ts.map +1 -0
- package/lib/extractReferencedCustomPropertyNames.js +15 -16
- package/lib/extractReferencedCustomPropertyNames.js.map +1 -0
- package/lib/extractVisibleText.d.ts +7 -0
- package/lib/extractVisibleText.d.ts.map +1 -0
- package/lib/extractVisibleText.js +110 -119
- package/lib/extractVisibleText.js.map +1 -0
- package/lib/findCustomPropertyDefinitions.d.ts +8 -0
- package/lib/findCustomPropertyDefinitions.d.ts.map +1 -0
- package/lib/findCustomPropertyDefinitions.js +41 -48
- package/lib/findCustomPropertyDefinitions.js.map +1 -0
- package/lib/fontConverter.d.ts +2 -0
- package/lib/fontConverter.d.ts.map +1 -0
- package/lib/fontConverter.js +40 -21
- package/lib/fontConverter.js.map +1 -0
- package/lib/fontConverterWorker.d.ts +2 -0
- package/lib/fontConverterWorker.d.ts.map +1 -0
- package/lib/fontConverterWorker.js +52 -15
- package/lib/fontConverterWorker.js.map +1 -0
- package/lib/fontFaceHelpers.d.ts +64 -0
- package/lib/fontFaceHelpers.d.ts.map +1 -0
- package/lib/fontFaceHelpers.js +237 -249
- package/lib/fontFaceHelpers.js.map +1 -0
- package/lib/fontFeatureHelpers.d.ts +30 -0
- package/lib/fontFeatureHelpers.d.ts.map +1 -0
- package/lib/fontFeatureHelpers.js +277 -212
- package/lib/fontFeatureHelpers.js.map +1 -0
- package/lib/fontTracerWorker.d.ts +11 -0
- package/lib/fontTracerWorker.d.ts.map +1 -0
- package/lib/fontTracerWorker.js +94 -60
- package/lib/fontTracerWorker.js.map +1 -0
- package/lib/gatherStylesheetsWithPredicates.d.ts +26 -0
- package/lib/gatherStylesheetsWithPredicates.d.ts.map +1 -0
- package/lib/gatherStylesheetsWithPredicates.js +75 -84
- package/lib/gatherStylesheetsWithPredicates.js.map +1 -0
- package/lib/getCssRulesByProperty.d.ts +29 -0
- package/lib/getCssRulesByProperty.d.ts.map +1 -0
- package/lib/getCssRulesByProperty.js +316 -316
- package/lib/getCssRulesByProperty.js.map +1 -0
- package/lib/getFontInfo.d.ts +11 -0
- package/lib/getFontInfo.d.ts.map +1 -0
- package/lib/getFontInfo.js +31 -33
- package/lib/getFontInfo.js.map +1 -0
- package/lib/initialValueByProp.d.ts +3 -0
- package/lib/initialValueByProp.d.ts.map +1 -0
- package/lib/initialValueByProp.js +20 -17
- package/lib/initialValueByProp.js.map +1 -0
- package/lib/injectSubsetDefinitions.d.ts +3 -0
- package/lib/injectSubsetDefinitions.d.ts.map +1 -0
- package/lib/injectSubsetDefinitions.js +55 -59
- package/lib/injectSubsetDefinitions.js.map +1 -0
- package/lib/normalizeFontPropertyValue.d.ts +3 -0
- package/lib/normalizeFontPropertyValue.d.ts.map +1 -0
- package/lib/normalizeFontPropertyValue.js +59 -54
- package/lib/normalizeFontPropertyValue.js.map +1 -0
- package/lib/parseCommandLineOptions.d.ts +9 -0
- package/lib/parseCommandLineOptions.d.ts.map +1 -0
- package/lib/parseCommandLineOptions.js +145 -149
- package/lib/parseCommandLineOptions.js.map +1 -0
- package/lib/parseFontVariationSettings.d.ts +3 -0
- package/lib/parseFontVariationSettings.d.ts.map +1 -0
- package/lib/parseFontVariationSettings.js +38 -36
- package/lib/parseFontVariationSettings.js.map +1 -0
- package/lib/progress.d.ts +27 -0
- package/lib/progress.d.ts.map +1 -0
- package/lib/progress.js +51 -54
- package/lib/progress.js.map +1 -0
- package/lib/sfntCache.d.ts +4 -0
- package/lib/sfntCache.d.ts.map +1 -0
- package/lib/sfntCache.js +67 -25
- package/lib/sfntCache.js.map +1 -0
- package/lib/stripLocalTokens.d.ts +3 -0
- package/lib/stripLocalTokens.d.ts.map +1 -0
- package/lib/stripLocalTokens.js +23 -21
- package/lib/stripLocalTokens.js.map +1 -0
- package/lib/subfont.d.ts +54 -0
- package/lib/subfont.d.ts.map +1 -0
- package/lib/subfont.js +531 -629
- package/lib/subfont.js.map +1 -0
- package/lib/subsetFontWithGlyphs.d.ts +21 -0
- package/lib/subsetFontWithGlyphs.d.ts.map +1 -0
- package/lib/subsetFontWithGlyphs.js +285 -259
- package/lib/subsetFontWithGlyphs.js.map +1 -0
- package/lib/subsetFonts.d.ts +55 -0
- package/lib/subsetFonts.d.ts.map +1 -0
- package/lib/subsetFonts.js +899 -1200
- package/lib/subsetFonts.js.map +1 -0
- package/lib/subsetGeneration.d.ts +36 -0
- package/lib/subsetGeneration.d.ts.map +1 -0
- package/lib/subsetGeneration.js +328 -325
- package/lib/subsetGeneration.js.map +1 -0
- package/lib/types/shared.d.ts +11 -0
- package/lib/types/shared.d.ts.map +1 -0
- package/lib/types/shared.js +3 -0
- package/lib/types/shared.js.map +1 -0
- package/lib/unicodeRange.d.ts +3 -0
- package/lib/unicodeRange.d.ts.map +1 -0
- package/lib/unicodeRange.js +17 -30
- package/lib/unicodeRange.js.map +1 -0
- package/lib/unquote.d.ts +3 -0
- package/lib/unquote.d.ts.map +1 -0
- package/lib/unquote.js +18 -25
- package/lib/unquote.js.map +1 -0
- package/lib/variationAxes.d.ts +33 -0
- package/lib/variationAxes.d.ts.map +1 -0
- package/lib/variationAxes.js +127 -157
- package/lib/variationAxes.js.map +1 -0
- package/lib/warnAboutMissingGlyphs.d.ts +43 -0
- package/lib/warnAboutMissingGlyphs.d.ts.map +1 -0
- package/lib/warnAboutMissingGlyphs.js +139 -147
- package/lib/warnAboutMissingGlyphs.js.map +1 -0
- package/lib/wasmQueue.d.ts +3 -0
- package/lib/wasmQueue.d.ts.map +1 -0
- package/lib/wasmQueue.js +13 -10
- package/lib/wasmQueue.js.map +1 -0
- package/package.json +12 -2
package/lib/fontFaceHelpers.js
CHANGED
|
@@ -1,304 +1,292 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.stringifyFontFamily = stringifyFontFamily;
|
|
37
|
+
exports.maybeCssQuote = maybeCssQuote;
|
|
38
|
+
exports.getPreferredFontUrl = getPreferredFontUrl;
|
|
39
|
+
exports.getFontFaceDeclarationText = getFontFaceDeclarationText;
|
|
40
|
+
exports.getFontFaceForFontUsage = getFontFaceForFontUsage;
|
|
41
|
+
exports.getUnusedVariantsStylesheet = getUnusedVariantsStylesheet;
|
|
42
|
+
exports.getFontUsageStylesheet = getFontUsageStylesheet;
|
|
43
|
+
exports.getCodepoints = getCodepoints;
|
|
44
|
+
exports.cssAssetIsEmpty = cssAssetIsEmpty;
|
|
45
|
+
exports.parseFontWeightRange = parseFontWeightRange;
|
|
46
|
+
exports.parseFontStretchRange = parseFontStretchRange;
|
|
47
|
+
exports.uniqueChars = uniqueChars;
|
|
48
|
+
exports.uniqueCharsFromArray = uniqueCharsFromArray;
|
|
49
|
+
exports.hashHexPrefix = hashHexPrefix;
|
|
50
|
+
const crypto = __importStar(require("crypto"));
|
|
51
|
+
const stripLocalTokens = require("./stripLocalTokens");
|
|
52
|
+
const unicodeRange = require("./unicodeRange");
|
|
53
|
+
const normalizeFontPropertyValue = require("./normalizeFontPropertyValue");
|
|
6
54
|
const contentTypeByFontFormat = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
55
|
+
woff: 'font/woff', // https://tools.ietf.org/html/rfc8081#section-4.4.5
|
|
56
|
+
woff2: 'font/woff2',
|
|
57
|
+
truetype: 'font/ttf',
|
|
10
58
|
};
|
|
11
|
-
|
|
12
59
|
function stringifyFontFamily(name) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
60
|
+
if (/[^a-z0-9_-]/i.test(name)) {
|
|
61
|
+
return `"${name.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return name;
|
|
65
|
+
}
|
|
18
66
|
}
|
|
19
|
-
|
|
20
67
|
function maybeCssQuote(value) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} else {
|
|
26
|
-
return `'${value.replace(/'/g, "\\'")}'`;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function getPreferredFontUrl(cssFontFaceSrcRelations = []) {
|
|
31
|
-
// Priority: woff2 > woff > truetype > opentype, preferring explicit
|
|
32
|
-
// format() declarations over asset-type guesses.
|
|
33
|
-
const formatPriority = { woff2: 0, woff: 1, truetype: 2, opentype: 3 };
|
|
34
|
-
const typePriority = { Woff2: 4, Woff: 5, Ttf: 6, Otf: 7 };
|
|
35
|
-
|
|
36
|
-
let bestUrl;
|
|
37
|
-
let bestPriority = Infinity;
|
|
38
|
-
|
|
39
|
-
for (const r of cssFontFaceSrcRelations) {
|
|
40
|
-
let priority;
|
|
41
|
-
if (r.format) {
|
|
42
|
-
priority = formatPriority[r.format.toLowerCase()];
|
|
68
|
+
// CSS identifiers must start with a letter or underscore (or hyphen
|
|
69
|
+
// followed by a letter/underscore), not a digit or bare hyphen.
|
|
70
|
+
if (/^[a-zA-Z_][a-zA-Z0-9_-]*$|^-[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value)) {
|
|
71
|
+
return value;
|
|
43
72
|
}
|
|
44
|
-
|
|
45
|
-
|
|
73
|
+
else {
|
|
74
|
+
return `'${value.replace(/'/g, "\\'")}'`;
|
|
46
75
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
76
|
+
}
|
|
77
|
+
function getPreferredFontUrl(cssFontFaceSrcRelations = []) {
|
|
78
|
+
// Priority: woff2 > woff > truetype > opentype, preferring explicit
|
|
79
|
+
// format() declarations over asset-type guesses.
|
|
80
|
+
const formatPriority = {
|
|
81
|
+
woff2: 0,
|
|
82
|
+
woff: 1,
|
|
83
|
+
truetype: 2,
|
|
84
|
+
opentype: 3,
|
|
85
|
+
};
|
|
86
|
+
const typePriority = {
|
|
87
|
+
Woff2: 4,
|
|
88
|
+
Woff: 5,
|
|
89
|
+
Ttf: 6,
|
|
90
|
+
Otf: 7,
|
|
91
|
+
};
|
|
92
|
+
let bestUrl;
|
|
93
|
+
let bestPriority = Infinity;
|
|
94
|
+
for (const r of cssFontFaceSrcRelations) {
|
|
95
|
+
let priority;
|
|
96
|
+
if (r.format) {
|
|
97
|
+
priority = formatPriority[r.format.toLowerCase()];
|
|
98
|
+
}
|
|
99
|
+
if (priority === undefined && r.to.type) {
|
|
100
|
+
priority = typePriority[r.to.type];
|
|
101
|
+
}
|
|
102
|
+
if (priority !== undefined && priority < bestPriority) {
|
|
103
|
+
bestPriority = priority;
|
|
104
|
+
bestUrl = r.to.url;
|
|
105
|
+
}
|
|
50
106
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return bestUrl;
|
|
107
|
+
return bestUrl;
|
|
54
108
|
}
|
|
55
|
-
|
|
56
109
|
// Temporarily switch all relation hrefs to absolute so that
|
|
57
110
|
// node.toString() emits fully-qualified URLs in the @font-face src.
|
|
58
111
|
function getFontFaceDeclarationText(node, relations) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
] of originalHrefTypeByRelation.entries()) {
|
|
71
|
-
relation.hrefType = originalHrefType;
|
|
72
|
-
}
|
|
73
|
-
return text;
|
|
112
|
+
const originalHrefTypeByRelation = new Map();
|
|
113
|
+
for (const relation of relations) {
|
|
114
|
+
originalHrefTypeByRelation.set(relation, relation.hrefType);
|
|
115
|
+
relation.hrefType = 'absolute';
|
|
116
|
+
}
|
|
117
|
+
const text = node.toString();
|
|
118
|
+
// Put the hrefTypes that were set to absolute back to their original state:
|
|
119
|
+
for (const [relation, originalHrefType,] of originalHrefTypeByRelation.entries()) {
|
|
120
|
+
relation.hrefType = originalHrefType;
|
|
121
|
+
}
|
|
122
|
+
return text;
|
|
74
123
|
}
|
|
75
|
-
|
|
76
124
|
const fontOrder = ['woff2', 'woff', 'truetype'];
|
|
77
|
-
|
|
78
125
|
// Cache base64-encoded data URIs keyed by the underlying Buffer. Subset
|
|
79
126
|
// buffers are shared across pages (propagated from the canonical fontUsage),
|
|
80
127
|
// so without this every page re-encodes the same multi-hundred-KB buffer.
|
|
81
128
|
const subsetDataUrlCache = new WeakMap();
|
|
82
129
|
function getSubsetDataUrls(subsetsObj) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
format
|
|
91
|
-
].toString('base64')}`,
|
|
130
|
+
const cached = subsetDataUrlCache.get(subsetsObj);
|
|
131
|
+
if (cached)
|
|
132
|
+
return cached;
|
|
133
|
+
const result = fontOrder
|
|
134
|
+
.filter((format) => subsetsObj[format])
|
|
135
|
+
.map((format) => ({
|
|
136
|
+
format,
|
|
137
|
+
url: `data:${contentTypeByFontFormat[format]};base64,${subsetsObj[format].toString('base64')}`,
|
|
92
138
|
}));
|
|
93
|
-
|
|
94
|
-
|
|
139
|
+
subsetDataUrlCache.set(subsetsObj, result);
|
|
140
|
+
return result;
|
|
95
141
|
}
|
|
96
|
-
|
|
97
142
|
function getFontFaceForFontUsage(fontUsage) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
...Object.keys(fontUsage.props)
|
|
104
|
-
.sort()
|
|
105
|
-
.map((prop) => {
|
|
143
|
+
const subsets = getSubsetDataUrls(fontUsage.subsets);
|
|
144
|
+
const resultString = ['@font-face {'];
|
|
145
|
+
resultString.push(...Object.keys(fontUsage.props)
|
|
146
|
+
.sort()
|
|
147
|
+
.map((prop) => {
|
|
106
148
|
let value = fontUsage.props[prop];
|
|
107
|
-
|
|
108
149
|
if (prop === 'font-family') {
|
|
109
|
-
|
|
150
|
+
value = maybeCssQuote(`${value}__subset`);
|
|
110
151
|
}
|
|
111
|
-
|
|
112
152
|
if (prop === 'src') {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
153
|
+
value = subsets
|
|
154
|
+
.map((subset) => `url(${subset.url}) format('${subset.format}')`)
|
|
155
|
+
.join(', ');
|
|
116
156
|
}
|
|
117
|
-
|
|
118
157
|
return `${prop}: ${value};`;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
) {
|
|
132
|
-
const originalSet = new Set(fontUsage.codepoints.original);
|
|
133
|
-
const filtered = fontUsage.codepoints.used.filter((cp) =>
|
|
134
|
-
originalSet.has(cp)
|
|
135
|
-
);
|
|
136
|
-
if (filtered.length > 0) {
|
|
137
|
-
effectiveUsedCodepoints = filtered;
|
|
158
|
+
})
|
|
159
|
+
.map((str) => ` ${str}`));
|
|
160
|
+
// Intersect used codepoints with original (font's character set) so
|
|
161
|
+
// the unicode-range only advertises characters actually in the subset.
|
|
162
|
+
let effectiveUsedCodepoints = fontUsage.codepoints.used;
|
|
163
|
+
if (fontUsage.codepoints.original &&
|
|
164
|
+
fontUsage.codepoints.original.length > 0) {
|
|
165
|
+
const originalSet = new Set(fontUsage.codepoints.original);
|
|
166
|
+
const filtered = fontUsage.codepoints.used.filter((cp) => originalSet.has(cp));
|
|
167
|
+
if (filtered.length > 0) {
|
|
168
|
+
effectiveUsedCodepoints = filtered;
|
|
169
|
+
}
|
|
138
170
|
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
resultString.push('}');
|
|
145
|
-
|
|
146
|
-
return resultString.join('\n');
|
|
171
|
+
resultString.push(` unicode-range: ${unicodeRange(effectiveUsedCodepoints)};`);
|
|
172
|
+
resultString.push('}');
|
|
173
|
+
return resultString.join('\n');
|
|
147
174
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return accumulatedFontFaceDeclarations
|
|
156
|
-
.filter(
|
|
157
|
-
(decl) =>
|
|
158
|
-
fontUsages.some((fontUsage) =>
|
|
159
|
-
fontUsage.fontFamilies.has(decl['font-family'])
|
|
160
|
-
) &&
|
|
161
|
-
!fontUsages.some(
|
|
162
|
-
({ props }) =>
|
|
163
|
-
props['font-style'] === decl['font-style'] &&
|
|
175
|
+
function getUnusedVariantsStylesheet(fontUsages, accumulatedFontFaceDeclarations) {
|
|
176
|
+
// Find the available @font-face declarations where the font-family is used
|
|
177
|
+
// (so there will be subsets created), but the specific variant isn't used.
|
|
178
|
+
return accumulatedFontFaceDeclarations
|
|
179
|
+
.filter((decl) => decl['font-family'] &&
|
|
180
|
+
fontUsages.some((fontUsage) => fontUsage.fontFamilies.has(decl['font-family'])) &&
|
|
181
|
+
!fontUsages.some(({ props }) => props['font-style'] === decl['font-style'] &&
|
|
164
182
|
props['font-weight'] === decl['font-weight'] &&
|
|
165
183
|
props['font-stretch'] === decl['font-stretch'] &&
|
|
166
184
|
props['font-family'].toLowerCase() ===
|
|
167
|
-
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
]) {
|
|
190
|
-
if (props[descriptor]) {
|
|
191
|
-
rule += `;${descriptor}:${props[descriptor]}`;
|
|
185
|
+
decl['font-family'].toLowerCase()))
|
|
186
|
+
.map((props) => {
|
|
187
|
+
let src = stripLocalTokens(props.src ?? '');
|
|
188
|
+
const tokenRe = props.relations[0]?.tokenRegExp;
|
|
189
|
+
if (props.relations.length > 0 && tokenRe) {
|
|
190
|
+
const targets = props.relations.map((relation) => relation.to.url);
|
|
191
|
+
src = src.replace(tokenRe, () => `url('${targets.shift().replace(/'/g, "\\'")}')`);
|
|
192
|
+
}
|
|
193
|
+
let rule = `@font-face{font-family:${maybeCssQuote(`${props['font-family']}__subset`)};font-stretch:${props['font-stretch']};font-style:${props['font-style']};font-weight:${props['font-weight']};src:${src}`;
|
|
194
|
+
if (props['unicode-range']) {
|
|
195
|
+
rule += `;unicode-range:${props['unicode-range']}`;
|
|
196
|
+
}
|
|
197
|
+
// Preserve @font-face metric descriptors used for CLS optimization
|
|
198
|
+
for (const descriptor of [
|
|
199
|
+
'size-adjust',
|
|
200
|
+
'ascent-override',
|
|
201
|
+
'descent-override',
|
|
202
|
+
'line-gap-override',
|
|
203
|
+
]) {
|
|
204
|
+
if (props[descriptor]) {
|
|
205
|
+
rule += `;${descriptor}:${props[descriptor]}`;
|
|
206
|
+
}
|
|
192
207
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return rule;
|
|
208
|
+
rule += '}';
|
|
209
|
+
return rule;
|
|
196
210
|
})
|
|
197
|
-
|
|
211
|
+
.join('');
|
|
198
212
|
}
|
|
199
|
-
|
|
200
213
|
function getFontUsageStylesheet(fontUsages) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
214
|
+
return fontUsages
|
|
215
|
+
.filter((fontUsage) => fontUsage.subsets)
|
|
216
|
+
.map((fontUsage) => getFontFaceForFontUsage(fontUsage))
|
|
217
|
+
.join('');
|
|
205
218
|
}
|
|
206
|
-
|
|
207
219
|
function getCodepoints(text) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
220
|
+
const codepointSet = new Set();
|
|
221
|
+
for (const char of text) {
|
|
222
|
+
const cp = char.codePointAt(0);
|
|
223
|
+
if (cp !== undefined)
|
|
224
|
+
codepointSet.add(cp);
|
|
225
|
+
}
|
|
226
|
+
// Make sure that space is always part of the subset fonts (and that it's announced in unicode-range).
|
|
227
|
+
// Prevents Chrome from going off and downloading the fallback:
|
|
228
|
+
// https://gitter.im/assetgraph/assetgraph?at=5f01f6e13a0d3931fad4021b
|
|
229
|
+
codepointSet.add(32);
|
|
230
|
+
return [...codepointSet];
|
|
219
231
|
}
|
|
220
|
-
|
|
221
232
|
function cssAssetIsEmpty(cssAsset) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
233
|
+
const nodes = cssAsset.parseTree.nodes;
|
|
234
|
+
if (!nodes)
|
|
235
|
+
return true;
|
|
236
|
+
return nodes.every((node) => node.type === 'comment' && !(node.text ?? '').startsWith('!'));
|
|
225
237
|
}
|
|
226
|
-
|
|
227
238
|
function parseFontWeightRange(str) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
maxFontWeight = fontWeightTokens[1];
|
|
239
|
+
if (typeof str === 'undefined' || str === 'auto') {
|
|
240
|
+
return [-Infinity, Infinity];
|
|
241
|
+
}
|
|
242
|
+
let minFontWeight = 400;
|
|
243
|
+
let maxFontWeight = 400;
|
|
244
|
+
const fontWeightTokens = str.split(/\s+/).map((s) => parseFloat(s));
|
|
245
|
+
if ([1, 2].includes(fontWeightTokens.length) &&
|
|
246
|
+
!fontWeightTokens.some(isNaN)) {
|
|
247
|
+
minFontWeight = maxFontWeight = fontWeightTokens[0];
|
|
248
|
+
if (fontWeightTokens.length === 2) {
|
|
249
|
+
maxFontWeight = fontWeightTokens[1];
|
|
250
|
+
}
|
|
241
251
|
}
|
|
242
|
-
|
|
243
|
-
return [minFontWeight, maxFontWeight];
|
|
252
|
+
return [minFontWeight, maxFontWeight];
|
|
244
253
|
}
|
|
245
|
-
|
|
246
254
|
function parseFontStretchRange(str) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
[1, 2].includes(fontStretchTokens.length) &&
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
255
|
+
if (typeof str === 'undefined' || str.toLowerCase() === 'auto') {
|
|
256
|
+
return [-Infinity, Infinity];
|
|
257
|
+
}
|
|
258
|
+
let minFontStretch = 100;
|
|
259
|
+
let maxFontStretch = 100;
|
|
260
|
+
const fontStretchTokens = str.split(/\s+/).map((s) => {
|
|
261
|
+
const normalized = normalizeFontPropertyValue('font-stretch', s);
|
|
262
|
+
return parseFloat(String(normalized));
|
|
263
|
+
});
|
|
264
|
+
if ([1, 2].includes(fontStretchTokens.length) &&
|
|
265
|
+
!fontStretchTokens.some(isNaN)) {
|
|
266
|
+
minFontStretch = maxFontStretch = fontStretchTokens[0];
|
|
267
|
+
if (fontStretchTokens.length === 2) {
|
|
268
|
+
maxFontStretch = fontStretchTokens[1];
|
|
269
|
+
}
|
|
262
270
|
}
|
|
263
|
-
|
|
264
|
-
return [minFontStretch, maxFontStretch];
|
|
271
|
+
return [minFontStretch, maxFontStretch];
|
|
265
272
|
}
|
|
266
|
-
|
|
267
273
|
function uniqueChars(text) {
|
|
268
|
-
|
|
274
|
+
return [...new Set(text)].sort().join('');
|
|
269
275
|
}
|
|
270
|
-
|
|
271
276
|
function uniqueCharsFromArray(texts) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
277
|
+
const charSet = new Set();
|
|
278
|
+
for (const text of texts) {
|
|
279
|
+
for (const char of text) {
|
|
280
|
+
charSet.add(char);
|
|
281
|
+
}
|
|
276
282
|
}
|
|
277
|
-
|
|
278
|
-
return [...charSet].sort().join('');
|
|
283
|
+
return [...charSet].sort().join('');
|
|
279
284
|
}
|
|
280
|
-
|
|
281
285
|
function hashHexPrefix(stringOrBuffer) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
286
|
+
return crypto
|
|
287
|
+
.createHash('sha256')
|
|
288
|
+
.update(stringOrBuffer)
|
|
289
|
+
.digest('hex')
|
|
290
|
+
.slice(0, 10);
|
|
287
291
|
}
|
|
288
|
-
|
|
289
|
-
module.exports = {
|
|
290
|
-
stringifyFontFamily,
|
|
291
|
-
maybeCssQuote,
|
|
292
|
-
getPreferredFontUrl,
|
|
293
|
-
getFontFaceDeclarationText,
|
|
294
|
-
getFontFaceForFontUsage,
|
|
295
|
-
getUnusedVariantsStylesheet,
|
|
296
|
-
getFontUsageStylesheet,
|
|
297
|
-
getCodepoints,
|
|
298
|
-
cssAssetIsEmpty,
|
|
299
|
-
parseFontWeightRange,
|
|
300
|
-
parseFontStretchRange,
|
|
301
|
-
uniqueChars,
|
|
302
|
-
uniqueCharsFromArray,
|
|
303
|
-
hashHexPrefix,
|
|
304
|
-
};
|
|
292
|
+
//# sourceMappingURL=fontFaceHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fontFaceHelpers.js","sourceRoot":"","sources":["../src/fontFaceHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const featureSettingsProps: Set<string>;
|
|
2
|
+
export declare const fontVariantToOTTags: Record<string, Record<string, string[]>>;
|
|
3
|
+
export declare const UNRESOLVED_FEATURES_SENTINEL = "<unresolved>";
|
|
4
|
+
export declare function extractFeatureTagsFromDecl(prop: string, value: string): Set<string>;
|
|
5
|
+
interface PostCssRuleNode {
|
|
6
|
+
type: string;
|
|
7
|
+
prop: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
interface PostCssRule {
|
|
11
|
+
nodes: PostCssRuleNode[];
|
|
12
|
+
}
|
|
13
|
+
export declare function ruleFeatureTags(rule: PostCssRule): Set<string> | null;
|
|
14
|
+
export declare function ruleFontFamily(rule: PostCssRule): string | null;
|
|
15
|
+
export declare function addTagsToMapEntry<K>(map: Map<K, Set<string>>, key: K, tags: Iterable<string>): void;
|
|
16
|
+
export declare function recordRuleFeatureTags(rule: PostCssRule, featureTagsByFamily: Map<string, Set<string>> | null | undefined): true | string[] | null;
|
|
17
|
+
interface StylesheetEntry {
|
|
18
|
+
asset?: {
|
|
19
|
+
parseTree?: {
|
|
20
|
+
walkRules?(cb: (rule: PostCssRule) => void): void;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function findFontFamiliesWithFeatureSettings(stylesheetsWithPredicates: StylesheetEntry[], featureTagsByFamily: Map<string, Set<string>> | null | undefined): true | Set<string> | null;
|
|
25
|
+
export declare function resolveFeatureSettings(fontFamilies: Iterable<string>, fontFamiliesWithFeatureSettings: true | Set<string> | null | undefined, featureTagsByFamily: Map<string, Set<string>> | null | undefined): {
|
|
26
|
+
hasFontFeatureSettings: boolean;
|
|
27
|
+
fontFeatureTags?: string[];
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=fontFeatureHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fontFeatureHelpers.d.ts","sourceRoot":"","sources":["../src/fontFeatureHelpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,aAQ/B,CAAC;AAGH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA4CxE,CAAC;AA2CF,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAM3D,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,CAAC,CA0Cb;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAerE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAQ/D;AAID,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACxB,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GACrB,IAAI,CAON;AAID,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/D,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAiBxB;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE;YAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,CAAC;CAC/E;AAKD,wBAAgB,mCAAmC,CACjD,yBAAyB,EAAE,eAAe,EAAE,EAC5C,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/D,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAsB3B;AAID,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC9B,+BAA+B,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EACtE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/D;IAAE,sBAAsB,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAqCjE"}
|