| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- "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;
|