diff --git a/js/nodeutils.js b/js/nodeutils.js new file mode 100644 index 00000000..befdb4ab --- /dev/null +++ b/js/nodeutils.js @@ -0,0 +1,88 @@ +var fs = require("fs"); +var path = require("path"); + +var utils = require("./utils.js"); + +// Empty a directory. +var emptyPath = function(dirPath, done) { + fs.readdir(dirPath, function(err, files) { + if (err) { + done(err); + } + else { + utils.mapOr(rmPath, files.map(function(f) { return path.join(dirPath, f); }), done); + } + }); +}; + +// Make a directory and sub-directories. +var mkPath = function(dirPath, mode, done) { + fs.mkdir(dirPath, typeof mode === "string" ? parseInt(mode, 8) : mode, function(e) { + if (!e || e.code === "EEXIST") { + // Created or already exists, done. + done(); + } + else if (e.code === "ENOENT") { + // Missing sub dir. + + mkPath(path.dirname(dirPath), mode, function(e) { + if (e) { + throw e; + } + else { + mkPath(dirPath, mode, done); + } + }); + } + else { + throw e; + } + }); +}; + +// Create directory if needed and empty if needed. +var resetPath = function(dirPath, mode, done) { + mkPath(dirPath, mode, function(e) { + if (e) { + done(e); + } + else { + emptyPath(dirPath, done); + } + }); +}; + +// Remove path recursively. +var rmPath = function(dirPath, done) { +// console.log("rmPath: %s", dirPath); + + fs.lstat(dirPath, function(err, stats) { + if (err && err.code == "ENOENT") { + done(); + } + if (err) { + done(err); + } + else if (stats.isDirectory()) { + emptyPath(dirPath, function(e) { + if (e) { + done(e); + } + else { +// console.log("rmdir: %s", dirPath); done(); + fs.rmdir(dirPath, done); + } + }); + } + else { +// console.log("unlink: %s", dirPath); done(); + fs.unlink(dirPath, done); + } + }); +}; + +exports.mkPath = mkPath; +exports.resetPath = resetPath; +exports.rmPath = rmPath; + +// vim:sw=2:sts=2:ts=8 diff --git a/js/utils.js b/js/utils.js index 950da3e4..37f78736 100644 --- a/js/utils.js +++ b/js/utils.js @@ -1,8 +1,3 @@ -// YYY Should probably have two versions: node vs browser - -var fs = require("fs"); -var path = require("path"); - Function.prototype.method = function(name,func) { this.prototype[name] = func; @@ -42,84 +37,6 @@ var mapOr = function(func, array, done) { } }; -// Make a directory and sub-directories. -var mkPath = function(dirPath, mode, done) { - fs.mkdir(dirPath, typeof mode === "string" ? parseInt(mode, 8) : mode, function(e) { - if (!e || e.code === "EEXIST") { - // Created or already exists, done. - done(); - } - else if (e.code === "ENOENT") { - // Missing sub dir. - - mkPath(path.dirname(dirPath), mode, function(e) { - if (e) { - throw e; - } - else { - mkPath(dirPath, mode, done); - } - }); - } - else { - throw e; - } - }); -}; - -// Empty a directory. -var emptyPath = function(dirPath, done) { - fs.readdir(dirPath, function(err, files) { - if (err) { - done(err); - } - else { - mapOr(rmPath, files.map(function(f) { return path.join(dirPath, f); }), done); - } - }); -}; - -// Remove path recursively. -var rmPath = function(dirPath, done) { -// console.log("rmPath: %s", dirPath); - - fs.lstat(dirPath, function(err, stats) { - if (err && err.code == "ENOENT") { - done(); - } - if (err) { - done(err); - } - else if (stats.isDirectory()) { - emptyPath(dirPath, function(e) { - if (e) { - done(e); - } - else { -// console.log("rmdir: %s", dirPath); done(); - fs.rmdir(dirPath, done); - } - }); - } - else { -// console.log("unlink: %s", dirPath); done(); - fs.unlink(dirPath, done); - } - }); -}; - -// Create directory if needed and empty if needed. -var resetPath = function(dirPath, mode, done) { - mkPath(dirPath, mode, function(e) { - if (e) { - done(e); - } - else { - emptyPath(dirPath, done); - } - }); -}; - var trace = function(comment, func) { return function() { console.log("%s: %s", trace, arguments.toString); @@ -151,11 +68,7 @@ var stringToHex = function (s) { }).join(""); }; -exports.emptyPath = emptyPath; exports.mapOr = mapOr; -exports.mkPath = mkPath; -exports.resetPath = resetPath; -exports.rmPath = rmPath; exports.trace = trace; exports.hexToString = hexToString; exports.stringToHex = stringToHex;