/
compile.js
52 lines (48 loc) · 1.4 KB
/
compile.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
const crypto = require('crypto')
const debug = require('debug')('tre-compile')
const Browserify = require('browserify')
const indexhtmlify = require('indexhtmlify')
const BufferList = require('bl')
const eolfix = require('eol-fix-stream')
const htmlInlineEscape = require('./html-inline-escape')
module.exports = function compile(filename, opts, cb) {
if (typeof opts == 'function') {
cb = opts
opts = null
}
opts = opts || {}
const makeDoc = opts.indexhtmlify == false ? false : true
debug('browserify opts: %o', opts)
const browserify = Browserify(opts)
browserify.transform(file => eolfix(), {global: true})
browserify.add(filename)
browserify.bundle()
.pipe(BufferList( (err, buffer) => {
if (err) {
console.error(err.annotated)
return cb(err)
}
if (makeDoc) {
buffer = Buffer.from(htmlInlineEscape(buffer.toString()))
}
const bl_hash = BufferList()
bl_hash.append(buffer)
const hash = crypto.createHash('sha256')
hash.update(bl_hash.slice())
const sha = hash.digest('base64')
debug('script hash is %s', sha)
if (!makeDoc) {
return cb(null, {sha, js: buffer})
}
const doc = BufferList()
doc.append(buffer)
doc.pipe(indexhtmlify())
.pipe(BufferList( (err, buffer) => {
if (err) {
console.error(err.message)
return cb(err)
}
cb(null, {sha, body: buffer})
}))
}))
}