# node-protobuf-stream

> encode & decode protobuf stream

Latest version **1.0.1** (published 2016-07-11) · ISC license · 0 weekly downloads

## Install

```sh
npm install node-protobuf-stream
pnpm add node-protobuf-stream
yarn add node-protobuf-stream
bun add node-protobuf-stream
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2016-07-11 |
| First published | 2016-01-13 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 (+11 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | nigel0913 |
| Maintainers | nigel0913 |
| Keywords | protobuf, stream |

## Links

- npm: https://www.npmjs.com/package/node-protobuf-stream
- Repository: https://github.com/nigel0913/protobuf-stream
- Homepage: https://github.com/nigel0913/protobuf-stream#readme
- Issues: https://github.com/nigel0913/protobuf-stream/issues
- npm.io page: https://npm.io/package/node-protobuf-stream

## Dependencies (3)

- [async](https://npm.io/package/async.md) ^1.5.2
- [debug](https://npm.io/package/debug.md) ^2.2.0
- [protobufjs](https://npm.io/package/protobufjs.md) ^5.0.1

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 1.0.1 (latest) — 2016-07-11
- 1.0.0 — 2016-05-20
- 0.1.3-0 — 2016-04-21
- 0.1.2 — 2016-04-20
- 0.1.1 — 2016-01-14
- 0.1.0 — 2016-01-14
- 0.0.1 — 2016-01-13

## README

# node-protobuf-stream

[![Build Status](https://travis-ci.org/nigel0913/protobuf-stream.svg?branch=master)](https://travis-ci.org/nigel0913/protobuf-stream)
[![NPM Version](https://img.shields.io/npm/v/node-protobuf-stream.svg?style=flat)](https://www.npmjs.com/package/node-protobuf-stream)
[![NPM Downloads](https://img.shields.io/npm/dm/node-protobuf-stream.svg?style=flat)](https://www.npmjs.com/package/node-protobuf-stream)

## Installation

    $ npm install node-protobuf-stream
    
## Usage Example

define.proto file
```
package Test;

message A {
    required uint32 a = 1;
}

```

test.js file

```js
var path = require('path');
var ProtobufStream = require('node-protobuf-stream');

ProtobufStream.initStream(path.join(__dirname, 'define.proto'));

var Test = ProtobufStream.get('Test');

var serializer = new ProtobufStream.Serializer();
var parser     = new ProtobufStream.Parser();

serializer.pipe(parser);

parser.on('data', function (data) {
    console.log(data.$type.fqn(), JSON.stringify(data));
});

[1, 2, 3].forEach(function (value) {
    serializer.write(new Test.A({a: value}));
});

```

output

```
.Test.A {"a":1}
.Test.A {"a":2}
.Test.A {"a":3}
```

## API

### initStream(`dirOrFile` [, `options`] [, `done`])

* `dirOrFile`: the protobuf definition file or directory (load all proto&json files recursively)
* `options`: module options, see below.
* `done (err)`: callback when init finished. it will be sync if not given.

#### `options`
| Property | Default | Description |
|--------|--------|---------|
| header_32_bit | false     | Default is 16 bit , and max buffer size is 64K |
| header_big_endian | false | Default is little endian |
| limit_buffer_size | 1 << 16 - 1 | Custom limit for buffer size |

### resetStream()

reset module data.

### Serializer()

return stream class instance for serializing protobuf object.

### Parser()

return stream class instance for parsing protobuf buffer.

### get([`fqn`])

get Protobuf.js module class by fqn (fully qualified name as of ".PATH.TO.THIS")


### setCustomWrap(`serializeFn`, `parseFn`)

Custom Method to serialize protobuf object to buffer & parse buffer to protobuf object.

* `serializeFn(message)`: message is protobuf object, should return Buffer;
* `parseFn(buffer)`: buffer is Buffer, should return protobuf object;

## Events

### Serializer Events

#### "error"

`serializer` will emit `error` when some error occurs.

#### stream.Writable events

such as
* "finish"
* "end"
* "close"
* ...

### Parser Events

#### "error"

`parser` will emit `error` when some error occurs.

#### "data"

`parse` will emit `data` when one protobuf object has been parsed from buffer.

#### stream.Readable events

such as
* "close"
* "end"
* ...

## Custom Wrapper

The module Wrapper:
```protobuf
syntax = "proto3";
package _ProtbufStream;
message Protocol {
    string name = 1;
    bytes data = 2;
}
```
Serializer.wrapMessage(`message`:ProtobufObject):Buffer && Parser.unwrapBuffer(buffer):ProtobufObject

You can use `setCustomWrap(serializeFn, parseFn)` api to realize custom wrapper.


## Typescript support

Waiting for [Github Issues: Package scopes](https://github.com/Microsoft/TypeScript/pull/4913) to write index.d.ts.

Another way: copy below to your project typings folder

``` typescript
/// <reference path="../node/node.d.ts" />

declare module "node-protobuf-stream" {

    import stream = require("stream");

    interface Options {
        limit_buffer_size:number;
        header_32_bit:boolean;
        header_big_endian:boolean;
    }

    interface Callback {
        (err):void;
    }

    export class Serializer extends stream.Transform {
        wrapMessage(message:any):Buffer;
    }

    export class Parser extends stream.Transform {
        unwrapBuffer(message:Buffer):any;
    }

    function setCustomWrap(serializeFn, parseFn):void;

    function initStream(dirOrFile:string,
                        options?:Options,
                        done?:Callback):void;

    function resetStream():void;

    function get(pkgName?:string):any;
}
```

---
_Source: https://npm.io/package/node-protobuf-stream · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
