UNPKG

@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
"use strict"; 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;