# most-subject

> Subjects for @most/core

Latest version **6.0.0** (published 2017-10-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install most-subject
pnpm add most-subject
yarn add most-subject
bun add most-subject
```

## Health

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

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

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 6.0.0 |
| Published | 2017-10-17 |
| First published | 2015-11-30 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 64 |
| Author | Tylor Steinberger |
| Maintainers | brandonpayton, ntilwalli, axefrog, tylors |

## Links

- npm: https://www.npmjs.com/package/most-subject
- Repository: https://github.com/mostjs-community/subject
- Homepage: https://github.com/mostjs-community/subject#readme
- Issues: https://github.com/mostjs-community/subject/issues
- npm.io page: https://npm.io/package/most-subject

## Dependencies (3)

- [@most/core](https://npm.io/package/@most/core.md) 0.14.0
- [@most/types](https://npm.io/package/@most/types.md) 0.11.1
- [@most/prelude](https://npm.io/package/@most/prelude.md) 1.6.4

## Recent versions

- 6.0.0 (latest) — 2017-10-17
- 5.3.0 — 2016-12-11
- 5.2.0 — 2016-11-12
- 5.1.0 — 2016-11-10
- 5.0.0 — 2016-11-09
- 4.1.3 — 2016-08-05
- 4.1.2 — 2016-07-01
- 4.1.1 — 2016-05-29
- 4.1.0 — 2016-05-29
- 4.0.2 — 2016-05-17
- 4.0.1 — 2016-05-17
- 4.0.0 — 2016-05-16
- 3.0.2 — 2016-03-24
- 3.0.1 — 2016-03-22
- 3.0.0 — 2016-02-28
- … 5 more at https://npm.io/package/most-subject/versions

## README

# most-subject

Subjects for [`@most/core`](https://github.com/mostjs/core)

## Get it
```sh
yarn add most-subject
# or
npm install --save most-subject
```

## API Documentation

#### create\<A\>(): Subject\<A, A\>
#### create\<A, B\>(f: (stream: Stream\<A\>) =\> Stream\<B\>): Subject\<A, B\>

Returns an tuple containing a `AttachSink` and a `Stream`. `AttachSink` can be
used to imperatively control the events flowing through the `Stream` or
declaratively using `attach`. Optionally, a function can be applied to the Stream, 
and the return value of that function will be returned as the second tuple value.

<details>
  <summary>See an example</summary>
  
```typescript
import { create, event } from 'most-subject'
import { runEffects, propagateEventTask } from '@most/core'
import { newDefaultScheduler, currentTime } from '@most/scheduler'

// Create a new `Scheduler` for use in our application.
// Usually, you will want to only have one Scheduler, and it should be shared 
// across your application
const scheduler = newDefaultScheduler()

// Create our sink and our stream.
// NOTE: stream is the resulting value of tap(console.log, stream).
const [ sink, stream ] = create(tap<number>(console.log))

// Pushes events into our stream.
const next = (n: number) => event(currentTime(scheduler), n, sink)

// Activate our stream.
runEffects(stream, scheduler)

// Simulate asynchronous data fetching,
// and then push values into our stream.
Promise.resolve([ 1, 2, 3 ])
 .then(data => data.forEach(next))
```

</details>

#### attach\<A\>(attachSink: AttachSink\<A\>, stream: Stream\<A\>): Stream\<A\>

Create circular dependencies with additional logic to help avoid memory leaks.

WARNING: There isn't any logic for breaking infinite loops.

<details>
  <summary>See an example</summary>

```typescript
import { Stream } from '@most/types'
import { create, attach } from 'most-subject'
import { periodic, scan, take, runEffects } from '@most/core'
import { newDefaultScheduler } from '@most/scheduler'

// Create a new Scheduler for use in our application.
// Usually, you will want to only have one Scheduler, and it should be shared 
// across your application.
const scheduler = newDefaultScheduler()

const [ sink, stream ] = create<number>()

// Listen to our stream.
// It will log 1, 2, and 3.
runEffects(tap(console.log, take(3, stream)), scheduler)

const origin = scan(x => x + 1, 0, periodic(100))

attach(origin)
```

</details>

#### event\<A\>(time: Time, value: A, sink: Sink\<A\>): void

A curried function for calling `Sink.event(time, value)`.

#### error(time: Time, error: Error, sink: Sink\<any\>): void

A curried function for calling `Sink.error(time, error)`.

#### end(time: Time, sink: Sink\<any\>): void

A curried function for calling `Sink.end(time)`.

#### Subject\<A, B\>

```typescript
import { Sink, Stream } from '@most/types'

export type Subject<A, B> = [AttachSink<A>, Stream<B>]
```

#### AttachSink\<A\>

```typescript
import { Sink } from '@most/types'

export AttachSink<A> extends Sink<A> {
  attach(stream: Stream<A>): Stream<A>
}
```

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