Urara-Blog/node_modules/.pnpm-store/v3/files/6c/153cd9c5cefc0151bad7317c705b975a9b974192cd62d657ff690a4160dc468a801b4938683bc8f3b085e7bec5ed26842c372d031d601572516384ad5ec136
2022-08-14 01:14:53 +08:00

97 lines
No EOL
1.9 KiB
Text

import { dirname } from 'path';
import * as fs from 'graceful-fs';
import mkdirp from 'mkdirp';
import resolvePath from '../utils/resolvePath';
function normaliseArguments ( args ) {
let options;
let flags;
let i;
if ( typeof args[ args.length - 1 ] === 'object' ) {
options = args[ args.length - 1 ];
flags = args[ args.length - 2 ];
i = args.length - 2;
} else {
options = {};
flags = args[ args.length - 1 ];
i = args.length - 1;
}
let pathargs = new Array( i );
while ( i-- ) {
pathargs[i] = args[i];
}
const resolvedPath = resolvePath( pathargs );
return { resolvedPath, options, flags };
}
function bailIfExists ( src, flags, mode ) {
let alreadyExists;
try {
fs.statSync( src );
alreadyExists = true;
} catch ( err ) {
if ( err.code !== 'ENOENT' ) {
throw err;
}
}
if ( alreadyExists ) {
// attempt the operation = that way, we get the intended error message
// TODO can't we just do this in the first place?
fs.openSync( src, flags, mode );
}
}
export function open () {
const { resolvedPath: src, options, flags } = normaliseArguments( arguments );
if ( /^.x/.test( flags ) ) {
bailIfExists( src, flags, options.mode );
}
return new Promise( ( fulfil, reject ) => {
function open () {
fs.open( src, flags, options.mode, ( err, fd ) => {
if ( err ) {
reject( err );
} else {
fulfil( fd );
}
});
}
// create dirs if necessary
if ( /^[wa]/.test( flags ) ) {
mkdirp( dirname( src ), err => {
if ( err ) {
reject( err );
} else {
open();
}
});
} else {
open();
}
});
}
export function openSync () {
const { resolvedPath: src, options, flags } = normaliseArguments( arguments );
if ( /^.x/.test( flags ) ) {
bailIfExists( src, flags, options.mode );
}
// create dirs if necessary
if ( /^[wa]/.test( flags ) ) {
mkdirp.sync( dirname( src ) );
}
return fs.openSync( src, flags, options.mode );
}