UNPKG

windows-drive-letters

Version:

List of available drive letters for use in Windows OS

61 lines (60 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const cp = require("child_process"); const arrayDiff = require("array-differ"); const utils = require("./utils"); const ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; const COMMAND = 'wmic logicaldisk get caption'; const IS_WINDOWS = process.platform === 'win32'; async function free() { validateWindowsPlatform(); const letters = await used(); return arrayDiff(ALPHABET, letters); } exports.free = free; function freeSync() { validateWindowsPlatform(); return arrayDiff(ALPHABET, usedSync()); } exports.freeSync = freeSync; async function used() { validateWindowsPlatform(); const stdout = await runCommand(); return utils.getLettersFromTable(stdout); } exports.used = used; function usedSync() { validateWindowsPlatform(); return utils.getLettersFromTable(runCommandSync()); } exports.usedSync = usedSync; async function randomFree() { validateWindowsPlatform(); const letters = await free(); const index = getRandomIndex(letters.length); return letters[index]; } exports.randomFree = randomFree; function randomFreeSync() { validateWindowsPlatform(); const letters = freeSync(); const index = getRandomIndex(letters.length); return letters[index]; } exports.randomFreeSync = randomFreeSync; function runCommand() { return new Promise((resolve, reject) => { cp.exec(COMMAND, (error, stdout) => error ? reject(error) : resolve(stdout)); }); } function runCommandSync() { return cp.execSync(COMMAND, { encoding: 'utf8' }); } function getRandomIndex(length) { return Math.floor(Math.random() * length); } function validateWindowsPlatform() { if (!IS_WINDOWS) { throw new Error('Windows only'); } }