From 0a45ebccf56a3ac605378a9788f90173f00f21f1 Mon Sep 17 00:00:00 2001 From: Hamed Mohamed Date: Sun, 1 Feb 2026 00:11:21 +0300 Subject: [PATCH 1/2] fix(scanner): support string format for 'repository' field in comparePayloads --- .changeset/fix-repository-string.md | 5 +++++ workspaces/scanner/src/comparePayloads.ts | 25 +++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 .changeset/fix-repository-string.md 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..d060c564 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 as string | undefined, toCompare as string | undefined); + } + + return compareObjects("type", original as Repository, toCompare as Repository) + ?? compareObjects("url", original as Repository, toCompare as Repository); +} From 3e209939e1439d1f75e81247e72d00aa3f4a3616 Mon Sep 17 00:00:00 2001 From: Hamed Mohamed Date: Sun, 1 Feb 2026 00:42:31 +0300 Subject: [PATCH 2/2] refactor: remove unnecessary type casts --- workspaces/scanner/src/comparePayloads.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/scanner/src/comparePayloads.ts b/workspaces/scanner/src/comparePayloads.ts index d060c564..0a20bcb7 100644 --- a/workspaces/scanner/src/comparePayloads.ts +++ b/workspaces/scanner/src/comparePayloads.ts @@ -323,7 +323,7 @@ function compareRepository( const isComparedString = typeof toCompare === "string"; if (isOriginalString || isComparedString) { - return compareValues(original as string | undefined, toCompare as string | undefined); + return compareValues(original, toCompare); } return compareObjects("type", original as Repository, toCompare as Repository)