@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.
Files changed (151) hide show
  1. package/CLAUDE.md +39 -13
  2. package/README.md +24 -14
  3. package/lib/FontTracerPool.d.ts +38 -0
  4. package/lib/FontTracerPool.d.ts.map +1 -0
  5. package/lib/FontTracerPool.js +230 -217
  6. package/lib/FontTracerPool.js.map +1 -0
  7. package/lib/HeadlessBrowser.d.ts +18 -0
  8. package/lib/HeadlessBrowser.d.ts.map +1 -0
  9. package/lib/HeadlessBrowser.js +216 -210
  10. package/lib/HeadlessBrowser.js.map +1 -0
  11. package/lib/cli.d.ts +3 -0
  12. package/lib/cli.d.ts.map +1 -0
  13. package/lib/cli.js +15 -12
  14. package/lib/cli.js.map +1 -0
  15. package/lib/codepointMaps.d.ts +4 -0
  16. package/lib/codepointMaps.d.ts.map +1 -0
  17. package/lib/codepointMaps.js +99 -0
  18. package/lib/codepointMaps.js.map +1 -0
  19. package/lib/collectFeatureGlyphIds.d.ts +3 -0
  20. package/lib/collectFeatureGlyphIds.d.ts.map +1 -0
  21. package/lib/collectFeatureGlyphIds.js +124 -138
  22. package/lib/collectFeatureGlyphIds.js.map +1 -0
  23. package/lib/collectTextsByPage.d.ts +41 -0
  24. package/lib/collectTextsByPage.d.ts.map +1 -0
  25. package/lib/collectTextsByPage.js +726 -965
  26. package/lib/collectTextsByPage.js.map +1 -0
  27. package/lib/concurrencyLimit.d.ts +3 -0
  28. package/lib/concurrencyLimit.d.ts.map +1 -0
  29. package/lib/concurrencyLimit.js +12 -11
  30. package/lib/concurrencyLimit.js.map +1 -0
  31. package/lib/escapeJsStringLiteral.d.ts +3 -0
  32. package/lib/escapeJsStringLiteral.d.ts.map +1 -0
  33. package/lib/escapeJsStringLiteral.js +7 -6
  34. package/lib/escapeJsStringLiteral.js.map +1 -0
  35. package/lib/extractReferencedCustomPropertyNames.d.ts +3 -0
  36. package/lib/extractReferencedCustomPropertyNames.d.ts.map +1 -0
  37. package/lib/extractReferencedCustomPropertyNames.js +15 -16
  38. package/lib/extractReferencedCustomPropertyNames.js.map +1 -0
  39. package/lib/extractVisibleText.d.ts +7 -0
  40. package/lib/extractVisibleText.d.ts.map +1 -0
  41. package/lib/extractVisibleText.js +110 -119
  42. package/lib/extractVisibleText.js.map +1 -0
  43. package/lib/findCustomPropertyDefinitions.d.ts +8 -0
  44. package/lib/findCustomPropertyDefinitions.d.ts.map +1 -0
  45. package/lib/findCustomPropertyDefinitions.js +41 -48
  46. package/lib/findCustomPropertyDefinitions.js.map +1 -0
  47. package/lib/fontConverter.d.ts +2 -0
  48. package/lib/fontConverter.d.ts.map +1 -0
  49. package/lib/fontConverter.js +40 -21
  50. package/lib/fontConverter.js.map +1 -0
  51. package/lib/fontConverterWorker.d.ts +2 -0
  52. package/lib/fontConverterWorker.d.ts.map +1 -0
  53. package/lib/fontConverterWorker.js +52 -15
  54. package/lib/fontConverterWorker.js.map +1 -0
  55. package/lib/fontFaceHelpers.d.ts +64 -0
  56. package/lib/fontFaceHelpers.d.ts.map +1 -0
  57. package/lib/fontFaceHelpers.js +237 -249
  58. package/lib/fontFaceHelpers.js.map +1 -0
  59. package/lib/fontFeatureHelpers.d.ts +30 -0
  60. package/lib/fontFeatureHelpers.d.ts.map +1 -0
  61. package/lib/fontFeatureHelpers.js +277 -212
  62. package/lib/fontFeatureHelpers.js.map +1 -0
  63. package/lib/fontTracerWorker.d.ts +11 -0
  64. package/lib/fontTracerWorker.d.ts.map +1 -0
  65. package/lib/fontTracerWorker.js +94 -60
  66. package/lib/fontTracerWorker.js.map +1 -0
  67. package/lib/gatherStylesheetsWithPredicates.d.ts +26 -0
  68. package/lib/gatherStylesheetsWithPredicates.d.ts.map +1 -0
  69. package/lib/gatherStylesheetsWithPredicates.js +75 -84
  70. package/lib/gatherStylesheetsWithPredicates.js.map +1 -0
  71. package/lib/getCssRulesByProperty.d.ts +29 -0
  72. package/lib/getCssRulesByProperty.d.ts.map +1 -0
  73. package/lib/getCssRulesByProperty.js +316 -316
  74. package/lib/getCssRulesByProperty.js.map +1 -0
  75. package/lib/getFontInfo.d.ts +11 -0
  76. package/lib/getFontInfo.d.ts.map +1 -0
  77. package/lib/getFontInfo.js +31 -33
  78. package/lib/getFontInfo.js.map +1 -0
  79. package/lib/initialValueByProp.d.ts +3 -0
  80. package/lib/initialValueByProp.d.ts.map +1 -0
  81. package/lib/initialValueByProp.js +20 -17
  82. package/lib/initialValueByProp.js.map +1 -0
  83. package/lib/injectSubsetDefinitions.d.ts +3 -0
  84. package/lib/injectSubsetDefinitions.d.ts.map +1 -0
  85. package/lib/injectSubsetDefinitions.js +55 -59
  86. package/lib/injectSubsetDefinitions.js.map +1 -0
  87. package/lib/normalizeFontPropertyValue.d.ts +3 -0
  88. package/lib/normalizeFontPropertyValue.d.ts.map +1 -0
  89. package/lib/normalizeFontPropertyValue.js +59 -54
  90. package/lib/normalizeFontPropertyValue.js.map +1 -0
  91. package/lib/parseCommandLineOptions.d.ts +9 -0
  92. package/lib/parseCommandLineOptions.d.ts.map +1 -0
  93. package/lib/parseCommandLineOptions.js +145 -149
  94. package/lib/parseCommandLineOptions.js.map +1 -0
  95. package/lib/parseFontVariationSettings.d.ts +3 -0
  96. package/lib/parseFontVariationSettings.d.ts.map +1 -0
  97. package/lib/parseFontVariationSettings.js +38 -36
  98. package/lib/parseFontVariationSettings.js.map +1 -0
  99. package/lib/progress.d.ts +27 -0
  100. package/lib/progress.d.ts.map +1 -0
  101. package/lib/progress.js +51 -54
  102. package/lib/progress.js.map +1 -0
  103. package/lib/sfntCache.d.ts +4 -0
  104. package/lib/sfntCache.d.ts.map +1 -0
  105. package/lib/sfntCache.js +67 -25
  106. package/lib/sfntCache.js.map +1 -0
  107. package/lib/stripLocalTokens.d.ts +3 -0
  108. package/lib/stripLocalTokens.d.ts.map +1 -0
  109. package/lib/stripLocalTokens.js +23 -21
  110. package/lib/stripLocalTokens.js.map +1 -0
  111. package/lib/subfont.d.ts +54 -0
  112. package/lib/subfont.d.ts.map +1 -0
  113. package/lib/subfont.js +531 -629
  114. package/lib/subfont.js.map +1 -0
  115. package/lib/subsetFontWithGlyphs.d.ts +21 -0
  116. package/lib/subsetFontWithGlyphs.d.ts.map +1 -0
  117. package/lib/subsetFontWithGlyphs.js +285 -259
  118. package/lib/subsetFontWithGlyphs.js.map +1 -0
  119. package/lib/subsetFonts.d.ts +55 -0
  120. package/lib/subsetFonts.d.ts.map +1 -0
  121. package/lib/subsetFonts.js +899 -1200
  122. package/lib/subsetFonts.js.map +1 -0
  123. package/lib/subsetGeneration.d.ts +36 -0
  124. package/lib/subsetGeneration.d.ts.map +1 -0
  125. package/lib/subsetGeneration.js +328 -325
  126. package/lib/subsetGeneration.js.map +1 -0
  127. package/lib/types/shared.d.ts +11 -0
  128. package/lib/types/shared.d.ts.map +1 -0
  129. package/lib/types/shared.js +3 -0
  130. package/lib/types/shared.js.map +1 -0
  131. package/lib/unicodeRange.d.ts +3 -0
  132. package/lib/unicodeRange.d.ts.map +1 -0
  133. package/lib/unicodeRange.js +17 -30
  134. package/lib/unicodeRange.js.map +1 -0
  135. package/lib/unquote.d.ts +3 -0
  136. package/lib/unquote.d.ts.map +1 -0
  137. package/lib/unquote.js +18 -25
  138. package/lib/unquote.js.map +1 -0
  139. package/lib/variationAxes.d.ts +33 -0
  140. package/lib/variationAxes.d.ts.map +1 -0
  141. package/lib/variationAxes.js +127 -157
  142. package/lib/variationAxes.js.map +1 -0
  143. package/lib/warnAboutMissingGlyphs.d.ts +43 -0
  144. package/lib/warnAboutMissingGlyphs.d.ts.map +1 -0
  145. package/lib/warnAboutMissingGlyphs.js +139 -147
  146. package/lib/warnAboutMissingGlyphs.js.map +1 -0
  147. package/lib/wasmQueue.d.ts +3 -0
  148. package/lib/wasmQueue.d.ts.map +1 -0
  149. package/lib/wasmQueue.js +13 -10
  150. package/lib/wasmQueue.js.map +1 -0
  151. package/package.json +12 -2
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * Worker thread for running fontTracer in parallel.
3
4
  *
