1// Get the appropriate flag to use for creating files 2// We use fmap on Windows platforms for files less than 3// 512kb. This is a fairly low limit, but avoids making 4// things slower in some cases. Since most of what this 5// library is used for is extracting tarballs of many 6// relatively small files in npm packages and the like, 7// it can be a big boost on Windows platforms. 8// Only supported in Node v12.9.0 and above. 9const platform = process.env.__FAKE_PLATFORM__ || process.platform 10const isWindows = platform === 'win32' 11const fs = global.__FAKE_TESTING_FS__ || require('fs') 12 13/* istanbul ignore next */ 14const { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs.constants 15 16const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP 17const fMapLimit = 512 * 1024 18const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY 19module.exports = !fMapEnabled ? () => 'w' 20 : size => size < fMapLimit ? fMapFlag : 'w' 21