1 | var StringDecoder = require('string_decoder').StringDecoder
|
2 | var concat = require('concat-stream')
|
3 | var exorcist = require('exorcist')
|
4 | var through = require('through2')
|
5 | var assert = require('assert')
|
6 | var pump = require('pump')
|
7 |
|
8 | module.exports = exorcise
|
9 |
|
10 | function exorcise (buf, name, done) {
|
11 | assert.ok(Buffer.isBuffer(buf), 'lib/exorcise: buf should be a buffer')
|
12 | assert.equal(typeof name, 'string', 'lib/exorcise: name should be type string')
|
13 | assert.equal(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 |
|
35 | function 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 |
|
54 | function 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 | }
|