majas
Version:
Format-agnostic structure converter.
22 lines (21 loc) • 696 B
JavaScript
import {} from '../core/Format.js';
import { Ajv } from 'ajv';
import { IRNodeSchema, normalize } from '../core/IRNode.js';
import { FormatterBase } from '../core/Formatter.js';
const validateIRNode = new Ajv().compile(IRNodeSchema);
export default class IR extends FormatterBase {
space;
constructor(format, space) {
super(format);
this.space = space;
}
parseImpl(input) {
const root = JSON.parse(input);
if (!validateIRNode(root))
throw this.error(input, 'invalid IRNode structure', validateIRNode.errors);
return root;
}
emit(output) {
return JSON.stringify(normalize(output.root), null, this.space);
}
}