-
Notifications
You must be signed in to change notification settings - Fork 2
/
file.js
63 lines (56 loc) · 1.69 KB
/
file.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const Logger = require('./logger.js').Logger
const optimiseImage = require('./image.js').optimise
let copy = function (f, options, cb) {
let logger = new Logger(options.config)
logger.log('copy', f.source, f.target)
f.storage.copyFile(f.source, f.target, cb)
}
let optimise = function (f, options, cb) {
let logger = new Logger(options.config)
let func = copy
if (f.isImage()) {
func = optimiseImage
}
// TODO: handle additional optimisable file types, such as JSON files
func(f, options, function (err) {
if (err && func !== copy) {
logger.log('optimise', err, '(falling back to copy)')
return copy(f, options, cb)
}
cb(err)
})
}
let deleteAll = function (f, options, cb) {
exports.deleteCopy(f, options, function (err) {
// TODO: also delete generated files if the copy of the original file no longer exists
if (err) {
return cb(err)
}
exports.deleteGenerated(f, options, cb)
})
}
let deleteCopy = function (f, options, cb) {
let logger = new Logger(options.config)
logger.log('deleteCopy', f.target)
deleteIfExists(f.storage, f.target, cb)
// TODO: ignore 404 error when the file to be removed does not exist
}
let deleteGenerated = function (f, options, cb) {
let logger = new Logger(options.config)
logger.log('deleteGenerated', f.source)
// TODO: delete all generated files related to f.source
cb(null)
}
function deleteIfExists(storage, path, cb) {
storage.exists(path, function (exists) {
if (exists) {
return storage.unlink(path, cb)
}
cb(null)
})
}
exports.copy = copy
exports.optimise = optimise
exports.deleteAll = deleteAll
exports.deleteCopy = deleteCopy
exports.deleteGenerated = deleteGenerated