UNPKG

release-installer

Version:
44 lines (43 loc) 1.5 kB
import { arch, platform } from 'node:os'; export function getPlatformInfo() { const p = platform(); const a = arch(); return { platform: p, arch: a, combined: `${p}-${a}`, }; } export function matchAssetName(assetName, platformInfo) { const name = assetName.toLowerCase(); const { platform: p, arch: a } = platformInfo; // Platform patterns const platformPatterns = { darwin: ['apple-darwin', 'macos', 'darwin', 'apple'], linux: ['linux-gnu', 'linux', 'unknown-linux'], win32: ['windows-msvc', 'windows', 'win64', 'win32', 'pc-windows'], }; // Architecture patterns const archPatterns = { x64: ['x86_64', 'x64', 'amd64'], arm64: ['aarch64', 'arm64'], arm: ['armv7', 'arm'], }; const platformMatch = platformPatterns[p]?.some((pattern) => name.includes(pattern)); const archMatch = archPatterns[a]?.some((pattern) => name.includes(pattern)); return Boolean(platformMatch && archMatch); } export function findBestAsset(assets, platformInfo) { const matches = assets.filter((asset) => matchAssetName(asset, platformInfo)); if (matches.length === 0) return null; if (matches.length === 1) return matches[0]; // Prefer tar.gz over zip on non-Windows if (platformInfo.platform !== 'win32') { const tarGz = matches.find((m) => m.endsWith('.tar.gz')); if (tarGz) return tarGz; } return matches[0]; }