UNPKG

2.18 kBJavaScriptView Raw
1var async = require('async')
2var format = require('util').format
3var merge = require('deepmerge')
4var expandMapping = require('./lib/config/expand').expandMapping
5var readers = require('./lib/readers')
6var writers = require('./lib/writers')
7
8module.exports = function starscream(overrides, original, done) {
9
10 // Require this in on execute to avoid recursive require of the starscream transformer task
11 var transformers = require('./lib/transformers')
12
13 var options = merge({
14 readers: readers,
15 transformers: transformers,
16 writers: writers
17 }, overrides);
18
19 async.reduce(expandMapping(options.mapping), {}, function(wip, entry, next) {
20 async.seq(
21 function(cb) {
22 var fn = options.readers[entry.reader.type]
23 if (!fn) return cb(new Error(format('Unknown reader: %s', entry.reader.type)))
24 if (fn.length === 3) return fn(entry.reader, original, cb)
25 if (fn.length === 4) return fn(options, entry.reader, original, cb)
26 return cb(new Error(format('Incorrect number of reader arguments: %s', entry.reader.type)))
27 },
28 function(raw, cb) {
29 var fn = options.transformers[entry.transformer.type]
30 if (!fn) return cb(new Error(format('Unknown transformer: %s', entry.transformer.type)))
31 if (fn.length === 3) return fn(entry.transformer, raw, cb)
32 if (fn.length === 4) return fn(options, entry.transformer, raw, cb)
33 return cb(new Error(format('Incorrect number of transformer arguments: %s', entry.transformer.type)))
34 },
35 function(transformed, cb) {
36 var fn = options.writers[entry.writer.type]
37 if (!fn) return cb(new Error(format('Unknown writer: %s', entry.writer.type)))
38 if (fn.length === 4) return fn(entry.writer, wip, transformed, cb)
39 if (fn.length === 5) return fn(options, entry.writer, wip, transformed, cb)
40 return cb(new Error(format('Incorrect number of writer arguments: %s', entry.writer.type)))
41 }
42 )(next)
43 }, done)
44}
\No newline at end of file