UNPKG

1.34 kBJavaScriptView Raw
1var StringDecoder = require('string_decoder').StringDecoder
2var concat = require('concat-stream')
3var exorcist = require('exorcist')
4var through = require('through2')
5var assert = require('assert')
6var pump = require('pump')
7
8module.exports = exorcise
9
10function exorcise (buf, name, done) {
11 assert.ok(Buffer.isBuffer(buf), 'lib/exorcise: buf should be a buffer')
12 assert.strictEqual(typeof name, 'string', 'lib/exorcise: name should be type string')
13 assert.strictEqual(typeof done, 'function', 'lib/exorcise: done should be type function')
14
15 done = once(done)
16
17 var bundle, sourceMap
18
19 var exo = ex(name, function (buf) {
20 sourceMap = buf
21 })
22
23 var sink = concat({ encoding: 'buffer' }, function (buf) {
24 bundle = buf
25 done(null, bundle, sourceMap)
26 })
27
28 pump(exo, sink, function (err) {
29 if (err) done(err)
30 })
31
32 exo.end(buf)
33}
34
35function ex (uri, done) {
36 var decoder = new StringDecoder('utf8')
37 var stream = through(read, flush)
38 var src = ''
39
40 return exorcist(stream, uri)
41
42 function read (chunk, _, cb) {
43 src += decoder.write(chunk)
44 cb()
45 }
46
47 function flush (cb) {
48 src += decoder.end()
49 done(Buffer.from(src))
50 cb()
51 }
52}
53
54function once (done) {
55 var called = false
56 return function (err, bundle, maps) {
57 if (called) return
58 called = true
59 done(err, bundle, maps)
60 }
61}