@animus-ui/extract 0.1.17 → 0.1.19

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 (35) hide show
  1. package/README.md +2 -2
  2. package/crates/extract-v2/animus-extract-v2.darwin-arm64.node +0 -0
  3. package/crates/extract-v2/animus-extract-v2.linux-arm64-gnu.node +0 -0
  4. package/crates/extract-v2/animus-extract-v2.linux-x64-gnu.node +0 -0
  5. package/crates/extract-v2/index.d.ts +5 -0
  6. package/dist/index.cjs +6 -2
  7. package/dist/index.mjs +2 -2
  8. package/dist/pipeline/asset-placeholders.d.ts +19 -0
  9. package/dist/pipeline/asset-placeholders.d.ts.map +1 -1
  10. package/dist/pipeline/engine-retirement.d.ts.map +1 -1
  11. package/dist/pipeline/index.d.ts +3 -3
  12. package/dist/pipeline/index.d.ts.map +1 -1
  13. package/dist/pipeline/manifest-diagnostics.d.ts +32 -1
  14. package/dist/pipeline/manifest-diagnostics.d.ts.map +1 -1
  15. package/dist/pipeline/manifest-schema.d.ts +5 -2
  16. package/dist/pipeline/manifest-schema.d.ts.map +1 -1
  17. package/dist/pipeline/property-diagnostics.d.ts +17 -0
  18. package/dist/pipeline/property-diagnostics.d.ts.map +1 -0
  19. package/dist/pipeline/property-registrations.d.ts +23 -0
  20. package/dist/pipeline/property-registrations.d.ts.map +1 -0
  21. package/dist/pipeline/run-analysis.d.ts +2 -0
  22. package/dist/pipeline/run-analysis.d.ts.map +1 -1
  23. package/dist/pipeline/system-config.d.ts +6 -0
  24. package/dist/pipeline/system-config.d.ts.map +1 -1
  25. package/dist/{pipeline-D7TdVERQ.mjs → pipeline-BuiItKT-.mjs} +393 -31
  26. package/dist/{pipeline-OMz1HGqU.cjs → pipeline-CD2qmEEn.cjs} +420 -34
  27. package/dist/session/extraction-session.d.ts +3 -5
  28. package/dist/session/extraction-session.d.ts.map +1 -1
  29. package/dist/session/timing.d.ts.map +1 -1
  30. package/dist/session.cjs +20 -20
  31. package/dist/session.mjs +20 -20
  32. package/index-v2.js +1 -1
  33. package/package.json +4 -4
  34. package/dist/pipeline/timing-waterfall.d.ts +0 -6
  35. package/dist/pipeline/timing-waterfall.d.ts.map +0 -1
@@ -1186,7 +1186,7 @@ function createV2EngineApi(deps) {
1186
1186
  }
1187
1187
  //#endregion
1188
1188
  //#region pipeline/engine-retirement.ts
1189
- const RETIRED_ENGINE_MESSAGE = "animus: extraction engine 'v1' was retired (openspec: retire-extract-v1) — v2 is the only engine; remove the engine option / ANIMUS_ENGINE override";
1189
+ const RETIRED_ENGINE_MESSAGE = "animus: the 'v1' extraction engine is no longer supported, and v2 is the only engine. Remove the engine option from your Animus config and unset the ANIMUS_ENGINE environment variable.";
1190
1190
  function assertNoRetiredEngineSelection(engineOption) {
1191
1191
  if (engineOption === "v1" || process.env.ANIMUS_ENGINE === "v1") throw new Error(RETIRED_ENGINE_MESSAGE);
1192
1192
  }
@@ -2043,6 +2043,31 @@ function substituteAssetPlaceholders(css, urlBySpecifier) {
2043
2043
  }
2044
2044
  return out;
2045
2045
  }
2046
+ function findSheetAssetSpecifiers(sheets) {
2047
+ return [.../* @__PURE__ */ new Set([
2048
+ ...findAssetSpecifiers(sheets.variableCss),
2049
+ ...findAssetSpecifiers(sheets.globalCss),
2050
+ ...findAssetSpecifiers(sheets.componentCss)
2051
+ ])];
2052
+ }
2053
+ /** The one substitution step every emitted sheet passes through. */
2054
+ function substituteSheetAssets(sheets, urlBySpecifier) {
2055
+ return {
2056
+ variableCss: substituteAssetPlaceholders(sheets.variableCss, urlBySpecifier),
2057
+ globalCss: substituteAssetPlaceholders(sheets.globalCss, urlBySpecifier),
2058
+ componentCss: substituteAssetPlaceholders(sheets.componentCss, urlBySpecifier)
2059
+ };
2060
+ }
2061
+ const UNSUBSTITUTED_ASSET_CODE = "animus.asset.unsubstituted-placeholder";
2062
+ /** A placeholder in emitted CSS is a broken URL in the browser: it fails a
2063
+ * strict build and warns otherwise. */
2064
+ function reportSurvivingAssetPlaceholders(css, report) {
2065
+ const specifiers = findAssetSpecifiers(css);
2066
+ if (specifiers.length === 0) return;
2067
+ const message = `${report.prefix} asset() placeholders reached emitted CSS unsubstituted: ${specifiers.join(", ")} (${UNSUBSTITUTED_ASSET_CODE})`;
2068
+ if (report.strict) throw new Error(message);
2069
+ report.warn(message);
2070
+ }
2046
2071
  //#endregion
