summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/tar/lib/get-write-flag.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/tar/lib/get-write-flag.js')
-rw-r--r--deps/npm/node_modules/tar/lib/get-write-flag.js20
1 files changed, 20 insertions, 0 deletions
diff --git a/deps/npm/node_modules/tar/lib/get-write-flag.js b/deps/npm/node_modules/tar/lib/get-write-flag.js
new file mode 100644
index 0000000000..e869599966
--- /dev/null
+++ b/deps/npm/node_modules/tar/lib/get-write-flag.js
@@ -0,0 +1,20 @@
+// Get the appropriate flag to use for creating files
+// We use fmap on Windows platforms for files less than
+// 512kb. This is a fairly low limit, but avoids making
+// things slower in some cases. Since most of what this
+// library is used for is extracting tarballs of many
+// relatively small files in npm packages and the like,
+// it can be a big boost on Windows platforms.
+// Only supported in Node v12.9.0 and above.
+const platform = process.env.__FAKE_PLATFORM__ || process.platform
+const isWindows = platform === 'win32'
+const fs = global.__FAKE_TESTING_FS__ || require('fs')
+
+/* istanbul ignore next */
+const { O_CREAT, O_TRUNC, O_WRONLY, UV_FS_O_FILEMAP = 0 } = fs.constants
+
+const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP
+const fMapLimit = 512 * 1024
+const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY
+module.exports = !fMapEnabled ? () => 'w'
+ : size => size < fMapLimit ? fMapFlag : 'w'