ack(originalErr); } callback(err); }); } function _rmchildren(path, options, callback) { const pathBuf = Buffer.from(path); readdir(pathBuf, readdirEncoding, (err, files) => { if (err) return callback(err); let numFiles = files.length; if (numFiles === 0) return rmdir(path, callback); let done = false; const childPathPrefix = Buffer.concat([pathBuf, separator]); for (let i = 0; i < files.length; i++) { const childPath = Buffer.concat([childPathPrefix, files[i]]); rimraf(childPath, options, (err) => { if (done) return; if (err) { done = true; return callback(err); } numFiles--; if (numFiles === 0) rmdir(path, callback); }); } }); } function rimrafPromises(path, options) { return new Promise((resolve, reject) => { rimraf(path, options, (err) => { if (err) return reject(err); resolve(); }); }); } module.exports = { rimraf, rimrafPromises };