node-pkware
Version:
nodejs implementation of StormLib's pkware compressor/de-compressor
63 lines • 1.71 kB
JavaScript
import fs from 'node:fs';
import path from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
function isDecimalString(input) {
return /^\d+$/.test(input);
}
function isFullHexString(input) {
return /^\s*0x[\da-f]+\s*$/.test(input);
}
export function parseNumberString(n, defaultValue = 0) {
if (n === undefined) {
return defaultValue;
}
if (isDecimalString(n)) {
return Number.parseInt(n, 10);
}
if (isFullHexString(n)) {
return Number.parseInt(n.replace(/^0x/, ''), 16);
}
return defaultValue;
}
function pathToPackageJson() {
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
return path.resolve(dirname, '../../package.json');
}
export async function getPackageVersion() {
try {
const rawIn = await fs.promises.readFile(pathToPackageJson(), 'utf8');
const { version } = JSON.parse(rawIn);
return version;
}
catch {
return 'unknown';
}
}
async function fileExists(filename) {
try {
await fs.promises.access(filename, fs.constants.R_OK);
return true;
}
catch {
return false;
}
}
export async function getInputStream(filename) {
if (filename === undefined) {
process.stdin.resume();
return process.stdin;
}
if (await fileExists(filename)) {
return fs.createReadStream(filename);
}
throw new Error('input file does not exist');
}
export async function getOutputStream(filename) {
if (filename === undefined) {
return process.stdout;
}
return fs.createWriteStream(filename);
}
//# sourceMappingURL=helpers.js.map