mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
220 lines
7.0 KiB
JavaScript
220 lines
7.0 KiB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
import _get from "@babel/runtime/helpers/get";
|
|
import _inherits from "@babel/runtime/helpers/inherits";
|
|
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
|
|
function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
|
|
|
|
import { Type } from '../constants';
|
|
import { YAMLSemanticError } from '../errors';
|
|
import { BlankLine } from './BlankLine';
|
|
import { Comment } from './Comment';
|
|
import { Node } from './Node';
|
|
import { Range } from './Range';
|
|
export var FlowCollection = /*#__PURE__*/function (_Node) {
|
|
_inherits(FlowCollection, _Node);
|
|
|
|
var _super = _createSuper(FlowCollection);
|
|
|
|
function FlowCollection(type, props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, FlowCollection);
|
|
|
|
_this = _super.call(this, type, props);
|
|
_this.items = null;
|
|
return _this;
|
|
}
|
|
|
|
_createClass(FlowCollection, [{
|
|
key: "prevNodeIsJsonLike",
|
|
value: function prevNodeIsJsonLike() {
|
|
var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.items.length;
|
|
var node = this.items[idx - 1];
|
|
return !!node && (node.jsonLike || node.type === Type.COMMENT && this.prevNodeIsJsonLike(idx - 1));
|
|
}
|
|
/**
|
|
* @param {ParseContext} context
|
|
* @param {number} start - Index of first character
|
|
* @returns {number} - Index of the character after this
|
|
*/
|
|
|
|
}, {
|
|
key: "parse",
|
|
value: function parse(context, start) {
|
|
this.context = context;
|
|
var parseNode = context.parseNode,
|
|
src = context.src;
|
|
var indent = context.indent,
|
|
lineStart = context.lineStart;
|
|
var char = src[start]; // { or [
|
|
|
|
this.items = [{
|
|
char: char,
|
|
offset: start
|
|
}];
|
|
var offset = Node.endOfWhiteSpace(src, start + 1);
|
|
char = src[offset];
|
|
|
|
while (char && char !== ']' && char !== '}') {
|
|
switch (char) {
|
|
case '\n':
|
|
{
|
|
lineStart = offset + 1;
|
|
var wsEnd = Node.endOfWhiteSpace(src, lineStart);
|
|
|
|
if (src[wsEnd] === '\n') {
|
|
var blankLine = new BlankLine();
|
|
lineStart = blankLine.parse({
|
|
src: src
|
|
}, lineStart);
|
|
this.items.push(blankLine);
|
|
}
|
|
|
|
offset = Node.endOfIndent(src, lineStart);
|
|
|
|
if (offset <= lineStart + indent) {
|
|
char = src[offset];
|
|
|
|
if (offset < lineStart + indent || char !== ']' && char !== '}') {
|
|
var msg = 'Insufficient indentation in flow collection';
|
|
this.error = new YAMLSemanticError(this, msg);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case ',':
|
|
{
|
|
this.items.push({
|
|
char: char,
|
|
offset: offset
|
|
});
|
|
offset += 1;
|
|
}
|
|
break;
|
|
|
|
case '#':
|
|
{
|
|
var comment = new Comment();
|
|
offset = comment.parse({
|
|
src: src
|
|
}, offset);
|
|
this.items.push(comment);
|
|
}
|
|
break;
|
|
|
|
case '?':
|
|
case ':':
|
|
{
|
|
var next = src[offset + 1];
|
|
|
|
if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace
|
|
char === ':' && this.prevNodeIsJsonLike()) {
|
|
this.items.push({
|
|
char: char,
|
|
offset: offset
|
|
});
|
|
offset += 1;
|
|
break;
|
|
}
|
|
}
|
|
// fallthrough
|
|
|
|
default:
|
|
{
|
|
var node = parseNode({
|
|
atLineStart: false,
|
|
inCollection: false,
|
|
inFlow: true,
|
|
indent: -1,
|
|
lineStart: lineStart,
|
|
parent: this
|
|
}, offset);
|
|
|
|
if (!node) {
|
|
// at next document start
|
|
this.valueRange = new Range(start, offset);
|
|
return offset;
|
|
}
|
|
|
|
this.items.push(node);
|
|
offset = Node.normalizeOffset(src, node.range.end);
|
|
}
|
|
}
|
|
|
|
offset = Node.endOfWhiteSpace(src, offset);
|
|
char = src[offset];
|
|
}
|
|
|
|
this.valueRange = new Range(start, offset + 1);
|
|
|
|
if (char) {
|
|
this.items.push({
|
|
char: char,
|
|
offset: offset
|
|
});
|
|
offset = Node.endOfWhiteSpace(src, offset + 1);
|
|
offset = this.parseComment(offset);
|
|
}
|
|
|
|
return offset;
|
|
}
|
|
}, {
|
|
key: "setOrigRanges",
|
|
value: function setOrigRanges(cr, offset) {
|
|
offset = _get(_getPrototypeOf(FlowCollection.prototype), "setOrigRanges", this).call(this, cr, offset);
|
|
this.items.forEach(function (node) {
|
|
if (node instanceof Node) {
|
|
offset = node.setOrigRanges(cr, offset);
|
|
} else if (cr.length === 0) {
|
|
node.origOffset = node.offset;
|
|
} else {
|
|
var i = offset;
|
|
|
|
while (i < cr.length) {
|
|
if (cr[i] > node.offset) break;else ++i;
|
|
}
|
|
|
|
node.origOffset = node.offset + i;
|
|
offset = i;
|
|
}
|
|
});
|
|
return offset;
|
|
}
|
|
}, {
|
|
key: "toString",
|
|
value: function toString() {
|
|
var src = this.context.src,
|
|
items = this.items,
|
|
range = this.range,
|
|
value = this.value;
|
|
if (value != null) return value;
|
|
var nodes = items.filter(function (item) {
|
|
return item instanceof Node;
|
|
});
|
|
var str = '';
|
|
var prevEnd = range.start;
|
|
nodes.forEach(function (node) {
|
|
var prefix = src.slice(prevEnd, node.range.start);
|
|
prevEnd = node.range.end;
|
|
str += prefix + String(node);
|
|
|
|
if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') {
|
|
// Comment range does not include the terminal newline, but its
|
|
// stringified value does. Without this fix, newlines at comment ends
|
|
// get duplicated.
|
|
prevEnd += 1;
|
|
}
|
|
});
|
|
str += src.slice(prevEnd, range.end);
|
|
return Node.addStringTerminator(src, range.end, str);
|
|
}
|
|
}]);
|
|
|
|
return FlowCollection;
|
|
}(Node); |