UNPKG

yaml-unist-parser

Version:

A YAML parser that produces output compatible with unist

36 lines (34 loc) 1.46 kB
import { attachComments } from "./attach.mjs"; import { createRoot } from "./factories/root.mjs"; import context_default from "./transforms/context.mjs"; import { transformDocuments } from "./transforms/documents.mjs"; import { updatePositions } from "./utils/update-positions.mjs"; import { YAMLSyntaxError } from "./yaml-syntax-error.mjs"; import * as YAML from "yaml"; //#region src/parse.ts function parse(text, options) { const lineCounter = new YAML.LineCounter(); const context = new context_default(text, lineCounter); const parser = new YAML.Parser(lineCounter.addNewLine); const composer = new YAML.Composer({ keepSourceTokens: true, uniqueKeys: options === null || options === void 0 ? void 0 : options.uniqueKeys, lineCounter, merge: true }); const parsedDocuments = []; const cstTokens = [...parser.parse(text)]; for (const parsedDocument of composer.compose(cstTokens, true, text.length)) { const { errors } = parsedDocument; if (errors.length > 0) throw new YAMLSyntaxError(context, errors[0]); parsedDocuments.push(parsedDocument); } const documents = transformDocuments(parsedDocuments, cstTokens, context); const comments = context.comments.sort((commentA, commentB) => commentA.position.start.offset - commentB.position.end.offset); const root = createRoot(context.transformRange([0, text.length]), documents, comments); attachComments(root); updatePositions(root); return root; } //#endregion export { parse };