Urara-Blog/node_modules/.pnpm-store/v3/files/a7/d1d0496670409f2f9b28ad502086a58bd8026386bd35c0496df1cbecdf889976f695d633668e6ab8f5d102496c5e2c59d476eff384dca8aef84bb3e8447235
2022-08-14 01:14:53 +08:00

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;
}