UNPKG

sortier

Version:
68 lines (67 loc) 2.38 kB
"use strict"; 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; }