diff --git a/bin/devkit-admin b/bin/devkit-admin index 8cadae582b..5a2f0460cb 100755 --- a/bin/devkit-admin +++ b/bin/devkit-admin @@ -34,10 +34,10 @@ process.chdir(path.join(__dirname, '..')); let logger = null; try { logger = new (require('@angular-devkit/core').logging.IndentLogger)('root'); - require('rxjs/add/operator/filter'); + const filter = require('rxjs/operators').filter; logger - .filter(entry => (entry.level !== 'debug' || args.verbose)) + .pipe(filter(entry => (entry.level !== 'debug' || args.verbose))) .subscribe(entry => { let color = gray; let output = process.stdout; @@ -52,7 +52,7 @@ try { }); logger - .filter(entry => entry.level === 'fatal') + .pipe(filter(entry => entry.level === 'fatal')) .subscribe(() => { process.stderr.write('A fatal error happened. See details above.\n'); process.exit(100); diff --git a/package-lock.json b/package-lock.json index f61079c9cc..a53d40166a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,9 +60,12 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" }, "@types/source-map": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.5.2.tgz", - "integrity": "sha512-++w4WmMbk3dS3UeHGzAG+xJOSz5Xqtjys/TBkqG3qp3SeWE7Wwezqe5eB7B51cxUyh4PW7bwVotpsLdBK0D8cw==" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LrnsgZIfJaysFkv9rRJp4/uAyqw87oVed3s1hhF83nwbo9c7MG9g5DqR0seHP+lkX4ldmMrVolPjQSe2ZfD0yA==", + "requires": { + "source-map": "0.5.7" + } }, "@types/tapable": { "version": "0.2.4", diff --git a/package.json b/package.json index 22fc9c8ede..5a9164afc8 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "npm": "^5.2.0", "npm-run": "^4.1.2", "npm-run-all": "^4.0.0", - "rxjs": "^5.5.2", + "rxjs": "^5.5.6", "semver": "^5.3.0", "semver-intersect": "^1.1.2", "source-map": "^0.5.6", diff --git a/packages/angular_devkit/core/node/cli-logger.ts b/packages/angular_devkit/core/node/cli-logger.ts index 1d8ef77a1f..d10382ea70 100644 --- a/packages/angular_devkit/core/node/cli-logger.ts +++ b/packages/angular_devkit/core/node/cli-logger.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import { logging, terminal } from '@angular-devkit/core'; -import 'rxjs/add/operator/filter'; +import { filter } from 'rxjs/operators'; /** @@ -16,7 +16,7 @@ export function createConsoleLogger(verbose = false): logging.Logger { const logger = new logging.IndentLogger('cling'); logger - .filter(entry => (entry.level != 'debug' || verbose)) + .pipe(filter(entry => (entry.level != 'debug' || verbose))) .subscribe(entry => { let color: (s: string) => string = x => terminal.dim(terminal.white(x)); let output = process.stdout; diff --git a/packages/angular_devkit/core/node/host.ts b/packages/angular_devkit/core/node/host.ts index 01cb0b168f..5a323c4949 100644 --- a/packages/angular_devkit/core/node/host.ts +++ b/packages/angular_devkit/core/node/host.ts @@ -18,8 +18,9 @@ import { } from '@angular-devkit/core'; import * as fs from 'fs'; import { Observable } from 'rxjs/Observable'; -import { ArrayObservable } from 'rxjs/observable/ArrayObservable'; -import { FromObservable } from 'rxjs/observable/FromObservable'; +import { empty } from 'rxjs/observable/empty'; +import { from as observableFrom } from 'rxjs/observable/from'; +import { of as observableOf } from 'rxjs/observable/of'; import { concat } from 'rxjs/operators/concat'; import { concatMap } from 'rxjs/operators/concatMap'; import { ignoreElements } from 'rxjs/operators/ignoreElements'; @@ -131,11 +132,11 @@ export class NodeJsAsyncHost implements virtualFs.Host { }; _recurseList(path); - return FromObservable.create(allFiles) + return observableFrom(allFiles) .pipe( mergeMap(p => _callFs(fs.unlink, this._getSystemPath(p))), ignoreElements(), - concat(FromObservable.create(allDirs).pipe( + concat(observableFrom(allDirs).pipe( concatMap(p => _callFs(fs.rmdir, this._getSystemPath(p))), )), map(() => {}), @@ -251,13 +252,13 @@ export class NodeJsSyncHost implements virtualFs.Host { _createDir(dirname(path)); fs.writeFileSync(this._getSystemPath(path), new Uint8Array(content)); - return Observable.empty(); + return empty(); } read(path: Path): Observable { const buffer = fs.readFileSync(this._getSystemPath(path)); - return ArrayObservable.of(new Uint8Array(buffer).buffer as virtualFs.FileBuffer); + return observableOf(new Uint8Array(buffer).buffer as virtualFs.FileBuffer); } delete(path: Path): Observable { @@ -271,37 +272,37 @@ export class NodeJsSyncHost implements virtualFs.Host { fs.unlinkSync(this._getSystemPath(path)); } - return Observable.empty(); + return empty(); } rename(from: Path, to: Path): Observable { fs.renameSync(this._getSystemPath(from), this._getSystemPath(to)); - return Observable.empty(); + return empty(); } list(path: Path): Observable { - return ArrayObservable.of(fs.readdirSync(this._getSystemPath(path))).pipe( + return observableOf(fs.readdirSync(this._getSystemPath(path))).pipe( map(names => names.map(name => fragment(name))), ); } exists(path: Path): Observable { - return ArrayObservable.of(fs.existsSync(this._getSystemPath(path))); + return observableOf(fs.existsSync(this._getSystemPath(path))); } isDirectory(path: Path): Observable { // tslint:disable-next-line:non-null-operator - return this.stats(path) !.map(stat => stat.isDirectory()); + return this.stats(path) !.pipe(map(stat => stat.isDirectory())); } isFile(path: Path): Observable { // tslint:disable-next-line:non-null-operator - return this.stats(path) !.map(stat => stat.isFile()); + return this.stats(path) !.pipe(map(stat => stat.isFile())); } // Some hosts may not support stats. stats(path: Path): Observable> | null { - return ArrayObservable.of(fs.statSync(this._getSystemPath(path))); + return observableOf(fs.statSync(this._getSystemPath(path))); } // Some hosts may not support watching. diff --git a/packages/angular_devkit/core/src/json/schema/registry.ts b/packages/angular_devkit/core/src/json/schema/registry.ts index 142c9f9285..732765df0d 100644 --- a/packages/angular_devkit/core/src/json/schema/registry.ts +++ b/packages/angular_devkit/core/src/json/schema/registry.ts @@ -8,8 +8,8 @@ import * as ajv from 'ajv'; import * as http from 'http'; import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; import { fromPromise } from 'rxjs/observable/fromPromise'; +import { of as observableOf } from 'rxjs/observable/of'; import { map } from 'rxjs/operators/map'; import { JsonArray, JsonObject } from '../interface'; import { @@ -237,7 +237,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { let validator: Observable; try { const maybeFnValidate = this._ajv.compile(schema); - validator = Observable.of(maybeFnValidate); + validator = observableOf(maybeFnValidate); } catch (e) { // Propagate the error. if (!(e instanceof (ajv.MissingRefError as {} as Function))) { @@ -261,7 +261,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { map(validate => (data: any): Observable => { const result = validate(data); const resultObs = typeof result == 'boolean' - ? Observable.of(result) + ? observableOf(result) : fromPromise(result as PromiseLike); return resultObs diff --git a/packages/angular_devkit/core/src/json/schema/registry_spec.ts b/packages/angular_devkit/core/src/json/schema/registry_spec.ts index ece9121815..dd76cae266 100644 --- a/packages/angular_devkit/core/src/json/schema/registry_spec.ts +++ b/packages/angular_devkit/core/src/json/schema/registry_spec.ts @@ -5,8 +5,8 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/mergeMap'; +import { of as observableOf } from 'rxjs/observable/of'; +import { map, mergeMap } from 'rxjs/operators'; import { CoreSchemaRegistry } from './registry'; @@ -31,12 +31,14 @@ describe('CoreSchemaRegistry', () => { }, }, }) - .mergeMap(validator => validator(data)) - .map(result => { - expect(result.success).toBe(true); - expect(data.obj.num).toBeUndefined(); - expect(data.tslint).not.toBeUndefined(); - }) + .pipe( + mergeMap(validator => validator(data)), + map(result => { + expect(result.success).toBe(true); + expect(data.obj.num).toBeUndefined(); + expect(data.tslint).not.toBeUndefined(); + }), + ) .subscribe(done, done.fail); }); @@ -61,11 +63,13 @@ describe('CoreSchemaRegistry', () => { }, }, }) - .mergeMap(validator => validator(data)) - .map(result => { - expect(result.success).toBe(true); - expect(data.obj.num).toBeUndefined(); - }) + .pipe( + mergeMap(validator => validator(data)), + map(result => { + expect(result.success).toBe(true); + expect(data.obj.num).toBeUndefined(); + }), + ) .subscribe(() => { isDone = true; }, done.fail); @@ -93,10 +97,12 @@ describe('CoreSchemaRegistry', () => { str: { type: 'string', format: 'is-hotdog' }, }, }) - .mergeMap(validator => validator(data)) - .map(result => { - expect(result.success).toBe(true); - }) + .pipe( + mergeMap(validator => validator(data)), + map(result => { + expect(result.success).toBe(true); + }), + ) .subscribe(done, done.fail); }); @@ -107,7 +113,7 @@ describe('CoreSchemaRegistry', () => { name: 'is-hotdog', formatter: { async: true, - validate: (str: string) => Observable.of(str === 'hotdog'), + validate: (str: string) => observableOf(str === 'hotdog'), }, }; @@ -120,10 +126,12 @@ describe('CoreSchemaRegistry', () => { str: { type: 'string', format: 'is-hotdog' }, }, }) - .mergeMap(validator => validator(data)) - .map(result => { - expect(result.success).toBe(true); - }) + .pipe( + mergeMap(validator => validator(data)), + map(result => { + expect(result.success).toBe(true); + }), + ) .subscribe(done, done.fail); }); @@ -147,11 +155,13 @@ describe('CoreSchemaRegistry', () => { banana: { type: 'string', format: 'is-hotdog' }, }, }) - .mergeMap(validator => validator(data)) - .map(result => { - expect(result.success).toBe(false); - expect(result.errors && result.errors[0]).toBe('.banana should match format "is-hotdog"'); - }) + .pipe( + mergeMap(validator => validator(data)), + map(result => { + expect(result.success).toBe(false); + expect(result.errors && result.errors[0]).toBe('.banana should match format "is-hotdog"'); + }), + ) .subscribe(done, done.fail); }); }); diff --git a/packages/angular_devkit/core/src/logger/indent.ts b/packages/angular_devkit/core/src/logger/indent.ts index 19ceb815eb..e6fe06b686 100644 --- a/packages/angular_devkit/core/src/logger/indent.ts +++ b/packages/angular_devkit/core/src/logger/indent.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import 'rxjs/add/operator/map'; +import { map } from 'rxjs/operators'; import { Logger } from './logger'; @@ -24,21 +24,21 @@ export class IndentLogger extends Logger { super(name, parent); indentationMap[indentation] = indentationMap[indentation] || ['']; - const map = indentationMap[indentation]; + const indentMap = indentationMap[indentation]; - this._observable = this._observable.map(entry => { + this._observable = this._observable.pipe(map(entry => { const l = entry.path.length; - if (l >= map.length) { - let current = map[map.length - 1]; - while (l >= map.length) { + if (l >= indentMap.length) { + let current = indentMap[indentMap.length - 1]; + while (l >= indentMap.length) { current += indentation; - map.push(current); + indentMap.push(current); } } - entry.message = map[l] + entry.message.split(/\n/).join('\n' + map[l]); + entry.message = indentMap[l] + entry.message.split(/\n/).join('\n' + indentMap[l]); return entry; - }); + })); } } diff --git a/packages/angular_devkit/core/src/logger/indent_spec.ts b/packages/angular_devkit/core/src/logger/indent_spec.ts index 4328ba4f4c..a35ed3307a 100644 --- a/packages/angular_devkit/core/src/logger/indent_spec.ts +++ b/packages/angular_devkit/core/src/logger/indent_spec.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ // tslint:disable:no-any +import { toArray } from 'rxjs/operators'; import { IndentLogger } from './indent'; import { LogEntry, Logger } from './logger'; @@ -13,8 +14,7 @@ import { LogEntry, Logger } from './logger'; describe('IndentSpec', () => { it('works', (done: DoneFn) => { const logger = new IndentLogger('test'); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: LogEntry[]) => { expect(observed).toEqual([ diff --git a/packages/angular_devkit/core/src/logger/logger_spec.ts b/packages/angular_devkit/core/src/logger/logger_spec.ts index 2bb404d32d..50439ca9a4 100644 --- a/packages/angular_devkit/core/src/logger/logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/logger_spec.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ // tslint:disable:no-any -import 'rxjs/add/operator/toArray'; -import 'rxjs/add/operator/toPromise'; +import { toArray } from 'rxjs/operators'; import { JsonValue } from '../json/interface'; import { Logger } from './logger'; @@ -15,8 +14,7 @@ import { Logger } from './logger'; describe('Logger', () => { it('works', (done: DoneFn) => { const logger = new Logger('test'); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: JsonValue[]) => { expect(observed).toEqual([ @@ -34,8 +32,7 @@ describe('Logger', () => { it('works with children', (done: DoneFn) => { const logger = new Logger('test'); let hasCompleted = false; - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: JsonValue[]) => { expect(observed).toEqual([ @@ -57,8 +54,7 @@ describe('Logger', () => { const logger = new Logger('test'); logger.debug('woah'); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: JsonValue[]) => { expect(observed).toEqual([ diff --git a/packages/angular_devkit/core/src/logger/null-logger.ts b/packages/angular_devkit/core/src/logger/null-logger.ts index 233b1d827e..8136303019 100644 --- a/packages/angular_devkit/core/src/logger/null-logger.ts +++ b/packages/angular_devkit/core/src/logger/null-logger.ts @@ -5,15 +5,14 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/empty'; +import { empty } from 'rxjs/observable/empty'; import { Logger, LoggerApi } from './logger'; export class NullLogger extends Logger { constructor(parent: Logger | null = null) { super('', parent); - this._observable = Observable.empty(); + this._observable = empty(); } asApi(): LoggerApi { diff --git a/packages/angular_devkit/core/src/logger/null-logger_spec.ts b/packages/angular_devkit/core/src/logger/null-logger_spec.ts index 749826995b..52f1936e48 100644 --- a/packages/angular_devkit/core/src/logger/null-logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/null-logger_spec.ts @@ -5,6 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ +import { toArray } from 'rxjs/operators'; import { LogEntry, Logger } from './logger'; import { NullLogger } from './null-logger'; @@ -12,8 +13,7 @@ import { NullLogger } from './null-logger'; describe('NullLogger', () => { it('works', (done: DoneFn) => { const logger = new NullLogger(); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: LogEntry[]) => { expect(observed).toEqual([]); @@ -27,8 +27,7 @@ describe('NullLogger', () => { it('nullifies children', (done: DoneFn) => { const logger = new Logger('test'); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: LogEntry[]) => { expect(observed).toEqual([]); diff --git a/packages/angular_devkit/core/src/logger/transform-logger_spec.ts b/packages/angular_devkit/core/src/logger/transform-logger_spec.ts index b45411a87f..d99e2f8726 100644 --- a/packages/angular_devkit/core/src/logger/transform-logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/transform-logger_spec.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ // tslint:disable:no-any -import 'rxjs/add/operator/filter'; -import 'rxjs/add/operator/map'; +import { filter, map, toArray } from 'rxjs/operators'; import { LogEntry } from './logger'; import { TransformLogger } from './transform-logger'; @@ -15,12 +14,11 @@ import { TransformLogger } from './transform-logger'; describe('TransformLogger', () => { it('works', (done: DoneFn) => { const logger = new TransformLogger('test', stream => { - return stream - .filter(entry => entry.message != 'hello') - .map(entry => (entry.message += '1', entry)); + return stream.pipe( + filter(entry => entry.message != 'hello'), + map(entry => (entry.message += '1', entry))); }); - logger - .toArray() + logger.pipe(toArray()) .toPromise() .then((observed: LogEntry[]) => { expect(observed).toEqual([ diff --git a/packages/angular_devkit/core/src/virtual-fs/host/memory.ts b/packages/angular_devkit/core/src/virtual-fs/host/memory.ts index 9cf502a883..b98c900265 100644 --- a/packages/angular_devkit/core/src/virtual-fs/host/memory.ts +++ b/packages/angular_devkit/core/src/virtual-fs/host/memory.ts @@ -7,7 +7,8 @@ */ import { Observable } from 'rxjs/Observable'; import { Subject } from 'rxjs/Subject'; -import { ArrayObservable } from 'rxjs/observable/ArrayObservable'; +import { empty } from 'rxjs/observable/empty'; +import { of as observableOf } from 'rxjs/observable/of'; import { _throw } from 'rxjs/observable/throw'; import { FileAlreadyExistException, @@ -106,7 +107,7 @@ export class SimpleMemoryHost implements Host<{}> { this._cache.set(path, content); this._updateWatchers(path, existed ? HostWatchEventType.Changed : HostWatchEventType.Created); - return Observable.empty(); + return empty(); } read(path: Path): Observable { if (this._isDir(path)) { @@ -116,7 +117,7 @@ export class SimpleMemoryHost implements Host<{}> { if (!maybeBuffer) { return _throw(new FileDoesNotExistException(path)); } else { - return ArrayObservable.of(maybeBuffer); + return observableOf(maybeBuffer); } } delete(path: Path): Observable { @@ -131,7 +132,7 @@ export class SimpleMemoryHost implements Host<{}> { } this._updateWatchers(path, HostWatchEventType.Deleted); - return Observable.empty(); + return empty(); } rename(from: Path, to: Path): Observable { if (!this._cache.has(from)) { @@ -158,7 +159,7 @@ export class SimpleMemoryHost implements Host<{}> { this._updateWatchers(from, HostWatchEventType.Renamed); - return Observable.empty(); + return empty(); } list(path: Path): Observable { @@ -173,17 +174,17 @@ export class SimpleMemoryHost implements Host<{}> { } } - return ArrayObservable.of([...result]); + return observableOf([...result]); } exists(path: Path): Observable { - return ArrayObservable.of(this._cache.has(path) || this._isDir(path)); + return observableOf(this._cache.has(path) || this._isDir(path)); } isDirectory(path: Path): Observable { - return ArrayObservable.of(this._isDir(path)); + return observableOf(this._isDir(path)); } isFile(path: Path): Observable { - return ArrayObservable.of(this._cache.has(path)); + return observableOf(this._cache.has(path)); } stats(_path: Path): Observable> | null { diff --git a/packages/angular_devkit/schematics/package.json b/packages/angular_devkit/schematics/package.json index a2ffb6ee96..5cea537fee 100644 --- a/packages/angular_devkit/schematics/package.json +++ b/packages/angular_devkit/schematics/package.json @@ -17,9 +17,9 @@ ], "dependencies": { "@angular-devkit/core": "0.0.0", - "@ngtools/json-schema": "^1.1.0" - }, - "peerDependencies": { - "rxjs": "^5.5.2" + "@ngtools/json-schema": "^1.1.0", + "@schematics/schematics": "0.0.0", + "minimist": "^1.2.0", + "rxjs": "^5.5.6" } } diff --git a/packages/angular_devkit/schematics/src/engine/schematic.ts b/packages/angular_devkit/schematics/src/engine/schematic.ts index 5f1d8d4465..ed385cbeea 100644 --- a/packages/angular_devkit/schematics/src/engine/schematic.ts +++ b/packages/angular_devkit/schematics/src/engine/schematic.ts @@ -7,8 +7,7 @@ */ import { BaseException } from '@angular-devkit/core'; import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/concatMap'; +import { of as observableOf } from 'rxjs/observable/of'; import { concatMap } from 'rxjs/operators/concatMap'; import { first } from 'rxjs/operators/first'; import { map } from 'rxjs/operators/map'; @@ -60,7 +59,7 @@ export class SchematicImpl [tree, o]), )), concatMap(([tree, transformedOptions]: [Tree, OptionT]) => { - return callRule(this._factory(transformedOptions), Observable.of(tree), context); + return callRule(this._factory(transformedOptions), observableOf(tree), context); }), ); } diff --git a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts index 85798203ea..5f4c2a341f 100644 --- a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts +++ b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts @@ -7,9 +7,7 @@ */ // tslint:disable:non-null-operator import { logging } from '@angular-devkit/core'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/toArray'; -import 'rxjs/add/operator/toPromise'; +import { of as observableOf } from 'rxjs/observable/of'; import { MergeStrategy, Tree } from '../tree/interface'; import { branch, empty } from '../tree/static'; import { CollectionDescription, Engine, Rule, Schematic, SchematicDescription } from './interface'; @@ -33,7 +31,7 @@ const context = { }; const engine: Engine = { createContext: (schematic: Schematic<{}, {}>) => ({ engine, schematic, ...context }), - transformOptions: (_: {}, options: {}) => Observable.of(options), + transformOptions: (_: {}, options: {}) => observableOf(options), defaultMergeStrategy: MergeStrategy.Default, } as {} as Engine; const collection = { @@ -67,7 +65,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null !, engine); - schematic.call({}, Observable.of(empty())) + schematic.call({}, observableOf(empty())) .toPromise() .then(x => { expect(files(inner !)).toEqual([]); @@ -86,13 +84,13 @@ describe('Schematic', () => { factory: () => (fem: Tree) => { inner = fem; - return Observable.of(empty()); + return observableOf(empty()); }, }; const schematic = new SchematicImpl(desc, desc.factory, null !, engine); - schematic.call({}, Observable.of(empty())) + schematic.call({}, observableOf(empty())) .toPromise() .then(x => { expect(files(inner !)).toEqual([]); diff --git a/packages/angular_devkit/schematics/src/formats/format-validator.ts b/packages/angular_devkit/schematics/src/formats/format-validator.ts index 8acfc7c871..fec55c31e8 100644 --- a/packages/angular_devkit/schematics/src/formats/format-validator.ts +++ b/packages/angular_devkit/schematics/src/formats/format-validator.ts @@ -8,7 +8,7 @@ import { schema } from '@angular-devkit/core'; import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/mergeMap'; +import { mergeMap } from 'rxjs/operators'; export function formatValidator( @@ -24,5 +24,5 @@ export function formatValidator( return registry .compile(dataSchema) - .mergeMap(validator => validator(data)); + .pipe(mergeMap(validator => validator(data))); } diff --git a/packages/angular_devkit/schematics/src/formats/html-selector_spec.ts b/packages/angular_devkit/schematics/src/formats/html-selector_spec.ts index c2b264de4c..e287cd85cd 100644 --- a/packages/angular_devkit/schematics/src/formats/html-selector_spec.ts +++ b/packages/angular_devkit/schematics/src/formats/html-selector_spec.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ +import { map } from 'rxjs/operators'; import { formatValidator } from './format-validator'; import { htmlSelectorFormat } from './html-selector'; @@ -18,7 +19,7 @@ describe('Schematics HTML selector format', () => { }; formatValidator(data, dataSchema, [htmlSelectorFormat]) - .map(result => expect(result.success).toBe(true)) + .pipe(map(result => expect(result.success).toBe(true))) .subscribe(done, done.fail); }); @@ -29,7 +30,7 @@ describe('Schematics HTML selector format', () => { }; formatValidator(data, dataSchema, [htmlSelectorFormat]) - .map(result => expect(result.success).toBe(false)) + .pipe(map(result => expect(result.success).toBe(false))) .subscribe(done, done.fail); }); @@ -40,7 +41,7 @@ describe('Schematics HTML selector format', () => { }; formatValidator(data, dataSchema, [htmlSelectorFormat]) - .map(result => expect(result.success).toBe(false)) + .pipe(map(result => expect(result.success).toBe(false))) .subscribe(done, done.fail); }); @@ -51,7 +52,7 @@ describe('Schematics HTML selector format', () => { }; formatValidator(data, dataSchema, [htmlSelectorFormat]) - .map(result => expect(result.success).toBe(false)) + .pipe(map(result => expect(result.success).toBe(false))) .subscribe(done, done.fail); }); }); diff --git a/packages/angular_devkit/schematics/src/formats/path_spec.ts b/packages/angular_devkit/schematics/src/formats/path_spec.ts index 64b7ab8330..83718278a8 100644 --- a/packages/angular_devkit/schematics/src/formats/path_spec.ts +++ b/packages/angular_devkit/schematics/src/formats/path_spec.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ +import { map } from 'rxjs/operators'; import { formatValidator } from './format-validator'; import { pathFormat } from './path'; @@ -18,7 +19,7 @@ describe('Schematics Path format', () => { }; formatValidator(data, dataSchema, [pathFormat]) - .map(result => expect(result.success).toBe(true)) + .pipe(map(result => expect(result.success).toBe(true))) .subscribe(done, done.fail); }); @@ -29,7 +30,7 @@ describe('Schematics Path format', () => { }; formatValidator(data, dataSchema, [pathFormat]) - .map(result => expect(result.success).toBe(false)) + .pipe(map(result => expect(result.success).toBe(false))) .subscribe(done, done.fail); }); }); diff --git a/packages/angular_devkit/schematics/src/rules/base.ts b/packages/angular_devkit/schematics/src/rules/base.ts index b4dee20290..9598251ca5 100644 --- a/packages/angular_devkit/schematics/src/rules/base.ts +++ b/packages/angular_devkit/schematics/src/rules/base.ts @@ -6,9 +6,8 @@ * found in the LICENSE file at https://angular.io/license */ import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/mergeMap'; +import { of as observableOf } from 'rxjs/observable/of'; +import { concatMap, map } from 'rxjs/operators'; import { FileOperator, Rule, SchematicContext, Source } from '../engine/interface'; import { FilteredTree } from '../tree/filtered'; import { FileEntry, FilePredicate, MergeStrategy, Tree } from '../tree/interface'; @@ -45,7 +44,7 @@ export function chain(rules: Rule[]): Rule { return (tree: Tree, context: SchematicContext) => { return rules.reduce((acc: Observable, curr: Rule) => { return callRule(curr, acc, context); - }, Observable.of(tree)); + }, observableOf(tree)); }; } @@ -67,7 +66,7 @@ export function mergeWith(source: Source, strategy: MergeStrategy = MergeStrateg return (tree: Tree, context: SchematicContext) => { const result = callSource(source, context); - return result.map(other => VirtualTree.merge(tree, other, strategy || context.strategy)); + return result.pipe(map(other => VirtualTree.merge(tree, other, strategy || context.strategy))); }; } @@ -91,8 +90,8 @@ export function branchAndMerge(rule: Rule, strategy = MergeStrategy.Default): Ru return (tree: Tree, context: SchematicContext) => { const branchedTree = branch(tree); - return callRule(rule, Observable.of(branchedTree), context) - .map(t => staticMerge(tree, t, strategy)); + return callRule(rule, observableOf(branchedTree), context) + .pipe(map(t => staticMerge(tree, t, strategy))); }; } @@ -118,15 +117,15 @@ export function partitionApplyMerge( if (!ruleNo) { // Shortcut. - return callRule(ruleYes, Observable.of(staticPartition(tree, predicate)[0]), context) - .map(yesTree => staticMerge(yesTree, no, context.strategy)); + return callRule(ruleYes, observableOf(staticPartition(tree, predicate)[0]), context) + .pipe(map(yesTree => staticMerge(yesTree, no, context.strategy))); } - return callRule(ruleYes, Observable.of(yes), context) - .concatMap(yesTree => { - return callRule(ruleNo, Observable.of(no), context) - .map(noTree => staticMerge(yesTree, noTree, context.strategy)); - }); + return callRule(ruleYes, observableOf(yes), context) + .pipe(concatMap(yesTree => { + return callRule(ruleNo, observableOf(no), context) + .pipe(map(noTree => staticMerge(yesTree, noTree, context.strategy))); + })); }; } diff --git a/packages/angular_devkit/schematics/src/rules/base_spec.ts b/packages/angular_devkit/schematics/src/rules/base_spec.ts index 4477726912..983743fc90 100644 --- a/packages/angular_devkit/schematics/src/rules/base_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/base_spec.ts @@ -13,8 +13,7 @@ import { MergeStrategy, partitionApplyMerge, } from '@angular-devkit/schematics'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/toPromise'; +import { of as observableOf } from 'rxjs/observable/of'; import { Rule, SchematicContext, Source } from '../engine/interface'; import { Tree } from '../tree/interface'; import { empty } from '../tree/static'; @@ -42,7 +41,7 @@ describe('chain', () => { const rule1: Rule = (tree: Tree) => (rulesCalled[1] = tree, tree2); const rule2: Rule = (tree: Tree) => (rulesCalled[2] = tree, tree3); - callRule(chain([ rule0, rule1, rule2 ]), Observable.of(tree0), context) + callRule(chain([ rule0, rule1, rule2 ]), observableOf(tree0), context) .toPromise() .then(result => { expect(result).not.toBe(tree0); @@ -62,11 +61,11 @@ describe('chain', () => { const tree2 = empty(); const tree3 = empty(); - const rule0: Rule = (tree: Tree) => (rulesCalled[0] = tree, Observable.of(tree1)); - const rule1: Rule = (tree: Tree) => (rulesCalled[1] = tree, Observable.of(tree2)); + const rule0: Rule = (tree: Tree) => (rulesCalled[0] = tree, observableOf(tree1)); + const rule1: Rule = (tree: Tree) => (rulesCalled[1] = tree, observableOf(tree2)); const rule2: Rule = (tree: Tree) => (rulesCalled[2] = tree, tree3); - callRule(chain([ rule0, rule1, rule2 ]), Observable.of(tree0), context) + callRule(chain([ rule0, rule1, rule2 ]), observableOf(tree0), context) .toPromise() .then(result => { expect(result).not.toBe(tree0); @@ -116,8 +115,8 @@ describe('apply', () => { const tree3 = empty(); const source: Source = () => (sourceCalled = true, tree0); - const rule0: Rule = (tree: Tree) => (rulesCalled[0] = tree, Observable.of(tree1)); - const rule1: Rule = (tree: Tree) => (rulesCalled[1] = tree, Observable.of(tree2)); + const rule0: Rule = (tree: Tree) => (rulesCalled[0] = tree, observableOf(tree1)); + const rule1: Rule = (tree: Tree) => (rulesCalled[1] = tree, observableOf(tree2)); const rule2: Rule = (tree: Tree) => (rulesCalled[2] = tree, tree3); callSource(apply(source, [ rule0, rule1, rule2 ]), context) @@ -155,7 +154,7 @@ describe('partitionApplyMerge', () => { return empty(); }; - callRule(partitionApplyMerge(predicate, ruleYes, ruleNo), Observable.of(tree), context) + callRule(partitionApplyMerge(predicate, ruleYes, ruleNo), observableOf(tree), context) .toPromise() .then(result => { expect(result.exists('/test1')).toBe(false); diff --git a/packages/angular_devkit/schematics/src/rules/call.ts b/packages/angular_devkit/schematics/src/rules/call.ts index a0d703d0d7..d155c34edc 100644 --- a/packages/angular_devkit/schematics/src/rules/call.ts +++ b/packages/angular_devkit/schematics/src/rules/call.ts @@ -7,6 +7,7 @@ */ import { BaseException } from '@angular-devkit/core'; import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; import { _throw } from 'rxjs/observable/throw'; import { last } from 'rxjs/operators/last'; import { mergeMap } from 'rxjs/operators/mergeMap'; @@ -64,7 +65,7 @@ export function callSource(source: Source, context: SchematicContext): Observabl if (result === undefined) { return _throw(new InvalidSourceResultException(result)); } else if (TreeSymbol in result) { - return Observable.of(result as Tree); + return observableOf(result as Tree); } else if (Symbol.observable in result) { // Only return the last Tree, and make sure it's a Tree. return (result as Observable).pipe( @@ -84,31 +85,29 @@ export function callSource(source: Source, context: SchematicContext): Observabl export function callRule(rule: Rule, input: Observable, context: SchematicContext): Observable { - return input.pipe( - mergeMap(inputTree => { - const result = rule(inputTree, context) as object; + return input.pipe(mergeMap(inputTree => { + const result = rule(inputTree, context) as object; - if (result === undefined) { - return Observable.of(inputTree); - } else if (TreeSymbol in result) { - return Observable.of(result as Tree); - } else if (Symbol.observable in result) { - const obs = result as Observable; + if (result === undefined) { + return observableOf(inputTree); + } else if (TreeSymbol in result) { + return observableOf(result as Tree); + } else if (Symbol.observable in result) { + const obs = result as Observable; - // Only return the last Tree, and make sure it's a Tree. - return obs.pipe( - last(), - tap(inner => { - if (!(TreeSymbol in inner)) { - throw new InvalidRuleResultException(inner); - } - }), - ); - } else if (result === undefined) { - return Observable.of(inputTree); - } else { - return _throw(new InvalidRuleResultException(result)); - } - }), - ); + // Only return the last Tree, and make sure it's a Tree. + return obs.pipe( + last(), + tap(inner => { + if (!(TreeSymbol in inner)) { + throw new InvalidRuleResultException(inner); + } + }), + ); + } else if (result === undefined) { + return observableOf(inputTree); + } else { + return _throw(new InvalidRuleResultException(result)); + } + })); } diff --git a/packages/angular_devkit/schematics/src/rules/call_spec.ts b/packages/angular_devkit/schematics/src/rules/call_spec.ts index 08bb492afc..04b7b0af7c 100644 --- a/packages/angular_devkit/schematics/src/rules/call_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/call_spec.ts @@ -8,8 +8,7 @@ // tslint:disable:non-null-operator // tslint:disable:no-any import { MergeStrategy } from '@angular-devkit/schematics'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/toPromise'; +import { of as observableOf } from 'rxjs/observable/of'; import { Rule, SchematicContext, Source } from '../engine/interface'; import { Tree } from '../tree/interface'; import { empty } from '../tree/static'; @@ -52,7 +51,7 @@ describe('callSource', () => { }); it('errors if Observable of invalid source object', done => { - const source0: Source = () => Observable.of({} as Tree); + const source0: Source = () => observableOf({} as Tree); callSource(source0, context) .toPromise() @@ -76,7 +75,7 @@ describe('callSource', () => { it('works with an Observable', done => { const tree0 = empty(); - const source0: Source = () => Observable.of(tree0); + const source0: Source = () => observableOf(tree0); callSource(source0, context) .toPromise() @@ -89,7 +88,7 @@ describe('callSource', () => { describe('callRule', () => { it('errors if invalid source object', done => { - const tree0 = Observable.of(empty()); + const tree0 = observableOf(empty()); const rule0: Rule = () => ({} as Tree); callRule(rule0, tree0, context) @@ -101,8 +100,8 @@ describe('callRule', () => { }); it('errors if Observable of invalid source object', done => { - const tree0 = Observable.of(empty()); - const rule0: Rule = () => Observable.of({} as Tree); + const tree0 = observableOf(empty()); + const rule0: Rule = () => observableOf({} as Tree); callRule(rule0, tree0, context) .toPromise() @@ -116,7 +115,7 @@ describe('callRule', () => { const tree0 = empty(); const rule0: Rule = () => undefined; - callRule(rule0, Observable.of(tree0), context) + callRule(rule0, observableOf(tree0), context) .toPromise() .then(tree => { expect(tree).toBe(tree0); @@ -128,7 +127,7 @@ describe('callRule', () => { const tree0 = empty(); const rule0: Rule = () => tree0; - callRule(rule0, Observable.of(tree0), context) + callRule(rule0, observableOf(tree0), context) .toPromise() .then(tree => { expect(tree).toBe(tree0); @@ -138,9 +137,9 @@ describe('callRule', () => { it('works with an Observable', done => { const tree0 = empty(); - const rule0: Rule = () => Observable.of(tree0); + const rule0: Rule = () => observableOf(tree0); - callRule(rule0, Observable.of(tree0), context) + callRule(rule0, observableOf(tree0), context) .toPromise() .then(tree => { expect(tree).toBe(tree0); diff --git a/packages/angular_devkit/schematics/src/rules/move_spec.ts b/packages/angular_devkit/schematics/src/rules/move_spec.ts index 523213b1e1..e54d7d448a 100644 --- a/packages/angular_devkit/schematics/src/rules/move_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/move_spec.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ // tslint:disable:non-null-operator -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/toPromise'; +import { of as observableOf } from 'rxjs/observable/of'; import { SchematicContext } from '../engine/interface'; import { VirtualTree } from '../tree/virtual'; import { callRule } from './call'; @@ -24,7 +23,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('sub'), Observable.of(tree), context) + callRule(move('sub'), observableOf(tree), context) .toPromise() .then(result => { expect(result.exists('sub/a/b/file1')).toBe(true); @@ -40,7 +39,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('a/b', 'sub'), Observable.of(tree), context) + callRule(move('a/b', 'sub'), observableOf(tree), context) .toPromise() .then(result => { expect(result.exists('sub/file1')).toBe(true); diff --git a/packages/angular_devkit/schematics/src/rules/schematic.ts b/packages/angular_devkit/schematics/src/rules/schematic.ts index 3e76bbec26..c9f1d57c5e 100644 --- a/packages/angular_devkit/schematics/src/rules/schematic.ts +++ b/packages/angular_devkit/schematics/src/rules/schematic.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; import { Rule, SchematicContext } from '../engine/interface'; import { Tree } from '../tree/interface'; import { branch } from '../tree/static'; @@ -25,7 +25,7 @@ export function externalSchematic(collectionName: string const collection = context.engine.createCollection(collectionName); const schematic = collection.createSchematic(schematicName); - return schematic.call(options, Observable.of(branch(input)), context); + return schematic.call(options, observableOf(branch(input)), context); }; } @@ -41,6 +41,6 @@ export function schematic(schematicName: string, options const collection = context.schematic.collection; const schematic = collection.createSchematic(schematicName); - return schematic.call(options, Observable.of(branch(input)), context); + return schematic.call(options, observableOf(branch(input)), context); }; } diff --git a/packages/angular_devkit/schematics/src/sink/dryrun.ts b/packages/angular_devkit/schematics/src/sink/dryrun.ts index b29c4dae6b..7e781a12b6 100644 --- a/packages/angular_devkit/schematics/src/sink/dryrun.ts +++ b/packages/angular_devkit/schematics/src/sink/dryrun.ts @@ -7,7 +7,7 @@ */ import { Observable } from 'rxjs/Observable'; import { Subject } from 'rxjs/Subject'; -import 'rxjs/add/observable/empty'; +import { empty } from 'rxjs/observable/empty'; import { FileSystemSink } from './filesystem'; @@ -110,6 +110,6 @@ export class DryRunSink extends FileSystemSink { this._subject.complete(); - return Observable.empty(); + return empty(); } } diff --git a/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts b/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts index 4d73df3a19..86a57d5556 100644 --- a/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts +++ b/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts @@ -8,8 +8,7 @@ import { normalize } from '@angular-devkit/core'; import * as fs from 'fs'; import * as path from 'path'; -import 'rxjs/add/operator/toArray'; -import 'rxjs/add/operator/toPromise'; +import { toArray } from 'rxjs/operators'; import { FileSystemCreateTree, FileSystemTree } from '../tree/filesystem'; import { InMemoryFileSystemTreeHost } from '../tree/memory-host'; import { optimize } from '../tree/static'; @@ -45,8 +44,7 @@ describe('DryRunSink', () => { expect(tree.files).toEqual(files.map(normalize)); const sink = new DryRunSink(outputRoot); - sink.reporter - .toArray() + sink.reporter.pipe(toArray()) .toPromise() .then(infos => { expect(infos.length).toBe(4); @@ -75,8 +73,7 @@ describe('DryRunSink', () => { // Need to create this file on the filesystem, otherwise the commit phase will fail. fs.writeFileSync(path.join(outputRoot, 'hello'), ''); const sink = new DryRunSink(outputRoot); - sink.reporter - .toArray() + sink.reporter.pipe(toArray()) .toPromise() .then(infos => { expect(infos.length).toBe(2); diff --git a/packages/angular_devkit/schematics/src/sink/sink.ts b/packages/angular_devkit/schematics/src/sink/sink.ts index af44221676..beb4bf1412 100644 --- a/packages/angular_devkit/schematics/src/sink/sink.ts +++ b/packages/angular_devkit/schematics/src/sink/sink.ts @@ -6,14 +6,17 @@ * found in the LICENSE file at https://angular.io/license */ import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/defer'; -import 'rxjs/add/observable/from'; -import 'rxjs/add/operator/concat'; -import 'rxjs/add/operator/concatMap'; -import 'rxjs/add/operator/ignoreElements'; -import 'rxjs/add/operator/last'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/mergeMap'; +import { defer as deferObservable } from 'rxjs/observable/defer'; +import { empty } from 'rxjs/observable/empty'; +import { from as observableFrom } from 'rxjs/observable/from'; +import { of as observableOf } from 'rxjs/observable/of'; +import { + concat, + concatMap, + ignoreElements, + map, + mergeMap, +} from 'rxjs/operators'; import { FileAlreadyExistException, FileDoesNotExistException } from '../exception/exception'; import { Action, @@ -66,21 +69,21 @@ export abstract class SimpleSinkBase implements Sink { protected _validateOverwriteAction(action: OverwriteFileAction): Observable { return this._validateFileExists(action.path) - .map(b => { if (!b) { this._fileDoesNotExistException(action.path); } }); + .pipe(map(b => { if (!b) { this._fileDoesNotExistException(action.path); } })); } protected _validateCreateAction(action: CreateFileAction): Observable { return this._validateFileExists(action.path) - .map(b => { if (b) { this._fileAlreadyExistException(action.path); } }); + .pipe(map(b => { if (b) { this._fileAlreadyExistException(action.path); } })); } protected _validateRenameAction(action: RenameFileAction): Observable { - return this._validateFileExists(action.path) - .map(b => { if (!b) { this._fileDoesNotExistException(action.path); } }) - .mergeMap(() => this._validateFileExists(action.to)) - .map(b => { if (b) { this._fileAlreadyExistException(action.to); } }); + return this._validateFileExists(action.path).pipe( + map(b => { if (!b) { this._fileDoesNotExistException(action.path); } }), + mergeMap(() => this._validateFileExists(action.to)), + map(b => { if (b) { this._fileAlreadyExistException(action.to); } })); } protected _validateDeleteAction(action: DeleteFileAction): Observable { return this._validateFileExists(action.path) - .map(b => { if (!b) { this._fileDoesNotExistException(action.path); } }); + .pipe(map(b => { if (!b) { this._fileDoesNotExistException(action.path); } })); } validateSingleAction(action: Action): Observable { @@ -94,11 +97,11 @@ export abstract class SimpleSinkBase implements Sink { } commitSingleAction(action: Action): Observable { - return Observable.empty() - .concat(new Observable(observer => { + return empty().pipe( + concat(new Observable(observer => { return this.validateSingleAction(action).subscribe(observer); - })) - .concat(new Observable(observer => { + })), + concat(new Observable(observer => { let committed = null; switch (action.kind) { case 'o': committed = this._overwriteFile(action.path, action.content); break; @@ -112,29 +115,31 @@ export abstract class SimpleSinkBase implements Sink { } else { observer.complete(); } - })); + }))); } commit(tree: Tree): Observable { - const actions = Observable.from(tree.actions); + const actions = observableFrom(tree.actions); - return (this.preCommit() || Observable.empty()) - .concat(Observable.defer(() => actions)) - .concatMap((action: Action) => { + return (this.preCommit() || empty()).pipe( + concat(deferObservable(() => actions)), + concatMap((action: Action) => { const maybeAction = this.preCommitAction(action); if (!maybeAction) { - return Observable.of(action); + return observableOf(action); } else if (isAction(maybeAction)) { - return Observable.of(maybeAction); + return observableOf(maybeAction); } else { return maybeAction; } - }) - .concatMap((action: Action) => { - return this.commitSingleAction(action).ignoreElements().concat([action]); - }) - .concatMap((action: Action) => this.postCommitAction(action) || Observable.empty()) - .concat(Observable.defer(() => this._done())) - .concat(Observable.defer(() => this.postCommit() || Observable.empty())); + }), + concatMap((action: Action) => { + return this.commitSingleAction(action).pipe( + ignoreElements(), + concat([action])); + }), + concatMap((action: Action) => this.postCommitAction(action) || empty()), + concat(deferObservable(() => this._done())), + concat(deferObservable(() => this.postCommit() || empty()))); } } diff --git a/packages/angular_devkit/schematics/src/sink/virtual-filesystem.ts b/packages/angular_devkit/schematics/src/sink/virtual-filesystem.ts index a2ba8e2fff..542bc77c16 100644 --- a/packages/angular_devkit/schematics/src/sink/virtual-filesystem.ts +++ b/packages/angular_devkit/schematics/src/sink/virtual-filesystem.ts @@ -6,13 +6,11 @@ * found in the LICENSE file at https://angular.io/license */ import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/concat'; -import 'rxjs/add/observable/empty'; -import 'rxjs/add/observable/merge'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/reduce'; +import { concat as concatObservables } from 'rxjs/observable/concat'; +import { empty } from 'rxjs/observable/empty'; +import { from as observableFrom } from 'rxjs/observable/from'; +import { of as observableOf } from 'rxjs/observable/of'; +import { concatMap, reduce } from 'rxjs/operators'; import { CreateFileAction } from '../tree/action'; import { UpdateBuffer } from '../utility/update-buffer'; import { SimpleSinkBase } from './sink'; @@ -35,14 +33,14 @@ export abstract class VirtualFileSystemSink extends SimpleSinkBase { constructor(protected _host: VirtualFileSystemSinkHost, protected _force = false) { super(); } protected _validateCreateAction(action: CreateFileAction): Observable { - return this._force ? Observable.empty() : super._validateCreateAction(action); + return this._force ? empty() : super._validateCreateAction(action); } protected _validateFileExists(p: string): Observable { if (this._filesToCreate.has(p) || this._filesToUpdate.has(p)) { - return Observable.of(true); + return observableOf(true); } else if (this._filesToDelete.has(p)) { - return Observable.of(false); + return observableOf(false); } else { return this._host.exists(p); } @@ -51,17 +49,17 @@ export abstract class VirtualFileSystemSink extends SimpleSinkBase { protected _overwriteFile(path: string, content: Buffer): Observable { this._filesToUpdate.set(path, new UpdateBuffer(content)); - return Observable.empty(); + return empty(); } protected _createFile(path: string, content: Buffer): Observable { this._filesToCreate.set(path, new UpdateBuffer(content)); - return Observable.empty(); + return empty(); } protected _renameFile(from: string, to: string): Observable { this._filesToRename.add([from, to]); - return Observable.empty(); + return empty(); } protected _deleteFile(path: string): Observable { if (this._filesToCreate.has(path)) { @@ -71,20 +69,20 @@ export abstract class VirtualFileSystemSink extends SimpleSinkBase { this._filesToDelete.add(path); } - return Observable.empty(); + return empty(); } _done() { // Really commit everything to the actual filesystem. - return Observable.concat( - Observable.from([...this._filesToDelete.values()]) - .concatMap(path => this._host.delete(path)), - Observable.from([...this._filesToCreate.entries()]) - .concatMap(([path, buffer]) => this._host.write(path, buffer.generate())), - Observable.from([...this._filesToRename.entries()]) - .concatMap(([_, [path, to]]) => this._host.rename(path, to)), - Observable.from([...this._filesToUpdate.entries()]) - .concatMap(([path, buffer]) => this._host.write(path, buffer.generate())), - ).reduce(() => {}); + return concatObservables( + observableFrom([...this._filesToDelete.values()]).pipe( + concatMap(path => this._host.delete(path))), + observableFrom([...this._filesToCreate.entries()]).pipe( + concatMap(([path, buffer]) => this._host.write(path, buffer.generate()))), + observableFrom([...this._filesToRename.entries()]).pipe( + concatMap(([_, [path, to]]) => this._host.rename(path, to))), + observableFrom([...this._filesToUpdate.entries()]).pipe( + concatMap(([path, buffer]) => this._host.write(path, buffer.generate()))), + ).pipe(reduce(() => {})); } } diff --git a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts index 6a5354bf8d..79d2e40b26 100644 --- a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts +++ b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts @@ -22,6 +22,8 @@ import { validateOptionsWithSchema, } from '@angular-devkit/schematics/tools'; import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; +import { map } from 'rxjs/operators'; import { callRule } from '../src/rules/call'; @@ -58,10 +60,10 @@ export class SchematicTestRunner { tree?: Tree, ): Observable { const schematic = this._collection.createSchematic(schematicName); - const host = Observable.of(tree || new VirtualTree); + const host = observableOf(tree || new VirtualTree); return schematic.call(opts || {}, host, { logger: this._logger }) - .map(tree => new UnitTestTree(tree)); + .pipe(map(tree => new UnitTestTree(tree))); } runSchematic( @@ -72,7 +74,7 @@ export class SchematicTestRunner { const schematic = this._collection.createSchematic(schematicName); let result: UnitTestTree | null = null; - const host = Observable.of(tree || new VirtualTree); + const host = observableOf(tree || new VirtualTree); schematic.call(opts || {}, host, { logger: this._logger }) .subscribe(t => result = new UnitTestTree(t)); @@ -87,6 +89,6 @@ export class SchematicTestRunner { callRule(rule: Rule, tree: Tree, parentContext?: Partial): Observable { const context = this._engine.createContext({} as Schematic<{}, {}>, parentContext); - return callRule(rule, Observable.of(tree), context); + return callRule(rule, observableOf(tree), context); } } diff --git a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts index ffd7704eeb..68d8cc567e 100644 --- a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts @@ -14,6 +14,7 @@ import { UnknownCollectionException, } from '@angular-devkit/schematics'; import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; import { mergeMap } from 'rxjs/operators/mergeMap'; import { Url } from 'url'; @@ -85,7 +86,7 @@ export class FallbackEngineHost implements EngineHost<{}, {}> { schematic: SchematicDescription, options: OptionT, ): Observable { - return (Observable.of(options) + return (observableOf(options) .pipe(...this._hosts.map(host => mergeMap(opt => host.transformOptions(schematic, opt)))) ) as {} as Observable; } diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts index 2ccfd59e07..acb62491c3 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts @@ -15,6 +15,7 @@ import { } from '@angular-devkit/schematics'; import { dirname, isAbsolute, join, resolve } from 'path'; import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; import { mergeMap } from 'rxjs/operators/mergeMap'; import { Url } from 'url'; import { @@ -235,7 +236,7 @@ export abstract class FileSystemEngineHostBase implements schematic: FileSystemSchematicDesc, options: OptionT, ): Observable { - return (Observable.of(options) + return (observableOf(options) .pipe( ...this._transforms.map(tFn => mergeMap(opt => tFn(schematic, opt))), )) as {} as Observable; diff --git a/packages/angular_devkit/schematics/tools/schema-option-transform.ts b/packages/angular_devkit/schematics/tools/schema-option-transform.ts index b142ae208d..5b4a8e18ba 100644 --- a/packages/angular_devkit/schematics/tools/schema-option-transform.ts +++ b/packages/angular_devkit/schematics/tools/schema-option-transform.ts @@ -11,6 +11,7 @@ import { } from '@angular-devkit/core'; import { SchematicDescription } from '@angular-devkit/schematics'; import { Observable } from 'rxjs/Observable'; +import { of as observableOf } from 'rxjs/observable/of'; import { first } from 'rxjs/operators/first'; import { map } from 'rxjs/operators/map'; import { mergeMap } from 'rxjs/operators/mergeMap'; @@ -68,6 +69,6 @@ export function validateOptionsWithSchema(registry: schema.SchemaRegistry) { ); } - return Observable.of(options); + return observableOf(options); }; } diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index e251a43eb1..5e3a64dd97 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -27,9 +27,13 @@ import { validateOptionsWithSchema, } from '@angular-devkit/schematics/tools'; import * as minimist from 'minimist'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/ignoreElements'; - +import { of as observableOf } from 'rxjs/observable/of'; +import { + concat, + concatMap, + ignoreElements, + map, +} from 'rxjs/operators'; /** * Show usage of the CLI tool, and exit the process. @@ -162,7 +166,7 @@ const dryRun: boolean = argv['dry-run'] === null ? debug : argv['dry-run']; const force = argv['force']; /** This host is the original Tree created from the current directory. */ -const host = Observable.of(new FileSystemTree(new FileSystemHost(process.cwd()))); +const host = observableOf(new FileSystemTree(new FileSystemHost(process.cwd()))); // We need two sinks if we want to output what will happen, and actually do the work. // Note that fsSink is technically not used if `--dry-run` is passed, but creating the Sink @@ -243,26 +247,31 @@ delete args._; * (if --dry-run was not passed or an error was detected by dryRun). */ schematic.call(args, host, { debug, logger: logger.asApi() }) - .map((tree: Tree) => Tree.optimize(tree)) - .concatMap((tree: Tree) => { - return dryRunSink.commit(tree).ignoreElements().concat(Observable.of(tree)); - }) - .concatMap((tree: Tree) => { - if (!error) { - // Output the logging queue. - loggingQueue.forEach(log => logger.info(log)); - } + .pipe( + map((tree: Tree) => Tree.optimize(tree)), + concatMap((tree: Tree) => { + return dryRunSink.commit(tree).pipe( + ignoreElements(), + concat(observableOf(tree))); + }), + concatMap((tree: Tree) => { + if (!error) { + // Output the logging queue. + loggingQueue.forEach(log => logger.info(log)); + } - if (nothingDone) { - logger.info('Nothing to be done.'); - } + if (nothingDone) { + logger.info('Nothing to be done.'); + } - if (dryRun || error) { - return Observable.of(tree); - } + if (dryRun || error) { + return observableOf(tree); + } - return fsSink.commit(tree).ignoreElements().concat(Observable.of(tree)); - }) + return fsSink.commit(tree).pipe( + ignoreElements(), + concat(observableOf(tree))); + })) .subscribe({ error(err: Error) { if (debug) { diff --git a/packages/schematics/angular/app-shell/index.ts b/packages/schematics/angular/app-shell/index.ts index 6a629639e1..11e61605e0 100644 --- a/packages/schematics/angular/app-shell/index.ts +++ b/packages/schematics/angular/app-shell/index.ts @@ -14,7 +14,6 @@ import { chain, schematic, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import { addImportToModule, diff --git a/packages/schematics/angular/application/files/package.json b/packages/schematics/angular/application/files/package.json index 3da1e9419c..b5860c78ff 100644 --- a/packages/schematics/angular/application/files/package.json +++ b/packages/schematics/angular/application/files/package.json @@ -23,7 +23,7 @@ "@angular/router": "^5.1.0",<% if (serviceWorker) { %> "@angular/service-worker": "^5.1.0",<% } %> "core-js": "^2.4.1", - "rxjs": "^5.5.2", + "rxjs": "^5.5.6", "zone.js": "^0.8.19" }, "devDependencies": { diff --git a/packages/schematics/angular/component/index.ts b/packages/schematics/angular/component/index.ts index 02e1bf7c86..cb5404b51e 100644 --- a/packages/schematics/angular/component/index.ts +++ b/packages/schematics/angular/component/index.ts @@ -21,7 +21,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { addDeclarationToModule, addExportToModule } from '../utility/ast-utils'; diff --git a/packages/schematics/angular/directive/index.ts b/packages/schematics/angular/directive/index.ts index 8ade528a88..0c4ccbf084 100644 --- a/packages/schematics/angular/directive/index.ts +++ b/packages/schematics/angular/directive/index.ts @@ -21,7 +21,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { addDeclarationToModule, addExportToModule } from '../utility/ast-utils'; diff --git a/packages/schematics/angular/guard/index.ts b/packages/schematics/angular/guard/index.ts index a1c76119ab..61dcfc75c4 100644 --- a/packages/schematics/angular/guard/index.ts +++ b/packages/schematics/angular/guard/index.ts @@ -21,7 +21,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { addProviderToModule } from '../utility/ast-utils'; diff --git a/packages/schematics/angular/pipe/index.ts b/packages/schematics/angular/pipe/index.ts index 3b442f2534..5ef23428ce 100644 --- a/packages/schematics/angular/pipe/index.ts +++ b/packages/schematics/angular/pipe/index.ts @@ -21,7 +21,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { addDeclarationToModule, addExportToModule } from '../utility/ast-utils'; diff --git a/packages/schematics/angular/service/index.ts b/packages/schematics/angular/service/index.ts index cc98ea0409..17de19ac30 100644 --- a/packages/schematics/angular/service/index.ts +++ b/packages/schematics/angular/service/index.ts @@ -21,7 +21,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { addProviderToModule } from '../utility/ast-utils'; diff --git a/packages/schematics/angular/universal/index.ts b/packages/schematics/angular/universal/index.ts index 12fb034654..978397c80e 100644 --- a/packages/schematics/angular/universal/index.ts +++ b/packages/schematics/angular/universal/index.ts @@ -17,7 +17,6 @@ import { template, url, } from '@angular-devkit/schematics'; -import 'rxjs/add/operator/merge'; import * as ts from 'typescript'; import * as stringUtils from '../strings'; import { findNode, getDecoratorMetadata } from '../utility/ast-utils'; diff --git a/packages/schematics/package-update/package.json b/packages/schematics/package-update/package.json index 0b0f911ef1..120e9bc726 100644 --- a/packages/schematics/package-update/package.json +++ b/packages/schematics/package-update/package.json @@ -15,7 +15,7 @@ "peerDependencies": { "@angular-devkit/core": "0.0.0", "@angular-devkit/schematics": "0.0.0", - "rxjs": "^5.5.2", + "rxjs": "^5.5.6", "semver": "^5.3.0", "semver-intersect": "^1.1.2" } diff --git a/packages/schematics/package-update/utility/npm.ts b/packages/schematics/package-update/utility/npm.ts index 95f3bc7c5c..eaa55ae683 100644 --- a/packages/schematics/package-update/utility/npm.ts +++ b/packages/schematics/package-update/utility/npm.ts @@ -16,6 +16,9 @@ import { import * as http from 'http'; import { Observable } from 'rxjs/Observable'; import { ReplaySubject } from 'rxjs/ReplaySubject'; +import { empty } from 'rxjs/observable/empty'; +import { from as observableFrom } from 'rxjs/observable/from'; +import { of as observableOf } from 'rxjs/observable/of'; import { concat, ignoreElements, map, mergeMap } from 'rxjs/operators'; import * as semver from 'semver'; @@ -122,27 +125,27 @@ function _getRecursiveVersions( logger: logging.LoggerApi, loose: boolean, ): Observable { - return Observable.from(kPackageJsonDependencyFields).pipe( + return observableFrom(kPackageJsonDependencyFields).pipe( mergeMap(field => { const deps = packageJson[field] as JsonObject; if (deps) { - return Observable.from( + return observableFrom( Object.keys(deps) .map(depName => depName in deps ? [depName, deps[depName]] : null) .filter(x => !!x), ); } else { - return Observable.empty(); + return empty(); } }), mergeMap(([depName, depVersion]: [string, string]) => { if (!packages[depName] || packages[depName] === depVersion) { - return Observable.empty(); + return empty(); } if (allVersions[depName] && semver.intersects(allVersions[depName], depVersion)) { allVersions[depName] = semverIntersect.intersect(allVersions[depName], depVersion); - return Observable.empty(); + return empty(); } return _getNpmPackageJson(depName, logger).pipe( @@ -154,7 +157,7 @@ function _getRecursiveVersions( const npmPackageVersions = Object.keys(npmPackageJson['versions'] as JsonObject); const match = semver.maxSatisfying(npmPackageVersions, updateVersion); if (!match) { - return Observable.empty(); + return empty(); } if (semver.lt( semverIntersect.parseRange(updateVersion).version, @@ -234,7 +237,7 @@ export function updatePackageJson( return _getRecursiveVersions(packageJson, packages, allVersions, context.logger, loose).pipe( ignoreElements(), - concat(Observable.of(tree)), + concat(observableOf(tree)), map(_ => tree), // Just to get the TypeScript typesystem fixed. ); }, diff --git a/packages/schematics/schematics/package.json b/packages/schematics/schematics/package.json index f94a729df2..477f27fc58 100644 --- a/packages/schematics/schematics/package.json +++ b/packages/schematics/schematics/package.json @@ -15,6 +15,6 @@ "peerDependencies": { "@angular-devkit/core": "0.0.0", "@angular-devkit/schematics": "0.0.0", - "rxjs": "^5.5.2" + "rxjs": "^5.5.6" } }