@@ -7,70 +8,103 @@
7
8
  * Re-parses HTML with jsdom inside the worker since DOM objects
8
9
  * cannot be transferred via structured clone.
9
10
  */
10
-
11
- const { parentPort } = require('worker_threads');
12
- const { JSDOM } = require('jsdom');
13
- const postcss = require('postcss');
14
- const memoizeSync = require('memoizesync');
15
- const fontTracer = require('font-tracer');
16
- const getCssRulesByProperty = require('./getCssRulesByProperty');
17
-
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ const worker_threads_1 = require("worker_threads");
46
+ const jsdom_1 = require("jsdom");
47
+ const postcss = __importStar(require("postcss"));
48
+ const memoizeSync = require("memoizesync");
49
+ const fontTracer = require("font-tracer");
50
+ const getCssRulesByProperty = require("./getCssRulesByProperty");
51
+ if (!worker_threads_1.parentPort) {
52
+ throw new Error('fontTracerWorker must be run as a worker thread');
53
+ }
54
+ const port = worker_threads_1.parentPort;
18
55
  // Each worker gets its own memoized getCssRulesByProperty instance.
19
56
  // Since pages on the same site typically share stylesheets, the
20
57
  // memoization is effective even within a single worker processing
21
58
  // multiple pages sequentially.
