@animus-ui/extract 0.1.18 → 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 +4 -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 +2 -2
  12. package/dist/pipeline/index.d.ts.map +1 -1
  13. package/dist/pipeline/manifest-diagnostics.d.ts +26 -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 +7 -0
  20. package/dist/pipeline/property-registrations.d.ts.map +1 -1
  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 +3 -0
  24. package/dist/pipeline/system-config.d.ts.map +1 -1
  25. package/dist/{pipeline-Dr-I4Xhl.mjs → pipeline-BuiItKT-.mjs} +369 -111
  26. package/dist/{pipeline-OKnmnyFu.cjs → pipeline-CD2qmEEn.cjs} +384 -114
  27. package/dist/session/extraction-session.d.ts +3 -2
  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 +19 -14
  31. package/dist/session.mjs +19 -14
  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
  /**
@@ -2340,12 +2365,30 @@ const INVALID_PROPERTY_REGISTRATION = "animus.theme.invalid-property-registratio
2340
2365
  /** Minted when a sealed kit with registered vocabulary is consumed through
2341
2366
  * the deprecated `from()`/`includes:` verbs. */
2342
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";
2343
2381
  const DIAGNOSTIC_SEVERITY = /* @__PURE__ */ new Map([
2344
2382
  [SELECTOR_UNSUPPORTED_SUBJECT, "error"],
2345
2383
  [UNREADABLE_SOURCE_FILE, "error"],
2346
2384
  [VOCABULARY_COLLISION, "warn"],
2347
2385
  [VOCABULARY_LEGACY_VERB, "warn"],
2348
- [INVALID_PROPERTY_REGISTRATION, "error"]
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"]
2349
2392
  ]);
2350
2393
  /** An unlisted code is `warn`: a witness kind from a newer system package
2351
2394
  * must not fail the strict build of a host that predates its writer. */
@@ -2410,9 +2453,13 @@ function surfaceManifestDiagnostics(manifest, warn, policy = {}) {
2410
2453
  let line = null;
2411
2454
  if (diagnostic.kind === "bail") line = `⚠ ${diagnostic.component} not extracted: ${diagnostic.message}`;
2412
2455
  else if (diagnostic.kind === "skip") line = `⚠ ${diagnostic.component}: skipped ${diagnostic.message}`;
2413
- 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}`;
2414
2457
  if (line === null) continue;
2415
2458
  if (diagnostic.code && !diagnostic.message.includes(diagnostic.code)) line += ` [${diagnostic.code}]`;
2459
+ if (diagnostic.severity === "info") {
2460
+ policy.info?.(line);
2461
+ continue;
2462
+ }
2416
2463
  if (policy.strict && diagnostic.severity === "error") {
2417
2464
  errors.push(`${diagnostic.code ?? "error"} — ${diagnostic.component}: ${diagnostic.message}`);
2418
2465
  continue;
@@ -2422,6 +2469,315 @@ function surfaceManifestDiagnostics(manifest, warn, policy = {}) {
2422
2469
  if (errors.length > 0) throw new Error(`[animus] strict: ${errors.length} error diagnostic(s):\n${errors.join("\n")}`);
2423
2470
  }
2424
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
2425
2781
  //#region pipeline/unit-fallback.ts
2426
2782
  /** A digit run after one of these continues a word (`#b1b1b7`, `ss01`,
2427
2783
  * `U+0025`), so it is not a bare number. The extractor predicts this pass
@@ -2518,11 +2874,19 @@ function runProjectAnalysis(engineApi, opts) {
2518
2874
  const extractMs = Math.round(performance.now() - t);
2519
2875
  t = performance.now();
2520
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
+ });
2521
2883
  surfaceManifestDiagnostics(manifest, opts.warn, {
2522
2884
  strict: opts.strict,
2885
+ info: opts.info,
2523
2886
  prepend: [
2524
2887
  ...collectSelectorAliasDiagnostics(opts.system.selectorAliasesJson),
2525
2888
  ...systemLoadDiagnostics(opts.system),
2889
+ ...propertyDiagnostics,
2526
2890
  ...opts.extraDiagnostics ?? []
2527
2891
  ]
2528
2892
  });
@@ -2617,88 +2981,6 @@ function applyPrefix(prefix, variableMapJson, variableCss, themeJson, contextual
2617
2981
  return result;
2618
2982
  }
2619
2983
  //#endregion