2047
2072
  //#region pipeline/resolve-asset.ts
2048
2073
  /**
@@ -2335,14 +2360,35 @@ function unreadableSourceDiagnostic(relPath, error) {
2335
2360
  }
2336
2361
  /** The collision entry code minted by the system package's merge. */
2337
2362
  const VOCABULARY_COLLISION = "animus.vocabulary.collision";
2363
+ /** A theme `@property` registration browsers would ignore; it is not emitted. */
2364
+ const INVALID_PROPERTY_REGISTRATION = "animus.theme.invalid-property-registration";
2338
2365
  /** Minted when a sealed kit with registered vocabulary is consumed through
2339
2366
  * the deprecated `from()`/`includes:` verbs. */
2340
2367
  const VOCABULARY_LEGACY_VERB = "animus.vocabulary.legacy-verb";
2368
+ /** A `var()` fallback that never applies: the property is registered with an
2369
+ * initial value. */
2370
+ const PROPERTY_FALLBACK_SUPPRESSED = "animus.property.fallback-suppressed";
2371
+ /** The same, where the fallback heads a chain of further `var()` reads. */
2372
+ const PROPERTY_FALLBACK_CHAIN_SUPPRESSED = "animus.property.fallback-chain-suppressed";
2373
+ /** A declared property set in keyframes or transitioned without a typed
2374
+ * registration, so it does not interpolate. */
2375
+ const PROPERTY_UNREGISTERED_ANIMATION = "animus.property.unregistered-animation";
2376
+ /** The same, where `allow-discrete` shows interpolation was intended. */
2377
+ const PROPERTY_DISCRETE_ANIMATION = "animus.property.discrete-animation";
2378
+ /** A custom property whose resolved value is `var()` of itself, which makes
2379
+ * it invalid at computed-value time. */
2380
+ const PROPERTY_SELF_REFERENCE = "animus.property.self-reference";
2341
2381
  const DIAGNOSTIC_SEVERITY = /* @__PURE__ */ new Map([
2342
2382
  [SELECTOR_UNSUPPORTED_SUBJECT, "error"],
2343
2383
  [UNREADABLE_SOURCE_FILE, "error"],
2344
2384
  [VOCABULARY_COLLISION, "warn"],
2345
- [VOCABULARY_LEGACY_VERB, "warn"]
2385
+ [VOCABULARY_LEGACY_VERB, "warn"],
2386
+ [INVALID_PROPERTY_REGISTRATION, "error"],
2387
+ [PROPERTY_FALLBACK_SUPPRESSED, "info"],
2388
+ [PROPERTY_FALLBACK_CHAIN_SUPPRESSED, "warn"],
2389
+ [PROPERTY_UNREGISTERED_ANIMATION, "info"],
2390
+ [PROPERTY_DISCRETE_ANIMATION, "warn"],
2391
+ [PROPERTY_SELF_REFERENCE, "warn"]
2346
2392
  ]);
2347
2393
  /** An unlisted code is `warn`: a witness kind from a newer system package
2348
2394
  * must not fail the strict build of a host that predates its writer. */
@@ -2383,6 +2429,19 @@ function vocabularyWitnessDiagnostics(vocabularyWitnessesJson) {
2383
2429
  });
2384
2430
  return diagnostics;
2385
2431
  }
