Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including @sanity/observable with all npm packages installed. Try it out:

const Observable = require('./') Observable .of('Foo, bar, SKIP, Baz') .flatMap(str => str.split(/,\s*/)) .filter(word => word !== 'SKIP') .map(word => word.toUpperCase()) .flatMap(word => Promise.resolve(`prefix-${word}`)) .subscribe(prefixedWord => { console.log(prefixedWord) })

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

@sanity/observable v1.4.0

A small-ish RxJS based Observable implementation for Sanity

@sanity/observable

Build Status

A small-ish RxJS based Observable implementation for Sanity

Installation

npm install --save @sanity/observable

Usage

import Observable from '@sanity/observable'

Observable
    .of('Foo, bar, SKIP, Baz')
    .flatMap(str => str.split(/,\s*/))
    .filter(word => word !== 'SKIP')
    .map(word => word.toUpperCase())
    .flatMap(word => Promise.resolve(`prefix-${word}`))
    .subscribe(prefixedWord => {
      console.log(prefixedWord)
    })

// => 'prefix-FOO'
// => 'prefix-BAR'
// => 'prefix-BAZ'

A minimal Observable

For bundle size sensitive contexts there is an absolute minimal observable implementation (still RxJS based) that can be imported from @sanity/observable/minimal. This observable has none of the static methods (create, from), and implements only the map, filter and reduce instance methods. It weighs around 3.3 KB minified and gzipped.

import Observable from '@sanity/observable/minimal'

new Observable(observer => {
  ['tiger', 'lion', 'SKIP', 'cheetah'].forEach(word => {
    observer.next(word)
  })
  observer.complete()
})
  .filter(word => word !== 'SKIP')
  .map(word => word.toUpperCase())
  .reduce((wordLengths, word) => {
    wordLengths[word] = word.length
    return wordLengths
  }, {})
  .subscribe(wordLengths => {
    assert.deepEqual(wordLengths, {TIGER: 5, LION: 4, CHEETAH: 7})
  })

License

MIT-licensed

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free