You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/node_modules/ast-transform/index.js

44 lines
910 B
JavaScript

var codegen = require('escodegen')
var esprima = require('esprima')
var through = require('through')
module.exports = astTransform
function astTransform(transform, opts) {
opts = opts || {}
return function(file) {
var stream = through(write, flush)
var tr = transform(file)
var buffer = []
if (!tr) return through()
return stream
function write(data) { buffer.push(data) }
function flush() {
buffer = buffer.join('')
try {
var ast = esprima.parse(buffer, opts)
} catch(e) {
return stream.emit('error', e)
}
tr(ast, function(err, updated) {
if (err) return stream.emit('error', err)
try {
var code = codegen.generate(updated || ast)
} catch(e) {
return stream.emit('error', e)
}
stream.queue(code.code || code)
stream.queue(null)
})
}
}
}