"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.knownArchs = exports.targetArchs = exports.hostArch = exports.knownPlatforms = exports.hostPlatform = exports.hostAbi = exports.toFancyArch = exports.toFancyPlatform = exports.isValidNodeRange = exports.abiToNodeRange = void 0;
var fs_1 = __importDefault(require("fs"));
var child_process_1 = require("child_process");
function getHostAbi() {
    return "m".concat(process.versions.modules);
}
function abiToNodeRange(abi) {
    if (/^m?14/.test(abi))
        return 'node0.12';
    if (/^m?46/.test(abi))
        return 'node4';
    if (/^m?47/.test(abi))
        return 'node5';
    if (/^m?48/.test(abi))
        return 'node6';
    if (/^m?51/.test(abi))
        return 'node7';
    if (/^m?57/.test(abi))
        return 'node8';
    if (/^m?59/.test(abi))
        return 'node9';
    if (/^m?64/.test(abi))
        return 'node10';
    if (/^m?67/.test(abi))
        return 'node11';
    if (/^m?72/.test(abi))
        return 'node12';
    if (/^m?79/.test(abi))
        return 'node13';
    if (/^m?83/.test(abi))
        return 'node14';
    return abi;
}
exports.abiToNodeRange = abiToNodeRange;
function isValidNodeRange(nodeRange) {
    if (nodeRange === 'latest')
        return true;
    if (!/^node/.test(nodeRange))
        return false;
    return true;
}
exports.isValidNodeRange = isValidNodeRange;
function toFancyPlatform(platform) {
    if (platform === 'darwin')
        return 'macos';
    if (platform === 'lin')
        return 'linux';
    if (platform === 'mac')
        return 'macos';
    if (platform === 'osx')
        return 'macos';
    if (platform === 'win32')
        return 'win';
    if (platform === 'windows')
        return 'win';
    return platform;
}
exports.toFancyPlatform = toFancyPlatform;
function detectAlpine() {
    var _a;
    var platform = process.platform;
    if (platform !== 'linux') {
        return false;
    }
    // https://github.com/sass/node-sass/issues/1589#issuecomment-265292579
    var ldd = (_a = (0, child_process_1.spawnSync)('ldd').stderr) === null || _a === void 0 ? void 0 : _a.toString();
    if (ldd == null) {
        return fs_1.default.readdirSync('/lib').some(function (file) { return file.startsWith('libc.musl'); });
    }
    if (/\bmusl\b/.test(ldd)) {
        return true;
    }
    var lddNode = (0, child_process_1.spawnSync)('ldd', [process.execPath]).stdout.toString();
    return /\bmusl\b/.test(lddNode);
}
var isAlpine = detectAlpine();
function getHostPlatform() {
    var platform = process.platform;
    if (isAlpine) {
        return 'alpine';
    }
    return toFancyPlatform(platform);
}
function getKnownPlatforms() {
    return ['alpine', 'freebsd', 'linux', 'linuxstatic', 'macos', 'win'];
}
function toFancyArch(arch) {
    if (arch === 'ia32')
        return 'x86';
    if (arch === 'x86_64')
        return 'x64';
    return arch;
}
exports.toFancyArch = toFancyArch;
function getArmUnameArch() {
    var uname = (0, child_process_1.spawnSync)('uname', ['-a']);
    if (uname.error) {
        return '';
    }
    var unameOut = uname.stdout && uname.stdout.toString();
    unameOut = (unameOut || '').toLowerCase();
    if (unameOut.includes('aarch64'))
        return 'arm64';
    if (unameOut.includes('arm64'))
        return 'arm64';
    if (unameOut.includes('armv7'))
        return 'armv7';
    return '';
}
function getArmHostArch() {
    var _a;
    var cpu = fs_1.default.readFileSync('/proc/cpuinfo', 'utf8');
    if (cpu.indexOf('vfpv3') >= 0) {
        return 'armv7';
    }
    var name = cpu.split('model name')[1];
    if (name)
        _a = name.split(':'), name = _a[1];
    if (name)
        name = name.split('\n')[0];
    if (name && name.indexOf('ARMv7') >= 0)
        return 'armv7';
    return 'armv6';
}
function getHostArch() {
    var arch = process.arch;
    if (arch === 'arm') {
        return getArmUnameArch() || getArmHostArch();
    }
    return toFancyArch(arch);
}
function getTargetArchs() {
    var arch = getHostArch();
    if (arch === 'x64') {
        return ['x64', 'x86'];
    }
    return [arch];
}
function getKnownArchs() {
    return ['x64', 'x86', 'armv7', 'arm64', 'ppc64', 's390x', 'riscv64', 'loong64'];
}
exports.hostAbi = getHostAbi();
exports.hostPlatform = getHostPlatform();
exports.knownPlatforms = getKnownPlatforms();
exports.hostArch = getHostArch();
exports.targetArchs = getTargetArchs();
exports.knownArchs = getKnownArchs();
//# sourceMappingURL=system.js.map