From d4f1670ccbbcfa71d67de35d7fc8146f0725fd7e Mon Sep 17 00:00:00 2001 From: Ben Lesh Date: Mon, 7 Dec 2015 11:01:47 -0800 Subject: [PATCH] feat(Rx.Symbol.rxSubscriber): add rxSubscriber symbol --- spec/symbol/rxSubscriber-spec.js | 13 +++++++++++++ src/Rx.KitchenSink.ts | 8 +++++++- src/Rx.ts | 6 ++++++ src/symbol/rxSubscriber.ts | 9 +++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 spec/symbol/rxSubscriber-spec.js create mode 100644 src/symbol/rxSubscriber.ts diff --git a/spec/symbol/rxSubscriber-spec.js b/spec/symbol/rxSubscriber-spec.js new file mode 100644 index 0000000000..0774cbdce6 --- /dev/null +++ b/spec/symbol/rxSubscriber-spec.js @@ -0,0 +1,13 @@ +var Rx = require('../../dist/cjs/Rx'); +var RxKitchenSink = require('../../dist/cjs/Rx.KitchenSink'); +var Symbol = require('../../dist/cjs/util/SymbolShim').SymbolShim; + +describe('rxSubscriber symbol', function () { + it('should exist on Rx', function () { + expect(Rx.Symbol.rxSubscriber).toBe(Symbol.for('rxSubscriber')); + }); + + it('should exist on Rx.KitchenSink', function () { + expect(RxKitchenSink.Symbol.rxSubscriber).toBe(Symbol.for('rxSubscriber')); + }); +}); \ No newline at end of file diff --git a/src/Rx.KitchenSink.ts b/src/Rx.KitchenSink.ts index ce3592da26..bf9dea3ea5 100644 --- a/src/Rx.KitchenSink.ts +++ b/src/Rx.KitchenSink.ts @@ -146,6 +146,7 @@ import {ImmediateScheduler} from './scheduler/ImmediateScheduler'; import {TimeInterval} from './operator/extended/timeInterval'; import {TestScheduler} from './testing/TestScheduler'; import {VirtualTimeScheduler} from './scheduler/VirtualTimeScheduler'; +import {rxSubscriber} from './symbol/rxSubscriber'; /* tslint:enable:no-unused-variable */ /* tslint:disable:no-var-keyword */ @@ -153,6 +154,10 @@ var Scheduler = { nextTick, immediate }; + +var Symbol = { + rxSubscriber +}; /* tslint:enable:no-var-keyword */ export { @@ -171,5 +176,6 @@ export { ObjectUnsubscribedError, TestScheduler, VirtualTimeScheduler, - TimeInterval + TimeInterval, + Symbol }; diff --git a/src/Rx.ts b/src/Rx.ts index a946eed4af..7abf9e2c23 100644 --- a/src/Rx.ts +++ b/src/Rx.ts @@ -122,6 +122,7 @@ import {immediate} from './scheduler/immediate'; import {nextTick} from './scheduler/nextTick'; import {NextTickScheduler} from './scheduler/NextTickScheduler'; import {ImmediateScheduler} from './scheduler/ImmediateScheduler'; +import {rxSubscriber} from './symbol/rxSubscriber'; /* tslint:enable:no-unused-variable */ /* tslint:disable:no-var-keyword */ @@ -129,6 +130,10 @@ var Scheduler = { nextTick, immediate }; + +var Symbol = { + rxSubscriber +}; /* tslint:enable:no-var-keyword */ export { @@ -137,6 +142,7 @@ export { Observable, Subscriber, Subscription, + Symbol, AsyncSubject, ReplaySubject, BehaviorSubject, diff --git a/src/symbol/rxSubscriber.ts b/src/symbol/rxSubscriber.ts new file mode 100644 index 0000000000..2eb5a9abe8 --- /dev/null +++ b/src/symbol/rxSubscriber.ts @@ -0,0 +1,9 @@ +import {SymbolShim} from '../util/SymbolShim'; + +/** + * rxSubscriber symbol is a symbol for retreiving an "Rx safe" Observer from an object + * "Rx safety" can be defined as an object that has all of the traits of an Rx Subscriber, + * including the ability to add and remove subscriptions to the subscription chain and + * guarantees involving event triggering (can't "next" after unsubscription, etc). + */ +export const rxSubscriber = SymbolShim.for('rxSubscriber');