| /* eslint no-prototype-builtins: 0 */ | 
|   | 
| 'use strict' | 
|   | 
| const chalk = require('chalk') | 
| const format = require('stringify-object') | 
|   | 
| const debug = require('debug')('lint-staged:cfg') | 
|   | 
| const TEST_DEPRECATED_KEYS = new Map([ | 
|   ['concurrent', (key) => typeof key === 'boolean'], | 
|   ['chunkSize', (key) => typeof key === 'number'], | 
|   ['globOptions', (key) => typeof key === 'object'], | 
|   ['linters', (key) => typeof key === 'object'], | 
|   ['ignore', (key) => Array.isArray(key)], | 
|   ['subTaskConcurrency', (key) => typeof key === 'number'], | 
|   ['renderer', (key) => typeof key === 'string'], | 
|   ['relative', (key) => typeof key === 'boolean'], | 
| ]) | 
|   | 
| const formatError = (helpMsg) => `● Validation Error: | 
|   | 
|   ${helpMsg} | 
|   | 
| Please refer to https://github.com/okonet/lint-staged#configuration for more information...` | 
|   | 
| const createError = (opt, helpMsg, value) => | 
|   formatError(`Invalid value for '${chalk.bold(opt)}'. | 
|   | 
|   ${helpMsg}. | 
|   | 
|   Configured value is: ${chalk.bold( | 
|     format(value, { inlineCharacterLimit: Number.POSITIVE_INFINITY }) | 
|   )}`) | 
|   | 
| /** | 
|  * Runs config validation. Throws error if the config is not valid. | 
|  * @param config {Object} | 
|  * @returns config {Object} | 
|  */ | 
| module.exports = function validateConfig(config) { | 
|   debug('Validating config') | 
|   | 
|   const errors = [] | 
|   | 
|   if (!config || typeof config !== 'object') { | 
|     errors.push('Configuration should be an object!') | 
|   } else { | 
|     const entries = Object.entries(config) | 
|   | 
|     if (entries.length === 0) { | 
|       errors.push('Configuration should not be empty!') | 
|     } | 
|   | 
|     entries.forEach(([pattern, task]) => { | 
|       if (TEST_DEPRECATED_KEYS.has(pattern)) { | 
|         const testFn = TEST_DEPRECATED_KEYS.get(pattern) | 
|         if (testFn(task)) { | 
|           errors.push( | 
|             createError( | 
|               pattern, | 
|               'Advanced configuration has been deprecated. For more info, please visit: https://github.com/okonet/lint-staged', | 
|               task | 
|             ) | 
|           ) | 
|         } | 
|       } | 
|   | 
|       if ( | 
|         (!Array.isArray(task) || | 
|           task.some((item) => typeof item !== 'string' && typeof item !== 'function')) && | 
|         typeof task !== 'string' && | 
|         typeof task !== 'function' | 
|       ) { | 
|         errors.push( | 
|           createError( | 
|             pattern, | 
|             'Should be a string, a function, or an array of strings and functions', | 
|             task | 
|           ) | 
|         ) | 
|       } | 
|     }) | 
|   } | 
|   | 
|   if (errors.length) { | 
|     throw new Error(errors.join('\n')) | 
|   } | 
|   | 
|   return config | 
| } | 
|   | 
| module.exports.createError = createError |