Fix storage root fallback for references
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user