routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
Generated
Vendored
+78
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* Cleans and normalizes the groups configuration in options.
|
||||
*
|
||||
* Performs the following optimizations on the groups array:
|
||||
*
|
||||
* - Removes empty arrays (they serve no purpose in grouping)
|
||||
* - Converts single-element arrays to plain strings (simplifies structure)
|
||||
* - Preserves multi-element arrays as-is (maintains subgroups).
|
||||
*
|
||||
* This normalization ensures consistent group handling and eliminates
|
||||
* unnecessary complexity in the configuration.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* getOptionsWithCleanGroups({
|
||||
* groups: [
|
||||
* 'imports',
|
||||
* ['types'], // Single element - will become 'types'
|
||||
* ['hooks', 'utils'], // Multiple elements - preserved as array
|
||||
* [], // Empty - will be removed
|
||||
* 'components',
|
||||
* ],
|
||||
* })
|
||||
* // Returns: {
|
||||
* // groups: [
|
||||
* // 'imports',
|
||||
* // 'types',
|
||||
* // ['hooks', 'utils'],
|
||||
* // 'components'
|
||||
* // ]
|
||||
* // }
|
||||
* ```
|
||||
*
|
||||
* @template CustomTypeOption - Custom type option string for GroupsOptions.
|
||||
* @template Options - Type of options extending
|
||||
* GetOptionsWithCleanGroupsParameters.
|
||||
* @param options - Options object containing groups to clean.
|
||||
* @returns Options with cleaned and normalized groups array.
|
||||
*/
|
||||
function getOptionsWithCleanGroups(options) {
|
||||
return {
|
||||
...options,
|
||||
groups: options.groups
|
||||
.filter(group => !Array.isArray(group) || group.length > 0)
|
||||
.map(group =>
|
||||
Array.isArray(group) ? getCleanedNestedGroups(group) : group,
|
||||
),
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Simplifies a nested group array by converting single-element arrays to
|
||||
* strings.
|
||||
*
|
||||
* Helper function that normalizes array groups:
|
||||
*
|
||||
* - Single-element arrays are unwrapped to plain strings
|
||||
* - Multi-element arrays are preserved as-is
|
||||
* - Empty single-element arrays remain as arrays.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* getCleanedNestedGroups(['types']) // Returns: 'types'
|
||||
* getCleanedNestedGroups(['a', 'b']) // Returns: ['a', 'b']
|
||||
* getCleanedNestedGroups(['']) // Returns: ['']
|
||||
* ```
|
||||
*
|
||||
* @param nestedGroup - Array of group names to potentially simplify.
|
||||
* @returns Simplified string if single non-empty element, otherwise the
|
||||
* original array.
|
||||
*/
|
||||
function getCleanedNestedGroups(nestedGroup) {
|
||||
return nestedGroup.length === 1 && nestedGroup[0] ?
|
||||
nestedGroup[0]
|
||||
: nestedGroup
|
||||
}
|
||||
export { getOptionsWithCleanGroups }
|
||||
Reference in New Issue
Block a user