mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 22:59:31 +08:00
70 lines
No EOL
1.5 KiB
Text
70 lines
No EOL
1.5 KiB
Text
import * as fs from 'fs';
|
|
import { resolve, sep } from 'path';
|
|
import resolvePath from '../utils/resolvePath';
|
|
|
|
function walk ( dir, callback ) {
|
|
let results = [];
|
|
|
|
fs.readdir( dir, ( err, files ) => {
|
|
if ( err ) return callback( err );
|
|
|
|
let pending = files.length;
|
|
if ( !pending ) return callback( null, results );
|
|
|
|
files.forEach( file => {
|
|
file = resolve( dir, file );
|
|
|
|
fs.stat( file, ( err, stats ) => {
|
|
if ( stats && stats.isDirectory() ) {
|
|
walk( file, ( err, res ) => {
|
|
results = results.concat( res );
|
|
if ( !--pending ) callback( null, results );
|
|
});
|
|
} else {
|
|
results.push( file );
|
|
if ( !--pending ) callback( null, results );
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
export function lsr () {
|
|
const basedir = resolvePath( arguments );
|
|
|
|
return new Promise( ( fulfil, reject ) => {
|
|
walk( basedir, function ( err, result ) {
|
|
if ( err ) return reject( err );
|
|
|
|
// files should be relative to basedir
|
|
const index = basedir.length + 1;
|
|
let i = result.length;
|
|
while ( i-- ) {
|
|
result[i] = result[i].substring( index );
|
|
}
|
|
|
|
fulfil( result );
|
|
});
|
|
});
|
|
}
|
|
|
|
export function lsrSync () {
|
|
const basedir = resolvePath( arguments );
|
|
|
|
let result = [];
|
|
|
|
function processdir ( dir ) {
|
|
fs.readdirSync( dir ).forEach( file => {
|
|
const filepath = dir + sep + file;
|
|
|
|
if ( fs.statSync( filepath ).isDirectory() ) {
|
|
processdir( filepath );
|
|
} else {
|
|
result.push( filepath.replace( basedir + sep, '' ) );
|
|
}
|
|
});
|
|
}
|
|
|
|
processdir( basedir );
|
|
return result;
|
|
} |