@drskillissue/ganko 0.2.61 → 0.2.71
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/dist/{chunk-BK7TC7DN.js → chunk-SVX3WRFV.js} +180 -76
- package/dist/chunk-SVX3WRFV.js.map +1 -0
- package/dist/eslint-plugin.cjs +178 -75
- package/dist/eslint-plugin.cjs.map +1 -1
- package/dist/eslint-plugin.js +1 -1
- package/dist/index.cjs +199 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +23 -22
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/dist/chunk-BK7TC7DN.js.map +0 -1
|
@@ -67,9 +67,29 @@ function canonicalPath(path) {
|
|
|
67
67
|
return canonical;
|
|
68
68
|
}
|
|
69
69
|
var LOG_LEVELS = ["trace", "debug", "info", "warning", "error", "critical", "off"];
|
|
70
|
+
var Level = {
|
|
71
|
+
Trace: 0,
|
|
72
|
+
Debug: 1,
|
|
73
|
+
Info: 2,
|
|
74
|
+
Warning: 3,
|
|
75
|
+
Error: 4,
|
|
76
|
+
Critical: 5,
|
|
77
|
+
Off: 6
|
|
78
|
+
};
|
|
79
|
+
var LOG_LEVEL_ORDER = {
|
|
80
|
+
trace: Level.Trace,
|
|
81
|
+
debug: Level.Debug,
|
|
82
|
+
info: Level.Info,
|
|
83
|
+
warning: Level.Warning,
|
|
84
|
+
error: Level.Error,
|
|
85
|
+
critical: Level.Critical,
|
|
86
|
+
off: Level.Off
|
|
87
|
+
};
|
|
70
88
|
var noopLogger = {
|
|
71
|
-
enabled: false,
|
|
72
89
|
level: "off",
|
|
90
|
+
isLevelEnabled() {
|
|
91
|
+
return false;
|
|
92
|
+
},
|
|
73
93
|
trace() {
|
|
74
94
|
},
|
|
75
95
|
debug() {
|
|
@@ -3995,6 +4015,7 @@ function getStaticStringFromJSXValue(node) {
|
|
|
3995
4015
|
const expression = node.expression;
|
|
3996
4016
|
if (!expression) return null;
|
|
3997
4017
|
if (ts7.isStringLiteral(expression)) return expression.text;
|
|
4018
|
+
if (ts7.isNumericLiteral(expression)) return expression.text;
|
|
3998
4019
|
if (ts7.isNoSubstitutionTemplateLiteral(expression)) return expression.text;
|
|
3999
4020
|
if (ts7.isTemplateExpression(expression) && expression.templateSpans.length === 0) {
|
|
4000
4021
|
return expression.head.text;
|
|
@@ -4893,6 +4914,9 @@ function typeIncludesString(graph, node) {
|
|
|
4893
4914
|
function typeIsArray(graph, node) {
|
|
4894
4915
|
return graph.typeResolver.isArrayType(node);
|
|
4895
4916
|
}
|
|
4917
|
+
function typeIsStrictArray(graph, node) {
|
|
4918
|
+
return graph.typeResolver.isStrictArrayType(node);
|
|
4919
|
+
}
|
|
4896
4920
|
function getArrayElementKind(graph, node) {
|
|
4897
4921
|
return graph.typeResolver.getArrayElementKind(node);
|
|
4898
4922
|
}
|
|
@@ -15167,6 +15191,7 @@ var preferSetLookupInLoop = defineSolidRule({
|
|
|
15167
15191
|
options: options77,
|
|
15168
15192
|
check(graph, emit) {
|
|
15169
15193
|
const reported = /* @__PURE__ */ new Set();
|
|
15194
|
+
const graphHasTypes = hasTypeInfo(graph);
|
|
15170
15195
|
for (const method of LINEAR_SEARCH_METHODS) {
|
|
15171
15196
|
const calls = getCallsByMethodName(graph, method);
|
|
15172
15197
|
for (let i = 0, len = calls.length; i < len; i++) {
|
|
@@ -15184,6 +15209,7 @@ var preferSetLookupInLoop = defineSolidRule({
|
|
|
15184
15209
|
const loop = getEnclosingLoop(call.node);
|
|
15185
15210
|
if (!loop) continue;
|
|
15186
15211
|
if (!isDeclaredOutsideLoop2(loop, variable)) continue;
|
|
15212
|
+
if (graphHasTypes && !typeIsStrictArray(graph, callee.expression)) continue;
|
|
15187
15213
|
if (isStringLikeReceiver(graph, callee.expression, variable)) continue;
|
|
15188
15214
|
const key = `${loop.pos}:var:${variable.id}`;
|
|
15189
15215
|
if (reported.has(key)) continue;
|
|
@@ -18271,6 +18297,35 @@ var TypeResolver = class {
|
|
|
18271
18297
|
return false;
|
|
18272
18298
|
}
|
|
18273
18299
|
}
|
|
18300
|
+
/**
|
|
18301
|
+
* Strict array check: only matches Array<T>, T[], ReadonlyArray<T>, and tuples.
|
|
18302
|
+
* Does NOT match typed arrays (Uint8Array, Buffer, etc.) or other types with
|
|
18303
|
+
* a numeric index signature.
|
|
18304
|
+
*/
|
|
18305
|
+
isStrictArrayType(node) {
|
|
18306
|
+
try {
|
|
18307
|
+
const tsType = this.checker.getTypeAtLocation(node);
|
|
18308
|
+
return this.checkIsStrictArrayType(tsType);
|
|
18309
|
+
} catch {
|
|
18310
|
+
return false;
|
|
18311
|
+
}
|
|
18312
|
+
}
|
|
18313
|
+
checkIsStrictArrayType(tsType) {
|
|
18314
|
+
if (tsType.flags & 524288) {
|
|
18315
|
+
const objFlags = getObjectFlags(tsType);
|
|
18316
|
+
if (objFlags & 8) return true;
|
|
18317
|
+
if (objFlags & 4) {
|
|
18318
|
+
const name = tsType.getSymbol()?.getName();
|
|
18319
|
+
if (name === "Array" || name === "ReadonlyArray") return true;
|
|
18320
|
+
}
|
|
18321
|
+
}
|
|
18322
|
+
if (tsType.isUnion()) {
|
|
18323
|
+
for (const t of tsType.types) {
|
|
18324
|
+
if (this.checkIsStrictArrayType(t)) return true;
|
|
18325
|
+
}
|
|
18326
|
+
}
|
|
18327
|
+
return false;
|
|
18328
|
+
}
|
|
18274
18329
|
checkIsArrayType(tsType) {
|
|
18275
18330
|
if (tsType.flags & 524288) {
|
|
18276
18331
|
const objFlags = getObjectFlags(tsType);
|
|
@@ -18322,7 +18377,7 @@ var TypeResolver = class {
|
|
|
18322
18377
|
if (exprTsType.flags & ts101.TypeFlags.Any) return false;
|
|
18323
18378
|
if (targetTsType.flags & ts101.TypeFlags.Any) return false;
|
|
18324
18379
|
const result = this.checker.isTypeAssignableTo(exprTsType, targetTsType);
|
|
18325
|
-
if (this.logger.
|
|
18380
|
+
if (this.logger.isLevelEnabled(Level.Debug)) {
|
|
18326
18381
|
const exprStr = this.checker.typeToString(exprTsType);
|
|
18327
18382
|
const targetStr = this.checker.typeToString(targetTsType);
|
|
18328
18383
|
this.logger.debug(`isUnnecessaryCast: expr="${exprStr.slice(0, 120)}" target="${targetStr.slice(0, 120)}" assignable=${result} exprFlags=${exprTsType.flags} targetFlags=${targetTsType.flags}`);
|
|
@@ -31201,7 +31256,7 @@ function publishLayoutPerfStatsForTest(stats) {
|
|
|
31201
31256
|
}
|
|
31202
31257
|
function maybeLogLayoutPerf(stats, log) {
|
|
31203
31258
|
if (process.env["SOLID_LINT_LAYOUT_PROFILE"] !== "1") return;
|
|
31204
|
-
if (!log || !log.
|
|
31259
|
+
if (!log || !log.isLevelEnabled(Level.Debug)) return;
|
|
31205
31260
|
const view = snapshotLayoutPerfStats(stats);
|
|
31206
31261
|
log.debug(
|
|
31207
31262
|
`[layout] elements=${view.elementsScanned} candidates=${view.selectorCandidatesChecked} compiledSelectors=${view.compiledSelectorCount} unsupportedSelectors=${view.selectorsRejectedUnsupported} conditionalSelectors=${view.selectorsGuardedConditional} ancestryChecks=${view.ancestryChecks} edges=${view.matchEdgesCreated} collected=${view.casesCollected} cases=${view.casesScored} rejectLowEvidence=${view.casesRejectedLowEvidence} rejectThreshold=${view.casesRejectedThreshold} rejectUndecidable=${view.casesRejectedUndecidable} rejectIdentifiability=${view.casesRejectedIdentifiability} undecidableInterval=${view.undecidableInterval} conditionalSignalRatio=${Math.round(view.conditionalSignalRatio * 1e3) / 1e3} conditionalSignals=${view.conditionalSignals} totalSignals=${view.totalSignals} cohortUnimodalFalse=${view.cohortUnimodalFalse} factorCoverageMean=${Math.round(view.factorCoverageMean * 1e3) / 1e3} posteriorWidthP95=${Math.round(view.posteriorWidthP95 * 1e3) / 1e3} uncertaintyEscalations=${view.uncertaintyEscalations} snapshots=${view.signalSnapshotsBuilt} snapshotHits=${view.signalSnapshotCacheHits} measurementIndexHits=${view.measurementIndexHits} contexts=${view.contextsClassified} diagnostics=${view.diagnosticsEmitted} selectorIndexMs=${Math.round(view.selectorIndexMs * 100) / 100} selectorMatchMs=${Math.round(view.selectorMatchMs * 100) / 100} cascadeBuildMs=${Math.round(view.cascadeBuildMs * 100) / 100} caseBuildMs=${Math.round(view.caseBuildMs * 100) / 100} scoringMs=${Math.round(view.scoringMs * 100) / 100} elapsedMs=${Math.round(view.elapsedMs * 100) / 100}`
|
|
@@ -31249,17 +31304,17 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31249
31304
|
if (cached !== void 0) return cached;
|
|
31250
31305
|
const binding = resolveTagBinding(normalizedFile, tag);
|
|
31251
31306
|
if (binding === null) {
|
|
31252
|
-
if (logger.
|
|
31307
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolveHost(${tag}): binding=null`);
|
|
31253
31308
|
hostByTagCache.set(cacheKey, null);
|
|
31254
31309
|
return null;
|
|
31255
31310
|
}
|
|
31256
31311
|
if (binding.kind === "component") {
|
|
31257
|
-
if (logger.
|
|
31312
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolveHost(${tag}): component, tagName=${binding.host.descriptor.tagName}, attrs=[${[...binding.host.descriptor.staticAttributes.keys()]}]`);
|
|
31258
31313
|
hostByTagCache.set(cacheKey, binding.host);
|
|
31259
31314
|
return binding.host;
|
|
31260
31315
|
}
|
|
31261
31316
|
const host = binding.base ? binding.base.host : null;
|
|
31262
|
-
if (logger.
|
|
31317
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolveHost(${tag}): namespace, base=${host?.descriptor.tagName ?? "null"}`);
|
|
31263
31318
|
hostByTagCache.set(cacheKey, host);
|
|
31264
31319
|
return host;
|
|
31265
31320
|
},
|
|
@@ -31272,26 +31327,26 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31272
31327
|
}
|
|
31273
31328
|
};
|
|
31274
31329
|
function resolveComponentHostEntry(entry) {
|
|
31275
|
-
if (entry.resolution === "resolved")
|
|
31276
|
-
|
|
31330
|
+
if (entry.resolution === "resolved") {
|
|
31331
|
+
return { descriptor: entry.descriptor, hostElementRef: entry.hostElementRef };
|
|
31332
|
+
}
|
|
31333
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolveComponentHostEntry: deferred innerTag=${entry.innerTag}, file=${entry.filePath}, attrs=[${[...entry.staticAttributes.keys()]}]`);
|
|
31277
31334
|
const innerBinding = resolveLocalIdentifierBinding(entry.filePath, entry.innerTag);
|
|
31278
|
-
if (logger.
|
|
31335
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] innerBinding=${innerBinding === null ? "null" : innerBinding.kind}`);
|
|
31279
31336
|
const innerHost = extractHostFromBinding(innerBinding);
|
|
31280
|
-
if (logger.
|
|
31281
|
-
let tagName = innerHost !== null ? innerHost.tagName : null;
|
|
31337
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] innerHost=${innerHost === null ? "null" : `tagName=${innerHost.descriptor.tagName}, attrs=[${[...innerHost.descriptor.staticAttributes.keys()]}]`}`);
|
|
31338
|
+
let tagName = innerHost !== null ? innerHost.descriptor.tagName : null;
|
|
31282
31339
|
if (tagName === null) {
|
|
31283
31340
|
tagName = resolveTagNameFromPolymorphicProp(entry.staticAttributes);
|
|
31284
|
-
if (logger.
|
|
31341
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] polymorphic fallback: tagName=${tagName}`);
|
|
31285
31342
|
}
|
|
31286
|
-
const staticAttributes = innerHost !== null ? mergeStaticAttributes(entry.staticAttributes, innerHost.staticAttributes) : entry.staticAttributes;
|
|
31287
|
-
const staticClassTokens = innerHost !== null ? mergeStaticClassTokens(entry.staticClassTokens, innerHost.staticClassTokens) : entry.staticClassTokens;
|
|
31288
|
-
const forwardsChildren = entry.forwardsChildren || innerHost !== null && innerHost.forwardsChildren;
|
|
31289
|
-
if (logger.
|
|
31343
|
+
const staticAttributes = innerHost !== null ? mergeStaticAttributes(entry.staticAttributes, innerHost.descriptor.staticAttributes) : entry.staticAttributes;
|
|
31344
|
+
const staticClassTokens = innerHost !== null ? mergeStaticClassTokens(entry.staticClassTokens, innerHost.descriptor.staticClassTokens) : entry.staticClassTokens;
|
|
31345
|
+
const forwardsChildren = entry.forwardsChildren || innerHost !== null && innerHost.descriptor.forwardsChildren;
|
|
31346
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolved: tagName=${tagName}, attrs=[${[...staticAttributes.keys()]}], classes=[${staticClassTokens}]`);
|
|
31290
31347
|
return {
|
|
31291
|
-
tagName,
|
|
31292
|
-
|
|
31293
|
-
staticClassTokens,
|
|
31294
|
-
forwardsChildren
|
|
31348
|
+
descriptor: { tagName, staticAttributes, staticClassTokens, forwardsChildren },
|
|
31349
|
+
hostElementRef: innerHost?.hostElementRef ?? null
|
|
31295
31350
|
};
|
|
31296
31351
|
}
|
|
31297
31352
|
function extractHostFromBinding(binding) {
|
|
@@ -31332,10 +31387,7 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31332
31387
|
if (hostEntry) {
|
|
31333
31388
|
const resolved = resolveComponentHostEntry(hostEntry);
|
|
31334
31389
|
if (resolved !== null) {
|
|
31335
|
-
const binding = {
|
|
31336
|
-
kind: "component",
|
|
31337
|
-
host: resolved
|
|
31338
|
-
};
|
|
31390
|
+
const binding = { kind: "component", host: resolved };
|
|
31339
31391
|
localBindingCache.set(key, binding);
|
|
31340
31392
|
resolvingLocal.delete(key);
|
|
31341
31393
|
return binding;
|
|
@@ -31396,7 +31448,7 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31396
31448
|
const baseExpression = toExpressionArgument(firstArg);
|
|
31397
31449
|
if (baseExpression === null) return null;
|
|
31398
31450
|
const baseBinding = resolveBindingFromExpression(filePath, baseExpression);
|
|
31399
|
-
if (logger.
|
|
31451
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] Object.assign base: ${baseBinding === null ? "null" : baseBinding.kind}${baseBinding?.kind === "component" ? `, tagName=${baseBinding.host.descriptor.tagName}` : ""}`);
|
|
31400
31452
|
let baseComponent = null;
|
|
31401
31453
|
const members = /* @__PURE__ */ new Map();
|
|
31402
31454
|
if (baseBinding && baseBinding.kind === "component") {
|
|
@@ -31422,7 +31474,7 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31422
31474
|
if (!ts123.isObjectLiteralExpression(argument)) continue;
|
|
31423
31475
|
appendObjectExpressionMembers(filePath, argument, members);
|
|
31424
31476
|
}
|
|
31425
|
-
if (logger.
|
|
31477
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] Object.assign result: base=${baseComponent === null ? "null" : `tagName=${baseComponent.host.descriptor.tagName}`}, members=[${[...members.keys()]}]`);
|
|
31426
31478
|
if (baseComponent === null && members.size === 0) return null;
|
|
31427
31479
|
return {
|
|
31428
31480
|
kind: "namespace",
|
|
@@ -31464,7 +31516,7 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31464
31516
|
}
|
|
31465
31517
|
function resolveBindingFromImport(filePath, importBinding) {
|
|
31466
31518
|
const resolvedModule = moduleResolver.resolveSolid(filePath, importBinding.source) ?? resolveAndIndexExternalModule(filePath, importBinding.source);
|
|
31467
|
-
if (logger.
|
|
31519
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] resolveBindingFromImport: source=${importBinding.source}, kind=${importBinding.kind}, resolvedModule=${resolvedModule}`);
|
|
31468
31520
|
if (resolvedModule === null) return null;
|
|
31469
31521
|
const normalized = resolve4(resolvedModule);
|
|
31470
31522
|
if (importBinding.kind === "namespace") {
|
|
@@ -31473,7 +31525,7 @@ function createLayoutComponentHostResolver(solids, moduleResolver, logger = noop
|
|
|
31473
31525
|
const exportName = importBinding.kind === "default" ? "default" : importBinding.importedName;
|
|
31474
31526
|
if (exportName === null) return null;
|
|
31475
31527
|
const result = resolveExportBinding(normalized, exportName);
|
|
31476
|
-
if (logger.
|
|
31528
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[component-host] export ${exportName}: ${result === null ? "null" : result.kind}`);
|
|
31477
31529
|
return result;
|
|
31478
31530
|
}
|
|
31479
31531
|
function resolveAndIndexExternalModule(importerFile, importSource) {
|
|
@@ -31667,6 +31719,7 @@ function collectComponentHosts(graph) {
|
|
|
31667
31719
|
}
|
|
31668
31720
|
function resolveComponentHostEntryForFunction(graph, fn) {
|
|
31669
31721
|
let entry = null;
|
|
31722
|
+
let hostElementRefAgreed = true;
|
|
31670
31723
|
const bodyEntry = resolveHostEntryFromFunctionBody(graph, fn);
|
|
31671
31724
|
if (bodyEntry !== null) {
|
|
31672
31725
|
entry = bodyEntry;
|
|
@@ -31682,9 +31735,17 @@ function resolveComponentHostEntryForFunction(graph, fn) {
|
|
|
31682
31735
|
entry = returnEntry;
|
|
31683
31736
|
continue;
|
|
31684
31737
|
}
|
|
31685
|
-
if (areComponentHostEntriesEqual(entry, returnEntry))
|
|
31738
|
+
if (areComponentHostEntriesEqual(entry, returnEntry)) {
|
|
31739
|
+
if (hostElementRefAgreed && entry.resolution === "resolved" && returnEntry.resolution === "resolved" && entry.hostElementRef !== returnEntry.hostElementRef) {
|
|
31740
|
+
hostElementRefAgreed = false;
|
|
31741
|
+
}
|
|
31742
|
+
continue;
|
|
31743
|
+
}
|
|
31686
31744
|
return null;
|
|
31687
31745
|
}
|
|
31746
|
+
if (!hostElementRefAgreed && entry !== null && entry.resolution === "resolved") {
|
|
31747
|
+
return { resolution: "resolved", descriptor: entry.descriptor, hostElementRef: null };
|
|
31748
|
+
}
|
|
31688
31749
|
return entry;
|
|
31689
31750
|
}
|
|
31690
31751
|
function resolveHostEntryFromFunctionBody(graph, fn) {
|
|
@@ -31712,7 +31773,8 @@ function resolveHostEntryFromJSXElement(graph, node) {
|
|
|
31712
31773
|
staticAttributes: collectStaticAttributes(element),
|
|
31713
31774
|
staticClassTokens: getStaticClassTokensForElementEntity(graph, element),
|
|
31714
31775
|
forwardsChildren: detectChildrenForwarding(element)
|
|
31715
|
-
}
|
|
31776
|
+
},
|
|
31777
|
+
hostElementRef: { solid: graph, element }
|
|
31716
31778
|
};
|
|
31717
31779
|
}
|
|
31718
31780
|
if (isContextProviderTag(element.tag)) {
|
|
@@ -32881,7 +32943,7 @@ function matchesChain(matcher, node, index, perf, fileRootElements, logger) {
|
|
|
32881
32943
|
ancestor = ancestor.parentElementNode;
|
|
32882
32944
|
}
|
|
32883
32945
|
if (fileRootElements !== null) {
|
|
32884
|
-
if (logger.
|
|
32946
|
+
if (logger.isLevelEnabled(Level.Trace)) {
|
|
32885
32947
|
const compoundDesc = describeCompound(targetCompound);
|
|
32886
32948
|
logger.trace(`[selector-match] fallback: node=${node.key} tag=${node.tagName} checking ${fileRootElements.length} roots for compound=${compoundDesc}`);
|
|
32887
32949
|
}
|
|
@@ -32892,11 +32954,11 @@ function matchesChain(matcher, node, index, perf, fileRootElements, logger) {
|
|
|
32892
32954
|
if (root.solidFile !== node.solidFile) continue;
|
|
32893
32955
|
perf.ancestryChecks++;
|
|
32894
32956
|
const compoundResult = matchesCompound(root, targetCompound);
|
|
32895
|
-
if (logger.
|
|
32957
|
+
if (logger.isLevelEnabled(Level.Trace) && compoundResult === "no-match") {
|
|
32896
32958
|
logger.trace(`[selector-match] fallback MISS: root=${root.key} tag=${root.tagName} attrs=[${[...root.attributes.entries()].map(([k, v]) => `${k}=${v}`).join(",")}]`);
|
|
32897
32959
|
}
|
|
32898
32960
|
if (compoundResult !== "no-match") {
|
|
32899
|
-
if (logger.
|
|
32961
|
+
if (logger.isLevelEnabled(Level.Debug)) {
|
|
32900
32962
|
const compoundDesc = describeCompound(targetCompound);
|
|
32901
32963
|
logger.debug(`[selector-match] fallback HIT: node=${node.key} tag=${node.tagName} matched root=${root.key} tag=${root.tagName} compound=${compoundDesc} isFinal=${isFinal}`);
|
|
32902
32964
|
}
|
|
@@ -34019,6 +34081,9 @@ function readBaselineOffsetFacts(graph, node) {
|
|
|
34019
34081
|
function readElementRef(graph, node) {
|
|
34020
34082
|
return readElementRefById(graph, node.solidFile, node.elementId);
|
|
34021
34083
|
}
|
|
34084
|
+
function readHostElementRef(graph, node) {
|
|
34085
|
+
return graph.hostElementRefsByNode.get(node) ?? null;
|
|
34086
|
+
}
|
|
34022
34087
|
function readElementRefById(graph, solidFile, elementId) {
|
|
34023
34088
|
const refs = graph.elementRefsBySolidFileAndId.get(solidFile);
|
|
34024
34089
|
if (!refs) return null;
|
|
@@ -36717,7 +36782,7 @@ function appendMatchingEdgesFromSelectorIds(ctx, selectorIds, node, applies, app
|
|
|
36717
36782
|
};
|
|
36718
36783
|
applies.push(edge);
|
|
36719
36784
|
ctx.perf.matchEdgesCreated++;
|
|
36720
|
-
if (ctx.logger.
|
|
36785
|
+
if (ctx.logger.isLevelEnabled(Level.Trace)) {
|
|
36721
36786
|
ctx.logger.trace(
|
|
36722
36787
|
`[cascade] edge node=${node.key} selector=${selector.id} match=${matchResult} conditional=${edge.conditionalMatch} selector-raw=${selector.raw.slice(0, 80)}`
|
|
36723
36788
|
);
|
|
@@ -37160,7 +37225,7 @@ function getTextualContentState(element, memo, compositionMetaByElementId, logge
|
|
|
37160
37225
|
if (!child) continue;
|
|
37161
37226
|
if (child.kind === "expression") {
|
|
37162
37227
|
if (isStructuralExpression(child.node)) {
|
|
37163
|
-
if (logger.
|
|
37228
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[textual-content] element=${element.tagName ?? element.tag}#${element.id} \u2192 unknown (structural expression child)`);
|
|
37164
37229
|
memo.set(element.id, 2 /* Unknown */);
|
|
37165
37230
|
return 2 /* Unknown */;
|
|
37166
37231
|
}
|
|
@@ -37182,11 +37247,11 @@ function getTextualContentState(element, memo, compositionMetaByElementId, logge
|
|
|
37182
37247
|
if (!child.isDomElement) {
|
|
37183
37248
|
const childMeta = compositionMetaByElementId.get(child.id);
|
|
37184
37249
|
if (childMeta !== void 0 && isControlTag(childMeta.tagName)) {
|
|
37185
|
-
if (logger.
|
|
37250
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[textual-content] element=${element.tagName ?? element.tag}#${element.id}: non-DOM child ${child.tag}#${child.id} resolves to control tag=${childMeta.tagName}, skipping`);
|
|
37186
37251
|
continue;
|
|
37187
37252
|
}
|
|
37188
37253
|
if (childState !== 1 /* No */) {
|
|
37189
|
-
if (logger.
|
|
37254
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[textual-content] element=${element.tagName ?? element.tag}#${element.id}: non-DOM child ${child.tag ?? child.id}#${child.id} has state=${childState} \u2192 childHasUnknown`);
|
|
37190
37255
|
childHasUnknown = true;
|
|
37191
37256
|
}
|
|
37192
37257
|
continue;
|
|
@@ -37199,12 +37264,12 @@ function getTextualContentState(element, memo, compositionMetaByElementId, logge
|
|
|
37199
37264
|
if (childState === 3 /* DynamicText */) childHasDynamicText = true;
|
|
37200
37265
|
}
|
|
37201
37266
|
if (childHasUnknown) {
|
|
37202
|
-
if (logger.
|
|
37267
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[textual-content] element=${element.tagName ?? element.tag}#${element.id} \u2192 unknown (child has unknown)`);
|
|
37203
37268
|
memo.set(element.id, 2 /* Unknown */);
|
|
37204
37269
|
return 2 /* Unknown */;
|
|
37205
37270
|
}
|
|
37206
37271
|
if (hasTextOnlyExpression || childHasDynamicText) {
|
|
37207
|
-
if (logger.
|
|
37272
|
+
if (logger.isLevelEnabled(Level.Trace)) logger.trace(`[textual-content] element=${element.tagName ?? element.tag}#${element.id} \u2192 dynamic-text`);
|
|
37208
37273
|
memo.set(element.id, 3 /* DynamicText */);
|
|
37209
37274
|
return 3 /* DynamicText */;
|
|
37210
37275
|
}
|
|
@@ -37226,15 +37291,16 @@ function collectLayoutElementRecordsForSolid(solid, selectorRequirements, inline
|
|
|
37226
37291
|
const meta = compositionMetaByElementId.get(element.id);
|
|
37227
37292
|
if (!meta || !meta.participates) continue;
|
|
37228
37293
|
const localClassTokens = selectorRequirements.needsClassTokens ? getStaticClassTokensForElementEntity(solid, element) : EMPTY_STRING_LIST3;
|
|
37229
|
-
const classTokens = mergeClassTokens(localClassTokens, meta.
|
|
37294
|
+
const classTokens = mergeClassTokens(localClassTokens, meta.resolvedHost?.descriptor.staticClassTokens);
|
|
37230
37295
|
const classTokenSet = classTokens.length === 0 ? EMPTY_CLASS_TOKEN_SET : createClassTokenSet(classTokens);
|
|
37231
37296
|
const inlineStyleKeys = getStaticStyleKeysForElement(solid, element.id);
|
|
37232
37297
|
const localAttributes = selectorRequirements.needsAttributes ? collectStaticAttributes(element) : EMPTY_ATTRIBUTES2;
|
|
37233
|
-
const attributes = mergeAttributes(localAttributes, meta.
|
|
37298
|
+
const attributes = mergeAttributes(localAttributes, meta.resolvedHost?.descriptor.staticAttributes);
|
|
37234
37299
|
const selectorDispatchKeys = buildSelectorDispatchKeys(attributes, classTokens);
|
|
37235
37300
|
const inlineStyleValues = inlineStyleValuesByElementId.get(element.id) ?? EMPTY_INLINE_STYLE_VALUES;
|
|
37236
37301
|
const textualContent = getTextualContentState(element, textContentMemo, compositionMetaByElementId, logger);
|
|
37237
37302
|
const parentElementId = resolveComposedParentElementId(element, compositionMetaByElementId);
|
|
37303
|
+
const hostElementRef = meta.resolvedHost?.hostElementRef ?? null;
|
|
37238
37304
|
out.push({
|
|
37239
37305
|
element,
|
|
37240
37306
|
key: toLayoutElementKey(solid.file, element.id),
|
|
@@ -37247,7 +37313,8 @@ function collectLayoutElementRecordsForSolid(solid, selectorRequirements, inline
|
|
|
37247
37313
|
selectorDispatchKeys,
|
|
37248
37314
|
inlineStyleValues,
|
|
37249
37315
|
textualContent,
|
|
37250
|
-
parentElementId
|
|
37316
|
+
parentElementId,
|
|
37317
|
+
hostElementRef
|
|
37251
37318
|
});
|
|
37252
37319
|
}
|
|
37253
37320
|
return out;
|
|
@@ -37257,7 +37324,7 @@ function collectCompositionMetaByElementId(solid, componentHostResolver) {
|
|
|
37257
37324
|
for (let i = 0; i < solid.jsxElements.length; i++) {
|
|
37258
37325
|
const element = solid.jsxElements[i];
|
|
37259
37326
|
if (!element) continue;
|
|
37260
|
-
const
|
|
37327
|
+
const resolvedHost = resolveHostForElement(
|
|
37261
37328
|
componentHostResolver,
|
|
37262
37329
|
solid.file,
|
|
37263
37330
|
element
|
|
@@ -37266,30 +37333,30 @@ function collectCompositionMetaByElementId(solid, componentHostResolver) {
|
|
|
37266
37333
|
componentHostResolver,
|
|
37267
37334
|
solid.file,
|
|
37268
37335
|
element,
|
|
37269
|
-
|
|
37336
|
+
resolvedHost
|
|
37270
37337
|
);
|
|
37271
37338
|
const participates = element.tag !== null && !isTransparentPrimitive;
|
|
37272
|
-
const tag = resolveEffectiveTag(element,
|
|
37339
|
+
const tag = resolveEffectiveTag(element, resolvedHost?.descriptor ?? null);
|
|
37273
37340
|
const tagName = tag ? tag.toLowerCase() : null;
|
|
37274
37341
|
out.set(element.id, {
|
|
37275
37342
|
element,
|
|
37276
37343
|
participates,
|
|
37277
37344
|
tag,
|
|
37278
37345
|
tagName,
|
|
37279
|
-
|
|
37346
|
+
resolvedHost
|
|
37280
37347
|
});
|
|
37281
37348
|
}
|
|
37282
37349
|
return out;
|
|
37283
37350
|
}
|
|
37284
|
-
function
|
|
37351
|
+
function resolveHostForElement(componentHostResolver, solidFile, element) {
|
|
37285
37352
|
if (element.tag === null) return null;
|
|
37286
37353
|
if (element.isDomElement) return null;
|
|
37287
37354
|
return componentHostResolver.resolveHost(solidFile, element.tag);
|
|
37288
37355
|
}
|
|
37289
|
-
function resolveTransparentPrimitiveStatus(componentHostResolver, solidFile, element,
|
|
37356
|
+
function resolveTransparentPrimitiveStatus(componentHostResolver, solidFile, element, resolvedHost) {
|
|
37290
37357
|
if (element.tag === null) return false;
|
|
37291
37358
|
if (element.isDomElement) return false;
|
|
37292
|
-
if (
|
|
37359
|
+
if (resolvedHost !== null) return false;
|
|
37293
37360
|
return componentHostResolver.isTransparentPrimitive(solidFile, element.tag);
|
|
37294
37361
|
}
|
|
37295
37362
|
function resolveEffectiveTag(element, hostDescriptor) {
|
|
@@ -37407,6 +37474,7 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37407
37474
|
const childrenByParentNodeMutable = /* @__PURE__ */ new Map();
|
|
37408
37475
|
const elementBySolidFileAndIdMutable = /* @__PURE__ */ new Map();
|
|
37409
37476
|
const elementRefsBySolidFileAndIdMutable = /* @__PURE__ */ new Map();
|
|
37477
|
+
const hostElementRefsByNodeMutable = /* @__PURE__ */ new Map();
|
|
37410
37478
|
const appliesByElementNodeMutable = /* @__PURE__ */ new Map();
|
|
37411
37479
|
const selectorsById = /* @__PURE__ */ new Map();
|
|
37412
37480
|
const monitoredDeclarationsBySelectorId = /* @__PURE__ */ new Map();
|
|
@@ -37443,7 +37511,7 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37443
37511
|
const moduleResolver = createLayoutModuleResolver(solids, css);
|
|
37444
37512
|
const componentHostResolver = createLayoutComponentHostResolver(solids, moduleResolver, logger);
|
|
37445
37513
|
const cssScopeBySolidFile = collectCSSScopeBySolidFile(solids, css, moduleResolver);
|
|
37446
|
-
if (logger.
|
|
37514
|
+
if (logger.isLevelEnabled(Level.Trace)) {
|
|
37447
37515
|
for (const [solidFile, scopePaths] of cssScopeBySolidFile) {
|
|
37448
37516
|
if (scopePaths.length > 0) {
|
|
37449
37517
|
let names = "";
|
|
@@ -37538,6 +37606,9 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37538
37606
|
isControl: isControlTag(record.tagName),
|
|
37539
37607
|
isReplaced: isReplacedTag(record.tagName)
|
|
37540
37608
|
};
|
|
37609
|
+
if (record.hostElementRef !== null) {
|
|
37610
|
+
hostElementRefsByNodeMutable.set(node, record.hostElementRef);
|
|
37611
|
+
}
|
|
37541
37612
|
elements.push(node);
|
|
37542
37613
|
elementById.set(record.element.id, node);
|
|
37543
37614
|
nodeByElementId.set(record.element.id, node);
|
|
@@ -37559,7 +37630,7 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37559
37630
|
}
|
|
37560
37631
|
}
|
|
37561
37632
|
}
|
|
37562
|
-
if (logger.
|
|
37633
|
+
if (logger.isLevelEnabled(Level.Debug)) {
|
|
37563
37634
|
for (const [file, roots] of rootElementsByFile) {
|
|
37564
37635
|
const descs = roots.map((r) => `${r.key}(tag=${r.tagName}, attrs=[${[...r.attributes.entries()].map(([k, v]) => `${k}=${v}`).join(",")}])`);
|
|
37565
37636
|
logger.debug(`[build] rootElementsByFile file=${file} count=${roots.length}: ${descs.join(", ")}`);
|
|
@@ -37602,7 +37673,7 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37602
37673
|
appliesByNode.set(node, edges);
|
|
37603
37674
|
}
|
|
37604
37675
|
perf.cascadeBuildMs = performance.now() - cascadeStartedAt;
|
|
37605
|
-
if (logger.
|
|
37676
|
+
if (logger.isLevelEnabled(Level.Trace)) {
|
|
37606
37677
|
for (let i = 0; i < elements.length; i++) {
|
|
37607
37678
|
const node = elements[i];
|
|
37608
37679
|
if (!node) continue;
|
|
@@ -37658,6 +37729,7 @@ function buildLayoutGraph(solids, css, logger = noopLogger) {
|
|
|
37658
37729
|
childrenByParentNode: childrenByParentNodeMutable,
|
|
37659
37730
|
elementBySolidFileAndId: elementBySolidFileAndIdMutable,
|
|
37660
37731
|
elementRefsBySolidFileAndId: elementRefsBySolidFileAndIdMutable,
|
|
37732
|
+
hostElementRefsByNode: hostElementRefsByNodeMutable,
|
|
37661
37733
|
appliesByNode,
|
|
37662
37734
|
selectorCandidatesByNode,
|
|
37663
37735
|
selectorsById,
|
|
@@ -38058,7 +38130,7 @@ function computeFlowParticipationFact(snapshot) {
|
|
|
38058
38130
|
}
|
|
38059
38131
|
function buildContextIndex(childrenByParentNode, snapshotByElementNode, perf, logger) {
|
|
38060
38132
|
const out = /* @__PURE__ */ new Map();
|
|
38061
|
-
const trace = logger.
|
|
38133
|
+
const trace = logger.isLevelEnabled(Level.Trace);
|
|
38062
38134
|
for (const [parent, children] of childrenByParentNode) {
|
|
38063
38135
|
if (children.length < 2) continue;
|
|
38064
38136
|
const snapshot = snapshotByElementNode.get(parent);
|
|
@@ -38928,7 +39000,7 @@ function runLayoutDetector(context, detector) {
|
|
|
38928
39000
|
result.evidence.posteriorLower,
|
|
38929
39001
|
result.evidence.posteriorUpper
|
|
38930
39002
|
);
|
|
38931
|
-
if (log.
|
|
39003
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
38932
39004
|
log.debug(
|
|
38933
39005
|
`[${detector.id}] accept case=${i} severity=${result.evidence.severity.toFixed(2)} confidence=${result.evidence.confidence.toFixed(2)} posterior=[${result.evidence.posteriorLower.toFixed(3)},${result.evidence.posteriorUpper.toFixed(3)}] evidenceMass=${result.evidence.evidenceMass.toFixed(3)} context=${result.evidence.contextKind} offset=${result.evidence.estimatedOffsetPx?.toFixed(2) ?? "null"} topFactors=[${result.evidence.topFactors.join(",")}] causes=[${result.evidence.causes.join("; ")}]`
|
|
38934
39006
|
);
|
|
@@ -38937,7 +39009,7 @@ function runLayoutDetector(context, detector) {
|
|
|
38937
39009
|
continue;
|
|
38938
39010
|
}
|
|
38939
39011
|
recordPolicyMetrics(context, result.evidenceMass, result.posteriorLower, result.posteriorUpper);
|
|
38940
|
-
if (log.
|
|
39012
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
38941
39013
|
log.debug(
|
|
38942
39014
|
`[${detector.id}] reject case=${i} reason=${result.reason} detail=${result.detail ?? "none"} posterior=[${result.posteriorLower.toFixed(3)},${result.posteriorUpper.toFixed(3)}] evidenceMass=${result.evidenceMass.toFixed(3)}`
|
|
38943
39015
|
);
|
|
@@ -39558,13 +39630,39 @@ var INLINE_TOUCH_TARGET_KEYS = /* @__PURE__ */ new Set([
|
|
|
39558
39630
|
"height",
|
|
39559
39631
|
"min-height",
|
|
39560
39632
|
"width",
|
|
39561
|
-
"min-width"
|
|
39562
|
-
"padding-left",
|
|
39563
|
-
"padding-right",
|
|
39564
|
-
"padding-inline",
|
|
39565
|
-
"padding-inline-start",
|
|
39566
|
-
"padding-inline-end"
|
|
39633
|
+
"min-width"
|
|
39567
39634
|
]);
|
|
39635
|
+
var INTERACTIVE_HTML_TAGS = /* @__PURE__ */ new Set(["button", "a", "input", "select", "textarea", "label", "summary"]);
|
|
39636
|
+
var INTERACTIVE_ARIA_ROLES = /* @__PURE__ */ new Set([
|
|
39637
|
+
"button",
|
|
39638
|
+
"link",
|
|
39639
|
+
"checkbox",
|
|
39640
|
+
"radio",
|
|
39641
|
+
"combobox",
|
|
39642
|
+
"listbox",
|
|
39643
|
+
"menuitem",
|
|
39644
|
+
"menuitemcheckbox",
|
|
39645
|
+
"menuitemradio",
|
|
39646
|
+
"option",
|
|
39647
|
+
"switch",
|
|
39648
|
+
"tab"
|
|
39649
|
+
]);
|
|
39650
|
+
function isInteractiveElement(solid, element, hostElementRef) {
|
|
39651
|
+
if (element.tagName !== null && INTERACTIVE_HTML_TAGS.has(element.tagName)) return true;
|
|
39652
|
+
const roleAttr = getJSXAttributeEntity(solid, element, "role");
|
|
39653
|
+
if (roleAttr !== null && roleAttr.valueNode !== null) {
|
|
39654
|
+
const role = getStaticStringFromJSXValue(roleAttr.valueNode);
|
|
39655
|
+
if (role !== null && INTERACTIVE_ARIA_ROLES.has(role)) return true;
|
|
39656
|
+
}
|
|
39657
|
+
if (hostElementRef !== null && hostElementRef.element.tagName !== null) {
|
|
39658
|
+
if (INTERACTIVE_HTML_TAGS.has(hostElementRef.element.tagName)) return true;
|
|
39659
|
+
}
|
|
39660
|
+
return false;
|
|
39661
|
+
}
|
|
39662
|
+
function readNodeHostElementRef(layout, solid, element) {
|
|
39663
|
+
const node = layout.elementBySolidFileAndId.get(solid.file)?.get(element.id) ?? null;
|
|
39664
|
+
return node !== null ? readHostElementRef(layout, node) : null;
|
|
39665
|
+
}
|
|
39568
39666
|
var jsxStylePolicy = defineCrossRule({
|
|
39569
39667
|
id: "jsx-style-policy",
|
|
39570
39668
|
severity: "warn",
|
|
@@ -39575,11 +39673,11 @@ var jsxStylePolicy = defineCrossRule({
|
|
|
39575
39673
|
category: "css-jsx"
|
|
39576
39674
|
},
|
|
39577
39675
|
check(context, emit) {
|
|
39578
|
-
const { solids } = context;
|
|
39676
|
+
const { solids, layout } = context;
|
|
39579
39677
|
const policy = getActivePolicy();
|
|
39580
39678
|
if (policy === null) return;
|
|
39581
39679
|
const name = getActivePolicyName() ?? "";
|
|
39582
|
-
forEachStylePropertyAcross(solids, (solid, p) => {
|
|
39680
|
+
forEachStylePropertyAcross(solids, (solid, p, element) => {
|
|
39583
39681
|
if (!ts133.isPropertyAssignment(p)) return;
|
|
39584
39682
|
const key = objectKeyName(p.name);
|
|
39585
39683
|
if (!key) return;
|
|
@@ -39627,6 +39725,8 @@ var jsxStylePolicy = defineCrossRule({
|
|
|
39627
39725
|
return;
|
|
39628
39726
|
}
|
|
39629
39727
|
if (INLINE_TOUCH_TARGET_KEYS.has(normalizedKey)) {
|
|
39728
|
+
const hostRef = readNodeHostElementRef(layout, solid, element);
|
|
39729
|
+
if (!isInteractiveElement(solid, element, hostRef)) return;
|
|
39630
39730
|
const strVal = getStaticStringValue(p.initializer);
|
|
39631
39731
|
if (!strVal) return;
|
|
39632
39732
|
const px = parsePxValue(strVal);
|
|
@@ -39705,7 +39805,7 @@ var siblingAlignmentDetector = {
|
|
|
39705
39805
|
id: "sibling-alignment-outlier",
|
|
39706
39806
|
collect: collectAlignmentCases,
|
|
39707
39807
|
evaluate(input, context) {
|
|
39708
|
-
if (context.logger.
|
|
39808
|
+
if (context.logger.isLevelEnabled(Level.Trace)) {
|
|
39709
39809
|
const ctx = input.context;
|
|
39710
39810
|
context.logger.trace(
|
|
39711
39811
|
`[sibling-alignment] evaluate subject=${input.subject.elementKey} tag=${input.subject.tag} parent=${ctx.parentElementKey} parentTag=${ctx.parentTag} context.kind=${ctx.kind} certainty=${ctx.certainty} display=${ctx.parentDisplay} alignItems=${ctx.parentAlignItems} crossAxisIsBlockAxis=${ctx.crossAxisIsBlockAxis} crossAxisCertainty=${ctx.crossAxisIsBlockAxisCertainty} baseline=${ctx.baselineRelevance}`
|
|
@@ -39754,7 +39854,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39754
39854
|
const log = context.logger;
|
|
39755
39855
|
const detections = runLayoutDetector(context, siblingAlignmentDetector);
|
|
39756
39856
|
const uniqueDetections = dedupeDetectionsBySubject(detections);
|
|
39757
|
-
if (log.
|
|
39857
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39758
39858
|
log.debug(
|
|
39759
39859
|
`[sibling-alignment] raw=${detections.length} deduped=${uniqueDetections.length}`
|
|
39760
39860
|
);
|
|
@@ -39768,7 +39868,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39768
39868
|
const subjectId = detection.caseData.subject.elementId;
|
|
39769
39869
|
const logPrefix = `[sibling-alignment] <${subjectTag}> in <${parentTag}> (${subjectFile}#${subjectId})`;
|
|
39770
39870
|
if (detection.evidence.confidence < MIN_CONFIDENCE_THRESHOLD) {
|
|
39771
|
-
if (log.
|
|
39871
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39772
39872
|
log.debug(
|
|
39773
39873
|
`${logPrefix} SKIP: confidence=${detection.evidence.confidence.toFixed(2)} < threshold=${MIN_CONFIDENCE_THRESHOLD}`
|
|
39774
39874
|
);
|
|
@@ -39777,7 +39877,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39777
39877
|
}
|
|
39778
39878
|
const estimatedOffset = detection.evidence.estimatedOffsetPx;
|
|
39779
39879
|
if (estimatedOffset !== null && Math.abs(estimatedOffset) < MIN_OFFSET_PX_THRESHOLD && !hasNonOffsetPrimaryEvidence(detection.evidence.topFactors)) {
|
|
39780
|
-
if (log.
|
|
39880
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39781
39881
|
log.debug(
|
|
39782
39882
|
`${logPrefix} SKIP: offset=${estimatedOffset.toFixed(2)}px < ${MIN_OFFSET_PX_THRESHOLD}px (no non-offset primary evidence, topFactors=[${detection.evidence.topFactors.join(",")}])`
|
|
39783
39883
|
);
|
|
@@ -39789,7 +39889,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39789
39889
|
detection.caseData.cohort.parentElementKey,
|
|
39790
39890
|
detection.caseData.subject.solidFile
|
|
39791
39891
|
)) {
|
|
39792
|
-
if (log.
|
|
39892
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39793
39893
|
log.debug(`${logPrefix} SKIP: out-of-flow ancestor`);
|
|
39794
39894
|
}
|
|
39795
39895
|
continue;
|
|
@@ -39800,7 +39900,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39800
39900
|
detection.caseData.subject.elementId
|
|
39801
39901
|
);
|
|
39802
39902
|
if (!subjectRef) {
|
|
39803
|
-
if (log.
|
|
39903
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39804
39904
|
log.debug(`${logPrefix} SKIP: no node ref`);
|
|
39805
39905
|
}
|
|
39806
39906
|
continue;
|
|
@@ -39816,7 +39916,7 @@ var cssLayoutSiblingAlignmentOutlier = defineCrossRule({
|
|
|
39816
39916
|
const primaryFix = detection.evidence.primaryFix;
|
|
39817
39917
|
const firstChar = primaryFix.length > 0 ? primaryFix[0] : void 0;
|
|
39818
39918
|
const fix = firstChar !== void 0 ? ` ${firstChar.toUpperCase()}${primaryFix.slice(1)}.` : "";
|
|
39819
|
-
if (log.
|
|
39919
|
+
if (log.isLevelEnabled(Level.Debug)) {
|
|
39820
39920
|
log.debug(
|
|
39821
39921
|
`${logPrefix} EMIT: severity=${severity} confidence=${confidence} offset=${offset?.toFixed(2) ?? "null"} posterior=[${detection.evidence.posteriorLower.toFixed(3)},${detection.evidence.posteriorUpper.toFixed(3)}] evidenceMass=${detection.evidence.evidenceMass.toFixed(3)} topFactors=[${detection.evidence.topFactors.join(",")}] causes=[${causes}]`
|
|
39822
39922
|
);
|
|
@@ -40225,7 +40325,8 @@ var cssLayoutUnsizedReplacedElement = defineCrossRule({
|
|
|
40225
40325
|
const ref = readNodeRef(context.layout, node);
|
|
40226
40326
|
if (!ref) continue;
|
|
40227
40327
|
const reservedSpace = readReservedSpaceFact(context.layout, node);
|
|
40228
|
-
|
|
40328
|
+
const hostRef = readHostElementRef(context.layout, node);
|
|
40329
|
+
if (hasReservedSize(ref.solid, node.attributes, ref.element, reservedSpace, hostRef)) continue;
|
|
40229
40330
|
emit(
|
|
40230
40331
|
createDiagnostic(
|
|
40231
40332
|
ref.solid.file,
|
|
@@ -40240,15 +40341,17 @@ var cssLayoutUnsizedReplacedElement = defineCrossRule({
|
|
|
40240
40341
|
}
|
|
40241
40342
|
}
|
|
40242
40343
|
});
|
|
40243
|
-
function hasReservedSize(solid, attributes, element, reservedSpaceFact) {
|
|
40344
|
+
function hasReservedSize(solid, attributes, element, reservedSpaceFact, hostElementRef) {
|
|
40244
40345
|
if (reservedSpaceFact.hasReservedSpace) return true;
|
|
40245
40346
|
const attrWidth = parsePositiveLength(attributes.get("width"));
|
|
40246
40347
|
const attrHeight = parsePositiveLength(attributes.get("height"));
|
|
40247
40348
|
const jsxAttrWidth = readPositiveJsxAttribute(solid, element, "width");
|
|
40248
40349
|
const jsxAttrHeight = readPositiveJsxAttribute(solid, element, "height");
|
|
40249
|
-
|
|
40250
|
-
const
|
|
40251
|
-
|
|
40350
|
+
const hostJsxWidth = hostElementRef !== null ? readPositiveJsxAttribute(hostElementRef.solid, hostElementRef.element, "width") : false;
|
|
40351
|
+
const hostJsxHeight = hostElementRef !== null ? readPositiveJsxAttribute(hostElementRef.solid, hostElementRef.element, "height") : false;
|
|
40352
|
+
if (attrWidth && attrHeight || jsxAttrWidth && jsxAttrHeight || hostJsxWidth && hostJsxHeight) return true;
|
|
40353
|
+
const hasAnyWidth = attrWidth || jsxAttrWidth || hostJsxWidth || reservedSpaceFact.hasUsableInlineDimension;
|
|
40354
|
+
const hasAnyHeight = attrHeight || jsxAttrHeight || hostJsxHeight || reservedSpaceFact.hasUsableBlockDimension || reservedSpaceFact.hasContainIntrinsicSize;
|
|
40252
40355
|
if (reservedSpaceFact.hasUsableAspectRatio && (hasAnyWidth || hasAnyHeight)) return true;
|
|
40253
40356
|
if (reservedSpaceFact.hasContainIntrinsicSize && (hasAnyWidth || hasAnyHeight)) return true;
|
|
40254
40357
|
return false;
|
|
@@ -41264,6 +41367,7 @@ export {
|
|
|
41264
41367
|
classifyFile,
|
|
41265
41368
|
extensionsToGlobs,
|
|
41266
41369
|
canonicalPath,
|
|
41370
|
+
Level,
|
|
41267
41371
|
noopLogger,
|
|
41268
41372
|
SolidGraph,
|
|
41269
41373
|
runPhases,
|
|
@@ -41284,4 +41388,4 @@ export {
|
|
|
41284
41388
|
rules3,
|
|
41285
41389
|
runCrossFileRules
|
|
41286
41390
|
};
|
|
41287
|
-
//# sourceMappingURL=chunk-
|
|
41391
|
+
//# sourceMappingURL=chunk-SVX3WRFV.js.map
|