diff --git a/src/index.js b/src/index.js index 73a89ee..21741a4 100644 --- a/src/index.js +++ b/src/index.js @@ -55,9 +55,10 @@ function tileReduce(options) { if (output) output.setMaxListeners(0); var mapOptions = options.mapOptions || {}; + var requireData = options.requireData || 'all'; for (var i = 0; i < maxWorkers; i++) { - var worker = fork(path.join(__dirname, 'worker.js'), [options.map, JSON.stringify(options.sources), JSON.stringify(mapOptions)], {silent: true}); + var worker = fork(path.join(__dirname, 'worker.js'), [options.map, JSON.stringify(options.sources), JSON.stringify(mapOptions), requireData], {silent: true}); worker.stdout.pipe(binarysplit('\x1e')).pipe(output); worker.stderr.pipe(process.stderr); worker.on('message', handleMessage); diff --git a/src/worker.js b/src/worker.js index aab08f4..e387e7f 100644 --- a/src/worker.js +++ b/src/worker.js @@ -8,6 +8,7 @@ var isOldNode = process.versions.node.split('.')[0] < 4; global.mapOptions = JSON.parse(process.argv[4]); var map = require(process.argv[2]); +var requireData = process.argv[5]; JSON.parse(process.argv[3]).forEach(function(source) { q.defer(loadSource, source); @@ -42,14 +43,24 @@ function processTile(tile, callback) { if (err) throw err; var data = {}; + var hasData = false; for (var i = 0; i < results.length; i++) { data[sources[i].name] = results[i]; if (!results[i]) { - callback(); - process.send({reduce: true}); - return; + if (requireData === 'all') { + callback(); + process.send({reduce: true}); + return; + } + } else { + hasData = true; } } + if (requireData === 'any' && !hasData) { + callback(); + process.send({reduce: true}); + return; + } var writeQueue = queue(1);