"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.isEmptyPath = void 0; var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray")); 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 _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _addComment = _interopRequireDefault(require("../addComment")); var _Node2 = _interopRequireDefault(require("./Node")); var _Pair = _interopRequireDefault(require("./Pair")); var _Scalar = _interopRequireDefault(require("./Scalar")); // null, undefined, or an empty non-string iterable (e.g. []) var isEmptyPath = function isEmptyPath(path) { return path == null || (0, _typeof2.default)(path) === 'object' && path[Symbol.iterator]().next().done; }; exports.isEmptyPath = isEmptyPath; var Collection = /*#__PURE__*/ function (_Node) { (0, _inherits2.default)(Collection, _Node); function Collection() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, Collection); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Collection)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "items", []); return _this; } (0, _createClass2.default)(Collection, [{ key: "addIn", value: function addIn(path, value) { if (isEmptyPath(path)) this.add(value);else { var _path = (0, _toArray2.default)(path), key = _path[0], rest = _path.slice(1); var node = this.get(key, true); if (node instanceof Collection) node.addIn(rest, value);else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); } } }, { key: "deleteIn", value: function deleteIn(_ref) { var _ref2 = (0, _toArray2.default)(_ref), key = _ref2[0], rest = _ref2.slice(1); if (rest.length === 0) return this.delete(key); var node = this.get(key, true); if (node instanceof Collection) return node.deleteIn(rest);else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); } }, { key: "getIn", value: function getIn(_ref3, keepScalar) { var _ref4 = (0, _toArray2.default)(_ref3), key = _ref4[0], rest = _ref4.slice(1); var node = this.get(key, true); if (rest.length === 0) return !keepScalar && node instanceof _Scalar.default ? node.value : node;else return node instanceof Collection ? node.getIn(rest, keepScalar) : undefined; } }, { key: "hasAllNullValues", value: function hasAllNullValues() { return this.items.every(function (node) { if (!(node instanceof _Pair.default)) return false; var n = node.value; return n == null || n instanceof _Scalar.default && n.value == null && !n.commentBefore && !n.comment && !n.tag; }); } }, { key: "hasIn", value: function hasIn(_ref5) { var _ref6 = (0, _toArray2.default)(_ref5), key = _ref6[0], rest = _ref6.slice(1); if (rest.length === 0) return this.has(key); var node = this.get(key, true); return node instanceof Collection ? node.hasIn(rest) : false; } }, { key: "setIn", value: function setIn(_ref7, value) { var _ref8 = (0, _toArray2.default)(_ref7), key = _ref8[0], rest = _ref8.slice(1); if (rest.length === 0) { this.set(key, value); } else { var node = this.get(key, true); if (node instanceof Collection) node.setIn(rest, value);else throw new Error("Expected YAML collection at ".concat(key, ". Remaining path: ").concat(rest)); } } // overridden in implementations }, { key: "toJSON", value: function toJSON() { return null; } }, { key: "toString", value: function toString(ctx, _ref9, onComment, onChompKeep) { var _this2 = this; var blockItem = _ref9.blockItem, flowChars = _ref9.flowChars, isMap = _ref9.isMap, itemIndent = _ref9.itemIndent; var _ctx = ctx, doc = _ctx.doc, indent = _ctx.indent; var inFlow = this.type && this.type.substr(0, 4) === 'FLOW' || ctx.inFlow; if (inFlow) itemIndent += ' '; var allNullValues = isMap && this.hasAllNullValues(); ctx = Object.assign({}, ctx, { allNullValues: allNullValues, indent: itemIndent, inFlow: inFlow, type: null }); var chompKeep = false; var hasItemWithNewLine = false; var nodes = this.items.reduce(function (nodes, item, i) { var comment; if (item) { if (!chompKeep && item.spaceBefore) nodes.push({ type: 'comment', str: '' }); if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(function (line) { nodes.push({ type: 'comment', str: "#".concat(line) }); }); if (item.comment) comment = item.comment; if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true; } chompKeep = false; var str = doc.schema.stringify(item, ctx, function () { return comment = null; }, function () { return chompKeep = true; }); if (inFlow && !hasItemWithNewLine && str.includes('\n')) hasItemWithNewLine = true; if (inFlow && i < _this2.items.length - 1) str += ','; str = (0, _addComment.default)(str, itemIndent, comment); if (chompKeep && (comment || inFlow)) chompKeep = false; nodes.push({ type: 'item', str: str }); return nodes; }, []); var str; if (nodes.length === 0) { str = flowChars.start + flowChars.end; } else if (inFlow) { var start = flowChars.start, end = flowChars.end; var strings = nodes.map(function (n) { return n.str; }); if (hasItemWithNewLine || strings.reduce(function (sum, str) { return sum + str.length + 2; }, 2) > Collection.maxFlowStringSingleLineLength) { str = start; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = strings[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var s = _step.value; str += s ? "\n ".concat(indent).concat(s) : '\n'; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } str += "\n".concat(indent).concat(end); } else { str = "".concat(start, " ").concat(strings.join(' '), " ").concat(end); } } else { var _strings = nodes.map(blockItem); str = _strings.shift(); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = _strings[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _s = _step2.value; str += _s ? "\n".concat(indent).concat(_s) : '\n'; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } if (this.comment) { str += '\n' + this.comment.replace(/^/gm, "".concat(indent, "#")); if (onComment) onComment(); } else if (chompKeep && onChompKeep) onChompKeep(); return str; } }]); return Collection; }(_Node2.default); exports.default = Collection; (0, _defineProperty2.default)(Collection, "maxFlowStringSingleLineLength", 60);