diff --git a/.changeset/fix-repository-string.md b/.changeset/fix-repository-string.md new file mode 100644 index 00000000..2db81cda --- /dev/null +++ b/.changeset/fix-repository-string.md @@ -0,0 +1,5 @@ +--- +"@nodesecure/scanner": patch +--- + +fix(scanner): support string format for 'repository' field in comparePayloads diff --git a/workspaces/scanner/src/comparePayloads.ts b/workspaces/scanner/src/comparePayloads.ts index 053579ce..0a20bcb7 100644 --- a/workspaces/scanner/src/comparePayloads.ts +++ b/workspaces/scanner/src/comparePayloads.ts @@ -51,7 +51,7 @@ export interface DependencyVersionComparison { description: ValueComparison; author: ValueComparison; engines: DictionaryComparison; - repository: ValueComparison; + repository: ValueComparison; scripts: DictionaryComparison; warnings: ArrayDiff; composition: CompositionComparison; @@ -166,9 +166,7 @@ function compareVersions( author: version.author && comparedVersion.author ? compareObjects("name", version.author, comparedVersion.author) : void 0, // @ts-ignore engines: compareDictionnaries(version.engines, comparedVersion.engines), - // FIXME: repository can be a string: https://github.com/pillarjs/encodeurl/blob/master/package.json#L14 - repository: compareObjects("type", version.repository, comparedVersion.repository) - ?? compareObjects("url", version.repository, comparedVersion.repository), + repository: compareRepository(version.repository, comparedVersion.repository), scripts: compareDictionnaries(version.scripts, comparedVersion.scripts), warnings: arrayDiff(version.warnings, comparedVersion.warnings), composition: compareComposition(version.composition, comparedVersion.composition), @@ -312,3 +310,22 @@ export function arrayOfObjectsDiffByKey>( return { added, removed }; } + +function compareRepository( + original: Repository | string | undefined, + toCompare: Repository | string | undefined +): ValueComparison { + if (typeof original === "undefined" && typeof toCompare === "undefined") { + return undefined; + } + + const isOriginalString = typeof original === "string"; + const isComparedString = typeof toCompare === "string"; + + if (isOriginalString || isComparedString) { + return compareValues(original, toCompare); + } + + return compareObjects("type", original as Repository, toCompare as Repository) + ?? compareObjects("url", original as Repository, toCompare as Repository); +}