Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/michaelnisi/cop
Filter stream of objects
https://github.com/michaelnisi/cop
Last synced: about 1 month ago
JSON representation
Filter stream of objects
- Host: GitHub
- URL: https://github.com/michaelnisi/cop
- Owner: michaelnisi
- License: mit
- Created: 2012-09-28T05:45:21.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2016-04-24T05:40:52.000Z (over 8 years ago)
- Last Synced: 2024-11-13T07:01:55.339Z (about 1 month ago)
- Language: JavaScript
- Homepage:
- Size: 27.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cop - modify object stream
The **cop** [Node.js](http://nodejs.org/) package offers a `Transform` stream to conventiently cop data from object streams.
[![Build Status](https://secure.travis-ci.org/michaelnisi/cop.svg)](http://travis-ci.org/michaelnisi/cop)
## Creating a Cop Object
Use `require('cop')` to get a `function` that returns a `Transform` stream, configured in object mode, to which you can write arbitrary data. This constructor function takes either a `String` or a `function` as its sole argument.
## Emitting Named Properties
Specify a `String` to select a property, and the **cop** stream will emit the values of matching properties for all objects written to it. If an object doesn't have a property with this name, or the property's value is `null`, **the stream doesn't end**, but just skips the object and moves on the next.
### cop (key)
- `key` The name of the property of which to emit the value.
```js
var cop = require('cop')
var stream = require('stream')var objs = [
{ name: 'Moe' },
{ name: 'Larry' },
{ name: 'Curly' }
]var stooges = new stream.Readable({ objectMode: true })
stooges._read = function () {
stooges.push(objs.shift() || null)
}stooges
.pipe(cop('name'))
.pipe(process.stdout)
```## Transforming Objects
To apply custom transformations to each object, you can supply your own synchronous map `function`, which is applied with each object and is expected to return an arbitrary object to be emitted by the **cop** stream. If you want to skip the current object, you can return `null` or `undefined`—**the stream won't stop**. For asynchronous work, of course, you should write your own stream.
### cop (map)
- `map` A `function` which is applied to each object written to the stream.
The following use case, streaming file entries with [fstream](https://github.com/npm/fstream) and emitting just the filenames, filtering out directories; is the origin of this module. The filtering happens internally btw, sorry about that. But you get the point, you can do anything you want in the map `function`.
```js
var cop = require('cop')
var fstream = require('fstream')function map (obj) {
return obj ? obj['path'] + '\n' : undefined
}fstream.Reader({ path: __dirname })
.pipe(cop(map))
.pipe(process.stdout)
```## Installing Cop
With [npm](https://npmjs.org/package/cop) do:
```
$ npm install cop
```## License
[MIT License](https://raw.github.com/michaelnisi/cop/master/LICENSE)