tap
Version:
A Test-Anything-Protocol library for JavaScript
189 lines (153 loc) • 6.11 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _addComment = _interopRequireDefault(require("../addComment"));
var _constants = require("../constants");
var _toJSON = _interopRequireDefault(require("../toJSON"));
var _Collection = _interopRequireDefault(require("./Collection"));
var _Node2 = _interopRequireDefault(require("./Node"));
var _Scalar = _interopRequireDefault(require("./Scalar"));
// Published as 'yaml/pair'
var stringifyKey = function stringifyKey(key, jsKey, ctx) {
if (jsKey === null) return '';
if ((0, _typeof2.default)(jsKey) !== 'object') return String(jsKey);
if (key instanceof _Node2.default && ctx && ctx.doc) return key.toString({
anchors: {},
doc: ctx.doc,
indent: '',
inFlow: true,
inStringifyKey: true
});
return JSON.stringify(jsKey);
};
var Pair =
/*#__PURE__*/
function (_Node) {
(0, _inherits2.default)(Pair, _Node);
function Pair(key) {
var _this;
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
(0, _classCallCheck2.default)(this, Pair);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Pair).call(this));
_this.key = key;
_this.value = value;
_this.type = 'PAIR';
return _this;
}
(0, _createClass2.default)(Pair, [{
key: "addToJSMap",
value: function addToJSMap(ctx, map) {
var key = (0, _toJSON.default)(this.key, '', ctx);
if (map instanceof Map) {
var value = (0, _toJSON.default)(this.value, key, ctx);
map.set(key, value);
} else if (map instanceof Set) {
map.add(key);
} else {
var stringKey = stringifyKey(this.key, key, ctx);
map[stringKey] = (0, _toJSON.default)(this.value, stringKey, ctx);
}
return map;
}
}, {
key: "toJSON",
value: function toJSON(_, ctx) {
var pair = ctx && ctx.mapAsMap ? new Map() : {};
return this.addToJSMap(ctx, pair);
}
}, {
key: "toString",
value: function toString(ctx, onComment, onChompKeep) {
if (!ctx || !ctx.doc) return JSON.stringify(this);
var simpleKeys = ctx.doc.options.simpleKeys;
var key = this.key,
value = this.value;
var keyComment = key instanceof _Node2.default && key.comment;
if (simpleKeys) {
if (keyComment) {
throw new Error('With simple keys, key nodes cannot have comments');
}
if (key instanceof _Collection.default) {
var msg = 'With simple keys, collection cannot be used as a key value';
throw new Error(msg);
}
}
var explicitKey = !simpleKeys && (!key || keyComment || key instanceof _Collection.default || key.type === _constants.Type.BLOCK_FOLDED || key.type === _constants.Type.BLOCK_LITERAL);
var _ctx = ctx,
doc = _ctx.doc,
indent = _ctx.indent;
ctx = Object.assign({}, ctx, {
implicitKey: !explicitKey,
indent: indent + ' '
});
var chompKeep = false;
var str = doc.schema.stringify(key, ctx, function () {
return keyComment = null;
}, function () {
return chompKeep = true;
});
str = (0, _addComment.default)(str, ctx.indent, keyComment);
if (ctx.allNullValues && !simpleKeys) {
if (this.comment) {
str = (0, _addComment.default)(str, ctx.indent, this.comment);
if (onComment) onComment();
} else if (chompKeep && !keyComment && onChompKeep) onChompKeep();
return ctx.inFlow ? str : "? ".concat(str);
}
str = explicitKey ? "? ".concat(str, "\n").concat(indent, ":") : "".concat(str, ":");
if (this.comment) {
// expected (but not strictly required) to be a single-line comment
str = (0, _addComment.default)(str, ctx.indent, this.comment);
if (onComment) onComment();
}
var vcb = '';
var valueComment = null;
if (value instanceof _Node2.default) {
if (value.spaceBefore) vcb = '\n';
if (value.commentBefore) {
var cs = value.commentBefore.replace(/^/gm, "".concat(ctx.indent, "#"));
vcb += "\n".concat(cs);
}
valueComment = value.comment;
} else if (value && (0, _typeof2.default)(value) === 'object') {
value = doc.schema.createNode(value, true);
}
ctx.implicitKey = false;
chompKeep = false;
var valueStr = doc.schema.stringify(value, ctx, function () {
return valueComment = null;
}, function () {
return chompKeep = true;
});
var ws = ' ';
if (vcb || this.comment) {
ws = "".concat(vcb, "\n").concat(ctx.indent);
} else if (!explicitKey && value instanceof _Collection.default) {
var flow = valueStr[0] === '[' || valueStr[0] === '{';
if (!flow || valueStr.includes('\n')) ws = "\n".concat(ctx.indent);
}
if (chompKeep && !valueComment && onChompKeep) onChompKeep();
return (0, _addComment.default)(str + ws + valueStr, ctx.indent, valueComment);
}
}, {
key: "commentBefore",
get: function get() {
return this.key && this.key.commentBefore;
},
set: function set(cb) {
if (this.key == null) this.key = new _Scalar.default(null);
this.key.commentBefore = cb;
}
}]);
return Pair;
}(_Node2.default);
exports.default = Pair;