depends-txt
Version:
A parser module for TeX Live's DEPENDS.txt file format
54 lines • 1.75 kB
JavaScript
import { VFileMessage } from 'vfile-message';
import { Directive, Event, validate } from './events.js';
import { Parser } from './parser.js';
export function deserialize(input, options) {
const dependsTxt = new Map([[undefined, {}]]);
const parser = new Parser(input);
let deps = dependsTxt.get();
for (const event of parser) {
const { type, value, data } = event;
switch (type) {
case Event.Name:
if (parser.directive === Directive.Package) {
deps = dependsTxt.get(value) ?? {};
dependsTxt.set(value, deps);
}
else {
deps[parser.directive] ??= new Set();
deps[parser.directive]?.add(value);
}
break;
case Event.Error:
throw new ParseError(undefined, data.message);
default:
}
if (options?.strict ?? false) {
for (const msg of validate(event)) {
throw new ParseError(undefined, {
...structuredClone(msg),
ancestors: [event],
});
}
}
}
return dependsTxt;
}
export class ParseError extends VFileMessage {
fatal;
constructor(reason,
/* eslint-disable-next-line
@typescript-eslint/prefer-readonly-parameter-types */
options) {
super(reason ?? options.reason, options);
this.fatal = options.fatal;
this.actual = options.actual;
this.expected = options.expected;
}
get name() {
return 'ParseError';
}
get [Symbol.toStringTag]() {
return this.name;
}
}
//# sourceMappingURL=deserialize.js.map