sortier
Version:
An opinionated code sorter
68 lines (67 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getObjectTypeRanks = getObjectTypeRanks;
exports.getSpreadGroups = getSpreadGroups;
const array_utils_js_1 = require("../../utilities/array-utils.js");
const defaultObjectTypeOrder = ["undefined", "null", "*", "function"];
let lastCalculatedRankOptions = undefined;
let lastCalculatedRankMap = undefined;
function getObjectTypeRanks(options) {
// Use defaults if passed undefined
options = options || defaultObjectTypeOrder;
// Figure out if we can use the cache and recache if we can't
if (lastCalculatedRankOptions != null &&
lastCalculatedRankMap != null &&
array_utils_js_1.ArrayUtils.isEqual(lastCalculatedRankOptions, options)) {
return lastCalculatedRankMap;
}
else {
lastCalculatedRankOptions = options;
}
// Determine the map
let everythingRank = options.indexOf("*");
if (everythingRank === -1) {
everythingRank = options.length;
}
let nullRank = options.indexOf("null");
if (nullRank === -1) {
nullRank = everythingRank;
}
let undefinedRank = options.indexOf("undefined");
if (undefinedRank === -1) {
undefinedRank = everythingRank;
}
let objectRank = options.indexOf("object");
if (objectRank === -1) {
objectRank = everythingRank;
}
let functionRank = options.indexOf("function");
if (functionRank === -1) {
functionRank = everythingRank;
}
lastCalculatedRankMap = {
everything: everythingRank,
function: functionRank,
null: nullRank,
object: objectRank,
undefined: undefinedRank,
};
return lastCalculatedRankMap;
}
function getSpreadGroups(allNodes) {
// Any time there is a spread operator, we need to sort around it... moving it could cause functionality changes
const spreadGroups = [];
let currentStart = 0;
for (let x = 0; x < allNodes.length; x++) {
if (allNodes[x].type.includes("Spread") || allNodes[x].type.includes("Rest")) {
if (currentStart !== x) {
spreadGroups.push(allNodes.slice(currentStart, x));
}
currentStart = x + 1;
}
}
if (currentStart !== allNodes.length) {
spreadGroups.push(allNodes.slice(currentStart));
}
return spreadGroups;
}