12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // The default temporary folder location for use in the windows algorithm.
- // It's TEMPting to use dirname(path), since that's guaranteed to be on the
- // same device. However, this means that:
- // rimraf(path).then(() => rimraf(dirname(path)))
- // will often fail with EBUSY, because the parent dir contains
- // marked-for-deletion directory entries (which do not show up in readdir).
- // The approach here is to use os.tmpdir() if it's on the same drive letter,
- // or resolve(path, '\\temp') if it exists, or the root of the drive if not.
- // On Posix (not that you'd be likely to use the windows algorithm there),
- // it uses os.tmpdir() always.
- import { tmpdir } from 'os';
- import { parse, resolve } from 'path';
- import { promises, statSync } from './fs.js';
- import platform from './platform.js';
- const { stat } = promises;
- const isDirSync = (path) => {
- try {
- return statSync(path).isDirectory();
- }
- catch (er) {
- return false;
- }
- };
- const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
- const win32DefaultTmp = async (path) => {
- const { root } = parse(path);
- const tmp = tmpdir();
- const { root: tmpRoot } = parse(tmp);
- if (root.toLowerCase() === tmpRoot.toLowerCase()) {
- return tmp;
- }
- const driveTmp = resolve(root, '/temp');
- if (await isDir(driveTmp)) {
- return driveTmp;
- }
- return root;
- };
- const win32DefaultTmpSync = (path) => {
- const { root } = parse(path);
- const tmp = tmpdir();
- const { root: tmpRoot } = parse(tmp);
- if (root.toLowerCase() === tmpRoot.toLowerCase()) {
- return tmp;
- }
- const driveTmp = resolve(root, '/temp');
- if (isDirSync(driveTmp)) {
- return driveTmp;
- }
- return root;
- };
- const posixDefaultTmp = async () => tmpdir();
- const posixDefaultTmpSync = () => tmpdir();
- export const defaultTmp = platform === 'win32' ? win32DefaultTmp : posixDefaultTmp;
- export const defaultTmpSync = platform === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
- //# sourceMappingURL=default-tmp.js.map
|