"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.MERGE_KEY = void 0; var _Map = _interopRequireDefault(require("./Map")); var _Pair = _interopRequireDefault(require("./Pair")); var _Scalar = _interopRequireDefault(require("./Scalar")); var _Seq = _interopRequireDefault(require("./Seq")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const MERGE_KEY = '<<'; exports.MERGE_KEY = MERGE_KEY; class Merge extends _Pair.default { constructor(pair) { if (pair instanceof _Pair.default) { let seq = pair.value; if (!(seq instanceof _Seq.default)) { seq = new _Seq.default(); seq.items.push(pair.value); seq.range = pair.value.range; } super(pair.key, seq); this.range = pair.range; } else { super(new _Scalar.default(MERGE_KEY), new _Seq.default()); } this.type = 'MERGE_PAIR'; } // If the value associated with a merge key is a single mapping node, each of // its key/value pairs is inserted into the current mapping, unless the key // already exists in it. If the value associated with the merge key is a // sequence, then this sequence is expected to contain mapping nodes and each // of these nodes is merged in turn according to its order in the sequence. // Keys in mapping nodes earlier in the sequence override keys specified in // later mapping nodes. -- http://yaml.org/type/merge.html addToJSMap(ctx, map) { for (const { source } of this.value.items) { if (!(source instanceof _Map.default)) throw new Error('Merge sources must be maps'); const srcMap = source.toJSON(null, ctx, Map); for (const [key, value] of srcMap) { if (map instanceof Map) { if (!map.has(key)) map.set(key, value); } else if (map instanceof Set) { map.add(key); } else { if (!Object.prototype.hasOwnProperty.call(map, key)) map[key] = value; } } } return map; } toString(ctx, onComment) { const seq = this.value; if (seq.items.length > 1) return super.toString(ctx, onComment); this.value = seq.items[0]; const str = super.toString(ctx, onComment); this.value = seq; return str; } } exports.default = Merge;