From 16bf335a4ae74155fef0d79f058dca0cf4d35fe4 Mon Sep 17 00:00:00 2001 From: vsavkin Date: Fri, 11 Sep 2015 15:38:09 -0700 Subject: [PATCH] refactor(async): replace RxJS with RxNext Closes #3110 Closes #4201 --- docs/typescript-definition-package/index.js | 2 +- .../processors/readTypeScriptModules.js | 4 +-- gulpfile.js | 23 ++++++++----- karma-js.conf.js | 2 +- modules/angular2/package.json | 2 +- modules/angular2/src/core/facade/async.ts | 34 +++++++------------ modules/angular2/src/http/interfaces.ts | 2 -- modules/angular2/src/http/package.json | 2 +- .../web_workers/shared/mock_event_emitter.ts | 8 ++--- modules/angular2/tsd.json | 8 ----- modules/angular2_material/package.json | 2 +- modules/examples/src/http/index.ts | 2 -- modules/examples/src/jsonp/index.ts | 2 -- .../examples/src/web_workers/images/loader.js | 5 +-- .../src/web_workers/kitchen_sink/loader.js | 5 +-- .../src/web_workers/message_broker/loader.js | 9 +++-- .../examples/src/web_workers/todo/loader.js | 5 +-- npm-shrinkwrap.clean.json | 3 ++ npm-shrinkwrap.json | 5 +++ package.json | 2 +- test-main.js | 2 +- tools/broccoli/html-replace/SCRIPTS.html | 7 +--- .../html-replace/SCRIPTS_benchmarks.html | 7 +--- .../SCRIPTS_benchmarks_external.html | 7 +--- tools/broccoli/trees/browser_tree.ts | 7 ++-- 25 files changed, 61 insertions(+), 96 deletions(-) diff --git a/docs/typescript-definition-package/index.js b/docs/typescript-definition-package/index.js index decc921625..557f64204f 100644 --- a/docs/typescript-definition-package/index.js +++ b/docs/typescript-definition-package/index.js @@ -50,7 +50,7 @@ module.exports = new Package('angular-v2-docs', [jsdocPackage, nunjucksPackage, createTypeDefinitionFile.typeDefinitions = [ { id: 'angular2/angular2', - references: ['../es6-promise/es6-promise.d.ts', '../rx/rx.d.ts'], + references: ['../es6-promise/es6-promise.d.ts'], modules: { 'angular2/angular2': {namespace: 'ng', id: 'angular2/angular2'}, 'angular2/web_worker/worker': {namespace: 'ngWorker', id: 'angular2/web_worker/worker'}, diff --git a/docs/typescript-package/processors/readTypeScriptModules.js b/docs/typescript-package/processors/readTypeScriptModules.js index 7e68beff7c..5597898496 100644 --- a/docs/typescript-package/processors/readTypeScriptModules.js +++ b/docs/typescript-package/processors/readTypeScriptModules.js @@ -359,8 +359,8 @@ module.exports = function readTypeScriptModules(tsParser, modules, getFileInfo, function getType(sourceFile, type) { var text = getText(sourceFile, type); while (text.indexOf(".") >= 0) { - // Keep namespaced symbols in Rx - if (text.match(/^\s*Rx\./)) break; + // Keep namespaced symbols in RxNext + if (text.match(/^\s*RxNext\./)) break; // handle the case List -> List text = text.replace(/([^.<]*)\.([^>]*)/, "$2"); } diff --git a/gulpfile.js b/gulpfile.js index 3c93dfe331..1fa3a8b9dd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1017,11 +1017,13 @@ gulp.task('!build.js.cjs', function() { var bundleConfig = { - paths: {"*": "dist/js/prod/es5/*.js", "rx": "node_modules/rx/dist/rx.js"}, + paths: { + "*": "dist/js/prod/es5/*.js" + }, meta: { - 'angular2/src/router/route_definition': {format: 'cjs'}, - // auto-detection fails to detect properly here - https://github.com/systemjs/builder/issues/123 - 'rx': {format: 'cjs'} + 'angular2/src/router/route_definition': { + format: 'cjs' + } } }; @@ -1072,7 +1074,10 @@ gulp.task('!bundle.js.min', ['build.js.prod'], function() { // development build gulp.task('!bundle.js.dev', ['build.js.dev'], function() { var devBundleConfig = merge(true, bundleConfig); - devBundleConfig.paths = merge(true, devBundleConfig.paths, {"*": "dist/js/dev/es5/*.js"}); + devBundleConfig.paths = + merge(true, devBundleConfig.paths, { + "*": "dist/js/dev/es5/*.js" + }); return bundler.bundle( devBundleConfig, 'angular2/angular2', @@ -1150,7 +1155,7 @@ gulp.task('!bundle.js.prod.deps', ['!bundle.js.prod'], function() { 'angular2.js' ), bundler.modify( - ['node_modules/reflect-metadata/Reflect.js', 'node_modules/rx/dist/rx.lite.js', 'dist/build/http.js'], + ['node_modules/reflect-metadata/Reflect.js', 'dist/build/http.js'], 'http.js' )).pipe(gulp.dest('dist/js/bundle')); }); @@ -1162,7 +1167,7 @@ gulp.task('!bundle.js.min.deps', ['!bundle.js.min'], function() { 'angular2.min.js' ), bundler.modify( - ['node_modules/reflect-metadata/Reflect.js', 'node_modules/rx/dist/rx.lite.js','dist/build/http.min.js'], + ['node_modules/reflect-metadata/Reflect.js', 'dist/build/http.min.js'], 'http.min.js' )) .pipe(uglify()) @@ -1179,9 +1184,9 @@ var JS_DEV_DEPS = [ // Splice in RX license if rx is in the bundle. function insertRXLicense(source) { - var n = source.indexOf('System.register("rx"'); + var n = source.indexOf('System.register("@reactivex/rxjs/dist/cjs/Subject"'); if (n >= 0) { - var rxLicense = licenseWrap('node_modules/rx/license.txt'); + var rxLicense = licenseWrap('node_modules/@reactivex/rxjs/LICENSE.txt'); return source.slice(0, n) + rxLicense + source.slice(n); } else { return source; diff --git a/karma-js.conf.js b/karma-js.conf.js index f49c9f754a..011b93e403 100644 --- a/karma-js.conf.js +++ b/karma-js.conf.js @@ -21,7 +21,7 @@ module.exports = function(config) { // Including systemjs because it defines `__eval`, which produces correct stack traces. 'modules/angular2/src/test_lib/shims_for_IE.js', 'node_modules/systemjs/dist/system.src.js', - {pattern: 'node_modules/rx/dist/rx.js', included: false, watched: false, served: true}, + {pattern: 'node_modules/@reactivex/rxjs/dist/cjs/**', included: false, watched: false, served: true}, 'node_modules/reflect-metadata/Reflect.js', 'tools/build/file2modulename.js', 'test-main.js', diff --git a/modules/angular2/package.json b/modules/angular2/package.json index cc3f79194b..9b39680ceb 100644 --- a/modules/angular2/package.json +++ b/modules/angular2/package.json @@ -10,7 +10,7 @@ "dependencies": { "traceur": "<%= packageJson.dependencies.traceur %>", "reflect-metadata": "<%= packageJson.dependencies['reflect-metadata'] %>", - "rx": "<%= packageJson.dependencies['rx'] %>", + "@reactivex/rxjs": "<%= packageJson.dependencies['@reactivex/rxjs'] %>", "zone.js": "<%= packageJson.dependencies['zone.js'] %>" }, "devDependencies": <%= JSON.stringify(packageJson.defaultDevDependencies) %>, diff --git a/modules/angular2/src/core/facade/async.ts b/modules/angular2/src/core/facade/async.ts index 178c2ef7fd..058b8b23ea 100644 --- a/modules/angular2/src/core/facade/async.ts +++ b/modules/angular2/src/core/facade/async.ts @@ -1,6 +1,7 @@ /// import {global, isPresent} from 'angular2/src/core/facade/lang'; -import * as Rx from 'rx'; +// TODO(jeffbcross): use ES6 import once typings are available +var Subject = require('@reactivex/rxjs/dist/cjs/Subject'); export {Promise}; @@ -75,7 +76,7 @@ export class ObservableWrapper { static isObservable(obs: any): boolean { return obs instanceof Observable; } - static dispose(subscription: any) { subscription.dispose(); } + static dispose(subscription: any) { subscription.unsubscribe(); } static callNext(emitter: EventEmitter, value: any) { emitter.next(value); } @@ -128,30 +129,19 @@ export class Observable { * Once a reference implementation of the spec is available, switch to it. */ export class EventEmitter extends Observable { - _subject: Rx.Subject = new Rx.Subject(); - _immediateScheduler = (Rx.Scheduler).immediate; + _subject = new Subject(); - observer(generator: any): Rx.IDisposable { - return this._subject.observeOn(this._immediateScheduler) - .subscribe((value) => { setTimeout(() => generator.next(value)); }, - (error) => generator.throw ? generator.throw(error) : null, - () => generator.return ? generator.return () : null); + observer(generator: any): any { + return this._subject.subscribe((value) => { setTimeout(() => generator.next(value)); }, + (error) => generator.throw ? generator.throw(error) : null, + () => generator.return ? generator.return () : null); } - toRx(): Rx.Observable { return this._subject; } + toRx(): any { return this; } - /** - * Emits a `value`. - */ - next(value: any) { this._subject.onNext(value); } + next(value: any) { this._subject.next(value); } - /** - * Emits an `error`. - */ - throw(error: any) { this._subject.onError(error); } + throw(error: any) { this._subject.error(error); } - /** - * Closes the stream. - */ - return (value?: any) { this._subject.onCompleted(); } + return (value?: any) { this._subject.complete(); } } diff --git a/modules/angular2/src/http/interfaces.ts b/modules/angular2/src/http/interfaces.ts index e7d9adaa6a..8f07564ffc 100644 --- a/modules/angular2/src/http/interfaces.ts +++ b/modules/angular2/src/http/interfaces.ts @@ -1,5 +1,3 @@ -/// - import { ReadyStates, RequestModesOpts, diff --git a/modules/angular2/src/http/package.json b/modules/angular2/src/http/package.json index d393cb0a60..c70caac04c 100644 --- a/modules/angular2/src/http/package.json +++ b/modules/angular2/src/http/package.json @@ -9,7 +9,7 @@ "repository": <%= JSON.stringify(packageJson.repository) %>, "dependencies": { "angular2": "<%= packageJson.version %>", - "rx": "<%= packageJson.dependencies['rx'] %>", + "@reactivex/rxjs": "<%= packageJson.dependencies['@reactivex/rxjs'] %>", "reflect-metadata": "<%= packageJson.dependencies['reflect-metadata'] %>", "traceur": "<%= packageJson.dependencies['traceur'] %>" }, diff --git a/modules/angular2/test/web_workers/shared/mock_event_emitter.ts b/modules/angular2/test/web_workers/shared/mock_event_emitter.ts index bf65c2d793..cb8db04c42 100644 --- a/modules/angular2/test/web_workers/shared/mock_event_emitter.ts +++ b/modules/angular2/test/web_workers/shared/mock_event_emitter.ts @@ -1,5 +1,4 @@ import {EventEmitter} from 'angular2/src/core/facade/async'; -import * as Rx from 'rx'; import {ListWrapper} from 'angular2/src/core/facade/collection'; export class MockEventEmitter extends EventEmitter { @@ -7,7 +6,7 @@ export class MockEventEmitter extends EventEmitter { constructor() { super(); } - observer(generator: any): Rx.IDisposable { + observer(generator: any): any { this._nextFns.push(generator.next); return new MockDisposable(); } @@ -17,6 +16,7 @@ export class MockEventEmitter extends EventEmitter { } } -class MockDisposable implements Rx.IDisposable { - dispose(): void {} +class MockDisposable { + isUnsubscribed: boolean = false; + unsubscribe(): void {} } diff --git a/modules/angular2/tsd.json b/modules/angular2/tsd.json index 97e5651f0c..072b1b9660 100644 --- a/modules/angular2/tsd.json +++ b/modules/angular2/tsd.json @@ -17,14 +17,6 @@ "node/node.d.ts": { "commit": "51738fdf1643d269067861b405e87503b7479236" }, - "rx/rx.d.ts": { - "commit": "3882d337bb0808cde9fe4c08012508a48c135482" - }, - - "rx/rx-lite.d.ts": { - "commit": "3882d337bb0808cde9fe4c08012508a48c135482" - }, - "selenium-webdriver/selenium-webdriver.d.ts": { "commit": "be0b6b394f77a59e192ad7cfec18078706e44db5" diff --git a/modules/angular2_material/package.json b/modules/angular2_material/package.json index ae9286d760..ba78c02e8c 100644 --- a/modules/angular2_material/package.json +++ b/modules/angular2_material/package.json @@ -10,7 +10,7 @@ "dependencies": { "angular2": "<%= packageJson.version %>", "traceur": "<%= packageJson.dependencies.traceur %>", - "rx": "<%= packageJson.dependencies['rx'] %>", + "@reactivex/rxjs": "<%= packageJson.dependencies['@reactivex/rxjs'] %>", "zone.js": "<%= packageJson.dependencies['zone.js'] %>" }, "devDependencies": <%= JSON.stringify(packageJson.defaultDevDependencies) %> diff --git a/modules/examples/src/http/index.ts b/modules/examples/src/http/index.ts index 6890344b35..54f9c21951 100644 --- a/modules/examples/src/http/index.ts +++ b/modules/examples/src/http/index.ts @@ -1,5 +1,3 @@ -/// - import {bootstrap} from 'angular2/bootstrap'; import {HTTP_BINDINGS} from 'angular2/http'; import {HttpCmp} from './http_comp'; diff --git a/modules/examples/src/jsonp/index.ts b/modules/examples/src/jsonp/index.ts index 623a3f9b7d..55a43881d8 100644 --- a/modules/examples/src/jsonp/index.ts +++ b/modules/examples/src/jsonp/index.ts @@ -1,5 +1,3 @@ -/// - import {bootstrap} from 'angular2/bootstrap'; import {JSONP_BINDINGS} from 'angular2/http'; import {JsonpCmp} from './jsonp_comp'; diff --git a/modules/examples/src/web_workers/images/loader.js b/modules/examples/src/web_workers/images/loader.js index ff31c4d525..afefe01d83 100644 --- a/modules/examples/src/web_workers/images/loader.js +++ b/modules/examples/src/web_workers/images/loader.js @@ -4,10 +4,7 @@ importScripts("b64.js"); System.config({ baseURL: '/', - defaultJSExtensions: true, - paths: { - 'rx': 'examples/src/web_workers/images/rx.js' - } + defaultJSExtensions: true }); System.import("examples/src/web_workers/images/background_index") diff --git a/modules/examples/src/web_workers/kitchen_sink/loader.js b/modules/examples/src/web_workers/kitchen_sink/loader.js index 1c4716de03..114168708a 100644 --- a/modules/examples/src/web_workers/kitchen_sink/loader.js +++ b/modules/examples/src/web_workers/kitchen_sink/loader.js @@ -2,10 +2,7 @@ $SCRIPTS$ System.config({ baseURL: '/', - defaultJSExtensions: true, - paths: { - 'rx': 'examples/src/web_workers/kitchen_sink/rx.js' - } + defaultJSExtensions: true }); System.import("examples/src/web_workers/kitchen_sink/background_index") diff --git a/modules/examples/src/web_workers/message_broker/loader.js b/modules/examples/src/web_workers/message_broker/loader.js index e86c1ba527..3ef216941d 100644 --- a/modules/examples/src/web_workers/message_broker/loader.js +++ b/modules/examples/src/web_workers/message_broker/loader.js @@ -1,10 +1,9 @@ $SCRIPTS$ - System.config({ - baseURL: '/', - defaultJSExtensions: true, - paths: {'rx': 'examples/src/web_workers/message_broker/rx.js'} - }); +System.config({ + baseURL: '/', + defaultJSExtensions: true +}); System.import("examples/src/web_workers/message_broker/background_index") .then( diff --git a/modules/examples/src/web_workers/todo/loader.js b/modules/examples/src/web_workers/todo/loader.js index d380c289b9..6549de0926 100644 --- a/modules/examples/src/web_workers/todo/loader.js +++ b/modules/examples/src/web_workers/todo/loader.js @@ -2,10 +2,7 @@ $SCRIPTS$ System.config({ baseURL: '/', - defaultJSExtensions: true, - paths: { - 'rx': 'examples/src/web_workers/todo/rx.js' - } + defaultJSExtensions: true }); System.import("examples/src/web_workers/todo/background_index") diff --git a/npm-shrinkwrap.clean.json b/npm-shrinkwrap.clean.json index 4ed6c86346..b1dabdc086 100644 --- a/npm-shrinkwrap.clean.json +++ b/npm-shrinkwrap.clean.json @@ -1,5 +1,8 @@ { "dependencies": { + "@reactivex/rxjs": { + "version": "0.0.0-prealpha.3" + }, "angular": { "version": "1.3.5" }, diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 6e00dfffd4..fcc7a5cca0 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -2,6 +2,11 @@ "name": "angular", "version": "2.0.0-alpha.37", "dependencies": { + "@reactivex/rxjs": { + "version": "0.0.0-prealpha.3", + "from": "@reactivex/rxjs@0.0.0-prealpha.3", + "resolved": "https://registry.npmjs.org/@reactivex/rxjs/-/rxjs-0.0.0-prealpha.3.tgz" + }, "angular": { "version": "1.3.5", "from": "https://registry.npmjs.org/angular/-/angular-1.3.5.tgz", diff --git a/package.json b/package.json index c258ca8873..f7f2221d7e 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,8 @@ "test": "gulp test.all.js && gulp test.all.dart" }, "dependencies": { + "@reactivex/rxjs": "0.0.0-prealpha.3", "reflect-metadata": "0.1.1", - "rx": "2.5.1", "zone.js": "0.5.4" }, "devDependencies": { diff --git a/test-main.js b/test-main.js index 1d343aaf75..ca3172e528 100644 --- a/test-main.js +++ b/test-main.js @@ -15,7 +15,7 @@ System.config({ 'angular2/*': 'dist/js/dev/es5/angular2/*.js', 'angular2_material/*': 'dist/js/dev/es5/angular2_material/*.js', 'rtts_assert/*': 'dist/js/dev/es5/rtts_assert/*.js', - 'rx': 'node_modules/rx/dist/rx.js' + '@reactivex/rxjs/*': 'node_modules/@reactivex/rxjs/*.js' } }); diff --git a/tools/broccoli/html-replace/SCRIPTS.html b/tools/broccoli/html-replace/SCRIPTS.html index 1da2708dc0..40ae9eb80e 100644 --- a/tools/broccoli/html-replace/SCRIPTS.html +++ b/tools/broccoli/html-replace/SCRIPTS.html @@ -5,14 +5,9 @@ diff --git a/tools/broccoli/html-replace/SCRIPTS_benchmarks.html b/tools/broccoli/html-replace/SCRIPTS_benchmarks.html index 419fbe1384..41282f9d6d 100644 --- a/tools/broccoli/html-replace/SCRIPTS_benchmarks.html +++ b/tools/broccoli/html-replace/SCRIPTS_benchmarks.html @@ -6,14 +6,9 @@ diff --git a/tools/broccoli/html-replace/SCRIPTS_benchmarks_external.html b/tools/broccoli/html-replace/SCRIPTS_benchmarks_external.html index b9c955e5bf..0b7d1a5db1 100644 --- a/tools/broccoli/html-replace/SCRIPTS_benchmarks_external.html +++ b/tools/broccoli/html-replace/SCRIPTS_benchmarks_external.html @@ -7,14 +7,9 @@ diff --git a/tools/broccoli/trees/browser_tree.ts b/tools/broccoli/trees/browser_tree.ts index 81dcdb43b2..523ae7e336 100644 --- a/tools/broccoli/trees/browser_tree.ts +++ b/tools/broccoli/trees/browser_tree.ts @@ -84,6 +84,8 @@ module.exports = function makeBrowserTree(options, destinationPath) { destDir: '/' }); + var rxJs = new Funnel('node_modules/@reactivex', {include: ['**/**'], destDir: '/@reactivex'}); + var es5ModulesTree = new Funnel('modules', { include: ['**/**'], exclude: ['**/*.cjs', 'angular1_router/**', 'benchmarks/e2e_test/**'], @@ -139,7 +141,6 @@ module.exports = function makeBrowserTree(options, destinationPath) { 'node_modules/zone.js/dist/zone-microtask.js', 'node_modules/zone.js/dist/long-stack-trace-zone.js', 'node_modules/systemjs/dist/system.src.js', - 'node_modules/rx/dist/rx.js', 'node_modules/base64-js/lib/b64.js', 'node_modules/reflect-metadata/Reflect.js', 'node_modules/es6-shim/es6-shim.js' @@ -208,8 +209,8 @@ module.exports = function makeBrowserTree(options, destinationPath) { htmlTree = mergeTrees([htmlTree, scripts, polymer, react]); - es5Tree = mergeTrees([es5Tree, htmlTree, assetsTree]); - es6Tree = mergeTrees([es6Tree, htmlTree, assetsTree]); + es5Tree = mergeTrees([es5Tree, htmlTree, assetsTree, rxJs]); + es6Tree = mergeTrees([es6Tree, htmlTree, assetsTree, rxJs]); var mergedTree = mergeTrees([stew.mv(es6Tree, '/es6'), stew.mv(es5Tree, '/es5')]);