yaml-unist-parser
Version:
A YAML parser that produces output compatible with unist
31 lines (30 loc) • 1.77 kB
JavaScript
import { createFlowMappingItem } from "../factories/flow-mapping-item.js";
import { createFlowSequence } from "../factories/flow-sequence.js";
import { createFlowSequenceItem } from "../factories/flow-sequence-item.js";
import { createPosition } from "../factories/position.js";
import { extractComments } from "../utils/extract-comments.js";
import { getFlowMapItemAdditionalRanges } from "../utils/get-flow-map-item-additional-ranges.js";
import { getLast } from "../utils/get-last.js";
import { groupCstFlowCollectionItems } from "../utils/group-cst-flow-collection-items.js";
import { transformAstPair } from "./pair.js";
export function transformFlowSeq(flowSeq, context) {
const cstItemsWithoutComments = extractComments(flowSeq.cstNode.items, context);
const groupedCstItems = groupCstFlowCollectionItems(cstItemsWithoutComments);
const flowSequenceItems = flowSeq.items.map((item, index) => {
if (item.type !== "PAIR") {
const node = context.transformNode(item);
return createFlowSequenceItem(createPosition(node.position.start, node.position.end), node);
}
else {
const cstNodes = groupedCstItems[index];
const { additionalKeyRange, additionalValueRange } = getFlowMapItemAdditionalRanges(cstNodes);
return transformAstPair(item, context, createFlowMappingItem, additionalKeyRange, additionalValueRange);
}
});
const openMarker = cstItemsWithoutComments[0];
const closeMarker = getLast(cstItemsWithoutComments);
return createFlowSequence(context.transformRange({
origStart: openMarker.origOffset,
origEnd: closeMarker.origOffset + 1,
}), context.transformContent(flowSeq), flowSequenceItems);
}