2432
+ /** The diagnostics a loaded system's own records carry: vocabulary
2433
+ * witnesses and invalid `@property` registrations. */
2434
+ function systemLoadDiagnostics(system) {
2435
+ const registrations = (system.invalidPropertyRegistrations ?? []).map(({ name, reason }) => ({
2436
+ file: "system",
2437
+ component: name,
2438
+ kind: "warn",
2439
+ message: `@property ${name} was not emitted: ${reason}. Browsers ignore an invalid registration and minifying it fails; fix it where the theme declares ${name} (${INVALID_PROPERTY_REGISTRATION})`,
2440
+ code: INVALID_PROPERTY_REGISTRATION,
2441
+ severity: severityFor(INVALID_PROPERTY_REGISTRATION)
2442
+ }));
2443
+ return [...vocabularyWitnessDiagnostics(system.vocabularyWitnessesJson), ...registrations];
2444
+ }
2386
2445
  /**
2387
2446
  * The single strict-escalation policy point for both extraction plugins:
2388
2447
  * error-severity diagnostics throw together under `strict`, else warn.
@@ -2394,9 +2453,13 @@ function surfaceManifestDiagnostics(manifest, warn, policy = {}) {
2394
2453
  let line = null;
2395
2454
  if (diagnostic.kind === "bail") line = `⚠ ${diagnostic.component} not extracted: ${diagnostic.message}`;
2396
2455
  else if (diagnostic.kind === "skip") line = `⚠ ${diagnostic.component}: skipped ${diagnostic.message}`;
2397
- else if (diagnostic.kind === "warn") line = `⚠ ${diagnostic.file}: ${diagnostic.component}: ${diagnostic.message}`;
2456
+ else if (diagnostic.kind === "warn") line = `${diagnostic.severity === "info" ? "ℹ" : "⚠"} ${diagnostic.file}: ${diagnostic.component}: ${diagnostic.message}`;
2398
2457
  if (line === null) continue;
2399
2458
  if (diagnostic.code && !diagnostic.message.includes(diagnostic.code)) line += ` [${diagnostic.code}]`;
2459
+ if (diagnostic.severity === "info") {
2460
+ policy.info?.(line);
2461
+ continue;
2462
+ }
2400
2463
  if (policy.strict && diagnostic.severity === "error") {
2401
2464
  errors.push(`${diagnostic.code ?? "error"} — ${diagnostic.component}: ${diagnostic.message}`);
2402
2465
  continue;
@@ -2406,6 +2469,315 @@ function surfaceManifestDiagnostics(manifest, warn, policy = {}) {
2406
2469
  if (errors.length > 0) throw new Error(`[animus] strict: ${errors.length} error diagnostic(s):\n${errors.join("\n")}`);
2407
2470
  }
2408
2471
  //#endregion
2472
+ //#region pipeline/property-registrations.ts
2473
+ const PROPERTY_RULE = /@property\s+(--[\w-]+)\s*\{[^}]*\}\n?/g;
2474
+ /** The data types a registration's `syntax` may name. */
2475
+ const SYNTAX_TYPES = /* @__PURE__ */ new Set([
2476
+ "angle",
2477
+ "color",
2478
+ "custom-ident",
2479
+ "image",
2480
+ "integer",
2481
+ "length",
2482
+ "length-percentage",
2483
+ "number",
2484
+ "percentage",
2485
+ "resolution",
2486
+ "string",
2487
+ "time",
2488
+ "transform-function",
2489
+ "transform-list",
2490
+ "url"
2491
+ ]);
2492
+ const SYNTAX_COMPONENT = /^(?:<([a-z-]+)>[+#]?|-?[a-zA-Z_][\w-]*)$/;
2493
+ /** The syntax types whose values can carry a font- or container-relative
2494
+ * unit, which makes a typed initial value depend on context. */
2495
+ const DIMENSION_TYPES = /* @__PURE__ */ new Set([
2496
+ "image",
2497
+ "length",
2498
+ "length-percentage",
2499
+ "transform-function",
2500
+ "transform-list"
2501
+ ]);
2502
+ const RELATIVE_UNIT = /(?:\d|\.)(?:r?em|r?ex|r?cap|r?ch|r?ic|r?lh|cq(?:w|h|i|b|min|max))\b/i;
2503
+ const SUBSTITUTION = /\b(?:var|env|attr)\(/i;
2504
+ /** Quoted strings and `url()` hold text, never units or substitutions. */
2505
+ const LITERAL_TEXT = /"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|url\([^)]*\)/gi;
2506
+ /**
2507
+ * Removes the `@property` rules browsers would ignore — an unknown syntax
2508
+ * component, a syntax other than `*` without an initial value, an initial
2509
+ * value that depends on context, or one the syntax does not accept.
2510
+ * Minifying a stylesheet that contains such a rule can also fail.
2511
+ */
2512
+ function splitInvalidPropertyRegistrations(css) {
2513
+ const invalid = [];
2514
+ return {
2515
+ css: css.replace(PROPERTY_RULE, (rule, name) => {
2516
+ const reason = registrationFailure(rule);
2517
+ if (reason === null) return rule;
2518
+ invalid.push({
2519
+ name,
2520
+ reason
2521
+ });
2522
+ return "";
2523
+ }),
2524
+ invalid
2525
+ };
2526
+ }
2527
+ /** The registrations in `css`, by custom-property name. */
2528
+ function propertyRegistrations(css) {
2529
+ const registrations = /* @__PURE__ */ new Map();
2530
+ for (const match of css.matchAll(PROPERTY_RULE)) registrations.set(match[1], readRegistration(match[0]));
2531
+ return registrations;
2532
+ }
2533
+ function readRegistration(rule) {
2534
+ return {
2535
+ syntax: /syntax:\s*"([^"]*)"/.exec(rule)?.[1]?.trim() ?? "",
2536
+ initialValue: /initial-value\s*:\s*([^;}]*)/.exec(rule)?.[1]?.trim()
2537
+ };
2538
+ }
2539
+ function registrationFailure(rule) {
2540
+ const { syntax, initialValue } = readRegistration(rule);
2541
+ if (syntax !== "*") {
2542
+ const components = syntax.split("|").map((component) => ({
2543
+ text: component.trim(),
2544
+ match: SYNTAX_COMPONENT.exec(component.trim())
2545
+ }));
2546
+ const unknown = components.find(({ match }) => match === null || match[1] !== void 0 && !SYNTAX_TYPES.has(match[1]));
2547
+ if (unknown !== void 0) return `syntax "${syntax}" has the unknown component "${unknown.text}"`;
2548
+ if (initialValue === void 0) return `syntax "${syntax}" needs an initialValue`;
2549
+ const dimensional = components.some(({ match }) => match?.[1] !== void 0 && DIMENSION_TYPES.has(match[1]));
2550
+ const value = initialValue.replace(LITERAL_TEXT, "");
2551
+ if (SUBSTITUTION.test(value) || dimensional && RELATIVE_UNIT.test(value)) return `initialValue "${initialValue}" depends on context; font- and container-relative units and var(), env() and attr() are not allowed`;
2552
+ }
2553
+ try {
2554
+ (0, lightningcss.transform)({
2555
+ filename: "animus-registrations.css",
2556
+ code: Buffer.from(rule)
2557
+ });
2558
+ return null;
2559
+ } catch (error) {
2560
+ const detail = error instanceof Error ? error.message : String(error);
2561
+ return `the CSS parser rejects \`${rule.trim()}\` (${detail})`;
2562
+ }
2563
+ }
2564
+ //#endregion
2565
+ //#region pipeline/property-diagnostics.ts
2566
+ /**
2567
+ * Reports custom properties that will not behave as their CSS suggests: a
2568
+ * property that refers to itself and, once the system emits an `@property`
2569
+ * rule, a fallback an initial value suppresses and an animated property that
2570
+ * cannot interpolate. The CSS itself is never changed.
2571
+ */
2572
+ function checkCustomProperties(input) {
2573
+ const registered = propertyRegistrations(input.system.variableCss);
2574
+ const declared = declaredProperties(input.system.contextualVarsJson);
2575
+ const findings = [];
2576
+ const sheets = [{
2577
+ css: input.componentCss,
2578
+ owner: componentOwner(input.manifest)
2579
+ }, {
2580
+ css: input.globalCss,
2581
+ owner: globalOwner
2582
+ }];
2583
+ for (const { css, owner } of sheets) {
2584
+ const parsed = declarations(css);
2585
+ const discreteRules = new Set(parsed.filter((d) => d.property === "transition-behavior" && /\ballow-discrete\b/.test(d.value)).map((d) => d.rule));
2586
+ for (const declaration of parsed) {
2587
+ const found = (code, property, message) => findings.push({
2588
+ code,
2589
+ property,
2590
+ message,
2591
+ owner: owner(declaration)
2592
+ });
2593
+ if (isSelfReference(declaration)) {
2594
+ found(PROPERTY_SELF_REFERENCE, declaration.property, `${declaration.property} resolves to var(${declaration.property}), a reference to itself, so it is invalid at computed-value time. Give it a value other than its own name`);
2595
+ continue;
2596
+ }
2597
+ if (registered.size === 0) continue;
2598
+ for (const read of varReads(declaration.value)) {
2599
+ const registration = registered.get(read.name);
2600
+ if (read.fallback === void 0 || registration?.initialValue === void 0) continue;
2601
+ const chain = read.fallback.startsWith("var(");
2602
+ found(chain ? PROPERTY_FALLBACK_CHAIN_SUPPRESSED : PROPERTY_FALLBACK_SUPPRESSED, read.name, chain ? `var(${read.name}, ${read.fallback}) never reads its fallback chain: ${read.name} is registered with initial-value ${registration.initialValue}, which applies whenever it is unset. Remove the initial value or reorder the chain` : `var(${read.name}, ${read.fallback}) never uses its fallback: ${read.name} is registered with initial-value ${registration.initialValue}, which applies whenever it is unset`);
2603
+ }
2604
+ for (const animated of animatedProperties(declaration, discreteRules)) {
2605
+ if (!declared.has(animated.name)) continue;
2606
+ const reason = interpolationGap(registered.get(animated.name));
2607
+ if (reason === null) continue;
2608
+ if (animated.discrete) found(PROPERTY_DISCRETE_ANIMATION, animated.name, `${animated.name} is transitioned with allow-discrete but ${reason}, so it flips at the midpoint instead of interpolating. Register it with a typed syntax`);
2609
+ else found(PROPERTY_UNREGISTERED_ANIMATION, animated.name, `${animated.name} is ${animated.how} but ${reason}, so it changes in one step instead of interpolating. Register it with a typed syntax to animate it`);
2610
+ }
2611
+ }
2612
+ }
2613
+ return toDiagnostics(findings);
2614
+ }
2615
+ function declaredProperties(contextualVarsJson) {
2616
+ if (!contextualVarsJson) return /* @__PURE__ */ new Set();
2617
+ const byScale = parseInternalWire(contextualVarsJson, "contextualVarsJson (the theme's contextual variable names)");
2618
+ return new Set(Object.values(byScale).flatMap((names) => names.map((name) => `--${name}`)));
2619
+ }
2620
+ /** Declarations in engine-emitted CSS: one `property: value` per `;`. */
2621
+ function declarations(css) {
2622
+ const found = [];
2623
+ const stack = [];
2624
+ let rules = 0;
2625
+ let segment = 0;
2626
+ let parens = 0;
2627
+ let quote = null;
2628
+ const take = (end) => {
2629
+ const text = css.slice(segment, end);
2630
+ const colon = text.indexOf(":");
2631
+ const current = stack[stack.length - 1];
2632
+ if (current === void 0 || colon <= 0) return;
2633
+ found.push({
2634
+ property: text.slice(0, colon).trim(),
2635
+ value: text.slice(colon + 1).replace(/;$/, "").trim(),
2636
+ start: segment + (text.length - text.trimStart().length),
2637
+ end,
2638
+ rule: current.rule,
2639
+ context: stack.map((entry) => entry.prelude)
2640
+ });
2641
+ };
2642
+ for (let i = 0; i < css.length; i += 1) {
2643
+ const c = css[i];
2644
+ if (quote !== null) {
2645
+ if (c === "\\") i += 1;
2646
+ else if (c === quote) quote = null;
2647
+ continue;
2648
+ }
2649
+ if (c === "\"" || c === "'") quote = c;
2650
+ else if (c === "(") parens += 1;
2651
+ else if (c === ")") parens -= 1;
2652
+ else if (parens === 0 && c === "{") {
2653
+ stack.push({
2654
+ prelude: css.slice(segment, i).trim(),
2655
+ rule: rules
2656
+ });
2657
+ rules += 1;
2658
+ segment = i + 1;
2659
+ } else if (parens === 0 && c === ";") {
2660
+ take(i + 1);
2661
+ segment = i + 1;
2662
+ } else if (parens === 0 && c === "}") {
2663
+ take(i);
2664
+ stack.pop();
2665
+ segment = i + 1;
2666
+ }
2667
+ }
2668
+ return found;
2669
+ }
2670
+ function isSelfReference(declaration) {
2671
+ return declaration.property.startsWith("--") && declaration.value.replace(/\s+/g, "") === `var(${declaration.property})`;
2672
+ }
2673
+ /** Every `var()` read in `value`, nested fallbacks included. */
2674
+ function varReads(value) {
2675
+ const reads = [];
2676
+ for (const match of value.matchAll(/var\(\s*(--[\w-]+)\s*/g)) {
2677
+ const after = (match.index ?? 0) + match[0].length;
2678
+ if (value[after] !== ",") {
2679
+ reads.push({
2680
+ name: match[1],
2681
+ fallback: void 0
2682
+ });
2683
+ continue;
2684
+ }
2685
+ let depth = 1;
2686
+ let close = after + 1;
2687
+ for (; close < value.length && depth > 0; close += 1) if (value[close] === "(") depth += 1;
2688
+ else if (value[close] === ")") depth -= 1;
2689
+ reads.push({
2690
+ name: match[1],
2691
+ fallback: value.slice(after + 1, close - 1).trim()
2692
+ });
2693
+ }
2694
+ return reads;
2695
+ }
2696
+ /** Custom properties this declaration sets in a keyframe or names in a
2697
+ * transition. */
2698
+ function animatedProperties(declaration, discreteRules) {
2699
+ const keyframes = declaration.context.find((prelude) => prelude.startsWith("@keyframes"));
2700
+ if (keyframes !== void 0 && declaration.property.startsWith("--")) return [{
2701
+ name: declaration.property,
2702
+ how: `set in ${keyframes}`,
2703
+ discrete: false
2704
+ }];
2705
+ if (declaration.property !== "transition" && declaration.property !== "transition-property") return [];
2706
+ return topLevelItems(declaration.value).flatMap((item) => {
2707
+ const property = item.trim().split(/\s+/)[0] ?? "";
2708
+ return property.startsWith("--") ? [{
2709
+ name: property,
2710
+ how: "transitioned",
2711
+ discrete: /\ballow-discrete\b/.test(item) || discreteRules.has(declaration.rule)
2712
+ }] : [];
2713
+ });
2714
+ }
2715
+ function topLevelItems(value) {
2716
+ const items = [];
2717
+ let depth = 0;
2718
+ let start = 0;
2719
+ for (let i = 0; i < value.length; i += 1) if (value[i] === "(") depth += 1;
2720
+ else if (value[i] === ")") depth -= 1;
2721
+ else if (value[i] === "," && depth === 0) {
2722
+ items.push(value.slice(start, i));
2723
+ start = i + 1;
2724
+ }
2725
+ items.push(value.slice(start));
2726
+ return items;
2727
+ }
2728
+ /** Why a property cannot interpolate, or `null` when it can. */
2729
+ function interpolationGap(registration) {
2730
+ if (registration === void 0) return "it is not registered";
2731
+ if (registration.syntax === "*") return "it is registered with the universal syntax \"*\"";
2732
+ return null;
2733
+ }
2734
+ function componentOwner(manifest) {
2735
+ const components = Object.values(manifest.components);
2736
+ return (declaration) => {
2737
+ const selector = [...declaration.context].reverse().find((prelude) => !prelude.startsWith("@"));
2738
+ const classes = (selector ?? "").match(/\.-?[_a-zA-Z][\w-]*/g) ?? [];
2739
+ for (const dotted of classes) {
2740
+ const name = dotted.slice(1);
2741
+ const owner = components.find((component) => name === component.class_name || name.startsWith(`${component.class_name}--`) || component.replacement.includes(`"${name}"`));
2742
+ if (owner) return {
2743
+ file: owner.file,
2744
+ component: owner.binding
2745
+ };
2746
+ }
2747
+ return {
2748
+ file: "styles",
2749
+ component: selector ?? "stylesheet"
2750
+ };
2751
+ };
2752
+ }
2753
+ function globalOwner(declaration) {
2754
+ const keyframes = declaration.context.find((prelude) => prelude.startsWith("@keyframes"));
2755
+ const selector = [...declaration.context].reverse().find((prelude) => !prelude.startsWith("@"));
2756
+ return {
2757
+ file: "system",
2758
+ component: keyframes ?? selector ?? "global styles"
2759
+ };
2760
+ }
2761
+ /** One diagnostic per code, property and owner. */
2762
+ function toDiagnostics(findings) {
2763
+ const seen = /* @__PURE__ */ new Set();
2764
+ const diagnostics = [];
2765
+ for (const finding of findings) {
2766
+ const key = `${finding.code}|${finding.property}|${finding.owner.file}|${finding.owner.component}`;
2767
+ if (seen.has(key)) continue;
2768
+ seen.add(key);
2769
+ diagnostics.push({
2770
+ file: finding.owner.file,
2771
+ component: finding.owner.component,
2772
+ kind: "warn",
2773
+ message: `${finding.message} (${finding.code})`,
2774
+ code: finding.code,
2775
+ severity: severityFor(finding.code)
2776
+ });
2777
+ }
2778
+ return diagnostics;
2779
+ }
2780
+ //#endregion
2409
2781
  //#region pipeline/unit-fallback.ts
2410
2782
  /** A digit run after one of these continues a word (`#b1b1b7`, `ss01`,
2411
2783
  * `U+0025`), so it is not a bare number. The extractor predicts this pass
@@ -2502,9 +2874,21 @@ function runProjectAnalysis(engineApi, opts) {
2502
2874
  const extractMs = Math.round(performance.now() - t);
2503
2875
  t = performance.now();
2504
2876
  const manifest = JSON.parse(manifestJson);
2877
+ const propertyDiagnostics = checkCustomProperties({
2878
+ system: opts.system,
2879
+ manifest,
2880
+ componentCss: applyUnitFallback(manifest.css),
2881
+ globalCss: manifest.sheets.global
2882
+ });
2505
2883
  surfaceManifestDiagnostics(manifest, opts.warn, {
2506
2884
  strict: opts.strict,
2507
- prepend: [...collectSelectorAliasDiagnostics(opts.system.selectorAliasesJson), ...opts.extraDiagnostics ?? []]
2885
+ info: opts.info,
2886
+ prepend: [
2887
+ ...collectSelectorAliasDiagnostics(opts.system.selectorAliasesJson),
2888
+ ...systemLoadDiagnostics(opts.system),
2889
+ ...propertyDiagnostics,
2890
+ ...opts.extraDiagnostics ?? []
2891
+ ]
2508
2892
  });
2509
2893
  const parseMs = Math.round(performance.now() - t);
2510
2894
  return {
@@ -2607,7 +2991,8 @@ function loadSystemConfig(engineApi, opts) {
2607
2991
  const config = loadSystemModule(opts.systemPath, opts.rootDir);
2608
2992
  let scalesJson = config.scalesJson;
2609
2993
  let variableMapJson = config.variableMapJson;
2610
- let variableCss = config.variableCss;
2994
+ const registrations = splitInvalidPropertyRegistrations(config.variableCss);
2995
+ let variableCss = registrations.css;
2611
2996
  let contextualVarsJson = config.contextualVarsJson || null;
2612
2997
  let declarationScalesJson = config.declarationScalesJson || null;
2613
2998
  if (opts.prefix) {
@@ -2636,6 +3021,8 @@ function loadSystemConfig(engineApi, opts) {
2636
3021
  sourceThemeManifestsJson: config.sourceThemeManifests || null
2637
3022
  };
2638
3023
  if (declarationScalesJson) system.declarationScalesJson = declarationScalesJson;
3024
+ if (config.propertyRecordsJson) system.propertyRecordsJson = config.propertyRecordsJson;
3025
+ if (registrations.invalid.length > 0) system.invalidPropertyRegistrations = registrations.invalid;
2639
3026
  return system;
2640
3027
  }
2641
3028
  //#endregion
@@ -2719,31 +3106,6 @@ function buildSystemPropsModule(opts) {
2719
3106
  return `export const systemPropMap = ${opts.systemPropMapJson};\nexport const systemPropGroups = ${opts.groupRegistryJson};\nexport const dynamicPropConfig = ${JSON.stringify(dynamicPropConfig)};\nexport const transforms = ${transformsSource(opts.admittedTransforms)};\n` + (opts.typedSystemProps.length > 0 ? `export const typedSystemProps = ${JSON.stringify(opts.typedSystemProps)};\n` : "");
2720
3107
  }
2721
3108
  //#endregion
2722
- //#region pipeline/timing-waterfall.ts
2723
- const RUST_TIMING_PHASES = [
2724
- ["parseAndWalk", "parse+walk"],
2725
- ["importResolution", "imports"],
2726
- ["extensionProvenance", "provenance"],
2727
- ["topologicalSort", "topo-sort"],
2728
- ["chainEvaluation", "chains"],
2729
- ["jsxScanning", "jsx-scan"],
2730
- ["systemPropAggregation", "sys-props"],
2731
- ["usageLedger", "usage"],
2732
- ["reconciliation", "reconcile"],
2733
- ["cssGeneration", "css-gen"],
2734
- ["manifestSerialization", "serialize"]
2735
- ];
2736
- function formatRustTimingWaterfall(timing, opts) {
2737
- const lines = [];
2738
- for (const [key, label] of RUST_TIMING_PHASES) {
2739
- const ms = timing[key] ?? 0;
2740
- const pad = " ".repeat(Math.max(0, opts.labelWidth - label.length));
2741
- const extra = key === "parseAndWalk" ? ` (${timing.fileCount ?? 0} files, ${timing.cacheHits ?? 0} cached)` : "";
2742
- lines.push(`${opts.indent}${label}${pad}${String(ms).padStart(5)}ms${extra}`);
2743
- }
2744
- return lines;
2745
- }
2746
- //#endregion
2747
3109
  //#region pipeline/tsconfig-paths.ts
2748
3110
  /**
2749
3111
  * tsconfig `paths` → alias pairs, for drivers with no live bundler config.
@@ -3052,6 +3414,12 @@ Object.defineProperty(exports, "ENGINE_TRANSFORM_EXTENSIONS", {
3052
3414
  return ENGINE_TRANSFORM_EXTENSIONS;
3053
3415
  }
3054
3416
  });
3417
+ Object.defineProperty(exports, "INVALID_PROPERTY_REGISTRATION", {
3418
+ enumerable: true,
3419
+ get: function() {
3420
+ return INVALID_PROPERTY_REGISTRATION;
3421
+ }
3422
+ });
3055
3423
  Object.defineProperty(exports, "REPLACEABLE_DEFAULT_EXCLUDE", {
3056
3424
  enumerable: true,
3057
3425
  get: function() {
@@ -3250,16 +3618,16 @@ Object.defineProperty(exports, "findPackageRoot", {
3250
3618
  return findPackageRoot;
3251
3619
  }
3252
3620
  });
3253
- Object.defineProperty(exports, "firstOwners", {
3621
+ Object.defineProperty(exports, "findSheetAssetSpecifiers", {
3254
3622
  enumerable: true,
3255
3623
  get: function() {
3256
- return firstOwners;
3624
+ return findSheetAssetSpecifiers;
3257
3625
  }
3258
3626
  });
3259
- Object.defineProperty(exports, "formatRustTimingWaterfall", {
3627
+ Object.defineProperty(exports, "firstOwners", {
3260
3628
  enumerable: true,
3261
3629
  get: function() {
3262
- return formatRustTimingWaterfall;
3630
+ return firstOwners;
3263
3631
  }
3264
3632
  });
3265
3633
  Object.defineProperty(exports, "hashReplacementPlans", {
@@ -3340,6 +3708,12 @@ Object.defineProperty(exports, "readTsconfigAliasPairs", {
3340
3708
  return readTsconfigAliasPairs;
3341
3709
  }
3342
3710
  });
3711
+ Object.defineProperty(exports, "reportSurvivingAssetPlaceholders", {
3712
+ enumerable: true,
3713
+ get: function() {
3714
+ return reportSurvivingAssetPlaceholders;
3715
+ }
3716
+ });
3343
3717
  Object.defineProperty(exports, "resolveAbsolutePathSpecifier", {
3344
3718
  enumerable: true,
3345
3719
  get: function() {
@@ -3430,12 +3804,24 @@ Object.defineProperty(exports, "substituteAssetPlaceholders", {
3430
3804
  return substituteAssetPlaceholders;
3431
3805
  }
3432
3806
  });
3807
+ Object.defineProperty(exports, "substituteSheetAssets", {
3808
+ enumerable: true,
3809
+ get: function() {
3810
+ return substituteSheetAssets;
3811
+ }
3812
+ });
3433
3813
  Object.defineProperty(exports, "surfaceManifestDiagnostics", {
3434
3814
  enumerable: true,
3435
3815
  get: function() {
3436
3816
  return surfaceManifestDiagnostics;
3437
3817
  }
3438
3818
  });
3819
+ Object.defineProperty(exports, "systemLoadDiagnostics", {
3820
+ enumerable: true,
3821
+ get: function() {
3822
+ return systemLoadDiagnostics;
3823
+ }
3824
+ });
3439
3825
  Object.defineProperty(exports, "toWatchKeys", {
3440
3826
  enumerable: true,
3441
3827
  get: function() {
@@ -64,9 +64,6 @@ export declare class ExtractionSession {
64
64
  private readonly options;
65
65
  private readonly staticCssJson;
66
66
  private system;
67
- /** Vocabulary witness diagnostics from the sealed system's registration
68
- * record, awaiting the shared surfacing pass. */
69
- private systemVocabularyDiagnostics;
70
67
  /** Configured external files that could not be read. Incremental passes
71
68
  * re-collect nothing, so they replay these instead of passing strict. */
72
69
  private ingestionFailureDiagnostics;
@@ -238,8 +235,9 @@ export declare class ExtractionSession {
238
235
  /** Write one artifact write-then-rename, so a cross-process reader never
239
236
  * sees a torn file; the tmp name carries the pid to keep writers apart. */
240
237
  private writeSessionArtifact;
241
- /** Copy each asset() specifier's bytes into `assets/` under a
242
- * content-hashed name and substitute a url relative to styles.css. */
238
+ /** Copy each asset() specifier's bytes, from every sheet, into `assets/`
239
+ * under a content-hashed name and substitute a url relative to
240
+ * styles.css. */
243
241
  private substituteAssetReferences;
244
242
  private trackAssetDependency;
245
243
  /** Resolve an asset specifier through the shared resolver, with one
@@ -1 +1 @@
1
- {"version":3,"file":"extraction-session.d.ts","sourceRoot":"","sources":["../../session/extraction-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extraction-session.d.ts","sourceRoot":"","sources":["../../session/extraction-session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../session/timing.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,OAAO,EAAE,OAAO,GACf,IAAI,CAkDN"}
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../session/timing.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,OAAO,EAAE,OAAO,GACf,IAAI,CAyCN"}