ssn/src/cdn/funcs/createDirRecursively.ts

49 lines
1.4 KiB
TypeScript

import * as fs from 'fs';
import * as path from 'path';
/** Recursively creates the given directory. */
export default function createDirRecursively(folderName: string): Promise<void> {
return new Promise((resolve, reject) => {
//Try to create directory
fs.mkdir(folderName, (error) => {
//If it fails, we first need to create parent directory
if (error) {
switch (error.code) {
case 'ENOENT': //parent does not exist
//Create parent
const parentFolder = path.dirname(folderName);
createDirRecursively(parentFolder).then(() => {
//Then try again
try {
resolve(createDirRecursively(folderName));
} catch (error) {
reject(error);
}
}).catch((parentError) => {
reject(parentError);
});
break;
case 'EEXIST': { //already exists (either as file or directory)
fs.stat(folderName, (statError, stats) => {
if (statError) {
reject(statError);
}
if (stats.isDirectory()) {
resolve();
} else {
reject('Is not a directory');
}
})
break;
}
default: //other error, just propagate onwards
reject(error);
}
} else {
resolve();
}
});
});
}