-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrowserify.js
More file actions
101 lines (95 loc) · 2.29 KB
/
Copy pathbrowserify.js
File metadata and controls
101 lines (95 loc) · 2.29 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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var babelify = require('babelify');
var browserify = require('browserify');
var chalk = require('chalk');
var crypto = require('crypto');
var moment = require('moment');
var packages = require('../packages');
var path = require('path');
var watchify = require('watchify');
var basedir = path.resolve(__dirname + '/../src/');
var devMode = process.env.KEYSTONE_DEV === 'true';
function ts() {
return chalk.gray(moment().format('YYYY-MM-DD HH:MM:SS '));
}
function logInit(file) {
console.log(chalk.grey('Watching ' + chalk.black.underline('keystone/admin/src/' + file) + ' for changes...'));
}
function logRebuild(file) {
console.log(ts() + chalk.green('rebuilt ' + chalk.underline(file)));
}
function logError(file, err) {
console.log(ts() + chalk.red('error building ' + chalk.underline(file) + ':') + '\n' + err.message);
}
module.exports = function(file, name) {
var b;
var building = false;
var queue = [];
var ready;
var src;
function build() {
if (building) return;
building = true;
var opts = { basedir: basedir };
if (devMode) {
logInit(file);
opts.cache = {};
opts.packageCache = {};
}
if (name) {
b = browserify(opts);
b.require('./' + file, { expose: name });
} else {
b = browserify('./' + file, opts);
}
b.transform(babelify.configure({
ignore: ['**/lib/**']
}));
b.exclude('FieldTypes');
packages.forEach(function(i) {
b.exclude(i);
});
if (devMode) {
b = watchify(b);
}
b.bundle(function(err, buff) {
if (err) return logError(file, err);
src = buff;
ready = true;
queue.forEach(function(reqres) {
send.apply(null, reqres);
});
});
b.on('update', function() {
b.bundle(function(err, buff) {
if (err) return logError(file, err);
else logRebuild(file);
src = buff;
});
});
}
function serve(req, res) {
if (!ready) {
build();
queue.push([req, res]);
return;
}
send(req, res);
}
function send(req, res) {
res.setHeader('Content-Type', 'application/javascript');
var etag = crypto.createHash('md5').update(src).digest('hex').slice(0, 6);
if (req.get && (etag === req.get('If-None-Match'))) {
res.status(304);
res.end();
}
else {
res.setHeader('ETag', etag);
res.setHeader('Vary', 'Accept-Encoding');
res.send(src);
}
}
return {
serve: serve,
build: build
};
};