Urara-Blog/node_modules/.pnpm-store/v3/files/6e/a9367c8071e64f4bf2c40fb4083b86ffa3f17bf2384ff1d89704a3f881cd37bfa98e70c788d8fc9cd0f13fa37612be00fb6bc638470a0e0c041612c0a29560
2022-08-14 01:14:53 +08:00

99 lines
No EOL
2.3 KiB
Text

import { sep } from 'path';
import * as fs from 'graceful-fs';
import mkdirp from 'mkdirp';
import resolvePathAndOptions from '../utils/resolvePathAndOptions';
export function copydir () {
const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments );
return {
to () {
const { resolvedPath: dest, options: writeOptions } = resolvePathAndOptions( arguments );
function copydir ( src, dest, cb ) {
mkdirp( dest, err => {
if ( err ) return cb( err );
fs.readdir( src, ( err, files ) => {
if ( err ) return cb( err );
let remaining = files.length;
if ( !remaining ) return cb();
function check ( err ) {
if ( err ) {
return cb( err );
}
if ( !--remaining ) {
cb();
}
}
files.forEach( function ( filename ) {
const srcpath = src + sep + filename;
const destpath = dest + sep + filename;
fs.stat( srcpath, ( err, stats ) => {
var readStream, writeStream;
if ( stats.isDirectory() ) {
return copydir( srcpath, destpath, check );
}
readStream = fs.createReadStream( srcpath, readOptions );
writeStream = fs.createWriteStream( destpath, writeOptions );
readStream.on( 'error', cb );
writeStream.on( 'error', cb );
writeStream.on( 'close', check );
readStream.pipe( writeStream );
});
});
});
});
}
return new Promise( ( fulfil, reject ) => {
copydir( src, dest, err => {
if ( err ) {
reject( err );
} else {
fulfil();
}
});
});
}
};
}
export function copydirSync () {
const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments );
return {
to () {
const { resolvedPath: dest, options: writeOptions } = resolvePathAndOptions( arguments );
function copydir ( src, dest ) {
mkdirp.sync( dest );
fs.readdirSync( src ).forEach( filename => {
const srcpath = src + sep + filename;
const destpath = dest + sep + filename;
if ( fs.statSync( srcpath ).isDirectory() ) {
return copydir( srcpath, destpath );
}
const data = fs.readFileSync( srcpath, readOptions );
fs.writeFileSync( destpath, data, writeOptions );
});
}
copydir( src, dest );
}
};
}