mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-03 03:29:30 +08:00
52 lines
1.3 KiB
Text
52 lines
1.3 KiB
Text
import * as fs from 'graceful-fs';
|
|
import { dirname } from 'path';
|
|
import mkdirp from 'mkdirp';
|
|
import resolvePath from '../utils/resolvePath';
|
|
|
|
export const writeFile = asyncMethod( 'writeFile' );
|
|
export const appendFile = asyncMethod( 'appendFile' );
|
|
|
|
export const writeFileSync = syncMethod( 'writeFileSync' );
|
|
export const appendFileSync = syncMethod( 'appendFileSync' );
|
|
|
|
function normaliseArguments ( args ) {
|
|
args = Array.prototype.slice.call( args, 0 );
|
|
let opts = {};
|
|
|
|
if ( typeof args[ args.length - 1 ] === 'object' && !( args[ args.length - 1 ] instanceof Buffer ) ) {
|
|
opts = args.pop();
|
|
}
|
|
|
|
return { opts, data: args.pop(), dest: resolvePath( args ) };
|
|
}
|
|
|
|
function asyncMethod ( methodName ) {
|
|
return function () {
|
|
const { dest, data, opts } = normaliseArguments( arguments );
|
|
|
|
return new Promise( ( fulfil, reject ) => {
|
|
mkdirp( dirname( dest ), err => {
|
|
if ( err ) {
|
|
reject( err );
|
|
} else {
|
|
fs[ methodName ]( dest, data, opts, err => {
|
|
if ( err ) {
|
|
reject( err );
|
|
} else {
|
|
fulfil( data );
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
};
|
|
}
|
|
|
|
function syncMethod ( methodName ) {
|
|
return function () {
|
|
const { dest, data } = normaliseArguments( arguments );
|
|
|
|
mkdirp.sync( dirname( dest ) );
|
|
return fs[ methodName ]( dest, data );
|
|
};
|
|
}
|