UNPKG

2.69 kBJavaScriptView Raw
1'use strict';
2
3var
4 fs = require('fs'),
5 path = require('path');
6
7module.exports = {
8
9 detectSync: function(dir, callback) {
10 var self = this;
11
12 fs.readdirSync(dir).forEach(function(file) {
13 var pathname = path.join(dir, file);
14 if (fs.statSync(pathname).isDirectory()) {
15 self.detectSync(pathname, callback);
16 } else {
17 if (callback) {
18 callback(pathname);
19 }
20 }
21 });
22 },
23
24 detectAllSync: function(directory, filter, callback) {
25 var self = this;
26
27 var dirs = {
28 children: []
29 };
30
31 fs.readdirSync(directory).forEach(function(file) {
32 var dir = null;
33 var pathname = path.join(directory, file);
34 var stat = fs.statSync(pathname);
35 if (stat.isDirectory()) {
36 dir = self.detectAllSync(pathname, filter, callback);
37 dir.id = stat.ino; //stat.ctime.getTime();
38 dir.name = file;
39 dir.title = pathname;
40 dir.mtime = stat.mtime;
41 if (callback) {
42 callback(dir, true);
43 }
44 dirs.children.push(dir);
45 } else {
46 dir = {
47 id: stat.ino, //stat.ctime.getTime(),
48 name: file,
49 title: pathname,
50 mtime: stat.mtime
51 };
52 if (!filter || filter(file)) {
53 dirs.children.push(dir);
54 if (callback) {
55 callback(dir, false);
56 }
57 }
58 }
59 });
60 return dirs;
61 },
62 getSync: function(id, directory, filter) {
63 var self = this;
64 var dir = null;
65 var dirs = fs.readdirSync(directory);
66
67 for (var i = 0, len = dirs.length; i < len; i++) {
68 var file = dirs[i];
69 var pathname = path.join(directory, file);
70 var stat = fs.statSync(pathname);
71 if (stat.isDirectory()) {
72 dir = self.getSync(id, pathname, filter);
73 if (dir) {
74 break;
75 }
76 } else {
77 if ((!filter || filter(file)) && id == stat.ino) {
78 dir = pathname;
79 break;
80 }
81 }
82 }
83 return dir;
84 },
85
86 detect: function(dir, callback, finish) {
87 var self = this;
88 fs.readdir(dir, function(err, files) {
89 (function next(i) {
90 if (i < files.length) {
91 var pathname = path.join(dir, files[i]);
92 fs.stat(pathname, function(err, stats) {
93 if (stats.isDirectory()) {
94 self.detect(pathname, callback, function() {
95 next(i + 1);
96 });
97 } else {
98 if (callback) {
99 callback(pathname);
100 }
101 next(i + 1);
102 }
103 });
104 } else {
105 if (finish) {
106 finish();
107 }
108 }
109 })(0);
110 });
111 }
112};
\No newline at end of file