From 9a402979a9b53ea101a6e3dafc2c9aeb0fd5fc5d Mon Sep 17 00:00:00 2001 From: LongYinan Date: Tue, 11 Oct 2016 11:14:29 +0800 Subject: [PATCH 1/5] fix(operator/do): fix typings --- src/operator/do.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operator/do.ts b/src/operator/do.ts index 652946fbec..afdc40fa04 100644 --- a/src/operator/do.ts +++ b/src/operator/do.ts @@ -48,7 +48,7 @@ import { TeardownLogic } from '../Subscription'; * @owner Observable */ /* tslint:disable:max-line-length */ -export function _do(next: (x: T) => void, error?: (e: any) => void, complete?: (this: Observable) => void): Observable; +export function _do(this: Observable, next: (x: T) => void, error?: (e: any) => void, complete?: () => void): Observable; export function _do(this: Observable, observer: PartialObserver): Observable; /* tslint:disable:max-line-length */ export function _do(this: Observable, nextOrObserver?: PartialObserver | ((x: T) => void), From 4c31974cb2192c152e46d754c585291b427e1158 Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Thu, 13 Oct 2016 18:39:40 -0700 Subject: [PATCH 2/5] feat(typescript): remove dependency to 3rd party es2015 definition (#2027) closes #2016 --- package.json | 4 ++-- spec/tsconfig.json | 10 +++++++++- typings.json | 5 +---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 100adc509d..66252b7102 100644 --- a/package.json +++ b/package.json @@ -70,10 +70,10 @@ "copy_src_cjs": "mkdirp ./dist/cjs/src && shx cp -r ./src/* ./dist/cjs/src", "copy_src_es6": "mkdirp ./dist/es6/src && shx cp -r ./src/* ./dist/es6/src", "commit": "git-cz", - "compile_dist_cjs": "tsc typings/globals/es6-shim/index.d.ts ./dist/cjs/src/Rx.ts ./dist/cjs/src/add/observable/of.ts -m commonjs --sourceMap --outDir ./dist/cjs --target ES5 -d --diagnostics --pretty --noImplicitAny --noImplicitReturns --suppressImplicitAnyIndexErrors --moduleResolution node", + "compile_dist_cjs": "tsc ./dist/cjs/src/Rx.ts ./dist/cjs/src/add/observable/of.ts -m commonjs --lib es5,es2015.iterable,es2015.collection,es2015.promise,dom --sourceMap --outDir ./dist/cjs --target ES5 -d --diagnostics --pretty --noImplicitAny --noImplicitReturns --suppressImplicitAnyIndexErrors --moduleResolution node", "compile_dist_es6": "tsc ./dist/es6/src/Rx.ts ./dist/es6/src/add/observable/of.ts -m es2015 --sourceMap --outDir ./dist/es6 --target ES6 -d --diagnostics --pretty --noImplicitAny --noImplicitReturns --suppressImplicitAnyIndexErrors --moduleResolution node", "compile_dist_es6_for_docs": "tsc ./dist/es6/src/Rx.ts ./dist/es6/src/add/observable/of.ts ./dist/es6/src/MiscJSDoc.ts -m es2015 --sourceMap --outDir ./dist/es6 --target ES6 -d --diagnostics --pretty --noImplicitAny --noImplicitReturns --suppressImplicitAnyIndexErrors --moduleResolution node", - "cover": "shx rm -rf dist/cjs && tsc typings/globals/es6-shim/index.d.ts src/Rx.ts src/add/observable/of.ts -m commonjs --outDir dist/cjs --sourceMap --target ES5 -d && nyc --reporter=lcov --reporter=html --exclude=spec/support/**/* --exclude=spec-js/**/* --exclude=node_modules mocha --opts spec/support/default.opts spec-js", + "cover": "shx rm -rf dist/cjs && tsc src/Rx.ts src/add/observable/of.ts -m commonjs --lib es5,es2015.iterable,es2015.collection,es2015.promise,dom --outDir dist/cjs --sourceMap --target ES5 -d && nyc --reporter=lcov --reporter=html --exclude=spec/support/**/* --exclude=spec-js/**/* --exclude=node_modules mocha --opts spec/support/default.opts spec-js", "decision_tree_widget": "cd doc/decision-tree-widget && npm run build && cd ../..", "doctoc": "doctoc CONTRIBUTING.md", "generate_packages": "node .make-packages.js", diff --git a/spec/tsconfig.json b/spec/tsconfig.json index 182a705625..bb3d0fb553 100644 --- a/spec/tsconfig.json +++ b/spec/tsconfig.json @@ -7,7 +7,15 @@ "allowJs": true, "target": "es5", "module": "commonjs", - "outDir": "../spec-js" + "outDir": "../spec-js", + "lib": [ + "es5", + "es2015.core", + "es2015.collection", + "es2015.iterable", + "es2015.promise", + "dom" + ] }, "formatCodeOptions": { "indentSize": 2, diff --git a/typings.json b/typings.json index 62dc7f0eaf..fdf5194f8c 100644 --- a/typings.json +++ b/typings.json @@ -7,9 +7,6 @@ "sinon-chai": "registry:npm/sinon-chai#2.8.0+20160310030142" }, "globalDevDependencies": { - "mocha": "registry:env/mocha#2.2.5+20160723033700" - }, - "globalDependencies": { - "es6-shim": "registry:dt/es6-shim#0.31.2+20160602141504" + "mocha": "registry:env/mocha#2.2.5+20160926180742" } } From b07f597f5622cc84b59ae10f2311958d8a40a9e1 Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Fri, 14 Oct 2016 07:54:15 -0400 Subject: [PATCH 3/5] fix(typings): fixed Subject.lift to have the same shape as Observable.lift --- src/Subject.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Subject.ts b/src/Subject.ts index dcea18e734..b3dacf0d80 100644 --- a/src/Subject.ts +++ b/src/Subject.ts @@ -43,9 +43,9 @@ export class Subject extends Observable implements ISubscription { return new AnonymousSubject(destination, source); }; - lift(operator: Operator): Observable { + lift(operator: Operator): Observable { const subject = new AnonymousSubject(this, this); - subject.operator = operator; + subject.operator = operator; return subject; } From 22d286a36d703523356e76f3e706fae6e58704e0 Mon Sep 17 00:00:00 2001 From: Ben Lesh Date: Fri, 14 Oct 2016 13:56:11 -0700 Subject: [PATCH 4/5] fix(IteratorObservable): Observables `from` generators will now finalize when subscription ends In order to model the behavior of `for..of` when consuming a Generator, if a `break` is hit in the `for..of`, `return()` is called on the generator and the generator will jump to a `finally` block if it has one. Observables created from generators will now have this same behavior. ```js Observable.from((function* () { try { yield 1; yield 2; yield 3; } finally { console.log('finalized'); } })()) .take(2) .subscribe(x => console.log(x)); // should log // 1 // 2 // finalized ``` fixes #1938 --- spec/observables/IteratorObservable-spec.ts | 63 +++++++++++++++++++++ src/observable/IteratorObservable.ts | 6 ++ 2 files changed, 69 insertions(+) diff --git a/spec/observables/IteratorObservable-spec.ts b/spec/observables/IteratorObservable-spec.ts index 3149f213a2..63b1d73761 100644 --- a/spec/observables/IteratorObservable-spec.ts +++ b/spec/observables/IteratorObservable-spec.ts @@ -1,5 +1,6 @@ import {expect} from 'chai'; import * as Rx from '../../dist/cjs/Rx'; +import {queue} from '../../dist/cjs/scheduler/queue'; import {IteratorObservable} from '../../dist/cjs/observable/IteratorObservable'; declare const expectObservable; @@ -46,6 +47,68 @@ describe('IteratorObservable', () => { ); }); + it('should finalize generators if the subscription ends', () => { + const iterator = { + finalized: false, + next() { + return { value: 'duck', done: false }; + }, + return() { + this.finalized = true; + } + }; + + const iterable = { + [Rx.Symbol.iterator]() { + return iterator; + } + }; + + const results = []; + + IteratorObservable.create(iterable) + .take(3) + .subscribe( + x => results.push(x), + null, + () => results.push('GOOSE!') + ); + + expect(results).to.deep.equal(['duck', 'duck', 'duck', 'GOOSE!']); + expect(iterator.finalized).to.be.true; + }); + + it('should finalize generators if the subscription and it is scheduled', () => { + const iterator = { + finalized: false, + next() { + return { value: 'duck', done: false }; + }, + return() { + this.finalized = true; + } + }; + + const iterable = { + [Rx.Symbol.iterator]() { + return iterator; + } + }; + + const results = []; + + IteratorObservable.create(iterable, queue) + .take(3) + .subscribe( + x => results.push(x), + null, + () => results.push('GOOSE!') + ); + + expect(results).to.deep.equal(['duck', 'duck', 'duck', 'GOOSE!']); + expect(iterator.finalized).to.be.true; + }); + it('should emit members of an array iterator on a particular scheduler', () => { const source = IteratorObservable.create( [10, 20, 30, 40], diff --git a/src/observable/IteratorObservable.ts b/src/observable/IteratorObservable.ts index 4195965f25..586afc6ad3 100644 --- a/src/observable/IteratorObservable.ts +++ b/src/observable/IteratorObservable.ts @@ -36,6 +36,9 @@ export class IteratorObservable extends Observable { state.index = index + 1; if (subscriber.closed) { + if (typeof iterator.return === 'function') { + iterator.return(); + } return; } @@ -71,6 +74,9 @@ export class IteratorObservable extends Observable { subscriber.next(result.value); } if (subscriber.closed) { + if (typeof iterator.return === 'function') { + iterator.return(); + } break; } } while (true); From 0ad575b13d19a2e72a4a1647c9005f4dca7e8db6 Mon Sep 17 00:00:00 2001 From: David Khourshid Date: Sat, 15 Oct 2016 22:42:40 -0400 Subject: [PATCH 5/5] Fix documentation to install `rxjs`, not `rxjs-es` Reference: https://github.com/ReactiveX/rxjs/pull/2019 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 642d3de6be..6cc8fd3c62 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ By contributing or commenting on issues in this repository, whether you've read ### ES6 via npm ```sh -npm install rxjs-es +npm install rxjs ``` To import the entire core set of functionality: