# @jacobbubu/pull-pushable-duplex

> [![Build Status](https://github.com/jacobbubu/pull-pushable-duplex/workflows/Build%20and%20Release/badge.svg)](https://github.com/jacobbubu/pull-pushable-duplex/actions?query=workflow%3A%22Build+and+Release%22) [![Coverage Status](https://coveralls.io/rep

Latest version **1.2.0** (published 2020-11-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install @jacobbubu/pull-pushable-duplex
pnpm add @jacobbubu/pull-pushable-duplex
yarn add @jacobbubu/pull-pushable-duplex
bun add @jacobbubu/pull-pushable-duplex
```

## 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.2.0 |
| Published | 2020-11-02 |
| First published | 2020-09-21 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=10.0.0 |
| Dependencies | 0 |
| Unpacked size | 38.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | jacobbubu |
| Maintainers | jacobbubu |

## Links

- npm: https://www.npmjs.com/package/@jacobbubu/pull-pushable-duplex
- Repository: https://github.com/jacobbubu/pull-pushable-duplex
- Homepage: https://github.com/jacobbubu/pull-pushable-duplex#readme
- Issues: https://github.com/jacobbubu/pull-pushable-duplex/issues
- npm.io page: https://npm.io/package/@jacobbubu/pull-pushable-duplex

## Recent versions

- 1.2.0 (latest) — 2020-11-02
- 1.1.2 — 2020-10-08
- 1.1.1 — 2020-09-26
- 1.1.0 — 2020-09-21
- 1.0.0 — 2020-09-21

## README

# @jacobbubu/pull-pushable-duplex

[![Build Status](https://github.com/jacobbubu/pull-pushable-duplex/workflows/Build%20and%20Release/badge.svg)](https://github.com/jacobbubu/pull-pushable-duplex/actions?query=workflow%3A%22Build+and+Release%22)
[![Coverage Status](https://coveralls.io/repos/github/jacobbubu/pull-pushable-duplex/badge.svg)](https://coveralls.io/github/jacobbubu/pull-pushable-duplex)
[![npm](https://img.shields.io/npm/v/@jacobbubu/pull-pushable-duplex.svg)](https://www.npmjs.com/package/@jacobbubu/pull-pushable-duplex/)

> A helper class for constructing full/half pushable duplex in pull-stream manner.

## Intro.

Constructing a full-duplex, pushable duplex requires complex state management considerations.

Especially, you need to make sure that you follow the guidelines of the pull-stream ([pull-stream-protocol-checker](https://github.com/elavoie/pull-stream-protocol-checker)).

## Usage

``` ts
import * as pull from 'pull-stream'
import { PushableDuplex } from '@jacobbubu/pull-pushable-duplex'

function valuesToRead<T>(values: T[] = []) {
  let i = 0
  return (cb: OnReadCallback<T>) => {
    i === values.length ? cb(true) : cb(null, values[i])
    i += 1
  }
}

const results: any[] = []
const d = new PushableDuplex({
  allowHalfOpen: true,
  onRead: valuesToRead([1, 2, 3]),
  onReceived: (data) => {
    results.push(data)
  },
  onFinished: (err) => {
    console.log("we've" got, results)
  },
})
const peer = {
  source: pull.values(['a', 'b', 'c']),
  sink: pull.collect((err, results) => {
    console.log("peer's got", results)
  })
}
pull(d, peer, d)
```

---
_Source: https://npm.io/package/@jacobbubu/pull-pushable-duplex · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
