majas
Version:
Format-agnostic structure converter.
33 lines (32 loc) • 996 B
JavaScript
import { readFileSync } from 'fs';
import ParseError from './ParseError.js';
import { TextDecoder } from 'util';
export function decode(encoding, buf) {
return new TextDecoder(encoding).decode(buf);
}
export function readFile(encoding, path) {
return readFileSync(path, { encoding });
}
export function decodeRawInput(input, encoding, decodeArg = readFile, decodeStdin = decode) {
return typeof input === 'string' ? decodeArg(encoding, input) : decodeStdin(encoding, input);
}
export class FormatterBase {
format;
constructor(format) {
this.format = format;
}
parse(input) {
try {
return {
format: this.format,
root: this.parseImpl(input),
};
}
catch (err) {
throw err instanceof ParseError ? err : this.error(input, undefined, err);
}
}
error(input, message, cause) {
return new ParseError(this.format, String(input), message, cause);
}
}