asset-pipe-js-reader
Advanced tools
Comparing version 1.0.0-beta.1 to 1.0.0-beta.2
@@ -9,41 +9,74 @@ 'use strict'; | ||
const depsSort = require('deps-sort'); | ||
const pump = require('pump'); | ||
module.exports = class Reader { | ||
/** | ||
* | ||
* We need to manipulate order in all bundles to make sure that the | ||
* order is an increased value accross all bundles. | ||
* | ||
*/ | ||
class Order extends stream.Transform { | ||
constructor () { | ||
super({ | ||
objectMode: true | ||
}); | ||
this.order = 0; | ||
} | ||
_transform (obj, encoding, next) { | ||
if (!isUndefined(obj.order)) { | ||
obj.order = this.order; | ||
this.order += 1; | ||
} | ||
this.push(obj); | ||
next(); | ||
} | ||
} | ||
module.exports = class Reader extends pack { | ||
constructor (streams = []) { | ||
super({ raw: true }); | ||
// Merge all file streams into one stream | ||
const merged = mergeStream(); | ||
streams.forEach((strm) => { | ||
merged.add(strm.pipe(JSONStream.parse('*'))); | ||
strm.on('error', (error) => { | ||
this.emit('error', error); | ||
}); | ||
strm.on('file found', () => { | ||
this.emit('file found'); | ||
merged.add(strm.pipe(JSONStream.parse('*'))); | ||
}); | ||
strm.on('file not found', () => { | ||
this.emit('file not found'); | ||
}); | ||
}); | ||
if (merged.isEmpty()) { | ||
// console.log('stream empty'); | ||
} | ||
// we need to manipulate order in all bundles to make sure that the | ||
// order is an increased value accross all bundles. | ||
let order = 0; | ||
const fixOrder = new stream.Transform({ | ||
objectMode: true, | ||
transform (obj, encoding, next) { | ||
if (!isUndefined(obj.order)) { | ||
obj.order = order; | ||
order += 1; | ||
} | ||
this.push(obj); | ||
next(); | ||
}, | ||
// If the merged file stream yelded empty, we can not continue | ||
setImmediate(() => { | ||
if (merged.isEmpty()) { | ||
return this.emit('pipeline empty'); | ||
} | ||
this.emit('pipeline ready'); | ||
}); | ||
// Set up the pipeline | ||
const order = new Order(); | ||
const sort = depsSort({ dedupe: true }); | ||
const packer = pack({ raw: true }); | ||
return pump(merged, fixOrder, sort, packer, (error) => { | ||
if (error) { | ||
console.log(error); | ||
} | ||
}); | ||
merged.on('error', (error) => { | ||
this.emit('error', error); | ||
}) | ||
.pipe(order) | ||
.on('error', (error) => { | ||
this.emit('error', error); | ||
}) | ||
.pipe(sort) | ||
.on('error', (error) => { | ||
this.emit('error', error); | ||
}) | ||
.pipe(this); | ||
} | ||
}; |
{ | ||
"name": "asset-pipe-js-reader", | ||
"version": "1.0.0-beta.1", | ||
"version": "1.0.0-beta.2", | ||
"author": { | ||
@@ -34,9 +34,8 @@ "name": "Trygve Lie", | ||
"merge-stream": "1.0.1", | ||
"pump": "1.0.2", | ||
"readable-stream": "2.2.6" | ||
"readable-stream": "2.2.9" | ||
}, | ||
"devDependencies": { | ||
"eslint": "^3.15.0", | ||
"eslint": "^3.19.0", | ||
"eslint-config-finn": "^1.0.1", | ||
"tap": "10.3.0" | ||
"tap": "10.3.2" | ||
}, | ||
@@ -43,0 +42,0 @@ "scripts": { |
@@ -33,3 +33,3 @@ # asset-pipe-js-reader | ||
```bash | ||
$ npm install asset-pipe-js-writer | ||
$ npm install asset-pipe-js-reader | ||
``` | ||
@@ -40,13 +40,19 @@ | ||
Make an JavaScript bundle out of two asset feeds stored as JSON and save it as a file: | ||
Make an JavaScript bundle out of two asset feeds stored on a filesystem: | ||
```js | ||
const Reader = require('asset-pipe-js-reader'); | ||
const fs = require('fs'); | ||
const SinkFs = require('asset-pipe-sink-fs'); | ||
const feedA = fs.createReadStream('./feed/a.json'); | ||
const feedB = fs.createReadStream('./feed/b.json'); | ||
const sink = new SinkFs({ | ||
path: './assets' | ||
}); | ||
const feedA = sink.reader('a.json'); | ||
const feedB = sink.reader('b.json'); | ||
const reader = new Reader([feedA, feedB]); | ||
reader.pipe(fs.createWriteStream('./build/browser.bundle.js')); | ||
reader.on('pipeline ready', () => { | ||
reader.pipe(fs.createWriteStream('./build/browser.bundle.js')); | ||
}); | ||
``` | ||
@@ -64,3 +70,3 @@ | ||
* `streams` - Array - An Array of streams . | ||
* `streams` - Array - An Array of file reader streams. Must be from one of the asset pipe sinks. | ||
@@ -71,2 +77,14 @@ Returns a `Transform stream`. | ||
## Events: | ||
This module emit the following events: | ||
- `error` - When an error occured in the pipeline. Emits with: `error`. | ||
- `file found` - When a file we want to read is found. | ||
- `file not saved` - When a file we want to read is not found. Emits with: `error`. | ||
- `pipeline ready` - When the pipeline is ready to start bundling asset feeds. | ||
- `pipeline empty` - When the pipeline is empty. Iow; it could not load any of the files its supposed to read so there it nothing to produce. | ||
## License | ||
@@ -73,0 +91,0 @@ |
6711
6
70
116
+ Addedreadable-stream@2.2.9(transitive)
+ Addedstring_decoder@1.0.3(transitive)
- Removedpump@1.0.2
- Removedend-of-stream@1.4.4(transitive)
- Removedonce@1.4.0(transitive)
- Removedpump@1.0.2(transitive)
- Removedreadable-stream@2.2.6(transitive)
- Removedstring_decoder@0.10.31(transitive)
- Removedwrappy@1.0.2(transitive)
Updatedreadable-stream@2.2.9