yaml-unist-parser
Version:
A YAML parser that produces output compatible with unist
40 lines (38 loc) • 1.84 kB
JavaScript
import { extractComments } from "../utils/extract-comments.mjs";
import { createFlowMapping } from "../factories/flow-mapping.mjs";
import { createFlowMappingItem } from "../factories/flow-mapping-item.mjs";
import { transformPair } from "./pair.mjs";
//#region src/transforms/flow-map.ts
function transformFlowMap(flowMap, context, props) {
const srcToken = flowMap.srcToken;
// istanbul ignore if -- @preserve
if (!srcToken || srcToken.type !== "flow-collection") throw new Error("Expected flow-collection CST node for flow map");
const flowMappingItems = flowMap.items.map((pair, index) => {
const srcItem = srcToken.items[index];
return transformPair(pair, srcItem, context, createFlowMappingItem);
});
if (flowMap.items.length < srcToken.items.length) for (let i = flowMap.items.length; i < srcToken.items.length; i++) {
const srcItem = srcToken.items[i];
for (const token of extractComments(srcItem.start, context)) {
// istanbul ignore else -- @preserve
if (token.type === "comma") continue;
// istanbul ignore next -- @preserve
throw new Error(`Unexpected token type in collection item start: ${token.type}`);
}
}
let flowMapEndToken = null;
for (const token of extractComments(srcToken.end, context)) {
// istanbul ignore else -- @preserve
if (token.type === "flow-map-end") {
flowMapEndToken = token;
continue;
}
// istanbul ignore next -- @preserve
throw new Error(`Unexpected token type in flow map end: ${token.type}`);
}
// istanbul ignore if -- @preserve
if (!flowMapEndToken) throw new Error("Expected flow-map-end token");
return createFlowMapping(context.transformRange([srcToken.start.offset, flowMapEndToken.offset + flowMapEndToken.source.length]), context.transformContentProperties(flowMap, props.tokens), flowMappingItems);
}
//#endregion
export { transformFlowMap };