All Projects → material-motion → indefinite-observable-js

material-motion / indefinite-observable-js

Licence: Apache-2.0 license
An Observable for JavaScript that never calls complete or error

Programming Languages

javascript
184084 projects - #8 most used programming language
typescript
32286 projects

Projects that are alternatives of or similar to indefinite-observable-js

React Combinators
[NOT MAINTAINED] Seamless combination of React and reactive programming
Stars: ✭ 95 (+53.23%)
Mutual labels:  observables
Mobx React Lite
Lightweight React bindings for MobX based on React 16.8 and Hooks
Stars: ✭ 2,096 (+3280.65%)
Mutual labels:  observables
ng-effects
Reactivity system for Angular. https://ngfx.io
Stars: ✭ 46 (-25.81%)
Mutual labels:  observables
Rxphp
Reactive extensions for PHP
Stars: ✭ 1,580 (+2448.39%)
Mutual labels:  observables
Snail
An observables framework for Swift
Stars: ✭ 163 (+162.9%)
Mutual labels:  observables
Rxjs Websockets
A very flexible and simple websocket library for rxjs
Stars: ✭ 248 (+300%)
Mutual labels:  observables
Karet
Karet is a library that allows you to embed Kefir observables into React VDOM
Stars: ✭ 81 (+30.65%)
Mutual labels:  observables
proc-that
proc(ess)-that - easy extendable ETL tool for Node.js. Written in TypeScript.
Stars: ✭ 25 (-59.68%)
Mutual labels:  observables
Angular Nodejs Mongodb Customersservice
Code for the Integrating Angular with Node.js RESTful Services Pluralsight course.
Stars: ✭ 164 (+164.52%)
Mutual labels:  observables
observer-spy
This library makes RxJS Observables testing easy!
Stars: ✭ 310 (+400%)
Mutual labels:  observables
Rxios
A RxJS wrapper for axios
Stars: ✭ 119 (+91.94%)
Mutual labels:  observables
Asynquence
Asynchronous flow control (promises, generators, observables, CSP, etc)
Stars: ✭ 1,737 (+2701.61%)
Mutual labels:  observables
swift-observables-example
Observable Pattern implementation in Swift.
Stars: ✭ 21 (-66.13%)
Mutual labels:  observables
Example App
Example app showcasing the ngrx platform
Stars: ✭ 1,361 (+2095.16%)
Mutual labels:  observables
electron-RxDB
RxDB is a high-performance, observable object store built on top of SQLite & intended for database-driven Electron applications.
Stars: ✭ 68 (+9.68%)
Mutual labels:  observables
Jasmine Marbles
Marble testing helpers for RxJS and Jasmine
Stars: ✭ 85 (+37.1%)
Mutual labels:  observables
Documentation
How does it all fit together?
Stars: ✭ 177 (+185.48%)
Mutual labels:  observables
callbag-subscribe
A callbag sink (listener) that connects an Observer a-la RxJS. 👜
Stars: ✭ 17 (-72.58%)
Mutual labels:  observables
servable
"simple" observable implementation based off RxJS & kefir Docs
Stars: ✭ 14 (-77.42%)
Mutual labels:  observables
observable-profiler
Tracks new & disposed Observable subscriptions
Stars: ✭ 41 (-33.87%)
Mutual labels:  observables

Indefinite Observable

Current version: Test status Code coverage
HEAD: Test status Code coverage

Why?

There are a lot of great Observable implementations, but they're baked into featureful libraries which contribute to both complexity and filesize. We wanted the simplest-possible Observable implementation, with no operators, no fancy scheduling. The entire thing is basically three statements in subscribe.

Indefinite Observable is a subset of the TC39 Observable proposal that never completes or errors. It implements the minimal-necessary functionality, but it should be completely interchangeable with the TC39 proposal for the subset that it does implement.

If you want a complete Observables library that works out-of-the-box, check out xstream, RxJS, Most, Bacon, or Kefir. If you want to build your own Observables library that includes just the functionality you need, try Indefinite Observable.

Usage

import { IndefiniteObservable } from 'indefinite-observable';

const moveEvent$ = new IndefiniteObservable(
  (observer) => {
    // Whenever you want the observable to dispatch a value, call
    // observer.next(value).
    element.addEventListener('pointermove', observer.next);

    // Return a function that will perform any necessary clean up when the
    // observable is unsubscribed from.
    return () => {
      element.removeEventListener('pointermove', observer.next);
    }
  }
);

// To receive the values dispatched by an observable, pass an observer to its
// subscribe method.  An observer is just an object with a next method.
//
// subscribe returns a unsubscribe function.  Call that when you no longer want
// to receive dispatches from the observable.
const unsubscribe = moveEvent$.subscribe({
  next(moveEvent) {
    console.log('got a pointer event: ', moveEvent);
  }
});

Learn more about How Indefinite Observables work.

Installation

yarn add indefinite-observable

or include as a script tag:

<script type = "module">
  import { IndefiniteObservable } from "https://ajax.googleapis.com/ajax/libs/indefinite-observable/2.0.1/indefinite-observable.bundle.js"
</script>

Contributing

This library aims to be as simple as possible, so modifications will be rare. Reasons we might make changes are limited to:

  • bugs, or
  • remaining compatible with the subset of the Observable spec that we support.

If you'd like to add operators, static methods, or other features, we invite you to depend upon us subclassing IndefiniteObservable in your own module. In fact, that's how we add features too.

Of course, we welcome improvements to the examples and documentation in this repo.

Bundling

Our source is available in 3 flavors: a TypeScript module, a JavaScript module, and a JavaScript bundle. Any changes made to the first need to be reflected in the other two. This should be handled for you automatically via a pre-commit hook. If you have a clean working copy after committing, you're good. If not, amend the commit with the new build before pushing.

If you need to bundle it independently, run

yarn run build

Testing

yarn run test

License

Apache 2.0

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].