make-transform

Make simple string based functions into browserify transforms.

make-transform

Make simple string based functions into browserify transforms. This does not return anything like a true stream and, as a result, is very small to browserify.

The objective was to implement just the API needed to support:

  • using it as a browserify transform
  • process.stdin.pipe(transform).pipe(process.stdout)
  • fs.createReadStream('input.js').pipe(transform).pipe(process.stdout)
  • process.stdin.pipe(transform).pipe(fs.createWriteStream('output.js'))
  • fs.createReadStream('input.js').pipe(transform).pipe(fs.createWriteStream('output.js'))

In short, this is a helper for when you are forced to interface with streams by factors outside your controll, but the actual API is just processing strings (a far simpler abstraction).

npm install make-transform

Make a browserify transform out of a function which takes filename and source as arguments and returns a string.

If a source argument is provided when called, it will just pass through to fn.

Example:

var makeTransform = require('make-transform')
 
module.exports = makeTransform(function (filesource) {
  return source.toLowerCase()
})
 
var res = module.exports('file.js', 'FUNCTION (STR) { RETURN STR.SPLIT("") }')
// res => 'function (str) { return str.split("") }' 
 
var strm = module.exports('file.js')
strm.end('FUNCTION (STR) { RETURN STR.SPLIT("") }')
strm.pipe(concat(function (res) {
  // res => 'function (str) { return str.split("") }' 
}))

Make a browserify transform out of a function which takes filename, source and callback as arguments and calls the callback with an optional error and a string.

If a source argument and callback is provided when called, it will just pass through to fn.

Example:

var makeTransform = require('make-transform')
 
module.exports = makeTransform.async(function (filesourcecallback) {
  callback(null, source.toLowerCase())
})
 
module.exports('file.js', 'FUNCTION (STR) { RETURN STR.SPLIT("") }', function (errres) {
  // res => 'function (str) { return str.split("") }' 
})
 
var strm = module.exports('file.js')
strm.end('FUNCTION (STR) { RETURN STR.SPLIT("") }')
strm.pipe(concat(function (res) {
  // res => 'function (str) { return str.split("") }' 
}))

Promise support was ommitted in an effor to keep this library ludicrously small. It's easy enough to make your own "promise transform" though:

var makeTransform = require('make-transform')
var Promise = require('promise')
 
function transform(filesource) {
  // return a promise for a string here 
}
var streaming = makeTransform.async(Promise.nodeify(transform))
module.exports = streaming
module.exports.promise = transform

MIT