UNPKG

yaml-unist-parser

Version:

A YAML parser that produces output compatible with unist

38 lines (36 loc) 1.43 kB
import { createAnchor } from "../factories/anchor.mjs"; import { createContent } from "../factories/content.mjs"; import { createTag } from "../factories/tag.mjs"; //#region src/transforms/content.ts function transformContentProperties(node, tokens, context) { const middleComments = []; let firstTagOrAnchorRange = null; let tag = null; let anchor = null; for (const token of tokens) { const tokenRange = [token.offset, token.offset + token.source.length]; switch (token.type) { case "tag": { firstTagOrAnchorRange ?? (firstTagOrAnchorRange = tokenRange); let resolvedTag = node.tag ?? token.source.slice(token.source.startsWith("!!") ? 2 : 1); if (resolvedTag === "!") resolvedTag = "tag:yaml.org,2002:str"; tag = createTag(context.transformRange(tokenRange), resolvedTag); } break; case "anchor": firstTagOrAnchorRange ?? (firstTagOrAnchorRange = tokenRange); anchor = createAnchor(context.transformRange(tokenRange), node.anchor); break; case "comment": { const comment = context.transformComment(token); if (firstTagOrAnchorRange && firstTagOrAnchorRange[0] <= tokenRange[0] && tokenRange[1] <= node.range[0]) middleComments.push(comment); break; } default: throw new Error(`Unexpected content property token type: ${token.type}`); } } return createContent(tag, anchor, middleComments); } //#endregion export { transformContentProperties };