Socket
Socket
Sign inDemoInstall

symbol-observable

Package Overview
Dependencies
0
Maintainers
3
Versions
19
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    symbol-observable

Symbol.observable ponyfill


Version published
Weekly downloads
13M
increased by4.03%
Maintainers
3
Install size
17.4 kB
Created
Weekly downloads
 

Package description

What is symbol-observable?

The symbol-observable package is primarily used to polyfill the Observable symbol, which is a proposed addition to the ECMAScript standard. It allows JavaScript objects to be observable, meaning that other objects can subscribe to them and react to changes. This is particularly useful in reactive programming models and libraries, such as RxJS, where data streams and their transformations are a core concept.

What are symbol-observable's main functionalities?

Polyfill for Observable Symbol

This code demonstrates how to use the symbol-observable package to make an object observable. It defines a simple observable that emits 'hi' every second. An observer subscribes to this observable to log the emitted values. This showcases how symbol-observable can be used to implement the observer pattern in JavaScript.

"use strict";

const symbolObservable = require('symbol-observable').default;

console.log(typeof symbolObservable); // 'symbol' in environments with native Symbol support

const obj = {};
obj[symbolObservable] = function () {
  return {
    subscribe(observer) {
      const intervalID = setInterval(() => observer.next('hi'), 1000);

      return {
        unsubscribe() {
          clearInterval(intervalID);
        }
      };
    }
  };
};

const observable = obj[symbolObservable]();
const subscription = observable.subscribe({
  next(val) { console.log(val); },
  complete() { console.log('Done'); }
});

// Later:
// subscription.unsubscribe();

Other packages similar to symbol-observable

Readme

Source

symbol-observable Build Status

Symbol.observable pony/polyfill

This will polyfill Symbol.observable if Symbol exists, but will not polyfill Symbol if it doesn't exist. Meant to be used as a "ponyfill", meaning you're meant to use the module's exported symbol value as described below. This is all done to ensure that everyone is using the same version of the symbol (or string depending on the environment), as per the nature of symbols in JavaScript.

Install

$ npm install --save symbol-observable

Basic Usage

const symbolObservable = require('symbol-observable').default;

console.log(symbolObservable);
//=> Symbol(observable)
import Symbol_observable from 'symbol-observable';

console.log(Symbol_observable);
//=> Symbol(observable)

Making an object "observable":

You can do something like what you see below to make any object "observable" by libraries like RxJS, XStream and Most.js.

Things to know:

  1. It's best if you just use one of the above libraries.
  2. If you're not, but sure you never next, error or complete on your observer after error or complete was called.
  3. Likewise, make sure you don't next, error or complete after unsubscribe is called on the returned object.
import Symbol_observable from 'symbol-observable';

someObject[Symbol_observable] = () => {
  return {
    subscribe(observer) {
      const handler = e => observer.next(e);
      someObject.addEventListener('data', handler);
      return {
        unsubscribe() {
          someObject.removeEventListener('data', handler);
        }
      }
    },
    [Symbol_observable]() { return this }
  }
}

Often, it's not very hard, but it can get tricky in some cases.

License

MIT © Sindre Sorhus and Ben Lesh

Keywords

FAQs

Last updated on 15 Apr 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc