UNPKG

2.25 kBJavaScriptView Raw
1
2var crypto = require("crypto"),
3 fs = require("fs"),
4 path = require("path"),
5 os = require("os");
6
7// Helpers
8var utils = {
9
10 extend: function(destination, source) {
11 for (var property in source) {
12 if (source[property] && source[property].constructor && source[property].constructor === Object) {
13 destination[property] = destination[property] || {};
14 arguments.callee(destination[property], source[property]);
15 } else {
16 destination[property] = source[property];
17 }
18 }
19 return destination;
20 },
21
22 // creates a unique temp dir
23 tmpDir: function(){
24 var tmp = os.tmpDir();
25 var folder = "artycles_"+ crypto.randomBytes(4).readUInt32LE(0); // random folder name
26 var dir = tmp +"/"+ folder;
27 fs.mkdirSync( dir );
28 return dir+"/"; //add ending slash
29 },
30
31 // filename based on prefix or time
32 filename: function( options ){
33 // fallbacks
34 options = options || {
35 prefix: "",
36 scramble: true
37 };
38 var name = "";
39 if( options.prefix.length ){
40 name += options.prefix;
41 }
42 var d = new Date();
43 // add the date
44 name += d.getFullYear() +""+ dd(d.getMonth()+1) +""+ dd(d.getDate());
45 // add the time
46 name += "-"+ dd(d.getHours()) +""+ dd(d.getMinutes()) +""+ dd(d.getSeconds()) +""+ d.getMilliseconds();
47
48 // add a random hex number (6 digits)
49 if( options.scramble ) name += "-"+ crypto.randomBytes(Math.ceil(6/2)).toString('hex').slice(0,6);
50 //
51 return name;
52 },
53
54 // recursive rmdir
55 rmdir: function( dir ) {
56 if( fs.existsSync( dir ) ) {
57 fs.readdirSync( dir ).forEach(function(file,index){
58 var curDir = dir + "/" + file;
59 if(fs.lstatSync(curDir).isDirectory()) { // recurse
60 deleteFolderRecursive(curDir);
61 } else { // delete file
62 fs.unlinkSync(curDir);
63 }
64 });
65 fs.rmdirSync( dir );
66 }
67 },
68
69 // recursive mkdir
70 mkdir: function( dir, mode ) {
71 mode = mode || 0666;
72 if( !fs.existsSync( dir ) ) {
73 try {
74 fs.mkdirSync( dir );
75 } catch(e) {
76 if ( e.code != 'EEXIST' ){
77 //throw e;
78 //Create all the parents recursively
79 this.mkdir(path.dirname( dir ), mode );
80 //And then the directory
81 this.mkdir( dir, mode );
82 }
83 }
84 }
85 }
86}
87
88// helpers
89
90// double digits
91function dd( num ){
92 return ("0" + num).slice(-2);
93}
94
95
96module.exports = utils;