forked from isaacs/node-tar
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget-write-flag.ts
More file actions
32 lines (28 loc) · 1.13 KB
/
Copy pathget-write-flag.ts
File metadata and controls
32 lines (28 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 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.
import fs from 'fs'
const platform = process.env.__FAKE_PLATFORM__ || process.platform
const isWindows = platform === 'win32'
/* c8 ignore start */
const { O_CREAT, O_NOFOLLOW, O_TRUNC, O_WRONLY } = fs.constants
const UV_FS_O_FILEMAP =
Number(process.env.__FAKE_FS_O_FILENAME__) ||
fs.constants.UV_FS_O_FILEMAP ||
0
/* c8 ignore stop */
const fMapEnabled = isWindows && !!UV_FS_O_FILEMAP
const fMapLimit = 512 * 1024
const fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY
const noFollowFlag =
!isWindows && typeof O_NOFOLLOW === 'number' ?
O_NOFOLLOW | O_TRUNC | O_CREAT | O_WRONLY
: null
export const getWriteFlag =
noFollowFlag !== null ? () => noFollowFlag
: !fMapEnabled ? () => 'w'
: (size: number) => (size < fMapLimit ? fMapFlag : 'w')