'use strict' /** * Calculates and returns the chunk size for given file paths and `chunkSize` * option. * * It returns the minimum of the following: * * - Total number of files * - Max allowed chunk size so that command length does not exceed the system * limitation on windows * - User specified chunk size or the default * * Worked example: * **Assumption** - Our max file path length is 100, Hence max allowed chunk * size is 80 * * - Case 1: Only 10 files are there, chunk size should be 10 only * - Case 2: There are 100 files and user has overridden the option with * chunk size 40. So chunk size should be 40 * - Case 3: There are 100 files and user has overridden the option with * chunk size 100. So chunk size should be 80 * * @param {Array} paths The array of file paths * @param {number} idealChunkSize User specified / default chunk size * @returns {number} The chunk size */ module.exports = function calcChunkSize(paths, idealChunkSize) { /* What is the longest file path? */ const maxPathLen = paths.reduce( (maxLen, filePath) => Math.max(maxLen, filePath.length), 20 // safe initial value ) /* In the worst case scenario, */ /* how many files can we process in a single command? */ /* For windows systems, command length is limited to 8192 */ const maxAllowedChunkSize = Math.floor(8000 / maxPathLen) /* Configured chunk size / default - idealChunkSize */ return Math.min(paths.length, maxAllowedChunkSize, idealChunkSize) }