tap
Version:
A Test-Anything-Protocol library for JavaScript
147 lines (119 loc) • 5.28 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.MERGE_KEY = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _Map = _interopRequireDefault(require("./Map"));
var _Pair2 = _interopRequireDefault(require("./Pair"));
var _Scalar = _interopRequireDefault(require("./Scalar"));
var _Seq = _interopRequireDefault(require("./Seq"));
var MERGE_KEY = '<<';
exports.MERGE_KEY = MERGE_KEY;
var Merge =
/*#__PURE__*/
function (_Pair) {
(0, _inherits2.default)(Merge, _Pair);
function Merge(pair) {
var _this;
(0, _classCallCheck2.default)(this, Merge);
if (pair instanceof _Pair2.default) {
var seq = pair.value;
if (!(seq instanceof _Seq.default)) {
seq = new _Seq.default();
seq.items.push(pair.value);
seq.range = pair.value.range;
}
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Merge).call(this, pair.key, seq));
_this.range = pair.range;
} else {
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Merge).call(this, new _Scalar.default(MERGE_KEY), new _Seq.default()));
}
_this.type = 'MERGE_PAIR';
return (0, _possibleConstructorReturn2.default)(_this);
} // 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
(0, _createClass2.default)(Merge, [{
key: "addToJSMap",
value: function addToJSMap(ctx, map) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = this.value.items[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var source = _step.value.source;
if (!(source instanceof _Map.default)) throw new Error('Merge sources must be maps');
var srcMap = source.toJSON(null, ctx, Map);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = srcMap[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _step2$value = (0, _slicedToArray2.default)(_step2.value, 2),
key = _step2$value[0],
value = _step2$value[1];
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;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return map;
}
}, {
key: "toString",
value: function toString(ctx, onComment) {
var seq = this.value;
if (seq.items.length > 1) return (0, _get2.default)((0, _getPrototypeOf2.default)(Merge.prototype), "toString", this).call(this, ctx, onComment);
this.value = seq.items[0];
var str = (0, _get2.default)((0, _getPrototypeOf2.default)(Merge.prototype), "toString", this).call(this, ctx, onComment);
this.value = seq;
return str;
}
}]);
return Merge;
}(_Pair2.default);
exports.default = Merge;