UNPKG

2.83 kBJavaScriptView Raw
1const path = require('path')
2const fs = require('fs')
3const chalk = require('chalk')
4
5const inquiry = require('./lib/inquiry')
6const strike = require('./lib/strike')
7const upload = require('./lib/upload')
8const refresh = require('./lib/refresh')
9
10const home = require('user-home')
11const keyDir = path.resolve(home, './.qiniu')
12const keyFile = path.resolve(home, './.qiniu/key.json')
13
14function readFiles(srcDir, rootDir, ext) {
15 let files = []
16 let names = []
17 let loop = (function loop(src) {
18 let dirs = fs.readdirSync(src)
19
20 for (let temp in dirs) {
21 let dir = path.join(src, dirs[temp])
22 let stat = fs.statSync(dir);
23
24 if (stat.isFile() &&
25 (!(new RegExp((ext || '\\.\\*') + '$').test(dirs[temp])))) {
26 files.push(dir = dir.replace(/\\/g, '\/'))
27 names.push(dir.replace(new RegExp('^.*/' + rootDir + '/'), '/'))
28 } else if (stat.isDirectory()) {
29 loop(dir)
30 }
31 }
32 })
33 loop(srcDir)
34 return {
35 files: files,
36 names: names
37 }
38}
39
40module.exports = function(options) {
41 let args = arguments
42 let lastParam = args[args.length - 1]
43 let callback = lastParam && (typeof lastParam === 'function') ? lastParam : ''
44 let clone = {
45 bucket: options.bucket,
46 src: options.src,
47 fix: options.fix,
48 ext: options.ext,
49 urls: options.urls || [],
50 rootDir: options.rootDir || '/'
51 }
52 let bucket = clone.bucket
53 let src = clone.src
54 let fix = clone.fix
55 let ext = clone.ext
56 let answer = null
57
58 let saveFile = function() {
59
60 if ((!fs.existsSync(keyFile)) && answer.save) {
61 fs.existsSync(keyDir) ? '' : fs.mkdirSync(path.join(home, '.qiniu'))
62 fs.createWriteStream(keyFile).write(JSON.stringify(answer));
63 }
64 }
65
66 {
67 if (fs.existsSync(keyFile)) {
68
69 update.apply(answer = require(keyFile), [callback])
70 } else {
71
72 inquiry(function(respAnswer) {
73 update.apply(answer = respAnswer, [callback])
74 })
75 }
76 }
77
78 function update(fn) {
79 let infos = readFiles(src, clone.rootDir, ext)
80 let tempFiles = infos.files.slice(0)
81 let tempNames = infos.names.slice(0)
82
83 strike.apply(answer, [bucket, fix, function() {
84 (function inner() {
85 upload.apply(answer, [bucket, path.resolve(tempFiles[0]), fix + tempNames[0], function() {
86 tempFiles.splice(0, 1)
87 tempNames.splice(0, 1)
88
89 if ((!tempFiles.length)) {
90 saveFile.call()
91 fn && fn.apply(null, [answer])
92
93 if (clone.urls.length) {
94 referUrl(fn)
95 }
96 } else {
97 inner()
98 }
99 }])
100 })()
101 }])
102
103 console.log(' ' + chalk.bgRed(' Upload number: ' + infos.files.length + ' files '))
104 }
105
106 function referUrl(fn) {
107 refresh.apply(answer, [clone.urls, function() {
108 fn && fn.apply(null, [answer])
109 }])
110 }
111}
\No newline at end of file