bankai
Version:
The easiest way to compile JavaScript, HTML and CSS
62 lines (48 loc) • 1.34 kB
JavaScript
var StringDecoder = require('string_decoder').StringDecoder
var concat = require('concat-stream')
var exorcist = require('exorcist')
var through = require('through2')
var assert = require('assert')
var pump = require('pump')
module.exports = exorcise
function exorcise (buf, name, done) {
assert.ok(Buffer.isBuffer(buf), 'lib/exorcise: buf should be a buffer')
assert.strictEqual(typeof name, 'string', 'lib/exorcise: name should be type string')
assert.strictEqual(typeof done, 'function', 'lib/exorcise: done should be type function')
done = once(done)
var bundle, sourceMap
var exo = ex(name, function (buf) {
sourceMap = buf
})
var sink = concat({ encoding: 'buffer' }, function (buf) {
bundle = buf
done(null, bundle, sourceMap)
})
pump(exo, sink, function (err) {
if (err) done(err)
})
exo.end(buf)
}
function ex (uri, done) {
var decoder = new StringDecoder('utf8')
var stream = through(read, flush)
var src = ''
return exorcist(stream, uri)
function read (chunk, _, cb) {
src += decoder.write(chunk)
cb()
}
function flush (cb) {
src += decoder.end()
done(Buffer.from(src))
cb()
}
}
function once (done) {
var called = false
return function (err, bundle, maps) {
if (called) return
called = true
done(err, bundle, maps)
}
}