routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Extracts and validates Perfectionist settings from ESLint configuration.
|
||||
*
|
||||
* Retrieves global Perfectionist settings that apply to all rules. Validates
|
||||
* that only allowed settings are provided and throws an error if invalid
|
||||
* options are detected. This ensures configuration errors are caught early with
|
||||
* clear error messages.
|
||||
*
|
||||
* The settings are accessed from the 'perfectionist' key in ESLint's shared
|
||||
* configuration settings.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* // Valid usage:
|
||||
* const settings = getSettings(context.settings)
|
||||
* // Returns: { type: 'natural', order: 'asc', ignoreCase: true }
|
||||
* ```
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* // Invalid setting throws error:
|
||||
* getSettings({
|
||||
* perfectionist: {
|
||||
* type: 'natural',
|
||||
* invalidOption: true, // This will throw
|
||||
* },
|
||||
* })
|
||||
* // Throws: Error: Invalid Perfectionist setting(s): invalidOption
|
||||
* ```
|
||||
*
|
||||
* @param settings - ESLint shared configuration settings object.
|
||||
* @returns Validated Perfectionist settings or empty object if none configured.
|
||||
* @throws {Error} If invalid settings are provided.
|
||||
*/
|
||||
function getSettings(settings) {
|
||||
if (!settings['perfectionist']) {
|
||||
return {}
|
||||
}
|
||||
/**
|
||||
* Identifies settings keys that are not in the allowed list.
|
||||
*
|
||||
* @param object - Settings object to validate.
|
||||
* @returns Array of invalid setting names.
|
||||
*/
|
||||
function getInvalidOptions(object) {
|
||||
let allowedOptions = new Set([
|
||||
'partitionByComment',
|
||||
'partitionByNewLine',
|
||||
'specialCharacters',
|
||||
'newlinesBetween',
|
||||
'newlinesInside',
|
||||
'fallbackSort',
|
||||
'ignoreCase',
|
||||
'alphabet',
|
||||
'locales',
|
||||
'order',
|
||||
'type',
|
||||
])
|
||||
return Object.keys(object).filter(key => !allowedOptions.has(key))
|
||||
}
|
||||
let perfectionistSettings = settings['perfectionist']
|
||||
let invalidOptions = getInvalidOptions(perfectionistSettings)
|
||||
if (invalidOptions.length > 0) {
|
||||
throw new Error(
|
||||
`Invalid Perfectionist setting(s): ${invalidOptions.join(', ')}`,
|
||||
)
|
||||
}
|
||||
return settings['perfectionist']
|
||||
}
|
||||
export { getSettings }
|
||||
Reference in New Issue
Block a user