Swap-Aggregator-Subgraph/node_modules/assemblyscript/cli/util/mkdirp.js
2022-07-03 07:27:35 +05:30

63 lines
2.0 KiB
JavaScript

/**
* @fileoverview Recursive mkdir.
* @license
* Copyright 2010 James Halliday (mail@substack.net)
*
* This project is free software released under the MIT/X11 license:
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
const path = require("path");
const fs = require("fs");
const process = require("process"); // ensure shim
module.exports = function mkdirp(p, opts, made) {
if (!opts || typeof opts !== "object") {
opts = { mode: opts };
}
var mode = opts.mode;
if (mode === undefined) {
mode = 0o777 & (~process.umask());
}
if (!made) made = null;
p = path.resolve(p);
try {
fs.mkdirSync(p, mode);
made = made || p;
} catch (err0) {
switch (err0.code) {
case "ENOENT":
made = mkdirp(path.dirname(p), opts, made);
mkdirp(p, opts, made);
break;
default:
var stat;
try {
stat = fs.statSync(p);
} catch (err1) {
throw err0;
}
if (!stat.isDirectory()) throw err0;
break;
}
}
return made;
};