@zslabs/atomic-css-modules 0.1.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 (56) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/GUIDE.md +32 -0
  3. package/LICENSE +21 -0
  4. package/README.md +121 -0
  5. package/dist/atom-key.d.ts +19 -0
  6. package/dist/atom-key.js +72 -0
  7. package/dist/atom-key.js.map +1 -0
  8. package/dist/atoms.d.ts +8 -0
  9. package/dist/atoms.js +33 -0
  10. package/dist/atoms.js.map +1 -0
  11. package/dist/declaration-utils.d.ts +37 -0
  12. package/dist/declaration-utils.js +99 -0
  13. package/dist/declaration-utils.js.map +1 -0
  14. package/dist/file-scan-cache.d.ts +21 -0
  15. package/dist/file-scan-cache.js +122 -0
  16. package/dist/file-scan-cache.js.map +1 -0
  17. package/dist/hash.d.ts +15 -0
  18. package/dist/hash.js +38 -0
  19. package/dist/hash.js.map +1 -0
  20. package/dist/index.d.ts +9 -0
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/process.d.ts +2 -0
  24. package/dist/process.js +19 -0
  25. package/dist/process.js.map +1 -0
  26. package/dist/registry.d.ts +3 -0
  27. package/dist/registry.js +107 -0
  28. package/dist/registry.js.map +1 -0
  29. package/dist/report.d.ts +7 -0
  30. package/dist/report.js +67 -0
  31. package/dist/report.js.map +1 -0
  32. package/dist/rewrite.d.ts +2 -0
  33. package/dist/rewrite.js +482 -0
  34. package/dist/rewrite.js.map +1 -0
  35. package/dist/rule-context.d.ts +35 -0
  36. package/dist/rule-context.js +86 -0
  37. package/dist/rule-context.js.map +1 -0
  38. package/dist/scan.d.ts +2 -0
  39. package/dist/scan.js +177 -0
  40. package/dist/scan.js.map +1 -0
  41. package/dist/selector-utils.d.ts +34 -0
  42. package/dist/selector-utils.js +156 -0
  43. package/dist/selector-utils.js.map +1 -0
  44. package/dist/shorthand-groups.d.ts +7 -0
  45. package/dist/shorthand-groups.js +85 -0
  46. package/dist/shorthand-groups.js.map +1 -0
  47. package/dist/skip-comment.d.ts +6 -0
  48. package/dist/skip-comment.js +48 -0
  49. package/dist/skip-comment.js.map +1 -0
  50. package/dist/types.d.ts +152 -0
  51. package/dist/types.js +14 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/vite-plugin.d.ts +27 -0
  54. package/dist/vite-plugin.js +231 -0
  55. package/dist/vite-plugin.js.map +1 -0
  56. package/package.json +75 -0
@@ -0,0 +1,482 @@
1
+ import { transform } from 'lightningcss';
2
+ import { composesNames, composesOrigin, flattenDeclarations, isComposesDeclaration, stripNullsDeep, } from './declaration-utils.js';
3
+ import { RuleContextTracker } from './rule-context.js';
4
+ import { classifyEligibleGroup, classifySelector, selectorKey, } from './selector-utils.js';
5
+ import { hasAtomicSkipComment } from './skip-comment.js';
6
+ import { isBareCondition, } from './types.js';
7
+ /**
8
+ * Extra atom hashes that a bare rule should pick up because a rule with the
9
+ * same (unstripped) selector, nested in @media/@container/@supports or
10
+ * nested via `&`, also contributed atomizable declarations in this file.
11
+ */
12
+ function buildCrossRuleAtoms(scanFile) {
13
+ const map = new Map();
14
+ for (const rule of scanFile.rules) {
15
+ if (!rule.eligible || rule.atomHashes.length === 0)
16
+ continue;
17
+ if (isBareCondition(rule.condition) && !rule.nested)
18
+ continue;
19
+ const key = selectorKey(rule.selector);
20
+ const entry = map.get(key) ?? { selector: rule.selector, hashes: [] };
21
+ entry.hashes.push(...rule.atomHashes);
22
+ map.set(key, entry);
23
+ }
24
+ return map;
25
+ }
26
+ function isRegistryComposes(declaration, options) {
27
+ const origin = composesOrigin(declaration);
28
+ if (!origin)
29
+ return false;
30
+ if (options.composeFrom === 'global')
31
+ return origin.kind === 'global';
32
+ return origin.kind === 'file' && origin.path === options.registryImportPath;
33
+ }
34
+ function mergeRegistryComposes(keptNormal, hashes, options) {
35
+ if (hashes.length === 0)
36
+ return null;
37
+ const existingNames = [];
38
+ for (let index = keptNormal.length - 1; index >= 0; index--) {
39
+ const declaration = keptNormal[index];
40
+ if (!declaration || !isRegistryComposes(declaration, options))
41
+ continue;
42
+ existingNames.unshift(...composesNames(declaration));
43
+ keptNormal.splice(index, 1);
44
+ }
45
+ return composesDeclaration([...new Set([...existingNames, ...hashes])], options);
46
+ }
47
+ function composesDeclaration(classNames, options) {
48
+ return {
49
+ property: 'composes',
50
+ value: {
51
+ loc: { line: 1, column: 1 },
52
+ names: [...classNames],
53
+ from: options.composeFrom === 'global'
54
+ ? { type: 'global' }
55
+ : { type: 'file', value: options.registryImportPath },
56
+ },
57
+ };
58
+ }
59
+ function styleRule(loc, selectors, declarations, rules) {
60
+ return {
61
+ type: 'style',
62
+ value: {
63
+ loc,
64
+ selectors,
65
+ declarations,
66
+ ...(rules && rules.length > 0 ? { rules } : {}),
67
+ },
68
+ };
69
+ }
70
+ function locationStub() {
71
+ return { source_index: 0, line: 0, column: 1 };
72
+ }
73
+ function applyDecisions(block, decisions, atoms) {
74
+ const flatDeclarations = flattenDeclarations(block);
75
+ if (decisions.length !== flatDeclarations.length) {
76
+ throw new Error(`Scan plan length ${decisions.length} !== declaration count ${flatDeclarations.length}`);
77
+ }
78
+ const keptNormal = [];
79
+ const keptImportant = [];
80
+ const ownHashes = [];
81
+ for (const [index, flat] of flatDeclarations.entries()) {
82
+ const decision = decisions[index];
83
+ if (!decision)
84
+ continue;
85
+ if (decision.action === 'composes') {
86
+ keptNormal.push(flat.declaration);
87
+ continue;
88
+ }
89
+ if (decision.action === 'keep') {
90
+ ;
91
+ (decision.important ? keptImportant : keptNormal).push(flat.declaration);
92
+ continue;
93
+ }
94
+ const atom = atoms.get(decision.atomKey);
95
+ if (!atom) {
96
+ throw new Error('Rewrite missing scan atom for hoist decision');
97
+ }
98
+ ownHashes.push(atom.hash);
99
+ }
100
+ return { keptNormal, keptImportant, ownHashes };
101
+ }
102
+ function findPlan(scanFile, used, selector, condition, nested) {
103
+ const key = selectorKey(selector);
104
+ const conditionKey = JSON.stringify(condition);
105
+ const index = scanFile.rules.findIndex((rule, ruleIndex) => !used.has(ruleIndex) &&
106
+ rule.eligible &&
107
+ rule.nested === nested &&
108
+ selectorKey(rule.selector) === key &&
109
+ JSON.stringify(rule.condition) === conditionKey);
110
+ if (index < 0)
111
+ return undefined;
112
+ used.add(index);
113
+ return scanFile.rules[index];
114
+ }
115
+ /** Drops @media/@container/@supports blocks whose style rules were fully consumed. */
116
+ function pruneEmptyAtRules(rules) {
117
+ const kept = [];
118
+ for (const rule of rules) {
119
+ if (rule.type === 'media' ||
120
+ rule.type === 'container' ||
121
+ rule.type === 'supports' ||
122
+ rule.type === 'layer-block' ||
123
+ rule.type === 'scope' ||
124
+ rule.type === 'starting-style') {
125
+ rule.value.rules = pruneEmptyAtRules(rule.value.rules);
126
+ if (rule.value.rules.length === 0)
127
+ continue;
128
+ }
129
+ if (rule.type === 'style' && rule.value.rules) {
130
+ rule.value.rules = pruneEmptyAtRules(rule.value.rules);
131
+ if (rule.value.rules.length === 0)
132
+ delete rule.value.rules;
133
+ }
134
+ kept.push(rule);
135
+ }
136
+ return kept;
137
+ }
138
+ /** Clone nested rules onto every compose target so grouped parents share them. */
139
+ function attachNestedRules(composeRules, nestedRules) {
140
+ for (const [index, composeRule] of composeRules.entries()) {
141
+ if (composeRule.type !== 'style')
142
+ continue;
143
+ composeRule.value.rules =
144
+ index === 0 ? nestedRules : stripNullsDeep(nestedRules);
145
+ }
146
+ }
147
+ /**
148
+ * Collapse multiple registry `composes` declarations on one rule into a
149
+ * single declaration (CSS Modules typically allows only one).
150
+ */
151
+ function mergeComposesDeclarations(rules, options) {
152
+ for (const rule of rules) {
153
+ if (rule.type === 'media' ||
154
+ rule.type === 'container' ||
155
+ rule.type === 'supports' ||
156
+ rule.type === 'layer-block' ||
157
+ rule.type === 'scope' ||
158
+ rule.type === 'starting-style') {
159
+ mergeComposesDeclarations(rule.value.rules, options);
160
+ continue;
161
+ }
162
+ if (rule.type !== 'style')
163
+ continue;
164
+ if (rule.value.rules)
165
+ mergeComposesDeclarations(rule.value.rules, options);
166
+ const block = rule.value.declarations;
167
+ const declarations = block?.declarations;
168
+ if (!block || !declarations || declarations.length < 2)
169
+ continue;
170
+ const registryIndexes = [];
171
+ const names = [];
172
+ for (const [index, declaration] of declarations.entries()) {
173
+ if (!isRegistryComposes(declaration, options))
174
+ continue;
175
+ registryIndexes.push(index);
176
+ names.push(...composesNames(declaration));
177
+ }
178
+ if (registryIndexes.length < 2)
179
+ continue;
180
+ const merged = composesDeclaration([...new Set(names)], options);
181
+ const next = declarations.filter((_, index) => !registryIndexes.includes(index));
182
+ const insertAt = registryIndexes[0] ?? next.length;
183
+ next.splice(insertAt, 0, merged);
184
+ block.declarations = next;
185
+ }
186
+ }
187
+ function rewriteFile(file, scanFile, options, atoms) {
188
+ const crossRuleAtoms = buildCrossRuleAtoms(scanFile);
189
+ const composedSelectors = new Set();
190
+ const tracker = new RuleContextTracker();
191
+ const usedPlans = new Set();
192
+ let changed = false;
193
+ const result = transform({
194
+ filename: file.filePath,
195
+ code: Buffer.from(file.code, 'utf8'),
196
+ sourceMap: options.sourceMap === true,
197
+ visitor: {
198
+ Rule(rule) {
199
+ const context = tracker.enter(rule);
200
+ if (!context)
201
+ return undefined;
202
+ if ((rule.type === 'style' || rule.type === 'nested-declarations') &&
203
+ hasAtomicSkipComment(file.code, rule.value.loc)) {
204
+ return undefined;
205
+ }
206
+ if (rule.type === 'nested-declarations') {
207
+ // Scan stores stripped selectors; classify before lookup so
208
+ // `.card:hover` parents match plans keyed as `.card`.
209
+ let plan;
210
+ for (const selector of context.selectors) {
211
+ const classification = classifySelector(selector);
212
+ if (!classification.eligible)
213
+ continue;
214
+ plan = findPlan(scanFile, usedPlans, classification.strippedSelector, context.condition, context.nested);
215
+ if (plan)
216
+ break;
217
+ }
218
+ if (!plan)
219
+ return undefined;
220
+ const { keptNormal, keptImportant, ownHashes } = applyDecisions(rule.value.declarations, plan.decisions, atoms);
221
+ const flatCount = flattenDeclarations(rule.value.declarations).length;
222
+ if (ownHashes.length === 0 &&
223
+ keptNormal.length + keptImportant.length === flatCount) {
224
+ return undefined;
225
+ }
226
+ changed = true;
227
+ if (keptNormal.length === 0 && keptImportant.length === 0) {
228
+ tracker.exit(rule);
229
+ return [];
230
+ }
231
+ return {
232
+ type: 'nested-declarations',
233
+ value: {
234
+ loc: rule.value.loc,
235
+ declarations: {
236
+ declarations: keptNormal,
237
+ importantDeclarations: keptImportant,
238
+ },
239
+ },
240
+ };
241
+ }
242
+ if (rule.type !== 'style')
243
+ return undefined;
244
+ const selectors = rule.value.selectors;
245
+ const classifications = classifyEligibleGroup(selectors.flatMap((selector) => context.resolveAll(selector)));
246
+ if (!classifications)
247
+ return undefined;
248
+ let keptNormal = [];
249
+ let keptImportant = [];
250
+ const composeRules = [];
251
+ let anyHashes = false;
252
+ for (const [index, classification] of classifications.entries()) {
253
+ const plan = findPlan(scanFile, usedPlans, classification.strippedSelector, context.condition, context.nested);
254
+ if (!plan)
255
+ continue;
256
+ const split = applyDecisions(rule.value.declarations, plan.decisions, atoms);
257
+ if (index === 0) {
258
+ keptNormal = split.keptNormal;
259
+ keptImportant = split.keptImportant;
260
+ }
261
+ const composeSelector = classification.strippedSelector;
262
+ const extraHashes = isBareCondition(context.condition)
263
+ ? (crossRuleAtoms.get(selectorKey(composeSelector))?.hashes ?? [])
264
+ : [];
265
+ const composesHashes = [
266
+ ...new Set([...split.ownHashes, ...extraHashes]),
267
+ ];
268
+ if (composesHashes.length > 0)
269
+ anyHashes = true;
270
+ if (!isBareCondition(context.condition) || context.nested)
271
+ continue;
272
+ const atomicComposes = index === 0
273
+ ? mergeRegistryComposes(keptNormal, composesHashes, options)
274
+ : composesHashes.length > 0
275
+ ? composesDeclaration(composesHashes, options)
276
+ : null;
277
+ if (!atomicComposes)
278
+ continue;
279
+ composeRules.push(styleRule(rule.value.loc, [composeSelector], {
280
+ declarations: [atomicComposes],
281
+ }));
282
+ composedSelectors.add(selectorKey(composeSelector));
283
+ }
284
+ const flatCount = flattenDeclarations(rule.value.declarations).length;
285
+ if (!anyHashes &&
286
+ keptNormal.length + keptImportant.length === flatCount) {
287
+ return undefined;
288
+ }
289
+ changed = true;
290
+ const nestedRules = rule.value.rules;
291
+ const keptDeclarations = {
292
+ declarations: keptNormal,
293
+ importantDeclarations: keptImportant,
294
+ };
295
+ const hasKept = keptNormal.length > 0 || keptImportant.length > 0;
296
+ if (!isBareCondition(context.condition) || context.nested) {
297
+ if (hasKept) {
298
+ return styleRule(rule.value.loc, selectors, keptDeclarations, nestedRules);
299
+ }
300
+ if (nestedRules && nestedRules.length > 0) {
301
+ return styleRule(rule.value.loc, selectors, {}, nestedRules);
302
+ }
303
+ tracker.exit(rule);
304
+ return [];
305
+ }
306
+ if (nestedRules && nestedRules.length > 0) {
307
+ attachNestedRules(composeRules, nestedRules);
308
+ }
309
+ if (hasKept) {
310
+ return [
311
+ styleRule(rule.value.loc, selectors, keptDeclarations),
312
+ ...composeRules,
313
+ ];
314
+ }
315
+ return composeRules;
316
+ },
317
+ RuleExit(rule) {
318
+ tracker.exit(rule);
319
+ },
320
+ },
321
+ });
322
+ if (!changed)
323
+ return { filePath: file.filePath, code: file.code, changed: false };
324
+ const rewritten = Buffer.from(result.code).toString('utf8');
325
+ const finalized = finalizeStylesheet(rewritten, file.filePath, {
326
+ crossRuleAtoms,
327
+ composedSelectors,
328
+ options,
329
+ inputSourceMap: encodeSourceMap(result.map),
330
+ });
331
+ const exploded = explodeGroupedComposesText(finalized.code);
332
+ let map = finalized.map;
333
+ // Printer may regroup identical compose-only siblings after the AST split.
334
+ // The text fallback fixes CSS Modules acceptance but the finalize map then
335
+ // describes the pre-split text — rebuild so positions still land in the
336
+ // original file (at the grouped rule), or drop the map if we cannot.
337
+ if (exploded.changed && map && options.sourceMap === true) {
338
+ map = sourceMapForExplodedCss(exploded.code, file.filePath, file.code);
339
+ }
340
+ return {
341
+ filePath: file.filePath,
342
+ code: exploded.code,
343
+ changed,
344
+ ...(map ? { map } : {}),
345
+ };
346
+ }
347
+ function encodeSourceMap(map) {
348
+ if (!map)
349
+ return undefined;
350
+ return Buffer.from(map).toString('utf8');
351
+ }
352
+ /**
353
+ * Fallback when the printer re-groups compose-only siblings after AST split.
354
+ * Returns whether the regex rewrote anything so callers can fix source maps.
355
+ */
356
+ function explodeGroupedComposesText(css) {
357
+ let changed = false;
358
+ const code = css.replace(/(^|\})(\s*)([^{}@]+?)\{((?:\s*composes:[^;]+;)+\s*)\}/g, (full, prefix, space, selectorList, body) => {
359
+ const selectors = selectorList
360
+ .split(',')
361
+ .map((selector) => selector.trim())
362
+ .filter(Boolean);
363
+ if (selectors.length < 2)
364
+ return full;
365
+ changed = true;
366
+ return (prefix +
367
+ selectors.map((selector) => `${space}${selector} {${body}}`).join(''));
368
+ });
369
+ return { code, changed };
370
+ }
371
+ /**
372
+ * After a post-print grouped-compose split, emit a map that still names the
373
+ * original file and points every generated line at the start of the source.
374
+ * Per-selector columns cannot be recovered once the printer merged siblings.
375
+ */
376
+ function sourceMapForExplodedCss(generatedCss, filePath, originalCss) {
377
+ const generatedLineCount = generatedCss.split('\n').length;
378
+ // One VLQ segment per line: generated col 0 → source 0, line 0, col 0.
379
+ // "AAAA" = (0, 0, 0, 0); repeat so every generated line has a mapping.
380
+ const mappings = Array.from({ length: generatedLineCount }, () => 'AAAA').join(';');
381
+ return JSON.stringify({
382
+ version: 3,
383
+ file: filePath,
384
+ sources: [filePath],
385
+ sourcesContent: [originalCss],
386
+ names: [],
387
+ mappings,
388
+ });
389
+ }
390
+ /**
391
+ * Split multi-selector rules that only contain `composes` into one rule per
392
+ * selector. LightningCSS may regroup identical siblings when printing; doing
393
+ * this in the AST keeps source maps honest (unlike a post-print regex).
394
+ */
395
+ function explodeGroupedComposesInAst(rules) {
396
+ const out = [];
397
+ for (const rule of rules) {
398
+ if (rule.type === 'media' ||
399
+ rule.type === 'container' ||
400
+ rule.type === 'supports' ||
401
+ rule.type === 'layer-block' ||
402
+ rule.type === 'scope' ||
403
+ rule.type === 'starting-style') {
404
+ rule.value.rules = explodeGroupedComposesInAst(rule.value.rules);
405
+ out.push(rule);
406
+ continue;
407
+ }
408
+ if (rule.type !== 'style') {
409
+ out.push(rule);
410
+ continue;
411
+ }
412
+ if (rule.value.rules) {
413
+ rule.value.rules = explodeGroupedComposesInAst(rule.value.rules);
414
+ }
415
+ const selectors = rule.value.selectors;
416
+ if (selectors.length < 2) {
417
+ out.push(rule);
418
+ continue;
419
+ }
420
+ const flat = flattenDeclarations(rule.value.declarations);
421
+ if (flat.length === 0 ||
422
+ !flat.every(({ declaration }) => isComposesDeclaration(declaration))) {
423
+ out.push(rule);
424
+ continue;
425
+ }
426
+ for (const selector of selectors) {
427
+ out.push(styleRule(rule.value.loc, [selector], rule.value.declarations ?? {}, rule.value.rules));
428
+ }
429
+ }
430
+ return out;
431
+ }
432
+ function sheetHasImportOrNamespace(rules) {
433
+ for (const rule of rules) {
434
+ if (rule.type === 'import' || rule.type === 'namespace')
435
+ return true;
436
+ }
437
+ return false;
438
+ }
439
+ function finalizeStylesheet(css, filename, extras) {
440
+ const result = transform({
441
+ filename,
442
+ code: Buffer.from(css, 'utf8'),
443
+ sourceMap: extras.options.sourceMap === true,
444
+ ...(extras.inputSourceMap ? { inputSourceMap: extras.inputSourceMap } : {}),
445
+ visitor: {
446
+ StyleSheetExit(sheet) {
447
+ // Only deep-clone when @import/@namespace null optionals would break
448
+ // re-serialize; otherwise mutate in place.
449
+ const target = sheetHasImportOrNamespace(sheet.rules)
450
+ ? stripNullsDeep(sheet)
451
+ : sheet;
452
+ target.rules = pruneEmptyAtRules(target.rules);
453
+ mergeComposesDeclarations(target.rules, extras.options);
454
+ for (const [key, { selector, hashes }] of extras.crossRuleAtoms) {
455
+ if (extras.composedSelectors.has(key) || hashes.length === 0)
456
+ continue;
457
+ target.rules.push(styleRule(locationStub(), [selector], {
458
+ declarations: [
459
+ composesDeclaration([...new Set(hashes)], extras.options),
460
+ ],
461
+ }));
462
+ }
463
+ target.rules = explodeGroupedComposesInAst(target.rules);
464
+ return target;
465
+ },
466
+ },
467
+ });
468
+ return {
469
+ code: Buffer.from(result.code).toString('utf8'),
470
+ map: encodeSourceMap(result.map),
471
+ };
472
+ }
473
+ export function rewriteFiles(files, scanFiles, options, atoms) {
474
+ const scanByPath = new Map(scanFiles.map((scanFile) => [scanFile.filePath, scanFile]));
475
+ return files.map((file) => {
476
+ const scanFile = scanByPath.get(file.filePath);
477
+ if (!scanFile)
478
+ throw new Error(`No scan result found for file: ${file.filePath}`);
479
+ return rewriteFile(file, scanFile, options, atoms);
480
+ });
481
+ }
482
+ //# sourceMappingURL=rewrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewrite.js","sourceRoot":"","sources":["../src/rewrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Tracks which at-rule wrappers a style rule is nested in while walking a
3
+ * lightningcss visitor in document order, and resolves nested selectors
4
+ * (`&:hover`) against their parent style rule.
5
+ */
6
+ import type { Rule, Selector } from 'lightningcss';
7
+ import type { AtomCondition } from './types.js';
8
+ export interface RuleVisitContext {
9
+ condition: AtomCondition;
10
+ /**
11
+ * Resolved selectors for this style rule (every member of a grouped list),
12
+ * or the single nesting parent for nested-declarations.
13
+ */
14
+ selectors: Selector[];
15
+ /** First resolved selector; same as `selectors[0]` when present. */
16
+ selector: Selector;
17
+ /** True when this rule is nested inside another style rule. */
18
+ nested: boolean;
19
+ /** Resolve a selector against the first nesting parent (if any). */
20
+ resolve(selector: Selector): Selector;
21
+ /** Resolve a selector against every nesting parent. */
22
+ resolveAll(selector: Selector): Selector[];
23
+ }
24
+ export declare class RuleContextTracker {
25
+ private readonly wrappers;
26
+ /** Stack of parent selector groups (one entry per enclosing style rule). */
27
+ private readonly selectorGroups;
28
+ /**
29
+ * Call when entering any rule. Returns context for style rules and
30
+ * nested-declarations, or null for every other rule type.
31
+ */
32
+ enter(rule: Rule): RuleVisitContext | null;
33
+ /** Call when exiting any rule (from a `RuleExit` visitor). */
34
+ exit(rule: Rule): void;
35
+ }
@@ -0,0 +1,86 @@
1
+ import { resolveNesting } from './selector-utils.js';
2
+ function wrapperFor(rule) {
3
+ if (rule.type === 'media')
4
+ return { kind: 'media', query: rule.value.query };
5
+ if (rule.type === 'container') {
6
+ return {
7
+ kind: 'container',
8
+ name: rule.value.name ?? null,
9
+ condition: rule.value.condition ?? null,
10
+ };
11
+ }
12
+ if (rule.type === 'supports') {
13
+ return { kind: 'supports', condition: rule.value.condition };
14
+ }
15
+ if (rule.type === 'layer-block') {
16
+ return { kind: 'layer', name: rule.value.name ?? null };
17
+ }
18
+ if (rule.type === 'scope') {
19
+ return {
20
+ kind: 'scope',
21
+ scopeStart: rule.value.scopeStart ?? null,
22
+ scopeEnd: rule.value.scopeEnd ?? null,
23
+ };
24
+ }
25
+ if (rule.type === 'starting-style')
26
+ return { kind: 'starting-style' };
27
+ return null;
28
+ }
29
+ export class RuleContextTracker {
30
+ wrappers = [];
31
+ /** Stack of parent selector groups (one entry per enclosing style rule). */
32
+ selectorGroups = [];
33
+ /**
34
+ * Call when entering any rule. Returns context for style rules and
35
+ * nested-declarations, or null for every other rule type.
36
+ */
37
+ enter(rule) {
38
+ const wrapper = wrapperFor(rule);
39
+ if (wrapper) {
40
+ this.wrappers.push(wrapper);
41
+ return null;
42
+ }
43
+ const condition = [...this.wrappers];
44
+ const parents = this.selectorGroups[this.selectorGroups.length - 1];
45
+ const resolveAll = (selector) => {
46
+ if (!parents || parents.length === 0)
47
+ return [selector];
48
+ return parents.map((parent) => resolveNesting(parent, selector));
49
+ };
50
+ const resolve = (selector) => resolveAll(selector)[0] ?? selector;
51
+ if (rule.type === 'nested-declarations') {
52
+ if (!parents || parents.length === 0)
53
+ return null;
54
+ return {
55
+ condition,
56
+ selectors: parents,
57
+ selector: parents[0] ?? [],
58
+ nested: true,
59
+ resolve,
60
+ resolveAll,
61
+ };
62
+ }
63
+ if (rule.type !== 'style')
64
+ return null;
65
+ const resolved = rule.value.selectors.flatMap((selector) => resolveAll(selector));
66
+ this.selectorGroups.push(resolved);
67
+ return {
68
+ condition,
69
+ selectors: resolved,
70
+ selector: resolved[0] ?? [],
71
+ nested: parents !== undefined,
72
+ resolve,
73
+ resolveAll,
74
+ };
75
+ }
76
+ /** Call when exiting any rule (from a `RuleExit` visitor). */
77
+ exit(rule) {
78
+ if (wrapperFor(rule)) {
79
+ this.wrappers.pop();
80
+ return;
81
+ }
82
+ if (rule.type === 'style')
83
+ this.selectorGroups.pop();
84
+ }
85
+ }
86
+ //# sourceMappingURL=rule-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-context.js","sourceRoot":"","sources":["../src/rule-context.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import type { ProcessOptions, ScanResult, SourceFile } from './types.js';
2
+ export declare function scanFiles(files: readonly SourceFile[], options?: Pick<ProcessOptions, 'debugNames'>): ScanResult;