@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
1 lines • 4.76 kB
Source Map (JSON)
{"version":3,"file":"versionCheck.mjs","names":[],"sources":["../src/versionCheck.ts"],"sourcesContent":["// Version bounds format: [major, minMinor, maxMinor, minPatch]\n// - maxMinor === -1 means \"any minor\" (caret range, e.g., ^18.0.0)\n// - maxMinor === minMinor means \"same minor only\" (tilde range, e.g., ~19.0.3)\nexport type VersionBounds = [major: number, minMinor: number, maxMinor: number, minPatch: number];\n\n/**\n * Parses a version string into major, minor, and patch numbers.\n * Returns null if the version string cannot be parsed.\n *\n * @example\n * parseVersion(\"18.3.1\") // { major: 18, minor: 3, patch: 1 }\n * parseVersion(\"19.0.0-rc.1\") // { major: 19, minor: 0, patch: 0 }\n * parseVersion(\"invalid\") // null\n */\nexport function parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) {\n return null;\n }\n\n const [, majorStr, minorStr, patchStr] = match;\n return {\n major: parseInt(majorStr, 10),\n minor: parseInt(minorStr, 10),\n patch: parseInt(patchStr, 10),\n };\n}\n\n/**\n * Checks if a parsed version satisfies the given version bounds.\n *\n * @param version - The parsed version to check\n * @param version.major\n * @param bounds - Array of version bounds to check against\n * @param version.minor\n * @param version.patch\n * @returns true if the version satisfies any of the bounds\n */\nexport function checkVersionAgainstBounds(\n version: { major: number; minor: number; patch: number },\n bounds: VersionBounds[],\n): boolean {\n const { major, minor, patch } = version;\n\n return bounds.some(([bMajor, minMinor, maxMinor, minPatch]) => {\n if (major !== bMajor) {\n return false;\n }\n\n if (maxMinor === -1) {\n // Caret range: any minor >= minMinor, with patch check for minMinor\n return minor > minMinor || (minor === minMinor && patch >= minPatch);\n }\n\n // Tilde range: specific minor only\n return minor === maxMinor && patch >= minPatch;\n });\n}\n\n/**\n * Checks if a version string is compatible with the given bounds.\n * This is a convenience function that combines parsing and checking.\n *\n * @param version - The version string to check (e.g., \"18.3.1\")\n * @param bounds - Array of version bounds to check against\n * @returns true if the version is compatible, false otherwise\n */\nexport function isVersionCompatible(version: string, bounds: VersionBounds[]): boolean {\n const parsed = parseVersion(version);\n if (!parsed) {\n return false;\n }\n return checkVersionAgainstBounds(parsed, bounds);\n}\n\n/**\n * Returns true if the given version is at least the minimum version.\n * Both versions are compared by their major.minor.patch components only.\n * Pre-release suffixes are ignored (e.g., \"5.114.0-canary.123\" is treated as \"5.114.0\").\n *\n * @param version - The version string to check (e.g., \"5.114.0\")\n * @param minVersion - The minimum required version (e.g., \"5.100.0\")\n * @returns true if version >= minVersion, false otherwise (including if either cannot be parsed)\n *\n * @example\n * isVersionAtLeast(\"5.114.0\", \"5.100.0\") // true\n * isVersionAtLeast(\"5.99.0\", \"5.100.0\") // false\n * isVersionAtLeast(\"5.100.0-canary.123\", \"5.100.0\") // true\n */\nexport function isVersionAtLeast(version: string | undefined | null, minVersion: string): boolean {\n if (!version) {\n return false;\n }\n\n const parsed = parseVersion(version);\n const minParsed = parseVersion(minVersion);\n\n if (!parsed || !minParsed) {\n return false;\n }\n\n if (parsed.major !== minParsed.major) {\n return parsed.major > minParsed.major;\n }\n if (parsed.minor !== minParsed.minor) {\n return parsed.minor > minParsed.minor;\n }\n return parsed.patch >= minParsed.patch;\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,aAAa,SAAyE;CACpG,MAAM,QAAQ,QAAQ,MAAM,sBAAsB;CAClD,IAAI,CAAC,OACH,OAAO;CAGT,MAAM,GAAG,UAAU,UAAU,YAAY;CACzC,OAAO;EACL,OAAO,SAAS,UAAU,EAAE;EAC5B,OAAO,SAAS,UAAU,EAAE;EAC5B,OAAO,SAAS,UAAU,EAAE;CAC9B;AACF;;;;;;;;;;;AAYA,SAAgB,0BACd,SACA,QACS;CACT,MAAM,EAAE,OAAO,OAAO,UAAU;CAEhC,OAAO,OAAO,MAAM,CAAC,QAAQ,UAAU,UAAU,cAAc;EAC7D,IAAI,UAAU,QACZ,OAAO;EAGT,IAAI,aAAa,IAEf,OAAO,QAAQ,YAAa,UAAU,YAAY,SAAS;EAI7D,OAAO,UAAU,YAAY,SAAS;CACxC,CAAC;AACH;;;;;;;;;AAUA,SAAgB,oBAAoB,SAAiB,QAAkC;CACrF,MAAM,SAAS,aAAa,OAAO;CACnC,IAAI,CAAC,QACH,OAAO;CAET,OAAO,0BAA0B,QAAQ,MAAM;AACjD;;;;;;;;;;;;;;;AAgBA,SAAgB,iBAAiB,SAAoC,YAA6B;CAChG,IAAI,CAAC,SACH,OAAO;CAGT,MAAM,SAAS,aAAa,OAAO;CACnC,MAAM,YAAY,aAAa,UAAU;CAEzC,IAAI,CAAC,UAAU,CAAC,WACd,OAAO;CAGT,IAAI,OAAO,UAAU,UAAU,OAC7B,OAAO,OAAO,QAAQ,UAAU;CAElC,IAAI,OAAO,UAAU,UAAU,OAC7B,OAAO,OAAO,QAAQ,UAAU;CAElC,OAAO,OAAO,SAAS,UAAU;AACnC"}