UNPKG

eslint-plugin-perfectionist

Version:

ESLint plugin for sorting various data such as objects, imports, types, enums, JSX props, etc.

51 lines (50 loc) 1.62 kB
'use strict' Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }) const getArrayCombinations = require('./get-array-combinations.js') let generatePredefinedGroups = ({ selectors, modifiers, cache }) => { let modifiersAndSelectorsKey = `${modifiers.join('&')}/${selectors.join('&')}` let cachedValue = cache.get(modifiersAndSelectorsKey) if (cachedValue) { return cachedValue } let allModifiersCombinations = [] for (let i = modifiers.length; i > 0; i--) { allModifiersCombinations = [ ...allModifiersCombinations, ...getArrayCombinations.getArrayCombinations(modifiers, i), ] } let allModifiersCombinationPermutations = allModifiersCombinations.flatMap( result => getPermutations(result), ) let returnValue = [] for (let selector of selectors) { returnValue = [ ...returnValue, ...allModifiersCombinationPermutations.map( modifiersCombinationPermutation => [...modifiersCombinationPermutation, selector].join('-'), ), selector, ] } cache.set(modifiersAndSelectorsKey, returnValue) return returnValue } let getPermutations = elements => { let result = [] let backtrack = first => { if (first === elements.length) { result.push([...elements]) return } for (let i = first; i < elements.length; i++) { ;[elements[first], elements[i]] = [elements[i], elements[first]] backtrack(first + 1) ;[elements[first], elements[i]] = [elements[i], elements[first]] } } backtrack(0) return result } exports.generatePredefinedGroups = generatePredefinedGroups