UNPKG

depends-txt

Version:
54 lines 1.75 kB
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