@turntrout/subfont 1.7.1 → 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 +1 -0
- package/lib/FontTracerPool.d.ts.map +1 -1
- package/lib/FontTracerPool.js +46 -24
- package/lib/FontTracerPool.js.map +1 -1
- 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/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 +22 -1
- package/lib/subfont.d.ts.map +1 -1
- package/lib/subfont.js +7 -6
- package/lib/subfont.js.map +1 -1
- package/lib/subsetFontWithGlyphs.d.ts +4 -0
- package/lib/subsetFontWithGlyphs.d.ts.map +1 -1
- package/lib/subsetFontWithGlyphs.js +73 -14
- package/lib/subsetFontWithGlyphs.js.map +1 -1
- package/lib/subsetFonts.d.ts +1 -5
- package/lib/subsetFonts.d.ts.map +1 -1
- package/lib/subsetFonts.js +18 -17
- package/lib/subsetFonts.js.map +1 -1
- package/lib/subsetGeneration.d.ts +3 -6
- package/lib/subsetGeneration.d.ts.map +1 -1
- package/lib/subsetGeneration.js +42 -9
- package/lib/subsetGeneration.js.map +1 -1
- 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 +3 -2
package/CLAUDE.md
CHANGED
|
@@ -7,25 +7,29 @@ subfont is a CLI tool and Node.js library that speeds up initial page paint by a
|
|
|
7
7
|
## Development Commands
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
pnpm install
|
|
11
|
-
pnpm
|
|
12
|
-
pnpm run
|
|
13
|
-
pnpm run
|
|
10
|
+
pnpm install # Install dependencies
|
|
11
|
+
pnpm run build # Compile TypeScript (src/ → lib/)
|
|
12
|
+
pnpm test # Build + run mocha tests + lint
|
|
13
|
+
pnpm run lint # ESLint + Prettier check
|
|
14
|
+
pnpm run typecheck # TypeScript type checking (no emit)
|
|
15
|
+
pnpm run coverage # Run tests with nyc coverage
|
|
14
16
|
pnpm run check-coverage # Verify coverage thresholds
|
|
15
17
|
```
|
|
16
18
|
|
|
17
19
|
## Code Style
|
|
18
20
|
|
|
21
|
+
- **Language**: TypeScript (strict mode, ES2022 target, CommonJS output)
|
|
19
22
|
- **Formatter**: Prettier with single quotes, trailing commas (es5)
|
|
20
|
-
- **Linter**: ESLint via neostandard + eslint-config-prettier
|
|
21
|
-
- **Rules**: `prefer-template`, `prefer-const` (destructuring: all)
|
|
23
|
+
- **Linter**: ESLint via neostandard + eslint-config-prettier + typescript-eslint
|
|
24
|
+
- **Rules**: `prefer-template`, `prefer-const` (destructuring: all), `@typescript-eslint/no-explicit-any` (error in .ts files)
|
|
22
25
|
- **Tests**: Mocha with `unexpected` assertion library (not chai/jest)
|
|
23
26
|
- No exclusive tests (`describe.only`, `it.only`) — enforced by eslint-plugin-mocha
|
|
24
27
|
|
|
25
28
|
## Project Structure
|
|
26
29
|
|
|
27
|
-
- `
|
|
28
|
-
- `
|
|
30
|
+
- `src/` — TypeScript source code (entry: `src/subfont.ts`, CLI: `src/cli.ts`)
|
|
31
|
+
- `lib/` — Compiled JavaScript output (generated by `tsc`, not checked in)
|
|
32
|
+
- `test/` — Mocha test files (JavaScript, run against compiled `lib/`)
|
|
29
33
|
- `testdata/` — HTML fixtures and font files for tests
|
|
30
34
|
- `cases/` — Additional test case data
|
|
31
35
|
|
|
@@ -34,20 +38,42 @@ pnpm run check-coverage # Verify coverage thresholds
|
|
|
34
38
|
- Built on **assetgraph** for HTML/CSS asset graph traversal
|
|
35
39
|
- Uses **puppeteer-core** for headless browser font tracing
|
|
36
40
|
- **font-tracer** traces which fonts are used on each page
|
|
37
|
-
- **harfbuzzjs** for WOFF2 subsetting (via direct WASM calls in `
|
|
38
|
-
- `
|
|
39
|
-
- `
|
|
41
|
+
- **harfbuzzjs** for WOFF2 subsetting (via direct WASM calls in `src/subsetFontWithGlyphs.ts`)
|
|
42
|
+
- `src/collectTextsByPage.ts` — Font text collection and tracing orchestration
|
|
43
|
+
- `src/subsetGeneration.ts` — Subset generation with disk caching
|
|
44
|
+
- `src/FontTracerPool.ts` — Worker thread pool for parallel font tracing
|
|
40
45
|
|
|
41
46
|
## Testing Notes
|
|
42
47
|
|
|
43
48
|
- Tests have a 5-minute timeout (configured in `.mocharc.yml`)
|
|
44
49
|
- Tests use `httpception` for HTTP mocking and `unexpected` for assertions
|
|
45
50
|
- Some tests require puppeteer browser binaries (installed via `pnpm install`)
|
|
46
|
-
- Coverage thresholds
|
|
51
|
+
- Coverage thresholds: branches 70%, lines 80%, functions 75%, statements 80%
|
|
52
|
+
- Coverage excludes: `lib/cli.js`, `lib/fontConverterWorker.js`, `lib/fontTracerWorker.js`
|
|
47
53
|
|
|
48
54
|
## Conventions
|
|
49
55
|
|
|
50
|
-
-
|
|
56
|
+
- TypeScript source in `src/`, compiled to CommonJS in `lib/`
|
|
51
57
|
- Node.js >= 18 required
|
|
52
58
|
- Use `const` by default; `let` only when reassignment is needed
|
|
53
59
|
- Template literals preferred over string concatenation
|
|
60
|
+
|
|
61
|
+
## Subset-size efficiency improvements
|
|
62
|
+
|
|
63
|
+
Whenever you change anything that affects subset output bytes (new
|
|
64
|
+
`hb_subset_input_set` knob, new `DROP_TABLE_TAGS` entry, new flag, new
|
|
65
|
+
gating heuristic, etc.):
|
|
66
|
+
|
|
67
|
+
1. Re-run `pnpm run build && node scripts/bench-readme.js` (compares
|
|
68
|
+
against the `subset-font` package upstream Munter/subfont uses) and
|
|
69
|
+
paste the printed Markdown rows into the README's "Upstream subfont
|
|
70
|
+
vs `@turntrout/subfont`" table, replacing the previous numbers.
|
|
71
|
+
2. Add the new optimization to the README's optimization-techniques table
|
|
72
|
+
(one row per knob: name, one-line explanation, gating condition if any).
|
|
73
|
+
3. Bump `SUBSET_CACHE_VERSION` in `src/subsetGeneration.ts` if the change
|
|
74
|
+
affects bytes deterministically. Skip the bump if the change is purely
|
|
75
|
+
defensive (e.g. removing a no-op).
|
|
76
|
+
4. Add a regression test in `test/subsetSizeBenchmarks.js` with a hard
|
|
77
|
+
upper bound on output size for at least one font that exercises the
|
|
78
|
+
new path. Bound values get bumped only after confirming a regression
|
|
79
|
+
isn't a real loss.
|
package/README.md
CHANGED
|
@@ -2,26 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/alexander-turner/subfont/actions/workflows/ci.yml)
|
|
4
4
|
|
|
5
|
-
A faster fork of [subfont](https://github.com/Munter/subfont) that subsets web fonts to only the characters used on your pages. Adds parallel tracing, disk caching, woff2-only output,
|
|
5
|
+
A faster fork of [subfont](https://github.com/Munter/subfont) that subsets web fonts to only the characters used on your pages. Adds parallel tracing, disk caching, woff2-only output, always-on variable font instancing, and is fully written in TypeScript (the upstream is JavaScript). On [`turntrout.com`](https://github.com/alexander-turner/TurnTrout.com) (382 pages, 20+ font variants), switching to this fork cut font subsetting from [111 minutes](https://github.com/alexander-turner/TurnTrout.com/actions/runs/23470135763) to [28 minutes](https://github.com/alexander-turner/TurnTrout.com/actions/runs/23518006824).
|
|
6
6
|
|
|
7
7
|
### Aggressive woff2 subsetting
|
|
8
8
|
|
|
9
|
-
subfont produces dramatically smaller font files by stripping data that browsers never use:
|
|
9
|
+
`subfont` produces dramatically smaller font files by stripping data that browsers never use:
|
|
10
10
|
|
|
11
|
-
| Optimization
|
|
12
|
-
|
|
|
13
|
-
| Hinting removal
|
|
14
|
-
| Name table pruning
|
|
15
|
-
|
|
|
16
|
-
|
|
|
11
|
+
| Optimization | Technique |
|
|
12
|
+
| ---------------------------- | --------------------------------------------------------------------------------------- |
|
|
13
|
+
| Hinting removal | Strips TrueType hinting instructions (browsers auto-hint) |
|
|
14
|
+
| Name table pruning | Keeps only the 4 IDs browsers read (family, subfamily, full name, PostScript name) |
|
|
15
|
+
| Name lang-ID filter | Keeps only en-US name strings; drops Japanese, Russian, Korean, etc. |
|
|
16
|
+
| Table stripping | Drops `DSIG`, `LTSH`, `VDMX`, `hdmx`, `gasp`, `PCLT` |
|
|
17
|
+
| MATH-table drop (gated) | Drops `MATH` when no math codepoints are used on the page |
|
|
18
|
+
| Color-table drop (gated) | Drops `COLR`/`CPAL`/`SVG `/`CBDT`/`CBLC`/`sbix`/`EBDT`/`EBLC`/`EBSC` when no emoji used |
|
|
19
|
+
| Layout-script filter (gated) | Drops GSUB/GPOS lookups for OpenType scripts the page doesn't render |
|
|
20
|
+
| CSS-aware feature retention | Drops GSUB/GPOS features the page's CSS doesn't reference |
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
Reproducible benchmark on `testdata/subsetFonts/OpenSans-400.ttf` (run with `node scripts/bench-readme.js`); "upstream" = the [`subset-font`](https://github.com/papandreou/subset-font) package the original [Munter/subfont](https://github.com/Munter/subfont) uses, woff2-compressed:
|
|
19
23
|
|
|
20
|
-
| Text sample |
|
|
21
|
-
| ----------------- |
|
|
22
|
-
| Heading (short) | 2,604 B
|
|
23
|
-
| Paragraph | 4,
|
|
24
|
-
| Full page charset |
|
|
24
|
+
| Text sample | Upstream subfont | `@turntrout/subfont` | Savings |
|
|
25
|
+
| ----------------- | ---------------- | -------------------- | ------- |
|
|
26
|
+
| Heading (short) | 2,604 B | 828 B | **68%** |
|
|
27
|
+
| Paragraph | 4,448 B | 2,072 B | **53%** |
|
|
28
|
+
| Full page charset | 9,388 B | 5,500 B | **41%** |
|
|
25
29
|
|
|
26
30
|
## Install
|
|
27
31
|
|
|
@@ -79,6 +83,12 @@ subfont path/to/index.html -i --cache
|
|
|
79
83
|
|
|
80
84
|
Run `subfont --help` for the full list.
|
|
81
85
|
|
|
86
|
+
### Environment variables
|
|
87
|
+
|
|
88
|
+
| Variable | Description |
|
|
89
|
+
| --------------------------- | ------------------------------------------------------------------------------ |
|
|
90
|
+
| `PUPPETEER_EXECUTABLE_PATH` | Path to a Chrome/Chromium binary; skips auto-download when `--dynamic` is used |
|
|
91
|
+
|
|
82
92
|
To include extra characters in a specific font's subset, add `-subfont-text` to its `@font-face`:
|
|
83
93
|
|
|
84
94
|
```css
|
package/lib/FontTracerPool.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ declare class FontTracerPool {
|
|
|
21
21
|
private _nextTaskId;
|
|
22
22
|
constructor(numWorkers: number, { taskTimeoutMs }?: FontTracerPoolOptions);
|
|
23
23
|
init(): Promise<void>;
|
|
24
|
+
private _onWorkerError;
|
|
24
25
|
private _clearTaskTimer;
|
|
25
26
|
private _onWorkerMessage;
|
|
26
27
|
private _onWorkerExit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FontTracerPool.d.ts","sourceRoot":"","sources":["../src/FontTracerPool.ts"],"names":[],"mappings":"AAkBA,UAAU,wBAAwB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAqCD,UAAU,qBAAqB;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAG1B,UAAU,EAAE,MAAM,EAClB,EAAE,aAAuC,EAAE,GAAE,qBAA0B;IAcnE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FontTracerPool.d.ts","sourceRoot":"","sources":["../src/FontTracerPool.ts"],"names":[],"mappings":"AAkBA,UAAU,wBAAwB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAqCD,UAAU,qBAAqB;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAG1B,UAAU,EAAE,MAAM,EAClB,EAAE,aAAuC,EAAE,GAAE,qBAA0B;IAcnE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,gBAAgB;IAsBxB;;;OAGG;IAGH,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,wBAAwB,EAAE,GAEpD,OAAO,CAAC,OAAO,CAAC;IAsBb,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C/B;AAED,SAAS,cAAc,CAAC"}
|
package/lib/FontTracerPool.js
CHANGED
|
@@ -35,25 +35,49 @@ class FontTracerPool {
|
|
|
35
35
|
const worker = new worker_threads_1.Worker(this._workerPath);
|
|
36
36
|
this._workers.push(worker);
|
|
37
37
|
const initPromise = new Promise((resolve, reject) => {
|
|
38
|
-
const
|
|
38
|
+
const fail = (err) => {
|
|
39
|
+
worker.off('message', onMessage);
|
|
40
|
+
worker.off('error', fail);
|
|
41
|
+
const idx = this._workers.indexOf(worker);
|
|
42
|
+
if (idx !== -1)
|
|
43
|
+
this._workers.splice(idx, 1);
|
|
44
|
+
worker.terminate();
|
|
45
|
+
reject(err);
|
|
46
|
+
};
|
|
39
47
|
const onMessage = (msg) => {
|
|
40
48
|
if (msg.type === 'ready') {
|
|
41
49
|
worker.off('message', onMessage);
|
|
42
|
-
worker.off('error',
|
|
50
|
+
worker.off('error', fail);
|
|
43
51
|
worker.on('message', (msg) => this._onWorkerMessage(worker, msg));
|
|
52
|
+
worker.on('error', (err) => this._onWorkerError(worker, err));
|
|
44
53
|
worker.on('exit', (code) => this._onWorkerExit(worker, code));
|
|
45
54
|
this._idle.push(worker);
|
|
46
55
|
resolve();
|
|
47
56
|
}
|
|
48
57
|
};
|
|
49
58
|
worker.on('message', onMessage);
|
|
50
|
-
worker.on('error',
|
|
59
|
+
worker.on('error', fail);
|
|
51
60
|
});
|
|
52
61
|
worker.postMessage({ type: 'init' });
|
|
53
62
|
initPromises.push(initPromise);
|
|
54
63
|
}
|
|
55
64
|
await Promise.all(initPromises);
|
|
56
65
|
}
|
|
66
|
+
_onWorkerError(worker, err) {
|
|
67
|
+
// A post-init worker emitted an error. Reject the in-flight task so
|
|
68
|
+
// callers don't hang. The worker is about to exit; _onWorkerExit will
|
|
69
|
+
// remove it from _workers/_idle.
|
|
70
|
+
const taskId = this._taskByWorker.get(worker);
|
|
71
|
+
if (taskId !== undefined) {
|
|
72
|
+
this._taskByWorker.delete(worker);
|
|
73
|
+
this._clearTaskTimer(taskId);
|
|
74
|
+
const cb = this._taskCallbacks.get(taskId);
|
|
75
|
+
if (cb) {
|
|
76
|
+
this._taskCallbacks.delete(taskId);
|
|
77
|
+
cb.reject(err);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
57
81
|
_clearTaskTimer(taskId) {
|
|
58
82
|
const timer = this._taskTimers.get(taskId);
|
|
59
83
|
if (timer) {
|
|
@@ -81,7 +105,6 @@ class FontTracerPool {
|
|
|
81
105
|
this._dispatchPending();
|
|
82
106
|
}
|
|
83
107
|
_onWorkerExit(worker, code) {
|
|
84
|
-
// Remove crashed worker from tracking
|
|
85
108
|
const workerIdx = this._workers.indexOf(worker);
|
|
86
109
|
if (workerIdx !== -1) {
|
|
87
110
|
this._workers.splice(workerIdx, 1);
|
|
@@ -90,29 +113,28 @@ class FontTracerPool {
|
|
|
90
113
|
if (idleIdx !== -1) {
|
|
91
114
|
this._idle.splice(idleIdx, 1);
|
|
92
115
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
116
|
+
// Reject any task that was in-flight on this worker. A graceful exit
|
|
117
|
+
// (code 0) mid-task still leaves the caller waiting, so don't gate on
|
|
118
|
+
// code !== 0.
|
|
119
|
+
const taskId = this._taskByWorker.get(worker);
|
|
120
|
+
this._taskByWorker.delete(worker);
|
|
121
|
+
if (taskId !== undefined) {
|
|
122
|
+
this._clearTaskTimer(taskId);
|
|
123
|
+
const cb = this._taskCallbacks.get(taskId);
|
|
124
|
+
if (cb) {
|
|
125
|
+
this._taskCallbacks.delete(taskId);
|
|
126
|
+
cb.reject(new Error(`Worker exited with code ${code}`));
|
|
104
127
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
128
|
+
}
|
|
129
|
+
if (code !== 0 && this._workers.length === 0) {
|
|
130
|
+
for (const task of this._pendingTasks) {
|
|
131
|
+
const cb = this._taskCallbacks.get(task.message.taskId);
|
|
132
|
+
if (cb) {
|
|
133
|
+
this._taskCallbacks.delete(task.message.taskId);
|
|
134
|
+
cb.reject(new Error('All workers have crashed, no workers available'));
|
|
113
135
|
}
|
|
114
|
-
this._pendingTasks = [];
|
|
115
136
|
}
|
|
137
|
+
this._pendingTasks = [];
|
|
116
138
|
}
|
|
117
139
|
}
|
|
118
140
|
_startTaskTimer(taskId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FontTracerPool.js","sourceRoot":"","sources":["../src/FontTracerPool.ts"],"names":[],"mappings":";AAAA,mCAAoC;AACpC,mDAAwC;AAExC;;;GAGG;AACH,MAAM,uBAAuB,GAAG,MAAM,CAAC;AA2DvC,MAAM,cAAc;IACV,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,cAAc,CAAS;IACvB,QAAQ,CAAW;IACnB,KAAK,CAAW;IAChB,aAAa,CAAmC;IAChD,cAAc,CAA6B;IAC3C,WAAW,CAA8B;IACzC,aAAa,CAAsB;IACnC,WAAW,CAAS;IAE5B,YACE,UAAkB,EAClB,EAAE,aAAa,GAAG,uBAAuB,KAA4B,EAAE;QAEvE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,YAAY,GAAyB,EAAE,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,uBAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE3B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxD,MAAM,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FontTracerPool.js","sourceRoot":"","sources":["../src/FontTracerPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Asset } from 'assetgraph';
|
|
2
|
+
type TraceResult = Record<string, unknown>;
|
|
3
|
+
interface HeadlessBrowserOptions {
|
|
4
|
+
console: Console;
|
|
5
|
+
chromeArgs?: string[];
|
|
6
|
+
}
|
|
7
|
+
declare class HeadlessBrowser {
|
|
8
|
+
private console;
|
|
9
|
+
private _chromeArgs;
|
|
10
|
+
private _launchPromise?;
|
|
11
|
+
private _closed;
|
|
12
|
+
constructor({ console, chromeArgs }: HeadlessBrowserOptions);
|
|
13
|
+
private _launchBrowserMemoized;
|
|
14
|
+
tracePage(htmlAsset: Asset): Promise<TraceResult[]>;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export = HeadlessBrowser;
|
|
18
|
+
//# sourceMappingURL=HeadlessBrowser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadlessBrowser.d.ts","sourceRoot":"","sources":["../src/HeadlessBrowser.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAc,KAAK,EAAE,MAAM,YAAY,CAAC;AAKpD,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA2E3C,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,OAAO,CAAkB;gBAErB,EAAE,OAAO,EAAE,UAAe,EAAE,EAAE,sBAAsB;IAKhE,OAAO,CAAC,sBAAsB;IAgBxB,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAgHnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB7B;AAED,SAAS,eAAe,CAAC"}
|