mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
174 lines
5.0 KiB
JavaScript
174 lines
5.0 KiB
JavaScript
"use strict";
|
|
|
|
exports.Pair = void 0;
|
|
|
|
var _addComment = require("../addComment");
|
|
|
|
var _constants = require("../constants");
|
|
|
|
var _toJSON = require("../toJSON");
|
|
|
|
var _Collection = require("./Collection");
|
|
|
|
var _Node = require("./Node");
|
|
|
|
var _Scalar = require("./Scalar");
|
|
|
|
var _Seq = require("./Seq");
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
const stringifyKey = (key, jsKey, ctx) => {
|
|
if (jsKey === null) return '';
|
|
if (typeof jsKey !== 'object') return String(jsKey);
|
|
if (key instanceof _Node.Node && ctx && ctx.doc) return key.toString({
|
|
anchors: {},
|
|
doc: ctx.doc,
|
|
indent: '',
|
|
indentStep: ctx.indentStep,
|
|
inFlow: true,
|
|
inStringifyKey: true
|
|
});
|
|
return JSON.stringify(jsKey);
|
|
};
|
|
|
|
class Pair extends _Node.Node {
|
|
constructor(key, value = null) {
|
|
super();
|
|
this.key = key;
|
|
this.value = value;
|
|
this.type = Pair.Type.PAIR;
|
|
}
|
|
|
|
get commentBefore() {
|
|
return this.key && this.key.commentBefore;
|
|
}
|
|
|
|
set commentBefore(cb) {
|
|
if (this.key == null) this.key = new _Scalar.Scalar(null);
|
|
this.key.commentBefore = cb;
|
|
}
|
|
|
|
addToJSMap(ctx, map) {
|
|
const key = (0, _toJSON.toJSON)(this.key, '', ctx);
|
|
|
|
if (map instanceof Map) {
|
|
const value = (0, _toJSON.toJSON)(this.value, key, ctx);
|
|
map.set(key, value);
|
|
} else if (map instanceof Set) {
|
|
map.add(key);
|
|
} else {
|
|
const stringKey = stringifyKey(this.key, key, ctx);
|
|
map[stringKey] = (0, _toJSON.toJSON)(this.value, stringKey, ctx);
|
|
}
|
|
|
|
return map;
|
|
}
|
|
|
|
toJSON(_, ctx) {
|
|
const pair = ctx && ctx.mapAsMap ? new Map() : {};
|
|
return this.addToJSMap(ctx, pair);
|
|
}
|
|
|
|
toString(ctx, onComment, onChompKeep) {
|
|
if (!ctx || !ctx.doc) return JSON.stringify(this);
|
|
const {
|
|
indent: indentSize,
|
|
indentSeq,
|
|
simpleKeys
|
|
} = ctx.doc.options;
|
|
let {
|
|
key,
|
|
value
|
|
} = this;
|
|
let keyComment = key instanceof _Node.Node && key.comment;
|
|
|
|
if (simpleKeys) {
|
|
if (keyComment) {
|
|
throw new Error('With simple keys, key nodes cannot have comments');
|
|
}
|
|
|
|
if (key instanceof _Collection.Collection) {
|
|
const msg = 'With simple keys, collection cannot be used as a key value';
|
|
throw new Error(msg);
|
|
}
|
|
}
|
|
|
|
const explicitKey = !simpleKeys && (!key || keyComment || key instanceof _Collection.Collection || key.type === _constants.Type.BLOCK_FOLDED || key.type === _constants.Type.BLOCK_LITERAL);
|
|
const {
|
|
doc,
|
|
indent,
|
|
indentStep
|
|
} = ctx;
|
|
ctx = Object.assign({}, ctx, {
|
|
implicitKey: !explicitKey,
|
|
indent: indent + indentStep
|
|
});
|
|
let chompKeep = false;
|
|
let str = doc.schema.stringify(key, ctx, () => keyComment = null, () => chompKeep = true);
|
|
str = (0, _addComment.addComment)(str, ctx.indent, keyComment);
|
|
|
|
if (ctx.allNullValues && !simpleKeys) {
|
|
if (this.comment) {
|
|
str = (0, _addComment.addComment)(str, ctx.indent, this.comment);
|
|
if (onComment) onComment();
|
|
} else if (chompKeep && !keyComment && onChompKeep) onChompKeep();
|
|
|
|
return ctx.inFlow ? str : `? ${str}`;
|
|
}
|
|
|
|
str = explicitKey ? `? ${str}\n${indent}:` : `${str}:`;
|
|
|
|
if (this.comment) {
|
|
// expected (but not strictly required) to be a single-line comment
|
|
str = (0, _addComment.addComment)(str, ctx.indent, this.comment);
|
|
if (onComment) onComment();
|
|
}
|
|
|
|
let vcb = '';
|
|
let valueComment = null;
|
|
|
|
if (value instanceof _Node.Node) {
|
|
if (value.spaceBefore) vcb = '\n';
|
|
|
|
if (value.commentBefore) {
|
|
const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);
|
|
vcb += `\n${cs}`;
|
|
}
|
|
|
|
valueComment = value.comment;
|
|
} else if (value && typeof value === 'object') {
|
|
value = doc.schema.createNode(value, true);
|
|
}
|
|
|
|
ctx.implicitKey = false;
|
|
if (!explicitKey && !this.comment && value instanceof _Scalar.Scalar) ctx.indentAtStart = str.length + 1;
|
|
chompKeep = false;
|
|
|
|
if (!indentSeq && indentSize >= 2 && !ctx.inFlow && !explicitKey && value instanceof _Seq.YAMLSeq && value.type !== _constants.Type.FLOW_SEQ && !value.tag && !doc.anchors.getName(value)) {
|
|
// If indentSeq === false, consider '- ' as part of indentation where possible
|
|
ctx.indent = ctx.indent.substr(2);
|
|
}
|
|
|
|
const valueStr = doc.schema.stringify(value, ctx, () => valueComment = null, () => chompKeep = true);
|
|
let ws = ' ';
|
|
|
|
if (vcb || this.comment) {
|
|
ws = `${vcb}\n${ctx.indent}`;
|
|
} else if (!explicitKey && value instanceof _Collection.Collection) {
|
|
const flow = valueStr[0] === '[' || valueStr[0] === '{';
|
|
if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`;
|
|
}
|
|
|
|
if (chompKeep && !valueComment && onChompKeep) onChompKeep();
|
|
return (0, _addComment.addComment)(str + ws + valueStr, ctx.indent, valueComment);
|
|
}
|
|
|
|
}
|
|
|
|
exports.Pair = Pair;
|
|
|
|
_defineProperty(Pair, "Type", {
|
|
PAIR: 'PAIR',
|
|
MERGE_PAIR: 'MERGE_PAIR'
|
|
}); |