mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
"use strict";
|
|
|
|
exports.checkFlowCollectionEnd = checkFlowCollectionEnd;
|
|
exports.checkKeyLength = checkKeyLength;
|
|
exports.resolveComments = resolveComments;
|
|
|
|
var _errors = require("../errors");
|
|
|
|
var _constants = require("../constants");
|
|
|
|
function checkFlowCollectionEnd(errors, cst) {
|
|
let char, name;
|
|
|
|
switch (cst.type) {
|
|
case _constants.Type.FLOW_MAP:
|
|
char = '}';
|
|
name = 'flow map';
|
|
break;
|
|
|
|
case _constants.Type.FLOW_SEQ:
|
|
char = ']';
|
|
name = 'flow sequence';
|
|
break;
|
|
|
|
default:
|
|
errors.push(new _errors.YAMLSemanticError(cst, 'Not a flow collection!?'));
|
|
return;
|
|
}
|
|
|
|
let lastItem;
|
|
|
|
for (let i = cst.items.length - 1; i >= 0; --i) {
|
|
const item = cst.items[i];
|
|
|
|
if (!item || item.type !== _constants.Type.COMMENT) {
|
|
lastItem = item;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (lastItem && lastItem.char !== char) {
|
|
const msg = `Expected ${name} to end with ${char}`;
|
|
let err;
|
|
|
|
if (typeof lastItem.offset === 'number') {
|
|
err = new _errors.YAMLSemanticError(cst, msg);
|
|
err.offset = lastItem.offset + 1;
|
|
} else {
|
|
err = new _errors.YAMLSemanticError(lastItem, msg);
|
|
if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start;
|
|
}
|
|
|
|
errors.push(err);
|
|
}
|
|
}
|
|
|
|
function checkKeyLength(errors, node, itemIdx, key, keyStart) {
|
|
if (!key || typeof keyStart !== 'number') return;
|
|
const item = node.items[itemIdx];
|
|
let keyEnd = item && item.range && item.range.start;
|
|
|
|
if (!keyEnd) {
|
|
for (let i = itemIdx - 1; i >= 0; --i) {
|
|
const it = node.items[i];
|
|
|
|
if (it && it.range) {
|
|
keyEnd = it.range.end + 2 * (itemIdx - i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (keyEnd > keyStart + 1024) {
|
|
const k = String(key).substr(0, 8) + '...' + String(key).substr(-8);
|
|
errors.push(new _errors.YAMLSemanticError(node, `The "${k}" key is too long`));
|
|
}
|
|
}
|
|
|
|
function resolveComments(collection, comments) {
|
|
for (const {
|
|
afterKey,
|
|
before,
|
|
comment
|
|
} of comments) {
|
|
let item = collection.items[before];
|
|
|
|
if (!item) {
|
|
if (comment !== undefined) {
|
|
if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment;
|
|
}
|
|
} else {
|
|
if (afterKey && item.value) item = item.value;
|
|
|
|
if (comment === undefined) {
|
|
if (afterKey || !item.commentBefore) item.spaceBefore = true;
|
|
} else {
|
|
if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment;
|
|
}
|
|
}
|
|
}
|
|
} |