2620
- //#region pipeline/property-registrations.ts
2621
- const PROPERTY_RULE = /@property\s+(--[\w-]+)\s*\{[^}]*\}\n?/g;
2622
- /** The data types a registration's `syntax` may name. */
2623
- const SYNTAX_TYPES = /* @__PURE__ */ new Set([
2624
- "angle",
2625
- "color",
2626
- "custom-ident",
2627
- "image",
2628
- "integer",
2629
- "length",
2630
- "length-percentage",
2631
- "number",
2632
- "percentage",
2633
- "resolution",
2634
- "string",
2635
- "time",
2636
- "transform-function",
2637
- "transform-list",
2638
- "url"
2639
- ]);
2640
- const SYNTAX_COMPONENT = /^(?:<([a-z-]+)>[+#]?|-?[a-zA-Z_][\w-]*)$/;
2641
- /** The syntax types whose values can carry a font- or container-relative
2642
- * unit, which makes a typed initial value depend on context. */
2643
- const DIMENSION_TYPES = /* @__PURE__ */ new Set([
2644
- "image",
2645
- "length",
2646
- "length-percentage",
2647
- "transform-function",
2648
- "transform-list"
2649
- ]);
2650
- 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;
2651
- const SUBSTITUTION = /\b(?:var|env|attr)\(/i;
2652
- /** Quoted strings and `url()` hold text, never units or substitutions. */
2653
- const LITERAL_TEXT = /"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|url\([^)]*\)/gi;
2654
- /**
2655
- * Removes the `@property` rules browsers would ignore — an unknown syntax
2656
- * component, a syntax other than `*` without an initial value, an initial
2657
- * value that depends on context, or one the syntax does not accept.
2658
- * Minifying a stylesheet that contains such a rule can also fail.
2659
- */
2660
- function splitInvalidPropertyRegistrations(css) {
2661
- const invalid = [];
2662
- return {
2663
- css: css.replace(PROPERTY_RULE, (rule, name) => {
2664
- const reason = registrationFailure(rule);
2665
- if (reason === null) return rule;
2666
- invalid.push({
2667
- name,
2668
- reason
2669
- });
2670
- return "";
2671
- }),
2672
- invalid
2673
- };
2674
- }
2675
- function registrationFailure(rule) {
2676
- const syntax = /syntax:\s*"([^"]*)"/.exec(rule)?.[1]?.trim() ?? "";
2677
- const initialValue = /initial-value\s*:\s*([^;}]*)/.exec(rule)?.[1]?.trim();
2678
- if (syntax !== "*") {
2679
- const components = syntax.split("|").map((component) => ({
2680
- text: component.trim(),
2681
- match: SYNTAX_COMPONENT.exec(component.trim())
2682
- }));
2683
- const unknown = components.find(({ match }) => match === null || match[1] !== void 0 && !SYNTAX_TYPES.has(match[1]));
2684
- if (unknown !== void 0) return `syntax "${syntax}" has the unknown component "${unknown.text}"`;
2685
- if (initialValue === void 0) return `syntax "${syntax}" needs an initialValue`;
2686
- const dimensional = components.some(({ match }) => match?.[1] !== void 0 && DIMENSION_TYPES.has(match[1]));
2687
- const value = initialValue.replace(LITERAL_TEXT, "");
2688
- 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`;
2689
- }
2690
- try {
2691
- (0, lightningcss.transform)({
2692
- filename: "animus-registrations.css",
2693
- code: Buffer.from(rule)
2694
- });
2695
- return null;
2696
- } catch (error) {
2697
- const detail = error instanceof Error ? error.message : String(error);
2698
- return `the CSS parser rejects \`${rule.trim()}\` (${detail})`;
2699
- }
2700
- }
2701
- //#endregion
2702
2984
  //#region pipeline/system-config.ts
