| 'use strict' | 
|   | 
| const micromatch = require('micromatch') | 
| const normalize = require('normalize-path') | 
| const path = require('path') | 
|   | 
| const debug = require('debug')('lint-staged:gen-tasks') | 
|   | 
| /** | 
|  * Generates all task commands, and filelist | 
|  * | 
|  * @param {object} options | 
|  * @param {Object} [options.config] - Task configuration | 
|  * @param {Object} [options.cwd] - Current working directory | 
|  * @param {boolean} [options.gitDir] - Git root directory | 
|  * @param {boolean} [options.files] - Staged filepaths | 
|  * @param {boolean} [options.relative] - Whether filepaths to should be relative to gitDir | 
|  */ | 
| module.exports = function generateTasks({ | 
|   config, | 
|   cwd = process.cwd(), | 
|   gitDir, | 
|   files, | 
|   relative = false, | 
| }) { | 
|   debug('Generating linter tasks') | 
|   | 
|   const absoluteFiles = files.map((file) => normalize(path.resolve(gitDir, file))) | 
|   const relativeFiles = absoluteFiles.map((file) => normalize(path.relative(cwd, file))) | 
|   | 
|   return Object.entries(config).map(([pattern, commands]) => { | 
|     const isParentDirPattern = pattern.startsWith('../') | 
|   | 
|     const fileList = micromatch( | 
|       relativeFiles | 
|         // Only worry about children of the CWD unless the pattern explicitly | 
|         // specifies that it concerns a parent directory. | 
|         .filter((file) => { | 
|           if (isParentDirPattern) return true | 
|           return !file.startsWith('..') && !path.isAbsolute(file) | 
|         }), | 
|       pattern, | 
|       { | 
|         cwd, | 
|         dot: true, | 
|         // If pattern doesn't look like a path, enable `matchBase` to | 
|         // match against filenames in every directory. This makes `*.js` | 
|         // match both `test.js` and `subdirectory/test.js`. | 
|         matchBase: !pattern.includes('/'), | 
|       } | 
|     ).map((file) => normalize(relative ? file : path.resolve(cwd, file))) | 
|   | 
|     const task = { pattern, commands, fileList } | 
|     debug('Generated task: \n%O', task) | 
|   | 
|     return task | 
|   }) | 
| } |