pax_global_header00006660000000000000000000000064134732637210014522gustar00rootroot0000000000000052 comment=95ed4b3de49bc47737b49147512d746bead4ac0e any-observable-0.4.0/000077500000000000000000000000001347326372100144345ustar00rootroot00000000000000any-observable-0.4.0/.editorconfig000066400000000000000000000002571347326372100171150ustar00rootroot00000000000000root = true [*] indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.yml] indent_style = space indent_size = 2 any-observable-0.4.0/.gitattributes000066400000000000000000000000231347326372100173220ustar00rootroot00000000000000* text=auto eol=lf any-observable-0.4.0/.github/000077500000000000000000000000001347326372100157745ustar00rootroot00000000000000any-observable-0.4.0/.github/funding.yml000066400000000000000000000001331347326372100201460ustar00rootroot00000000000000github: sindresorhus open_collective: sindresorhus custom: https://sindresorhus.com/donate any-observable-0.4.0/.gitignore000066400000000000000000000000271347326372100164230ustar00rootroot00000000000000node_modules yarn.lock any-observable-0.4.0/.npmrc000066400000000000000000000000231347326372100155470ustar00rootroot00000000000000package-lock=false any-observable-0.4.0/.travis.yml000066400000000000000000000001161347326372100165430ustar00rootroot00000000000000language: node_js node_js: - '12' - '10' - '8' addons: chrome: stable any-observable-0.4.0/browser/000077500000000000000000000000001347326372100161175ustar00rootroot00000000000000any-observable-0.4.0/browser/create-karma-conf.js000066400000000000000000000012201347326372100217270ustar00rootroot00000000000000'use strict'; const arrify = require('arrify'); // Creates a `karma.conf` implementation that runs a specific set of files module.exports = function (files) { return karma => { karma.set({ frameworks: [ 'mocha', 'browserify' ], files: arrify(files), preprocessors: { 'tests/*.js': [ 'browserify' ] }, browserify: { debug: true }, customLaunchers: { ChromeHeadlessNoSandbox: { base: 'ChromeHeadless', flags: [ '--no-sandbox' ] } }, browsers: [ process.env.CI ? 'ChromeHeadlessNoSandbox' : 'ChromeHeadless' ], autoWatch: false, singleRun: true }); }; }; any-observable-0.4.0/browser/from-env.js000066400000000000000000000002641347326372100202100ustar00rootroot00000000000000'use strict'; // Karma config that reads an environment variable to decide which test to run module.exports = require('./create-karma-conf')(process.env.ANY_OBSERVABLE_TEST_PATH); any-observable-0.4.0/browser/tests/000077500000000000000000000000001347326372100172615ustar00rootroot00000000000000any-observable-0.4.0/browser/tests/shortcut-rxjs-all.js000066400000000000000000000011231347326372100232210ustar00rootroot00000000000000require('../../register/rxjs-all'); // eslint-disable-line import/no-unassigned-import const assert = require('assert'); const RxJsObservable = require('rxjs/Observable').Observable; const AnyObservable = require('../..'); const implementation = require('../../implementation'); it('rxjs-all', () => { assert.strictEqual(AnyObservable, RxJsObservable); assert.strictEqual(implementation, 'rxjs'); assert.strictEqual(typeof RxJsObservable.of, 'function'); assert.strictEqual(typeof RxJsObservable.from, 'function'); assert.strictEqual(typeof RxJsObservable.prototype.map, 'function'); }); any-observable-0.4.0/browser/tests/shortcut-rxjs-min.js000066400000000000000000000011351347326372100232370ustar00rootroot00000000000000require('../../register/rxjs-min'); // eslint-disable-line import/no-unassigned-import const assert = require('assert'); const RxJsObservable = require('rxjs/Observable').Observable; const AnyObservable = require('../..'); const implementation = require('../../implementation'); it('rxjs', () => { assert.strictEqual(AnyObservable, RxJsObservable); assert.strictEqual(implementation, 'rxjs/Observable'); assert.strictEqual(typeof RxJsObservable.of, 'undefined'); assert.strictEqual(typeof RxJsObservable.from, 'undefined'); assert.strictEqual(typeof RxJsObservable.prototype.map, 'undefined'); }); any-observable-0.4.0/browser/tests/shortcut-rxjs.js000066400000000000000000000011331347326372100224540ustar00rootroot00000000000000require('../../register/rxjs'); // eslint-disable-line import/no-unassigned-import const assert = require('assert'); const RxJsObservable = require('rxjs/Observable').Observable; const AnyObservable = require('../..'); const implementation = require('../../implementation'); it('rxjs-min', () => { assert.strictEqual(AnyObservable, RxJsObservable); assert.strictEqual(implementation, 'rxjs/Observable'); assert.strictEqual(typeof RxJsObservable.of, 'function'); assert.strictEqual(typeof RxJsObservable.from, 'function'); assert.strictEqual(typeof RxJsObservable.prototype.map, 'undefined'); }); any-observable-0.4.0/browser/tests/shortcut-zen.js000066400000000000000000000006201347326372100222620ustar00rootroot00000000000000require('../../register/zen'); // eslint-disable-line import/no-unassigned-import const assert = require('assert'); const ZenObservable = require('zen-observable'); const AnyObservable = require('../..'); const implementation = require('../../implementation'); it('shortcut-zen', () => { assert.strictEqual(AnyObservable, ZenObservable); assert.strictEqual(implementation, 'zen-observable'); }); any-observable-0.4.0/browser/tests/zen.js000066400000000000000000000004201347326372100204070ustar00rootroot00000000000000const assert = require('assert'); const ZenObservable = require('zen-observable'); require('../../register')('zen-observable', {Observable: ZenObservable}); const AnyObservable = require('../..'); it('zen', () => { assert.strictEqual(AnyObservable, ZenObservable); }); any-observable-0.4.0/implementation.js000066400000000000000000000001071347326372100200150ustar00rootroot00000000000000'use strict'; module.exports = require('./register')().implementation; any-observable-0.4.0/index.js000066400000000000000000000001031347326372100160730ustar00rootroot00000000000000'use strict'; module.exports = require('./register')().Observable; any-observable-0.4.0/license000066400000000000000000000021251347326372100160010ustar00rootroot00000000000000MIT License Copyright (c) Sindre Sorhus (sindresorhus.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. any-observable-0.4.0/loader.js000066400000000000000000000024351347326372100162440ustar00rootroot00000000000000'use strict'; const REGISTRATION_KEY = Symbol('@@any-observable/REGISTRATION'); let isRegistered; module.exports = (global, loadImplementation) => { return (implementation, options = {}) => { // Global registration unless explicitly `{global: false}`` in options (default true) const registerGlobal = options.global !== false; // Load any previous global registration if (registerGlobal && !isRegistered) { isRegistered = global[REGISTRATION_KEY]; } if (isRegistered && implementation && isRegistered.implementation !== implementation) { throw new Error(`any-observable already defined as \`${isRegistered.implementation}\`. You can only register an implementation before the first call to \`require('any-observable')\` and an implementation cannot be changed`); } if (!isRegistered) { // Use provided implementation if (implementation && options.Observable) { isRegistered = { Observable: options.Observable, implementation }; } else { // Require implementation if implementation is specified but not provided isRegistered = loadImplementation(implementation); } if (registerGlobal) { // Register preference globally in case multiple installations global[REGISTRATION_KEY] = isRegistered; } } return isRegistered; }; }; any-observable-0.4.0/package.json000066400000000000000000000021061347326372100167210ustar00rootroot00000000000000{ "name": "any-observable", "version": "0.4.0", "description": "Support any Observable library and polyfill", "license": "MIT", "repository": "sindresorhus/any-observable", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", "url": "sindresorhus.com" }, "engines": { "node": ">=8" }, "scripts": { "test": "xo && ava" }, "files": [ "index.js", "implementation.js", "loader.js", "register.js", "register-shim.js", "register" ], "keywords": [ "observable", "observables", "support", "polyfill", "any", "rxjs" ], "devDependencies": { "arrify": "^2.0.1", "ava": "^1.4.1", "browserify": "^16.2.0", "execa": "^1.0.0", "karma": "^4.1.0", "karma-browserify": "^6.0.0", "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "mocha": "^6.1.4", "rxjs": "^5.5.10", "watchify": "^3.11.0", "xo": "^0.24.0", "zen-observable": "^0.8.8" }, "browser": { "./register.js": "./register-shim.js" }, "xo": { "overrides": [ { "files": "browser/tests/**", "envs": [ "mocha" ] } ] } } any-observable-0.4.0/readme.md000066400000000000000000000034071347326372100162170ustar00rootroot00000000000000# any-observable [![Build Status](https://travis-ci.org/sindresorhus/any-observable.svg?branch=master)](https://travis-ci.org/sindresorhus/any-observable) > Support any [Observable](https://github.com/zenparsing/es-observable) library and polyfill Like [`any-promise`](https://github.com/kevinbeaty/any-promise). *(Docs are lacking here, so refer to those docs for now)* ## Install ``` $ npm install any-observable ``` You must also install the Observable library you want: ``` $ npm install zen-observable ``` ## Usage ```js const Observable = require('any-observable'); // Using `zen-observable` since it's installed Observable.of(1, 2).forEach(value => { console.log(value); }); //=> 1 //=> 2 ``` ## Registration Shortcuts This adds the following shortcut registrations: - `rxjs-min`: Bare bones [RxJs](https://github.com/ReactiveX/rxjs) Observable implementation. See the [RxJs Installation Instructions](http://reactivex.io/rxjs/manual/installation.html) for details on patching additional methods into that implementation. - `rxjs`: Same as `rxjs-min`, but adds the somewhat standard `Observable.of` and `Observable.from`. - `rxjs-all`: The kitchen sink approach to Observables. - `zen`: The [`zen-observable`](https://github.com/zenparsing/zen-observable) implementation. Shortcut registration can be done as follows: ```js import 'any-observable/register/zen'; ``` It's especially handy for more recent versions of Node.js (and many test runners), that offer a `--require` flag: ``` $ ava --require=any-observable/register/zen test.js ``` ## Related - [is-observable](https://github.com/sindresorhus/is-observable) - Check if a value is an Observable - [observable-to-promise](https://github.com/sindresorhus/observable-to-promise) - Convert an Observable to a Promise any-observable-0.4.0/register-shim.js000066400000000000000000000012011347326372100175460ustar00rootroot00000000000000/* eslint-env node, browser */ 'use strict'; module.exports = require('./loader')(window, loadImplementation); /** Browser specific `loadImplementation`. Always uses `window.Observable`. To register a custom implementation, use the `Observable` option. */ function loadImplementation() { if (typeof window.Observable === 'undefined') { throw new TypeError('any-observable browser requires a polyfill or explicit registration, for example:\nrequire(\'any-observable/register\')(\'rxjs\', {Observable: require(\'rxjs/Observable\').Observable})'); } return { Observable: window.Observable, implementation: 'window.Observable' }; } any-observable-0.4.0/register.js000066400000000000000000000026001347326372100166140ustar00rootroot00000000000000'use strict'; module.exports = require('./loader')(global, loadImplementation); function loadImplementation(implementation) { let finalImplementation; if (implementation === 'global.Observable') { // If no implementation or env specified use global.Observable finalImplementation = { Observable: global.Observable, implementation: 'global.Observable' }; } else if (implementation) { // If implementation specified, require it const package_ = require(implementation); finalImplementation = { Observable: package_.Observable || package_.default || package_, implementation }; } else { // Try to auto detect implementation. This is non-deterministic // and should prefer other branches, but this is our last chance // to load something without throwing error. finalImplementation = tryAutoDetect(); } if (!finalImplementation) { throw new Error('Cannot find any-observable implementation nor `global.Observable`. You must install polyfill or call `require(\'any-observable/register\') with your preferred implementation, for example, `require(\'any-observable/register\')(\'rxjs\')` on app load prior to any `require(\'any-observable\').'); } return finalImplementation; } function tryAutoDetect() { const packages = [ 'rxjs', 'zen-observable' ]; for (const package_ of packages) { try { return loadImplementation(package_); } catch (_) {} } } any-observable-0.4.0/register/000077500000000000000000000000001347326372100162605ustar00rootroot00000000000000any-observable-0.4.0/register/rxjs-all.js000066400000000000000000000001301347326372100203440ustar00rootroot00000000000000'use strict'; require('../register')('rxjs', {Observable: require('rxjs').Observable}); any-observable-0.4.0/register/rxjs-min.js000066400000000000000000000001561347326372100203670ustar00rootroot00000000000000'use strict'; require('../register')('rxjs/Observable', {Observable: require('rxjs/Observable').Observable}); any-observable-0.4.0/register/rxjs.js000066400000000000000000000004341347326372100176050ustar00rootroot00000000000000'use strict'; require('../register')('rxjs/Observable', {Observable: require('rxjs/Observable').Observable}); require('rxjs/add/observable/of'); // eslint-disable-line import/no-unassigned-import require('rxjs/add/observable/from'); // eslint-disable-line import/no-unassigned-import any-observable-0.4.0/register/zen.js000066400000000000000000000001411347326372100174060ustar00rootroot00000000000000'use strict'; require('../register')('zen-observable', {Observable: require('zen-observable')}); any-observable-0.4.0/test/000077500000000000000000000000001347326372100154135ustar00rootroot00000000000000any-observable-0.4.0/test/browser.js000066400000000000000000000011671347326372100174410ustar00rootroot00000000000000import path from 'path'; import fs from 'fs'; import test from 'ava'; import execa from 'execa'; const cwd = path.join(__dirname, '..'); const conf = path.join(__dirname, '..', 'browser', 'from-env.js'); const testsDirectory = path.join(__dirname, '..', 'browser', 'tests'); for (const filename of fs.readdirSync(testsDirectory)) { const basename = path.basename(filename, '.js'); const filepath = path.join(testsDirectory, filename); test.serial(basename, async t => { await t.notThrowsAsync(execa('karma', ['start', conf], { cwd, env: { ...process.env, ANY_OBSERVABLE_TEST_PATH: filepath } })); }); } any-observable-0.4.0/test/defaults.js000066400000000000000000000004101347326372100175530ustar00rootroot00000000000000const test = require('ava'); const RxJsObservable = require('rxjs').Observable; const AnyObservable = require('..'); const implementation = require('../implementation'); test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs'); }); any-observable-0.4.0/test/rxjs-observable.js000066400000000000000000000005111347326372100210560ustar00rootroot00000000000000require('../register')('rxjs/Observable'); const test = require('ava'); const RxJsObservable = require('rxjs/Observable').Observable; const AnyObservable = require('..'); const implementation = require('../implementation'); test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs/Observable'); }); any-observable-0.4.0/test/rxjs.js000066400000000000000000000004501347326372100167360ustar00rootroot00000000000000require('../register')('rxjs'); const test = require('ava'); const RxJsObservable = require('rxjs').Observable; const AnyObservable = require('..'); const implementation = require('../implementation'); test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs'); }); any-observable-0.4.0/test/shortcut-rxjs-all.js000066400000000000000000000006031347326372100213550ustar00rootroot00000000000000import '../register/rxjs-all'; // eslint-disable-line import/no-unassigned-import import test from 'ava'; import {Observable as RxJsObservable} from 'rxjs'; import AnyObservable from '..'; import implementation from '../implementation'; test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs'); t.is(typeof RxJsObservable.prototype.map, 'function'); }); any-observable-0.4.0/test/shortcut-rxjs-min.js000066400000000000000000000007701347326372100213750ustar00rootroot00000000000000import '../register/rxjs-min'; // eslint-disable-line import/no-unassigned-import import test from 'ava'; import {Observable as RxJsObservable} from 'rxjs/Observable'; import AnyObservable from '..'; import implementation from '../implementation'; test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs/Observable'); t.is(typeof RxJsObservable.of, 'undefined'); t.is(typeof RxJsObservable.from, 'undefined'); t.is(typeof RxJsObservable.prototype.map, 'undefined'); }); any-observable-0.4.0/test/shortcut-rxjs.js000066400000000000000000000007621347326372100206150ustar00rootroot00000000000000import '../register/rxjs'; // eslint-disable-line import/no-unassigned-import import test from 'ava'; import {Observable as RxJsObservable} from 'rxjs/Observable'; import AnyObservable from '..'; import implementation from '../implementation'; test('main', t => { t.is(AnyObservable, RxJsObservable); t.is(implementation, 'rxjs/Observable'); t.is(typeof RxJsObservable.of, 'function'); t.is(typeof RxJsObservable.from, 'function'); t.is(typeof RxJsObservable.prototype.map, 'undefined'); }); any-observable-0.4.0/test/shortcut-zen.js000066400000000000000000000005101347326372100204120ustar00rootroot00000000000000import '../register/zen'; // eslint-disable-line import/no-unassigned-import import test from 'ava'; import ZenObservable from 'zen-observable'; import AnyObservable from '..'; import implementation from '../implementation'; test('main', t => { t.is(AnyObservable, ZenObservable); t.is(implementation, 'zen-observable'); }); any-observable-0.4.0/test/zen.js000066400000000000000000000004711347326372100165470ustar00rootroot00000000000000require('../register')('zen-observable'); const test = require('ava'); const ZenObservable = require('zen-observable'); const AnyObservable = require('..'); const implementation = require('../implementation'); test('main', t => { t.is(AnyObservable, ZenObservable); t.is(implementation, 'zen-observable'); });