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
JavaScript
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