Skip to content

Instantly share code, notes, and snippets.

@reu
Last active April 14, 2017 02:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reu/00efbc8d6d2a2f0c0af06c97c3dc529c to your computer and use it in GitHub Desktop.
Save reu/00efbc8d6d2a2f0c0af06c97c3dc529c to your computer and use it in GitHub Desktop.
const fs = require("fs");
const path = require("path");
const promisify = fn => (...args) =>
new Promise((resolve, reject) =>
fn(...args, (err, res) => err === null ? resolve(res) : reject(err))
);
const mkdir = promisify(fs.mkdir);
const stat = promisify(fs.stat);
const mkdirp = (dir, opts) =>
mkdir(dir, opts)
.then(() => dir)
.catch(err =>
err.code == "ENOENT"
? mkdirp(path.dirname(dir), opts).then(() => mkdirp(dir, opts))
: stat(dir).then(() => dir)
);
module.exports = mkdirp;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment