61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								var __importDefault = (this && this.__importDefault) || function (mod) {
							 | 
						||
| 
								 | 
							
								    return (mod && mod.__esModule) ? mod : { "default": mod };
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.defaultTmpSync = exports.defaultTmp = void 0;
							 | 
						||
| 
								 | 
							
								// 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.
							 | 
						||
| 
								 | 
							
								const os_1 = require("os");
							 | 
						||
| 
								 | 
							
								const path_1 = require("path");
							 | 
						||
| 
								 | 
							
								const fs_js_1 = require("./fs.js");
							 | 
						||
| 
								 | 
							
								const platform_js_1 = __importDefault(require("./platform.js"));
							 | 
						||
| 
								 | 
							
								const { stat } = fs_js_1.promises;
							 | 
						||
| 
								 | 
							
								const isDirSync = (path) => {
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								        return (0, fs_js_1.statSync)(path).isDirectory();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    catch (er) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								const isDir = (path) => stat(path).then(st => st.isDirectory(), () => false);
							 | 
						||
| 
								 | 
							
								const win32DefaultTmp = async (path) => {
							 | 
						||
| 
								 | 
							
								    const { root } = (0, path_1.parse)(path);
							 | 
						||
| 
								 | 
							
								    const tmp = (0, os_1.tmpdir)();
							 | 
						||
| 
								 | 
							
								    const { root: tmpRoot } = (0, path_1.parse)(tmp);
							 | 
						||
| 
								 | 
							
								    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
							 | 
						||
| 
								 | 
							
								        return tmp;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const driveTmp = (0, path_1.resolve)(root, '/temp');
							 | 
						||
| 
								 | 
							
								    if (await isDir(driveTmp)) {
							 | 
						||
| 
								 | 
							
								        return driveTmp;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return root;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								const win32DefaultTmpSync = (path) => {
							 | 
						||
| 
								 | 
							
								    const { root } = (0, path_1.parse)(path);
							 | 
						||
| 
								 | 
							
								    const tmp = (0, os_1.tmpdir)();
							 | 
						||
| 
								 | 
							
								    const { root: tmpRoot } = (0, path_1.parse)(tmp);
							 | 
						||
| 
								 | 
							
								    if (root.toLowerCase() === tmpRoot.toLowerCase()) {
							 | 
						||
| 
								 | 
							
								        return tmp;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const driveTmp = (0, path_1.resolve)(root, '/temp');
							 | 
						||
| 
								 | 
							
								    if (isDirSync(driveTmp)) {
							 | 
						||
| 
								 | 
							
								        return driveTmp;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return root;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								const posixDefaultTmp = async () => (0, os_1.tmpdir)();
							 | 
						||
| 
								 | 
							
								const posixDefaultTmpSync = () => (0, os_1.tmpdir)();
							 | 
						||
| 
								 | 
							
								exports.defaultTmp = platform_js_1.default === 'win32' ? win32DefaultTmp : posixDefaultTmp;
							 | 
						||
| 
								 | 
							
								exports.defaultTmpSync = platform_js_1.default === 'win32' ? win32DefaultTmpSync : posixDefaultTmpSync;
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=default-tmp.js.map
							 |