Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jirevwe/omi
Array as a stream
https://github.com/jirevwe/omi
array javascript library list nodejs stream typescript
Last synced: about 1 month ago
JSON representation
Array as a stream
- Host: GitHub
- URL: https://github.com/jirevwe/omi
- Owner: jirevwe
- Created: 2019-06-10T00:03:11.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-09T05:42:14.000Z (almost 2 years ago)
- Last Synced: 2023-02-28T09:36:29.058Z (over 1 year ago)
- Topics: array, javascript, library, list, nodejs, stream, typescript
- Language: TypeScript
- Size: 811 KB
- Stars: 9
- Watchers: 2
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Omi 🌊
This lib was inspired by [@shinout's](https://github.com/shinout) [ArrayStream](https://github.com/shinout/ArrayStream).
This a tiny tool that turns a array of objects into a stream to which items can be added to. I wrote this because a few stream libs I found didn't allow me add items to it after I'd already created the stream. Plus I wanted to learn a little about streams in NodeJs.
## Usage
```ts
import Omi, { OmiEvent } from '.';const omi = new Omi([]);
omi.on(OmiEvent.DATA, (data, key) => {
console.log(key, data);
});omi.on(OmiEvent.END, () => {
console.log('Stream closed');
});omi.on(OmiEvent.ERROR, error => {
console.log(error);
});setTimeout(() => {
omi.add([...Array.from({ length: 100 }).keys()].map((i: number) => i ** i));
}, 1000);setTimeout(() => {
omi.add([...Array.from({ length: 100 }).keys()].map((i: number) => 2 ** i));
}, 3000);
```## Usage with `Stream`s or `Transform`ers
```ts
import { createWriteStream } from 'fs';
import Omi from '..';
import faker from 'faker';
import { join } from 'path';
import { Transform } from 'stream';const omi = new Omi([], false);
const uppercaseTransformer = new Transform({
transform(chunk, encoding, callback) {
const upperCase = chunk.toString().toUpperCase() + '\n';
this.push(upperCase);
callback();
}
});// create a write stream to the file system
const writeStream = createWriteStream(join(__dirname, '../../test.txt'));// pipe the data into the file as it is recieved
omi.pipe(uppercaseTransformer).pipe(writeStream);// add data to the stream
omi.add(
[...Array.from({ length: 100 }).keys()].map(() => faker.lorem.lines(1))
);// add data to the stream
omi.add(
[...Array.from({ length: 100 }).keys()].map(() => faker.internet.email())
);
```## Contribution
PRs are welcome 😬
## TODO
- Write tests
## PS
We're hiring, DM me on twitter [@rtukpe](https://twitter.com/rtukpe) 😎