-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcacheBusterManager.js
More file actions
85 lines (69 loc) · 2.38 KB
/
Copy pathcacheBusterManager.js
File metadata and controls
85 lines (69 loc) · 2.38 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var crypto = Npm.require('crypto');
var fs = Npm.require('fs');
var path = Npm.require('path');
var recursive = Npm.require('recursive-readdir');
var publicFolderLocation = '../web.browser/app';
var absolutePublicFolderLocation = path.resolve(publicFolderLocation);
var entries = {};
NgCacheBusterManager = {
manage: manage,
manageAll: manageAll,
setEntry: setEntry,
};
function manageAll(dir) {
ensurePathStart(dir);
var fullDir = publicFolderLocation + dir;
fullDir = path.resolve(fullDir);
recursive(fullDir, function (err, files) {
if (err) {
console.warn('CacheBusterManager could not process dir: %s', dir, err);
} else {
files.forEach(function (file) {
var fileName = file.substring(absolutePublicFolderLocation.length);
if (fileName.indexOf('/') !== 0) {
fileName = '/' + fileName;
}
manage(fileName);
});
}
});
}
function manage(filename) {
ensurePathStart(filename);
try {
var s = fs.ReadStream(publicFolderLocation + filename);
var md5 = crypto.createHash('md5');
s.on('data', function (d) {
md5.update(d);
});
s.on('end', function () {
var d = md5.digest('hex');
console.log('CacheBuster managing: %s, hash: %s', filename, d);
//TODO: why did I enforce the leadingslash anyways?! :)
var fileNameWithoutLeadingSlash = filename.indexOf('/')>-1 ? filename.substring(1) : filename;
setEntry(fileNameWithoutLeadingSlash, d);
});
s.on('error', function(err){
console.error('error while processing %s', filename, err);
});
} catch (e) {
console.error('Could not access %s', filename, e);
}
}
function ensurePathStart(name) {
if (name.indexOf('/') !== 0) {
throw new Error('Managed file paths must start with /', name);
}
}
function setEntry(key, hash) {
entries[key] = hash;
}
WebApp.connectHandlers.use(function (req, res, next) {
if (Inject.appUrl(req.url)) {
Inject.rawModHtml('doSomething', function(html) {
return html.replace(/<\/body>/, '<script id="ngCacheKeys" type="application/ejson">'+JSON.stringify(entries)+'</script></body>');
});
//Inject.obj('ngCacheKeys', entries);
}
next();
});