@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.
- package/README.md +2 -2
- package/crates/extract-v2/animus-extract-v2.darwin-arm64.node +0 -0
- package/crates/extract-v2/animus-extract-v2.linux-arm64-gnu.node +0 -0
- package/crates/extract-v2/animus-extract-v2.linux-x64-gnu.node +0 -0
- package/crates/extract-v2/index.d.ts +5 -0
- package/dist/index.cjs +4 -2
- package/dist/index.mjs +2 -2
- package/dist/pipeline/asset-placeholders.d.ts +19 -0
- package/dist/pipeline/asset-placeholders.d.ts.map +1 -1
- package/dist/pipeline/engine-retirement.d.ts.map +1 -1
- package/dist/pipeline/index.d.ts +2 -2
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/manifest-diagnostics.d.ts +26 -1
- package/dist/pipeline/manifest-diagnostics.d.ts.map +1 -1
- package/dist/pipeline/manifest-schema.d.ts +5 -2
- package/dist/pipeline/manifest-schema.d.ts.map +1 -1
- package/dist/pipeline/property-diagnostics.d.ts +17 -0
- package/dist/pipeline/property-diagnostics.d.ts.map +1 -0
- package/dist/pipeline/property-registrations.d.ts +7 -0
- package/dist/pipeline/property-registrations.d.ts.map +1 -1
- package/dist/pipeline/run-analysis.d.ts +2 -0
- package/dist/pipeline/run-analysis.d.ts.map +1 -1
- package/dist/pipeline/system-config.d.ts +3 -0
- package/dist/pipeline/system-config.d.ts.map +1 -1
- package/dist/{pipeline-Dr-I4Xhl.mjs → pipeline-BuiItKT-.mjs} +369 -111
- package/dist/{pipeline-OKnmnyFu.cjs → pipeline-CD2qmEEn.cjs} +384 -114
- package/dist/session/extraction-session.d.ts +3 -2
- package/dist/session/extraction-session.d.ts.map +1 -1
- package/dist/session/timing.d.ts.map +1 -1
- package/dist/session.cjs +19 -14
- package/dist/session.mjs +19 -14
- package/index-v2.js +1 -1
- package/package.json +4 -4
- package/dist/pipeline/timing-waterfall.d.ts +0 -6
- 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:
|
|
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 =
|
|
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, "
|
|
3621
|
+
Object.defineProperty(exports, "findSheetAssetSpecifiers", {
|
|
3364
3622
|
enumerable: true,
|
|
3365
3623
|
get: function() {
|
|
3366
|
-
return
|
|
3624
|
+
return findSheetAssetSpecifiers;
|
|
3367
3625
|
}
|
|
3368
3626
|
});
|
|
3369
|
-
Object.defineProperty(exports, "
|
|
3627
|
+
Object.defineProperty(exports, "firstOwners", {
|
|
3370
3628
|
enumerable: true,
|
|
3371
3629
|
get: function() {
|
|
3372
|
-
return
|
|
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/`
|
|
239
|
-
* content-hashed name and substitute a url relative to
|
|
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":"
|
|
1
|
+
{"version":3,"file":"extraction-session.d.ts","sourceRoot":"","sources":["../../session/extraction-session.ts"],"names":[],"mappings":"AAwGA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EAIV,YAAY,EAIb,MAAM,mBAAmB,CAAC;AAW3B;gFACgF;AAChF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAc5C,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAkCD;6EAC6E;AAC7E,qBAAa,iBAAiB;IAC5B,kDAAkD;IAClD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC9B,6EAA6E;IAC7E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAItC,OAAO,CAAC,cAAc,CASlB;IACJ,6DAA6D;IAC7D,oBAAoB,cAAqB;IACzC,OAAO,CAAC,mBAAmB,CAAqB;IAChD;+EAC2E;IAC3E,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC1C;gFAC4E;IAC5E,qBAAqB,UAAS;IAE9B,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,EAAE,CAAM;IACnC,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB,CAA8B;IACvD,4EAA4E;IAC5E,OAAO,CAAC,kBAAkB,CAA8B;IACxD,+DAA+D;IAC/D,qBAAqB,sBAA6B;IAClD;6EACyE;IACzE,OAAO,CAAC,cAAc,CAA+B;IACrD;qEACiE;IACjE,kBAAkB,2BAAkC;IACpD;8EAC0E;IAC1E,OAAO,CAAC,sBAAsB,CAA0C;IACxE;sEACkE;IAClE,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAClC;8EAC0E;IAC1E,OAAO,CAAC,iBAAiB,CAGrB;IACJ;uCACmC;IACnC,QAAQ,CAAC,iBAAiB,sBAA6B;IACvD;iFAC6E;IAC7E,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CACxD;IACnB;8EAC0E;IAC1E,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACxE,wBAAwB,EAAE,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC7E;iEAC6D;IAC7D,cAAc,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,MAAM,CAA6B;IAC3C;8EAC0E;IAC1E,OAAO,CAAC,2BAA2B,CAA4B;IAC/D;iFAC6E;IAC7E,OAAO,CAAC,cAAc,CAA8B;IAIpD,OAAO,CAAC,SAAS,CAAuD;IAExE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAK1B;IAIH,OAAO,CAAC,oBAAoB,CAA0B;IAEtD,uEAAuE;IACvE,qBAAqB,EAAE,MAAM,EAAE,CAAM;IAIrC,OAAO,CAAC,sBAAsB,CAAkC;IAChE,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,eAAe,CAIrB;IACF;+EAC2E;IAC3E,OAAO,CAAC,UAAU,CAA+B;IACjD;6EACyE;IACzE,OAAO,CAAC,uBAAuB,CAA6B;IAC5D;qEACiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAA2B;IACrD;uEACmE;IACnE,OAAO,CAAC,cAAc,CAAuB;IAC7C,yDAAyD;IACzD,iBAAiB,SAA6B;IAC9C;yEACqE;IACrE,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACzE,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC;;8DAE0D;IAC1D,OAAO,CAAC,aAAa,CAAuB;IAC5C;;oEAEgE;IAChE,OAAO,CAAC,gBAAgB,CAAS;IACjC;gFAC4E;IAC5E,OAAO,CAAC,qBAAqB,CAAS;IACtC,wEAAwE;IACxE,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,uBAAuB,CAAS;IAGxC,OAAO,CAAC,WAAW,CAAiC;IAEpD,YAAY,OAAO,EAAE,cAAc,EAKlC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,OAAO,IAAI,OAAO,CAKrB;IAED,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,OAAO;IAIf;gDAC4C;IAC5C,WAAW,SAAiB;IAE5B;iEAC6D;IAC7D,oBAAoB,EAAE,sBAAsB,EAAE,CAAM;IAEpD;+EAC2E;IAC3E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEzC;gFAC4E;IAC5E,iBAAiB,EAAE,eAAe,GAAG,aAAa,CAAmB;IAErE;6EACyE;IACzE,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAEjC,OAAO,CAAC,cAAc,CAGN;IAEhB;uEACmE;IACnE,eAAe,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAE7C;IAED;iFAC6E;IAC7E,OAAO,CAAC,iBAAiB;IAmBzB;2EACuE;IACjE,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;YAEa,gBAAgB;IAyB9B;0EACsE;IAChE,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D;YAEa,kBAAkB;IAsShC;;kDAE8C;IAC9C,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,sBAAsB;IAW9B;+EAC2E;IACrE,eAAe,CAAC,OAAO,GAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;YAEa,sBAAsB;IAkQpC;yEACqE;IACrE,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,kBAAkB;IAM1B;8DAC0D;IAC1D,KAAK,IAAI,IAAI,CAGZ;IAED;sEACkE;IAClE,WAAW,IAAI,IAAI,CAIlB;IAED;oEACgE;IAChE,OAAO,CAAC,gBAAgB;IAqBxB;8EAC0E;IAC1E,OAAO,CAAC,sBAAsB;IA+E9B;qEACiE;IACjE,OAAO,CAAC,iBAAiB;YAqCX,sBAAsB;IAiBpC;2DACuD;YACzC,cAAc;IAgC5B;+EAC2E;IAC3E,OAAO,CAAC,aAAa;YAOP,qBAAqB;IAwMnC;4EACwE;IACxE,OAAO,CAAC,kBAAkB;IAO1B;2CACuC;IACvC,OAAO,CAAC,mBAAmB;IAuB3B;iEAC6D;IAC7D,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CA2BzD;IAED,sEAAsE;IACtE,OAAO,CAAC,4BAA4B,CAAS;IAE7C;0EACsE;IACtE,OAAO,CAAC,sBAAsB;IAyB9B;6EACyE;IACzE,OAAO,CAAC,iBAAiB;IAqBzB,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB;IAiB1B;0EACsE;IACtE,OAAO,CAAC,qBAAqB;IA+B7B;yDACqD;IACrD,OAAO,CAAC,uBAAuB;IAoB/B;4EACwE;IACxE,OAAO,CAAC,cAAc,CAAuD;IAE7E;;;6EAGyE;IACzE,OAAO,CAAC,sBAAsB;IAqD9B;;;uEAGmE;IACnE,OAAO,CAAC,mBAAmB;IAa3B;0DACsD;IACtD,OAAO,CAAC,cAAc;IAetB;gFAC4E;IAC5E,OAAO,CAAC,kBAAkB;IAQ1B;+DAC2D;IAC3D,OAAO,CAAC,sBAAsB;IAqD9B;gFAC4E;IAC5E,OAAO,CAAC,oBAAoB;IAU5B;;sBAEkB;IAClB,OAAO,CAAC,yBAAyB;IAwEjC,OAAO,CAAC,oBAAoB;IAK5B;iEAC6D;IAC7D,OAAO,CAAC,qBAAqB;CA0B9B;AAED;uEACuE;AACvE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,IAAI,CAgBN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../session/timing.ts"],"names":[],"mappings":"
|
|
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"}
|