src/mergers/yaml.mjs
import { parse, stringify } from "yaml";
import { StringContentEntry } from "content-entry";
import { merge } from "hinted-tree-merger";
import { Merger } from "../merger.mjs";
import { actions2message, aggregateActions } from "../util.mjs";
export class YAML extends Merger {
static get pattern() {
return "**/*.yaml";
}
static get options() {
return {
...super.options,
expand: true,
messagePrefix: "chore: "
};
}
static async *commits(
context,
destinationEntry,
sourceEntry,
options = this.options
) {
const [original, template] = await Promise.all([
destinationEntry.string,
sourceEntry.string
]);
const actions = {};
const merged = stringify(
merge(
parse(context.expand(original, options.expand)),
parse(context.expand(template, options.expand)),
"",
(action, hint) => aggregateActions(actions, action, hint),
options.mergeHints
)
);
if (original !== merged) {
const name = destinationEntry.name;
yield {
entries: [new StringContentEntry(name, merged)],
message: actions2message(actions, options.messagePrefix, name)
};
}
}
}