Swap-Aggregator-Subgraph/node_modules/yaml/dist/schema/parseUtils.js
2022-07-03 07:27:35 +05:30

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;
}
}
}
}