UNPKG

majas

Version:

Format-agnostic structure converter.

74 lines (73 loc) 2.12 kB
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; }