majas
Version:
Format-agnostic structure converter.
74 lines (73 loc) • 2.12 kB
JavaScript
import * as p from 'path';
import formats from '../core/formats.js';
export function throwf(e) {
throw e;
}
export function map(map, t) {
return t === undefined ? undefined : map(t);
}
export function preprocessOptionsArgs(args) {
const input = {};
const output = {};
const option = { bag: input };
let processOptions = true;
const newArgs = [];
for (const arg of args) {
if (arg === '--') {
processOptions = false;
}
if (processOptions &&
(detectPrefix(arg, input, '-i') ||
detectPrefix(arg, input, '--in-') ||
detectPrefix(arg, output, '-o') ||
detectPrefix(arg, output, '--out-'))) {
}
else if (option.key !== undefined) {
const argNumber = parseFloat(arg);
option.bag[option.key] = isNaN(argNumber) ? arg : argNumber;
option.key = undefined;
}
else {
newArgs.push(arg);
}
}
return {
input,
output,
args: newArgs,
};
function detectPrefix(arg, bag, prefix) {
return (arg.startsWith(prefix) &&
arg.length > prefix.length &&
((option.bag = bag)[(option.key = arg.slice(prefix.length))] = true));
}
}
export async function readFromStdin() {
return new Promise((resolve, reject) => {
const chunks = [];
process.stdin.on('data', chunk => {
chunks.push(chunk);
});
process.stdin.on('end', () => {
resolve(Buffer.concat(chunks));
});
process.stdin.on('error', reject);
});
}
export function inferFormat(path) {
const ext = p.extname(path).slice(1);
for (const format of formats) {
if (format.fileExtensions.includes(ext)) {
return format;
}
}
return undefined;
}
export function findFormat(name) {
name = name.toLowerCase();
for (const format of formats) {
if (format.displayName.toLowerCase() == name || format.aliases.includes(name))
return format;
}
return undefined;
}