2703
2985
  /**
2704
2986
  * Load and normalize a SystemInstance; `prefix` namespaces every CSS
@@ -2739,6 +3021,7 @@ function loadSystemConfig(engineApi, opts) {
2739
3021
  sourceThemeManifestsJson: config.sourceThemeManifests || null
2740
3022
  };
2741
3023
  if (declarationScalesJson) system.declarationScalesJson = declarationScalesJson;
3024
+ if (config.propertyRecordsJson) system.propertyRecordsJson = config.propertyRecordsJson;
2742
3025
  if (registrations.invalid.length > 0) system.invalidPropertyRegistrations = registrations.invalid;
2743
3026
  return system;
2744
3027
  }
@@ -2823,31 +3106,6 @@ function buildSystemPropsModule(opts) {
2823
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` : "");
2824
3107
  }
2825
3108
  //#endregion
2826
- //#region pipeline/timing-waterfall.ts
2827
- const RUST_TIMING_PHASES = [
2828
- ["parseAndWalk", "parse+walk"],
2829
- ["importResolution", "imports"],
2830
- ["extensionProvenance", "provenance"],
2831
- ["topologicalSort", "topo-sort"],
2832
- ["chainEvaluation", "chains"],
2833
- ["jsxScanning", "jsx-scan"],
2834
- ["systemPropAggregation", "sys-props"],
2835
- ["usageLedger", "usage"],
2836
- ["reconciliation", "reconcile"],
2837
- ["cssGeneration", "css-gen"],
2838
- ["manifestSerialization", "serialize"]
2839
- ];
2840
- function formatRustTimingWaterfall(timing, opts) {
2841
- const lines = [];
2842
- for (const [key, label] of RUST_TIMING_PHASES) {
2843
- const ms = timing[key] ?? 0;
2844
- const pad = " ".repeat(Math.max(0, opts.labelWidth - label.length));
2845
- const extra = key === "parseAndWalk" ? ` (${timing.fileCount ?? 0} files, ${timing.cacheHits ?? 0} cached)` : "";
2846
- lines.push(`${opts.indent}${label}${pad}${String(ms).padStart(5)}ms${extra}`);
2847
- }
2848
- return lines;
2849
- }
2850
- //#endregion
2851
3109
  //#region pipeline/tsconfig-paths.ts
2852
3110
  /**
2853
3111
  * tsconfig `paths` → alias pairs, for drivers with no live bundler config.
@@ -3360,16 +3618,16 @@ Object.defineProperty(exports, "findPackageRoot", {
3360
3618
  return findPackageRoot;
3361
3619
  }
3362
3620
  });
3363
- Object.defineProperty(exports, "firstOwners", {
3621
+ Object.defineProperty(exports, "findSheetAssetSpecifiers", {
3364
3622
  enumerable: true,
3365
3623
  get: function() {
3366
- return firstOwners;
3624
+ return findSheetAssetSpecifiers;
3367
3625
  }
3368
3626
  });
3369
- Object.defineProperty(exports, "formatRustTimingWaterfall", {
3627
+ Object.defineProperty(exports, "firstOwners", {
3370
3628
  enumerable: true,
3371
3629
  get: function() {
3372
- return formatRustTimingWaterfall;
3630
+ return firstOwners;
3373
3631
  }
3374
3632
  });
3375
3633
  Object.defineProperty(exports, "hashReplacementPlans", {
@@ -3450,6 +3708,12 @@ Object.defineProperty(exports, "readTsconfigAliasPairs", {
3450
3708
  return readTsconfigAliasPairs;
3451
3709
  }
3452
3710
  });
3711
+ Object.defineProperty(exports, "reportSurvivingAssetPlaceholders", {
3712
+ enumerable: true,
3713
+ get: function() {
3714
+ return reportSurvivingAssetPlaceholders;
3715
+ }
3716
+ });
3453
3717
  Object.defineProperty(exports, "resolveAbsolutePathSpecifier", {
3454
3718
  enumerable: true,
3455
3719
  get: function() {
@@ -3540,6 +3804,12 @@ Object.defineProperty(exports, "substituteAssetPlaceholders", {
3540
3804
  return substituteAssetPlaceholders;
3541
3805
  }
3542
3806
  });
3807
+ Object.defineProperty(exports, "substituteSheetAssets", {
3808
+ enumerable: true,
3809
+ get: function() {
3810
+ return substituteSheetAssets;
3811
+ }
3812
+ });
3543
3813
  Object.defineProperty(exports, "surfaceManifestDiagnostics", {
3544
3814
  enumerable: true,
3545
3815
  get: function() {
@@ -235,8 +235,9 @@ export declare class ExtractionSession {
235
235
  /** Write one artifact write-then-rename, so a cross-process reader never
236
236
  * sees a torn file; the tmp name carries the pid to keep writers apart. */
237
237
  private writeSessionArtifact;
238
- /** Copy each asset() specifier's bytes into `assets/` under a
239
- * 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. */
240
241
  private substituteAssetReferences;
241
242
  private trackAssetDependency;
242
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"}