windows-drive-letters
Version:
List of available drive letters for use in Windows OS
61 lines (60 loc) • 1.94 kB
JavaScript
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');
}
}
;