Fix storage root fallback for references

This commit is contained in:
2026-04-21 12:54:48 +00:00
parent 27c69f7c1e
commit b9161f219e
5 changed files with 76 additions and 10 deletions

View File

@@ -39,11 +39,12 @@ export function buildFindings({ files, references, i18n }={}) {
path: file.path,
locator: createCanonicalLocator(file.storage, file.path)
}));
const resolvedReferences = references.map(reference => resolveReferenceTarget(reference, fileByLocator, fileLocators));
const refsByLocator = new Map();
const wildcardReferences = [];
const findings = [];
for (const reference of references) {
for (const reference of resolvedReferences) {
const normalized = reference.normalized;
if (!normalized) continue;
if (normalized.targetKind === "wildcard") {
@@ -56,7 +57,7 @@ export function buildFindings({ files, references, i18n }={}) {
refsByLocator.set(normalizedLocator, bucket);
}
for (const reference of references) {
for (const reference of resolvedReferences) {
const normalized = reference.normalized;
if (!normalized) continue;
const normalizedLocator = createCanonicalLocator(normalized.storage, normalized.path);
@@ -117,7 +118,7 @@ export function buildFindings({ files, references, i18n }={}) {
if (detectMediaKind(file.path) === "other") continue;
const refs = matchingReferencesForFile(file, refsByLocator, wildcardReferences);
if (refs.length) continue;
if (!shouldReportOrphan(file, references)) continue;
if (!shouldReportOrphan(file, resolvedReferences)) continue;
const severity = (file.riskClass === "package-module") || (file.riskClass === "package-system") || (file.riskClass === "release-public")
? "warning"
@@ -139,6 +140,41 @@ export function buildFindings({ files, references, i18n }={}) {
return findings;
}
function resolveReferenceTarget(reference, fileByLocator, fileLocators) {
const normalized = reference.normalized;
if (!normalized) return reference;
const currentLocator = createCanonicalLocator(normalized.storage, normalized.path);
if (fileByLocator.has(currentLocator)) return reference;
const alternateStorage = normalized.storage === "data"
? "public"
: normalized.storage === "public"
? "data"
: null;
if (!alternateStorage) return reference;
const alternateLocator = createCanonicalLocator(alternateStorage, normalized.path);
if (normalized.targetKind === "wildcard") {
const alternateTarget = { ...normalized, storage: alternateStorage, locator: alternateLocator };
if (!wildcardMatchesAny(alternateTarget, fileLocators)) return reference;
return {
...reference,
normalized: alternateTarget
};
}
if (!fileByLocator.has(alternateLocator)) return reference;
return {
...reference,
normalized: {
...normalized,
storage: alternateStorage,
locator: alternateLocator
}
};
}
function isAnchoredInOwningPackage(file, references) {
const ownerType = file.ownerHint.ownerType;
const ownerId = file.ownerHint.ownerId;