Files
routie/frontend/node_modules/eslint-plugin-perfectionist/dist/utils/compute-group.js
T

65 lines
1.9 KiB
JavaScript

import { computeGroupsNames } from './compute-groups-names.js'
/**
* Determines which group an element belongs to based on custom and predefined
* groups.
*
* The function checks groups in the following priority order:
*
* 1. Custom groups (if defined) - checked first, highest priority
* 2. Predefined groups - checked as fallback
* 3. Returns 'unknown' if no matching group is found.
*
* Only groups that exist in options.groups are considered valid.
*
* @example
*
* ```ts
* const group = computeGroup({
* options: {
* groups: ['react', 'external', 'internal'],
* customGroups: [{ groupName: 'react', anyOf: ['react', 'react-*'] }],
* },
* customGroupMatcher: customGroup => customGroup.anyOf.includes('react'),
* predefinedGroups: ['external'],
* name: 'react-dom',
* })
* // Returns: 'react'
* ```
*
* @template CustomGroupMatchOptions - Type of custom group match options.
* @param params - Parameters for group computation.
* @param params.options - Configuration with available groups and custom
* groups.
* @param params.customGroupMatcher - Matcher function for custom groups.
* @param params.predefinedGroups - Fallback predefined groups to check.
* @returns The matched group name or 'unknown' if no group matches.
*/
function computeGroup({ customGroupMatcher, predefinedGroups, options }) {
let groupsSet = new Set(computeGroupsNames(options.groups))
return (
computeFirstMatchingCustomGroupName(
groupsSet,
options.customGroups,
customGroupMatcher,
) ??
predefinedGroups.find(group => groupsSet.has(group)) ??
'unknown'
)
}
function computeFirstMatchingCustomGroupName(
groupsSet,
customGroups,
customGroupMatcher,
) {
for (let customGroup of customGroups) {
if (
customGroupMatcher(customGroup) &&
groupsSet.has(customGroup.groupName)
) {
return customGroup.groupName
}
}
return null
}
export { computeGroup }