1 | let fs = require("fs-extra");
|
2 | let nodepath = require("path");
|
3 | let explore = require("./explore.js");
|
4 | var mimeTypes = require("mime-types");
|
5 |
|
6 | let checkFileType = url => {
|
7 | return new Promise((resolve, reject) => {
|
8 | fs.stat(url, (err, stats) => {
|
9 | if (err) {
|
10 | reject(err);
|
11 | return;
|
12 | }
|
13 | let mime = mimeTypes.lookup(url);
|
14 |
|
15 | if (stats.isDirectory()) {
|
16 | resolve({ type: "dir", path: url });
|
17 | } else if (stats.isFile()) {
|
18 | resolve({
|
19 | type: "file",
|
20 | path: url,
|
21 | size: stats.size,
|
22 | mime
|
23 | });
|
24 | } else {
|
25 | resolve({
|
26 | type: "other",
|
27 | path: url,
|
28 | size: stats.size,
|
29 | mime
|
30 | });
|
31 | }
|
32 | });
|
33 | });
|
34 | };
|
35 |
|
36 | let readDir = path => {
|
37 | return new Promise((resolve, reject) => {
|
38 | let out = [];
|
39 | fs.readdir(path, (err, dirs) => {
|
40 | if (err) {
|
41 | reject(err);
|
42 | return;
|
43 | }
|
44 | dirs.forEach((ph, ind) => {
|
45 | out.push(nodepath.join(path, ph));
|
46 | });
|
47 | resolve(out);
|
48 | });
|
49 | });
|
50 | };
|
51 |
|
52 | let taskObject = (obj, { filter, callback, fail, exclude, include }) => {
|
53 | return new Promise((resolve, reject) => {
|
54 | let exp = new explore();
|
55 | exp
|
56 | .setCallback(() => {
|
57 | if (typeof callback === "function") {
|
58 | callback();
|
59 | }
|
60 | })
|
61 | .setError(err => {
|
62 | if (typeof fail === "function") {
|
63 | fail(err);
|
64 | }
|
65 | })
|
66 | .parse((val, lastVal) => {
|
67 | //lastVal是解析过的val,resolve数组就继续下一次的运行,否则开始回溯,val为当前的内容,可以为字符串等等。
|
68 | return new Promise(function(resolve, reject) {
|
69 | // checkFileType(val)
|
70 | // .then(data => {
|
71 | // let { type, path, size, mime } = data;
|
72 | // if (url !== path) {
|
73 | // if (Array.isArray(exclude)) {
|
74 | // for (let val of exclude) {
|
75 | // if (typeof val === "string" && path.indexOf(val) !== -1) {
|
76 | // resolve();
|
77 | // return;
|
78 | // } else if (typeof val === "object" && val.test(path)) {
|
79 | // //not t reg,after
|
80 | // resolve();
|
81 | // return;
|
82 | // }
|
83 | // }
|
84 | // }
|
85 | // if (Array.isArray(include)) {
|
86 | // for (let val of include) {
|
87 | // if (typeof val === "string" && path.indexOf(val) === -1) {
|
88 | // //empty and reture
|
89 | // resolve();
|
90 | // return;
|
91 | // } else if (typeof val === "object" && !val.test(path)) {
|
92 | // resolve();
|
93 | // return;
|
94 | // }
|
95 | // }
|
96 | // }
|
97 | // }
|
98 | // if (typeof filter === "function") {
|
99 | // filter(data);
|
100 | // }
|
101 | // if (type === "dir") {
|
102 | // readDir(path)
|
103 | // .then(arr => {
|
104 | // resolve(arr);
|
105 | // })
|
106 | // .catch(err => {
|
107 | // console.log(err);
|
108 | // resolve();
|
109 | // });
|
110 | // } else {
|
111 | // resolve();
|
112 | // }
|
113 | // })
|
114 | // .catch(err => {
|
115 | // resolve();
|
116 | // });
|
117 | });
|
118 | })
|
119 | .run({ input: obj });
|
120 | });
|
121 | };
|
122 |
|
123 | module.exports = taskObject;
|
124 |
|
125 | // fsReadFiles(nodepath.join(__dirname,'../routes'));
|