@serverless-guru/prettier-plugin-import-order
Version:
A prettier plugin to sort TS/JS import declarations by provided Regular Expression order
65 lines (64 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeNodesFromOriginalCode = void 0;
function compareRangesByStart(range1, range2) {
return range1[0] < range2[0] ? -1 : range1[0] > range2[0] ? 1 : 0;
}
function hasRange(range) {
return range[0] !== null && range[1] !== null && Number.isSafeInteger(range[0]) && Number.isSafeInteger(range[1]);
}
function hasOverlap(range1, range2) {
return range1[1] > range2[0] && range2[1] > range1[0];
}
function mergeOverlappingRanges(range1, range2) {
return [Math.min(range1[0], range2[0]), Math.max(range1[1], range2[1])];
}
function mergeRanges(ranges) {
var merged = [];
for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {
var range = ranges_1[_i];
var currRange = merged[merged.length - 1];
if (currRange !== undefined && hasOverlap(currRange, range)) {
merged[merged.length - 1] = mergeOverlappingRanges(currRange, range);
}
else {
merged.push(range);
}
}
return merged;
}
function invertRanges(ranges, totalLength) {
if (ranges.length === 0) {
return ranges;
}
var resultRanges = [];
var isValidRange = function (start, end) { return end > start; };
var firstRange = ranges[0];
if (isValidRange(0, firstRange[0])) {
resultRanges.push([0, firstRange[0]]);
}
for (var index = 0; index < ranges.length - 1; index += 1) {
var prevRange = ranges[index];
var nextRange = ranges[index + 1];
var start = prevRange[1];
var end = nextRange[0];
if (isValidRange(start, end)) {
resultRanges.push([start, end]);
}
}
var lastRange = ranges[ranges.length - 1];
if (isValidRange(lastRange[1], totalLength)) {
resultRanges.push([lastRange[1], totalLength]);
}
return resultRanges;
}
var removeNodesFromOriginalCode = function (code, nodes) {
var excludes = nodes
.map(function (node) { return [node.start, node.end]; })
.filter(hasRange)
.sort(compareRangesByStart);
var mergedExcludes = mergeRanges(excludes);
var includes = invertRanges(mergedExcludes, code.length);
return includes.map(function (include) { return code.substring(include[0], include[1]); }).join('');
};
exports.removeNodesFromOriginalCode = removeNodesFromOriginalCode;