22
59
  const memoizedGetCssRulesByProperty = memoizeSync(getCssRulesByProperty);
23
-
24
- parentPort.on('message', (msg) => {
25
- if (msg.type === 'init') {
26
- parentPort.postMessage({ type: 'ready' });
27
- return;
28
- }
29
-
30
- if (msg.type === 'trace') {
31
- const { taskId, htmlText, stylesheetsWithPredicates: serialized } = msg;
32
- let dom;
33
- try {
34
- // Re-parse HTML with jsdom to get a DOM document
35
- dom = new JSDOM(htmlText);
36
- const document = dom.window.document;
37
-
38
- // Re-parse CSS from serialized text — asset objects with PostCSS
39
- // trees can't cross the structured clone boundary.
40
- const stylesheetsWithPredicates = serialized.map((entry) => ({
41
- asset: { parseTree: postcss.parse(entry.text) },
42
- text: entry.text,
43
- predicates: entry.predicates,
44
- }));
45
-
46
- // Run fontTracer asset is undefined (skips conditional comments
47
- // and noscript traversal, which is acceptable for modern sites)
48
- const textByProps = fontTracer(document, {
49
- stylesheetsWithPredicates,
50
- getCssRulesByProperty: memoizedGetCssRulesByProperty,
51
- });
52
-
53
- // Strip any non-serializable data from results
54
- const serializableResults = textByProps.map((entry) => ({
55
- text: entry.text,
56
- props: { ...entry.props },
57
- }));
58
-
59
- parentPort.postMessage({
60
- type: 'result',
61
- taskId,
62
- textByProps: serializableResults,
63
- });
64
- } catch (err) {
65
- parentPort.postMessage({
66
- type: 'error',
67
- taskId: msg.taskId,
68
- error: err.message,
69
- stack: err.stack,
70
- });
71
- } finally {
72
- // Clean up jsdom to free memory — must run even if fontTracer throws
73
- if (dom) dom.window.close();
60
+ port.on('message', (msg) => {
61
+ if (msg.type === 'init') {
62
+ port.postMessage({ type: 'ready' });
63
+ return;
64
+ }
65
+ if (msg.type === 'trace') {
66
+ const { taskId, htmlText, stylesheetsWithPredicates: serialized } = msg;
67
+ let dom;
68
+ try {
69
+ // Re-parse HTML with jsdom to get a DOM document
70
+ dom = new jsdom_1.JSDOM(htmlText);
71
+ const document = dom.window.document;
72
+ // Re-parse CSS from serialized text — asset objects with PostCSS
73
+ // trees can't cross the structured clone boundary.
74
+ const stylesheetsWithPredicates = serialized.map((entry) => ({
75
+ asset: { parseTree: postcss.parse(entry.text) },
76
+ text: entry.text,
77
+ predicates: entry.predicates,
78
+ }));
79
+ const textByProps = fontTracer(document, {
80
+ stylesheetsWithPredicates,
81
+ getCssRulesByProperty: memoizedGetCssRulesByProperty,
82
+ });
83
+ // Strip any non-serializable data from results
84
+ const serializableResults = textByProps.map((entry) => ({
85
+ text: entry.text,
86
+ props: { ...entry.props },
87
+ }));
88
+ port.postMessage({
89
+ type: 'result',
90
+ taskId,
91
+ textByProps: serializableResults,
92
+ });
93
+ }
94
+ catch (rawErr) {
95
+ const err = rawErr;
96
+ port.postMessage({
97
+ type: 'error',
98
+ taskId: msg.taskId,
99
+ error: err.message,
100
+ stack: err.stack,
101
+ });
102
+ }
103
+ finally {
104
+ // Clean up jsdom to free memory — must run even if fontTracer throws
105
+ if (dom)
106
+ dom.window.close();
107
+ }
74
108
  }
75
- }
76
109
  });
110
+ //# sourceMappingURL=fontTracerWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fontTracerWorker.js","sourceRoot":"","sources":["../src/fontTracerWorker.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,mDAA4C;AAC5C,iCAA8B;AAC9B,iDAAmC;AACnC,2CAA4C;AAC5C,0CAA2C;AAC3C,iEAAkE;AAqBlE,IAAI,CAAC,2BAAU,EAAE,CAAC;IAChB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,IAAI,GAAG,2BAAU,CAAC;AAExB,oEAAoE;AACpE,gEAAgE;AAChE,kEAAkE;AAClE,+BAA+B;AAC/B,MAAM,6BAA6B,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEzE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,EAAE;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QACxE,IAAI,GAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,iDAAiD;YACjD,GAAG,GAAG,IAAI,aAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAErC,iEAAiE;YACjE,mDAAmD;YACnD,MAAM,yBAAyB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3D,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC,CAAC;YAEJ,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE;gBACvC,yBAAyB;gBACzB,qBAAqB,EAAE,6BAA6B;aACrD,CAAC,CAAC;YAEH,+CAA+C;YAC/C,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;aAC1B,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,WAAW,CAAC;gBACf,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,WAAW,EAAE,mBAAmB;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,MAAe,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC;gBACf,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,CAAC,OAAO;gBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,qEAAqE;YACrE,IAAI,GAAG;gBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ interface AssetLike {
2
+ type?: string;
3
+ isLoaded?: boolean;
4
+ text: string;
5
+ parseTree?: {
6
+ walkRules?(cb: (rule: any) => void): void;
7
+ };
8
+ }
9
+ interface RelationLike {
10
+ type: string;
11
+ to: AssetLike;
12
+ media?: string;
13
+ condition?: string;
14
+ conditionalComments?: ReadonlyArray<unknown>;
15
+ }
16
+ interface AssetGraphLike {
17
+ findRelations(query: Record<string, unknown>): RelationLike[];
18
+ }
19
+ interface StylesheetWithPredicates {
20
+ asset: AssetLike;
21
+ text: string;
22
+ predicates: Record<string, boolean>;
23
+ }
24
+ declare function gatherStylesheetsWithPredicates(assetGraph: AssetGraphLike, htmlAsset: AssetLike, relationIndex?: Map<AssetLike, RelationLike[]> | null): StylesheetWithPredicates[];
25
+ export = gatherStylesheetsWithPredicates;
26
+ //# sourceMappingURL=gatherStylesheetsWithPredicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gatherStylesheetsWithPredicates.d.ts","sourceRoot":"","sources":["../src/gatherStylesheetsWithPredicates.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE;QAEV,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;KAC3C,CAAC;CACH;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,UAAU,cAAc;IAGtB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAAC;CAC/D;AAED,UAAU,wBAAwB;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,iBAAS,+BAA+B,CACtC,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,SAAS,EACpB,aAAa,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,IAAI,GACpD,wBAAwB,EAAE,CAmF5B;AAED,SAAS,+BAA+B,CAAC"}
@@ -1,86 +1,77 @@
1
- module.exports = function gatherStylesheetsWithPredicates(
2
- assetGraph,
3
- htmlAsset,
4
- relationIndex
5
- ) {
6
- const visiting = new Set();
7
- const incomingMedia = [];
8
- const conditionalCommentConditionStack = [];
9
- const result = [];
10
- (function traverse(asset, isWithinNotIeConditionalComment, isWithinNoscript) {
11
- if (visiting.has(asset)) {
12
- return;
13
- } else if (!asset.isLoaded) {
14
- return;
15
- }
16
- visiting.add(asset);
17
- // Use pre-built index if available, otherwise fall back to findRelations
18
- const relations = relationIndex
19
- ? relationIndex.get(asset) || []
20
- : assetGraph.findRelations({
21
- from: asset,
22
- type: {
23
- $in: [
24
- 'HtmlStyle',
25
- 'SvgStyle',
26
- 'CssImport',
27
- 'HtmlConditionalComment',
28
- 'HtmlNoscript',
29
- ],
30
- },
31
- });
32
- for (const relation of relations) {
33
- if (relation.type === 'HtmlNoscript') {
34
- traverse(relation.to, isWithinNotIeConditionalComment, true);
35
- } else if (relation.type === 'HtmlConditionalComment') {
36
- conditionalCommentConditionStack.push(relation.condition);
37
- traverse(
38
- relation.to,
39
- isWithinNotIeConditionalComment ||
40
- (relation.conditionalComments &&
41
- relation.conditionalComments.length > 0),
42
- isWithinNoscript
43
- );
44
- conditionalCommentConditionStack.pop();
45
- } else {
46
- const media = relation.media;
47
- if (media) {
48
- incomingMedia.push(media);
1
+ "use strict";
2
+ function gatherStylesheetsWithPredicates(assetGraph, htmlAsset, relationIndex) {
3
+ const visiting = new Set();
4
+ const incomingMedia = [];
5
+ const conditionalCommentConditionStack = [];
6
+ const result = [];
7
+ (function traverse(asset, isWithinNotIeConditionalComment, isWithinNoscript) {
8
+ if (visiting.has(asset)) {
9
+ return;
49
10
  }
50
- traverse(
51
- relation.to,
52
- isWithinNotIeConditionalComment ||
53
- (relation.conditionalComments &&
54
- relation.conditionalComments.length > 0),
55
- isWithinNoscript
56
- );
57
- if (media) {
58
- incomingMedia.pop();
11
+ else if (!asset.isLoaded) {
12
+ return;
59
13
  }
60
- }
61
- }
62
- visiting.delete(asset);
63
- if (asset.type === 'Css') {
64
- const predicates = {};
65
- for (const incomingMedium of incomingMedia) {
66
- predicates[`mediaQuery:${incomingMedium}`] = true;
67
- }
68
- for (const conditionalCommentCondition of conditionalCommentConditionStack) {
69
- predicates[`conditionalComment:${conditionalCommentCondition}`] = true;
70
- }
71
- if (isWithinNoscript) {
72
- predicates.script = false;
73
- }
74
- if (isWithinNotIeConditionalComment) {
75
- predicates['conditionalComment:IE'] = false;
76
- }
77
- result.push({
78
- asset,
79
- text: asset.text,
80
- predicates,
81
- });
82
- }
83
- })(htmlAsset);
84
-
85
- return result;
86
- };
14
+ visiting.add(asset);
15
+ // Use pre-built index if available, otherwise fall back to findRelations
16
+ const relations = relationIndex
17
+ ? relationIndex.get(asset) || []
18
+ : assetGraph.findRelations({
19
+ from: asset,
20
+ type: {
21
+ $in: [
22
+ 'HtmlStyle',
23
+ 'SvgStyle',
24
+ 'CssImport',
25
+ 'HtmlConditionalComment',
26
+ 'HtmlNoscript',
27
+ ],
28
+ },
29
+ });
30
+ for (const relation of relations) {
31
+ if (relation.type === 'HtmlNoscript') {
32
+ traverse(relation.to, isWithinNotIeConditionalComment, true);
33
+ }
34
+ else if (relation.type === 'HtmlConditionalComment') {
35
+ conditionalCommentConditionStack.push(relation.condition ?? '');
36
+ traverse(relation.to, isWithinNotIeConditionalComment ||
37
+ (relation.conditionalComments?.length ?? 0) > 0, isWithinNoscript);
38
+ conditionalCommentConditionStack.pop();
39
+ }
40
+ else {
41
+ const media = relation.media;
42
+ if (media) {
43
+ incomingMedia.push(media);
44
+ }
45
+ traverse(relation.to, isWithinNotIeConditionalComment ||
46
+ (relation.conditionalComments?.length ?? 0) > 0, isWithinNoscript);
47
+ if (media) {
48
+ incomingMedia.pop();
49
+ }
50
+ }
51
+ }
52
+ visiting.delete(asset);
53
+ if (asset.type === 'Css') {
54
+ const predicates = {};
55
+ for (const incomingMedium of incomingMedia) {
56
+ predicates[`mediaQuery:${incomingMedium}`] = true;
57
+ }
58
+ for (const conditionalCommentCondition of conditionalCommentConditionStack) {
59
+ predicates[`conditionalComment:${conditionalCommentCondition}`] = true;
60
+ }
61
+ if (isWithinNoscript) {
62
+ predicates.script = false;
63
+ }
64
+ if (isWithinNotIeConditionalComment) {
65
+ predicates['conditionalComment:IE'] = false;
66
+ }
67
+ result.push({
68
+ asset,
69
+ text: asset.text,
70
+ predicates,
71
+ });
72
+ }
73
+ })(htmlAsset, false, false);
74
+ return result;
75
+ }
76
+ module.exports = gatherStylesheetsWithPredicates;
77
+ //# sourceMappingURL=gatherStylesheetsWithPredicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gatherStylesheetsWithPredicates.js","sourceRoot":"","sources":["../src/gatherStylesheetsWithPredicates.ts"],"names":[],"mappings":";AA8BA,SAAS,+BAA+B,CACtC,UAA0B,EAC1B,SAAoB,EACpB,aAAqD;IAErD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAa,CAAC;IACtC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gCAAgC,GAAa,EAAE,CAAC;IACtD,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,CAAC,SAAS,QAAQ,CAChB,KAAgB,EAChB,+BAAwC,EACxC,gBAAyB;QAEzB,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,yEAAyE;QACzE,MAAM,SAAS,GAAG,aAAa;YAC7B,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAChC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;gBACvB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE;oBACJ,GAAG,EAAE;wBACH,WAAW;wBACX,UAAU;wBACV,WAAW;wBACX,wBAAwB;wBACxB,cAAc;qBACf;iBACF;aACF,CAAC,CAAC;QACP,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,+BAA+B,EAAE,IAAI,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;gBACtD,gCAAgC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAChE,QAAQ,CACN,QAAQ,CAAC,EAAE,EACX,+BAA+B;oBAC7B,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EACjD,gBAAgB,CACjB,CAAC;gBACF,gCAAgC,CAAC,GAAG,EAAE,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC7B,IAAI,KAAK,EAAE,CAAC;oBACV,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;gBACD,QAAQ,CACN,QAAQ,CAAC,EAAE,EACX,+BAA+B;oBAC7B,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EACjD,gBAAgB,CACjB,CAAC;gBACF,IAAI,KAAK,EAAE,CAAC;oBACV,aAAa,CAAC,GAAG,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,KAAK,MAAM,cAAc,IAAI,aAAa,EAAE,CAAC;gBAC3C,UAAU,CAAC,cAAc,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC;YACpD,CAAC;YACD,KAAK,MAAM,2BAA2B,IAAI,gCAAgC,EAAE,CAAC;gBAC3E,UAAU,CAAC,sBAAsB,2BAA2B,EAAE,CAAC,GAAG,IAAI,CAAC;YACzE,CAAC;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;YAC5B,CAAC;YACD,IAAI,+BAA+B,EAAE,CAAC;gBACpC,UAAU,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC;YAC9C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iBAAS,+BAA+B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { AtRule } from 'postcss';
2
+ interface RuleEntry {
3
+ predicates: Record<string, boolean>;
4
+ namespaceURI?: string;
5
+ selector?: string;
6
+ specificityArray: [number, number, number, number] | number[];
7
+ prop: string;
8
+ value: string;
9
+ important: boolean;
10
+ }
11
+ interface CounterStyleEntry {
12
+ name: string;
13
+ predicates: Record<string, boolean>;
14
+ props: Record<string, string>;
15
+ }
16
+ interface KeyframesEntry {
17
+ name: string;
18
+ namespaceURI?: string;
19
+ predicates: Record<string, boolean>;
20
+ node: AtRule;
21
+ }
22
+ interface CssRulesByProperty {
23
+ counterStyles: CounterStyleEntry[];
24
+ keyframes: KeyframesEntry[];
25
+ [property: string]: RuleEntry[] | CounterStyleEntry[] | KeyframesEntry[];
26
+ }
27
+ declare function getCssRulesByProperty(properties: string[], cssSource: string, existingPredicates?: Record<string, boolean>): CssRulesByProperty;
28
+ export = getCssRulesByProperty;
29
+ //# sourceMappingURL=getCssRulesByProperty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCssRulesByProperty.d.ts","sourceRoot":"","sources":["../src/getCssRulesByProperty.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,MAAM,EAEP,MAAM,SAAS,CAAC;AAwBjB,UAAU,SAAS;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,kBAAkB;IAC1B,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,iBAAiB,EAAE,GAAG,cAAc,EAAE,CAAC;CAC1E;AA8CD,iBAAS,qBAAqB,CAC5B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3C,kBAAkB,CA6QpB;AAED,SAAS,qBAAqB,CAAC"}