JSPM

@sanity/observable

0.106.14
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 17689
  • Score
    100M100P100Q141530F
  • License MIT

A small-ish RxJS based Observable implementation for Sanity

Package Exports

  • @sanity/observable
  • @sanity/observable/minimal
  • @sanity/observable/multicast

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@sanity/observable) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@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