From 1d03e7efa94ca871fa9c35d9d4dfc666c7bc8eb6 Mon Sep 17 00:00:00 2001 From: Blaine Cook Date: Mon, 24 Jul 2023 13:23:41 -0700 Subject: [PATCH 1/2] fix semver parsing and update compat to 0.9.1 (for compat with rs-ucan 0.2.0, which uses "0.9.0-canary") --- packages/core/src/compatibility.ts | 2 +- packages/core/src/semver.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/core/src/compatibility.ts b/packages/core/src/compatibility.ts index 2f447fe..688ac13 100644 --- a/packages/core/src/compatibility.ts +++ b/packages/core/src/compatibility.ts @@ -53,7 +53,7 @@ export function handleCompatibility(header: unknown, payload: unknown): UcanPart // parse either the "ucv" or "uav" as a version in the header // we translate 'uav: 1.0.0' into 'ucv: 0.3.0' - let version: "0.8.1" | "0.3.0" = "0.8.1" + let version: "0.9.1" | "0.3.0" = "0.9.1" if (!util.hasProp(header, "ucv") || typeof header.ucv !== "string") { if (!util.hasProp(header, "uav") || typeof header.uav !== "string") { throw fail("header", "Invalid format: Missing version indicator") diff --git a/packages/core/src/semver.ts b/packages/core/src/semver.ts index e9653fe..27e2e10 100644 --- a/packages/core/src/semver.ts +++ b/packages/core/src/semver.ts @@ -28,8 +28,16 @@ const matchesRegex = (regex: RegExp) => (str: string) => { } export function parse(version: string): SemVer | null { - const parts = version.split(".") - + let sv = version.match( + /^(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) + if (sv === null) { + return null + } + + const parts = + `${sv.groups?.major}.${sv.groups?.minor}.${sv.groups?.patch}`.split(".") + if (parts.length !== 3) { return null } From 07784e2f06ea76358334dd79adc2f7c4432433b6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 25 Jul 2023 12:33:48 +0200 Subject: [PATCH 2/2] fix: linting error --- packages/core/src/semver.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/src/semver.ts b/packages/core/src/semver.ts index 27e2e10..027384e 100644 --- a/packages/core/src/semver.ts +++ b/packages/core/src/semver.ts @@ -28,9 +28,10 @@ const matchesRegex = (regex: RegExp) => (str: string) => { } export function parse(version: string): SemVer | null { - let sv = version.match( + const sv = version.match( /^(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ ) + if (sv === null) { return null } @@ -45,9 +46,9 @@ export function parse(version: string): SemVer | null { if (!parts.every(matchesRegex(NUM_REGEX))) { return null } - - const [ major, minor, patch ] = parts.map(part => parseInt(part, 10)) - + + const [major, minor, patch] = parts.map(part => parseInt(part, 10)) + if (!Number.isSafeInteger(major) || !Number.isSafeInteger(minor) || !Number.isSafeInteger(patch)) { return null }