From f2a8d3a0607c66fd5b0ed4c0d001be886ab068f8 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 15 Feb 2023 08:43:30 +0000 Subject: [PATCH] build: update to rxjs 7 G3 is now using RXJS version 7 which makes it possible for the CLI to also be updated to RXJS 7. NB: this change does not remove all usages of the deprecated APIs. Closes #24371 --- bin/devkit-admin | 2 +- .../angular_devkit/architect/index.md | 5 +- .../public-api/angular_devkit/core/index.md | 4 +- package.json | 2 +- packages/angular/cli/BUILD.bazel | 1 - packages/angular/cli/package.json | 3 - .../architect-base-command-module.ts | 3 +- .../architect/builders/all-of.ts | 3 +- .../architect/builders/concat.ts | 3 +- .../angular_devkit/architect/node/BUILD.bazel | 1 + .../architect/node/jobs/job-registry_spec.ts | 3 +- .../angular_devkit/architect/package.json | 2 +- packages/angular_devkit/architect/src/api.ts | 14 ++-- .../angular_devkit/architect/src/architect.ts | 8 +- .../architect/src/create-builder.ts | 52 ++++++++----- .../architect/src/index_spec.ts | 19 +++-- .../architect/src/jobs/create-job-handler.ts | 13 +++- .../architect/src/jobs/dispatcher_spec.ts | 3 +- .../architect/src/jobs/fallback-registry.ts | 3 +- .../src/jobs/simple-registry_spec.ts | 5 +- .../architect/src/jobs/simple-scheduler.ts | 10 +-- .../src/jobs/simple-scheduler_spec.ts | 15 ++-- .../architect/src/jobs/strategy.ts | 13 +++- .../architect/src/schedule-by-name.ts | 46 +++++++----- .../architect/testing/test-project-host.ts | 15 +++- .../architect_cli/bin/architect.ts | 2 +- .../angular_devkit/benchmark/package.json | 2 +- .../benchmark/src/default-stats-capture.ts | 3 +- .../src/default-stats-capture_spec.ts | 3 +- packages/angular_devkit/benchmark/src/main.ts | 4 +- .../benchmark/src/monitored-process_spec.ts | 2 +- .../benchmark/src/run-benchmark-watch.ts | 8 +- .../benchmark/src/run-benchmark.ts | 14 +++- .../angular_devkit/build_angular/package.json | 2 +- .../options/inline-style-language_spec.ts | 2 +- .../src/builders/browser/index.ts | 3 +- .../builders/browser/specs/allow-js_spec.ts | 15 ++-- .../src/builders/browser/specs/aot_spec.ts | 5 +- .../builders/browser/specs/base-href_spec.ts | 9 ++- .../browser/specs/build-optimizer_spec.ts | 7 +- .../browser/specs/cross-origin_spec.ts | 17 ++++- .../builders/browser/specs/deploy-url_spec.ts | 11 ++- .../src/builders/browser/specs/index_spec.ts | 23 ++++-- .../browser/specs/lazy-module_spec.ts | 2 +- .../src/builders/browser/specs/poll_spec.ts | 2 +- .../builders/browser/specs/rebuild_spec.ts | 2 +- .../browser/specs/replacements_spec.ts | 5 +- .../browser/specs/resolve-json-module_spec.ts | 2 +- .../browser/specs/service-worker_spec.ts | 2 +- .../specs/unused-files-warning_spec.ts | 2 +- .../builders/browser/specs/web-worker_spec.ts | 11 ++- .../tests/behavior/index_watch_spec.ts | 2 +- .../tests/behavior/localize_watch_spec.ts | 2 +- .../tests/behavior/rebuild-errors_spec.ts | 2 +- .../options/inline-style-language_spec.ts | 2 +- .../browser/tests/options/verbose_spec.ts | 2 +- .../browser/tests/options/watch_spec.ts | 2 +- .../src/builders/dev-server/index.ts | 3 +- .../src/builders/dev-server/specs/hmr_spec.ts | 2 +- .../build_localize_replaced_watch_spec.ts | 2 +- .../behavior/build_translation_watch_spec.ts | 2 +- .../serve-live-reload-proxies_spec.ts | 2 +- .../behavior/serve_service-worker_spec.ts | 2 +- .../dev-server/tests/execute-fetch.ts | 11 ++- .../dev-server/tests/options/watch_spec.ts | 3 +- .../src/builders/extract-i18n/index.ts | 11 ++- .../build_angular/src/builders/karma/index.ts | 3 +- .../tests/behavior/code-coverage_spec.ts | 4 +- .../karma/tests/behavior/rebuilds_spec.ts | 2 +- .../src/builders/ng-packagr/index.ts | 3 +- .../src/builders/ng-packagr/works_spec.ts | 2 +- .../src/builders/server/index.ts | 3 +- .../src/testing/builder-harness.ts | 22 +++++- .../build_angular/src/testing/test-utils.ts | 11 ++- .../src/webpack/plugins/hmr/hmr-accept.ts | 2 +- .../angular_devkit/build_webpack/package.json | 2 +- .../src/webpack-dev-server/index.ts | 3 +- .../build_webpack/src/webpack/index.ts | 3 +- .../angular_devkit/core/node/cli-logger.ts | 2 +- packages/angular_devkit/core/node/host.ts | 11 ++- packages/angular_devkit/core/package.json | 2 +- .../core/src/json/schema/interface.ts | 4 +- .../core/src/json/schema/registry.ts | 34 ++++----- .../core/src/json/schema/visitor.ts | 15 +++- .../angular_devkit/core/src/logger/indent.ts | 2 +- .../core/src/logger/indent_spec.ts | 6 +- .../core/src/logger/logger_spec.ts | 14 +--- .../core/src/logger/null-logger_spec.ts | 10 +-- .../core/src/logger/transform-logger_spec.ts | 6 +- .../core/src/virtual-fs/host/record.ts | 15 +++- .../core/src/virtual-fs/host/safe.ts | 3 +- .../angular_devkit/core/src/workspace/host.ts | 9 ++- .../angular_devkit/schematics/package.json | 2 +- .../schematics/src/engine/engine.ts | 3 +- .../schematics/src/engine/schematic.ts | 3 +- .../schematics/src/engine/schematic_spec.ts | 22 ++---- .../schematics/src/rules/base.ts | 3 +- .../schematics/src/rules/base_spec.ts | 26 +++---- .../schematics/src/rules/call.ts | 9 +-- .../schematics/src/rules/move_spec.ts | 17 ++--- .../schematics/src/rules/schematic.ts | 3 +- .../schematics/src/sink/dryrun_spec.ts | 10 +-- .../schematics/src/sink/host.ts | 3 +- .../schematics/src/sink/sink.ts | 8 +- .../schematics/src/tree/host-tree.ts | 3 +- .../schematics/src/workflow/base.ts | 18 ++++- .../testing/schematic-test-runner.ts | 6 +- .../schematics/tools/fallback-engine-host.ts | 3 +- .../tools/file-system-engine-host-base.ts | 4 +- .../tools/file-system-engine-host.ts | 3 +- .../tools/file-system-engine-host_spec.ts | 26 +++---- tests/legacy-cli/e2e/utils/process.ts | 20 +++-- yarn.lock | 74 ++++++++----------- 113 files changed, 500 insertions(+), 417 deletions(-) diff --git a/bin/devkit-admin b/bin/devkit-admin index 04e5dc43192a..95fdbc7d463f 100755 --- a/bin/devkit-admin +++ b/bin/devkit-admin @@ -35,7 +35,7 @@ let logger = null; try { logger = new (require('@angular-devkit/core').logging.IndentLogger)('root'); const colors = require('ansi-colors').create(); - const filter = require('rxjs/operators').filter; + const filter = require('rxjs').filter; logger .pipe(filter(entry => (entry.level !== 'debug' || args.verbose))) diff --git a/goldens/public-api/angular_devkit/architect/index.md b/goldens/public-api/angular_devkit/architect/index.md index 89796d9bc3db..70cdd28738ab 100644 --- a/goldens/public-api/angular_devkit/architect/index.md +++ b/goldens/public-api/angular_devkit/architect/index.md @@ -10,9 +10,9 @@ import { JsonObject } from '@angular-devkit/core'; import { JsonValue } from '@angular-devkit/core'; import { logging } from '@angular-devkit/core'; import { Observable } from 'rxjs'; +import { ObservableInput } from 'rxjs'; import { Observer } from 'rxjs'; import { schema } from '@angular-devkit/core'; -import { SubscribableOrPromise } from 'rxjs'; // @public (undocumented) export class Architect { @@ -67,7 +67,7 @@ export type BuilderInput = json.JsonObject & Schema; export type BuilderOutput = json.JsonObject & Schema_2; // @public -export type BuilderOutputLike = AsyncIterable | SubscribableOrPromise | BuilderOutput; +export type BuilderOutputLike = ObservableInput | BuilderOutput; // @public (undocumented) export type BuilderProgress = json.JsonObject & Schema_3 & TypedBuilderProgress; @@ -97,6 +97,7 @@ export type BuilderRegistry = Registry; output: Observable; progress: Observable; result: Promise; diff --git a/goldens/public-api/angular_devkit/core/index.md b/goldens/public-api/angular_devkit/core/index.md index 6fede5dc4195..44af3248b63d 100644 --- a/goldens/public-api/angular_devkit/core/index.md +++ b/goldens/public-api/angular_devkit/core/index.md @@ -7,11 +7,11 @@ import { ErrorObject } from 'ajv'; import { Format } from 'ajv'; import { Observable } from 'rxjs'; +import { ObservableInput } from 'rxjs'; import { Operator } from 'rxjs'; import { PartialObserver } from 'rxjs'; import { Position } from 'source-map'; import { Subject } from 'rxjs'; -import { SubscribableOrPromise } from 'rxjs'; import { Subscription } from 'rxjs'; import { ValidateFunction } from 'ajv'; @@ -714,7 +714,7 @@ interface PromptDefinition { } // @public (undocumented) -type PromptProvider = (definitions: Array) => SubscribableOrPromise<{ +type PromptProvider = (definitions: Array) => ObservableInput<{ [id: string]: JsonValue; }>; diff --git a/package.json b/package.json index 0c5fa8992b55..a330d6bfd834 100644 --- a/package.json +++ b/package.json @@ -194,7 +194,7 @@ "puppeteer": "18.2.1", "quicktype-core": "22.0.0", "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", + "rxjs": "7.8.0", "sass": "1.58.1", "sass-loader": "13.2.0", "sauce-connect-proxy": "https://saucelabs.com/downloads/sc-4.8.1-linux.tar.gz", diff --git a/packages/angular/cli/BUILD.bazel b/packages/angular/cli/BUILD.bazel index ac63f01cbf10..1a555222c97e 100644 --- a/packages/angular/cli/BUILD.bazel +++ b/packages/angular/cli/BUILD.bazel @@ -142,7 +142,6 @@ ts_library( "//packages/angular_devkit/schematics", "//packages/angular_devkit/schematics/testing", "@npm//@types/semver", - "@npm//rxjs", ], ) diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index a2894fd910c8..94411211d2ec 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -41,9 +41,6 @@ "symbol-observable": "4.0.0", "yargs": "17.6.2" }, - "devDependencies": { - "rxjs": "6.6.7" - }, "ng-update": { "migrations": "@schematics/angular/migrations/migration-collection.json", "packageGroup": { diff --git a/packages/angular/cli/src/command-builder/architect-base-command-module.ts b/packages/angular/cli/src/command-builder/architect-base-command-module.ts index 59e0852402c4..b5ebe8d8bf28 100644 --- a/packages/angular/cli/src/command-builder/architect-base-command-module.ts +++ b/packages/angular/cli/src/command-builder/architect-base-command-module.ts @@ -85,8 +85,7 @@ export abstract class ArchitectBaseCommandModule } try { - const { error, success } = await run.output.toPromise(); - + const { error, success } = await run.lastOutput; if (error) { logger.error(error); } diff --git a/packages/angular_devkit/architect/builders/all-of.ts b/packages/angular_devkit/architect/builders/all-of.ts index a9a797ddd525..a76694c0c18a 100644 --- a/packages/angular_devkit/architect/builders/all-of.ts +++ b/packages/angular_devkit/architect/builders/all-of.ts @@ -7,8 +7,7 @@ */ import { json } from '@angular-devkit/core'; -import { EMPTY, from, of } from 'rxjs'; -import { map, mergeMap } from 'rxjs/operators'; +import { EMPTY, from, map, mergeMap, of } from 'rxjs'; import { BuilderOutput, BuilderRun, createBuilder } from '../src'; import { Schema as OperatorSchema } from './operator-schema'; diff --git a/packages/angular_devkit/architect/builders/concat.ts b/packages/angular_devkit/architect/builders/concat.ts index 55deb965fb1b..f78a35dd5c8c 100644 --- a/packages/angular_devkit/architect/builders/concat.ts +++ b/packages/angular_devkit/architect/builders/concat.ts @@ -7,8 +7,7 @@ */ import { json } from '@angular-devkit/core'; -import { from, of } from 'rxjs'; -import { concatMap, first, last, map, switchMap } from 'rxjs/operators'; +import { concatMap, first, from, last, map, of, switchMap } from 'rxjs'; import { BuilderOutput, BuilderRun, createBuilder } from '../src'; import { Schema as OperatorSchema } from './operator-schema'; diff --git a/packages/angular_devkit/architect/node/BUILD.bazel b/packages/angular_devkit/architect/node/BUILD.bazel index ef463f7d018b..0cfb49f4af2a 100644 --- a/packages/angular_devkit/architect/node/BUILD.bazel +++ b/packages/angular_devkit/architect/node/BUILD.bazel @@ -40,6 +40,7 @@ ts_library( ":node", "//packages/angular_devkit/architect", "//tests/angular_devkit/architect/node/jobs:jobs_test_lib", + "@npm//rxjs", ], ) diff --git a/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts b/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts index 38e3d07c252a..1cc7c2d9c086 100644 --- a/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts +++ b/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts @@ -8,6 +8,7 @@ import { jobs } from '@angular-devkit/architect'; import * as path from 'path'; +import { lastValueFrom } from 'rxjs'; import { NodeModuleJobRegistry } from './job-registry'; const root = path.join(__dirname, '../../../../../tests/angular_devkit/architect/node/jobs'); @@ -18,6 +19,6 @@ describe('NodeModuleJobScheduler', () => { const scheduler = new jobs.SimpleScheduler(registry); const job = scheduler.schedule(path.join(root, 'add'), [1, 2, 3]); - expect(await job.output.toPromise()).toBe(6); + expect(await lastValueFrom(job.output)).toBe(6); }); }); diff --git a/packages/angular_devkit/architect/package.json b/packages/angular_devkit/architect/package.json index c73c15bdd869..4476ee383067 100644 --- a/packages/angular_devkit/architect/package.json +++ b/packages/angular_devkit/architect/package.json @@ -7,7 +7,7 @@ "typings": "src/index.d.ts", "dependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "rxjs": "6.6.7" + "rxjs": "7.8.0" }, "builders": "./builders/builders.json" } diff --git a/packages/angular_devkit/architect/src/api.ts b/packages/angular_devkit/architect/src/api.ts index 0b0bd9d2f131..5bca7d426578 100644 --- a/packages/angular_devkit/architect/src/api.ts +++ b/packages/angular_devkit/architect/src/api.ts @@ -7,8 +7,7 @@ */ import { json, logging } from '@angular-devkit/core'; -import { Observable, SubscribableOrPromise, Subscriber, from } from 'rxjs'; -import { switchMap } from 'rxjs/operators'; +import { Observable, ObservableInput, Subscriber, from, switchMap } from 'rxjs'; import { Schema as RealBuilderInput, Target as RealTarget } from './input-schema'; import { Registry } from './jobs'; import { Schema as RealBuilderOutput } from './output-schema'; @@ -77,6 +76,12 @@ export interface BuilderRun { */ result: Promise; + /** + * The last output from a builder. This is recommended when scheduling a builder and only being + * interested in the result of that last run. + */ + lastOutput: Promise; + /** * The output(s) from the builder. A builder can have multiple outputs. * This always replay the last output when subscribed. @@ -248,10 +253,7 @@ export interface BuilderContext { /** * An accepted return value from a builder. Can be either an Observable, a Promise or a vector. */ -export type BuilderOutputLike = - | AsyncIterable - | SubscribableOrPromise - | BuilderOutput; +export type BuilderOutputLike = ObservableInput | BuilderOutput; // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isBuilderOutput(obj: any): obj is BuilderOutput { diff --git a/packages/angular_devkit/architect/src/architect.ts b/packages/angular_devkit/architect/src/architect.ts index 776b71a96ea5..4ece873d90a2 100644 --- a/packages/angular_devkit/architect/src/architect.ts +++ b/packages/angular_devkit/architect/src/architect.ts @@ -7,16 +7,20 @@ */ import { json, logging } from '@angular-devkit/core'; -import { Observable, from, merge, of, onErrorResumeNext } from 'rxjs'; import { + Observable, concatMap, first, + from, ignoreElements, last, map, + merge, + of, + onErrorResumeNext, shareReplay, takeUntil, -} from 'rxjs/operators'; +} from 'rxjs'; import { BuilderInfo, BuilderInput, diff --git a/packages/angular_devkit/architect/src/create-builder.ts b/packages/angular_devkit/architect/src/create-builder.ts index 245fe7d895d2..2f7f8c85d9df 100644 --- a/packages/angular_devkit/architect/src/create-builder.ts +++ b/packages/angular_devkit/architect/src/create-builder.ts @@ -7,8 +7,18 @@ */ import { json, logging } from '@angular-devkit/core'; -import { Observable, Subscription, from, isObservable, of, throwError } from 'rxjs'; -import { defaultIfEmpty, mergeMap, tap } from 'rxjs/operators'; +import { + Observable, + Subscription, + defaultIfEmpty, + firstValueFrom, + from, + isObservable, + mergeMap, + of, + tap, + throwError, +} from 'rxjs'; import { BuilderContext, BuilderHandlerFn, @@ -141,33 +151,39 @@ export function createBuilder('..getTargetOptions', target) - .output.toPromise(); + return firstValueFrom( + scheduler.schedule( + '..getTargetOptions', + target, + ).output, + ); }, async getProjectMetadata(target: Target | string) { - return scheduler - .schedule( + return firstValueFrom( + scheduler.schedule( '..getProjectMetadata', target, - ) - .output.toPromise(); + ).output, + ); }, async getBuilderNameForTarget(target: Target) { - return scheduler - .schedule('..getBuilderNameForTarget', target) - .output.toPromise(); + return firstValueFrom( + scheduler.schedule( + '..getBuilderNameForTarget', + target, + ).output, + ); }, async validateOptions( options: json.JsonObject, builderName: string, ) { - return scheduler - .schedule<[string, json.JsonObject], json.JsonValue, T>('..validateOptions', [ - builderName, - options, - ]) - .output.toPromise(); + return firstValueFrom( + scheduler.schedule<[string, json.JsonObject], json.JsonValue, T>( + '..validateOptions', + [builderName, options], + ).output, + ); }, reportRunning() { switch (currentState) { diff --git a/packages/angular_devkit/architect/src/index_spec.ts b/packages/angular_devkit/architect/src/index_spec.ts index 8e5ae5138a96..817cd8a28593 100644 --- a/packages/angular_devkit/architect/src/index_spec.ts +++ b/packages/angular_devkit/architect/src/index_spec.ts @@ -7,8 +7,7 @@ */ import { json, logging, schema } from '@angular-devkit/core'; -import { timer } from 'rxjs'; -import { map, take, tap, toArray } from 'rxjs/operators'; +import { firstValueFrom, lastValueFrom, map, take, tap, timer, toArray } from 'rxjs'; import { promisify } from 'util'; import { TestingArchitectHost } from '../testing/testing-architect-host'; import { BuilderOutput, BuilderRun } from './api'; @@ -173,7 +172,7 @@ describe('architect', () => { expect(called).toBe(1); expect(results).toBe(1); - const all = await run.output.pipe(toArray()).toPromise(); + const all = await lastValueFrom(run.output.pipe(toArray())); expect(called).toBe(1); expect(results).toBe(10); expect(all.length).toBe(10); @@ -200,7 +199,7 @@ describe('architect', () => { expect(called).toBe(1); expect(results).toBe(1); - const all = await run.output.pipe(toArray()).toPromise(); + const all = await lastValueFrom(run.output.pipe(toArray())); expect(called).toBe(1); expect(results).toBe(10); expect(all.length).toBe(10); @@ -325,7 +324,7 @@ describe('architect', () => { ); const run = await architect.scheduleBuilder('package:getTargetOptions', {}); - const output = await run.output.toPromise(); + const output = await lastValueFrom(run.output); expect(output.success).toBe(true); expect(options).toEqual(goldenOptions); await run.stop(); @@ -339,7 +338,7 @@ describe('architect', () => { // But this should. try { - await run2.output.toPromise(); + await lastValueFrom(run2.output); expect('THE ABOVE LINE SHOULD NOT ERROR').toBe('false'); } catch {} await run2.stop(); @@ -369,7 +368,7 @@ describe('architect', () => { ); const run = await architect.scheduleBuilder('package:do-it', {}); - const output = await run.output.toPromise(); + const output = await lastValueFrom(run.output); expect(output.success).toBe(true); expect(actualBuilderName).toEqual(builderName); await run.stop(); @@ -383,7 +382,7 @@ describe('architect', () => { // But this should. try { - await run2.output.toPromise(); + await lastValueFrom(run2.output); expect('THE ABOVE LINE SHOULD NOT ERROR').toBe('false'); } catch {} await run2.stop(); @@ -416,7 +415,7 @@ describe('architect', () => { ); const run = await architect.scheduleBuilder('package:do-it', { p1: 'hello' }); - const output = await run.output.toPromise(); + const output = await firstValueFrom(run.output); expect(output.success).toBe(true); expect(actualOptions).toEqual({ p0: 123, @@ -427,7 +426,7 @@ describe('architect', () => { // Should also error. const run2 = await architect.scheduleBuilder('package:do-it', {}); - await expectAsync(run2.output.toPromise()).toBeRejectedWith( + await expectAsync(lastValueFrom(run2.output)).toBeRejectedWith( jasmine.objectContaining({ message: jasmine.stringMatching('p1') }), ); diff --git a/packages/angular_devkit/architect/src/jobs/create-job-handler.ts b/packages/angular_devkit/architect/src/jobs/create-job-handler.ts index ba5684741c9c..36952e56a2ff 100644 --- a/packages/angular_devkit/architect/src/jobs/create-job-handler.ts +++ b/packages/angular_devkit/architect/src/jobs/create-job-handler.ts @@ -7,8 +7,17 @@ */ import { BaseException, JsonValue, isPromise, logging } from '@angular-devkit/core'; -import { Observable, Observer, Subject, Subscription, from, isObservable, of } from 'rxjs'; -import { switchMap, tap } from 'rxjs/operators'; +import { + Observable, + Observer, + Subject, + Subscription, + from, + isObservable, + of, + switchMap, + tap, +} from 'rxjs'; import { JobDescription, JobHandler, diff --git a/packages/angular_devkit/architect/src/jobs/dispatcher_spec.ts b/packages/angular_devkit/architect/src/jobs/dispatcher_spec.ts index 641c8d835cb7..2f505e1c2770 100644 --- a/packages/angular_devkit/architect/src/jobs/dispatcher_spec.ts +++ b/packages/angular_devkit/architect/src/jobs/dispatcher_spec.ts @@ -7,6 +7,7 @@ */ import { JsonValue } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { JobHandler } from './api'; import { createJobHandler } from './create-job-handler'; import { createDispatcher } from './dispatcher'; @@ -36,6 +37,6 @@ describe('createDispatcher', () => { dispatcher.setDefaultJob(add0 as JobHandler); const sum = scheduler.schedule('add', [1, 2, 3, 4]); - expect(await sum.output.toPromise()).toBe(10); + expect(await lastValueFrom(sum.output)).toBe(10); }); }); diff --git a/packages/angular_devkit/architect/src/jobs/fallback-registry.ts b/packages/angular_devkit/architect/src/jobs/fallback-registry.ts index ce6d980a0b5e..30ee0e786ba4 100644 --- a/packages/angular_devkit/architect/src/jobs/fallback-registry.ts +++ b/packages/angular_devkit/architect/src/jobs/fallback-registry.ts @@ -7,8 +7,7 @@ */ import { JsonValue } from '@angular-devkit/core'; -import { Observable, from } from 'rxjs'; -import { concatMap, first } from 'rxjs/operators'; +import { Observable, concatMap, first, from } from 'rxjs'; import { JobHandler, JobName, Registry } from './api'; /** diff --git a/packages/angular_devkit/architect/src/jobs/simple-registry_spec.ts b/packages/angular_devkit/architect/src/jobs/simple-registry_spec.ts index 4729b5171a1d..fde395d2c2ff 100644 --- a/packages/angular_devkit/architect/src/jobs/simple-registry_spec.ts +++ b/packages/angular_devkit/architect/src/jobs/simple-registry_spec.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ +import { lastValueFrom } from 'rxjs'; import { createJobHandler } from './create-job-handler'; import { SimpleJobRegistry } from './simple-registry'; @@ -26,7 +27,7 @@ describe('SimpleJobRegistry', () => { }, ); - expect(await registry.get('add').toPromise()).not.toBeNull(); - expect(await registry.get('add2').toPromise()).toBeNull(); + expect(await lastValueFrom(registry.get('add'))).not.toBeNull(); + expect(await lastValueFrom(registry.get('add2'))).toBeNull(); }); }); diff --git a/packages/angular_devkit/architect/src/jobs/simple-scheduler.ts b/packages/angular_devkit/architect/src/jobs/simple-scheduler.ts index 80a567eab26e..24d61afb7b08 100644 --- a/packages/angular_devkit/architect/src/jobs/simple-scheduler.ts +++ b/packages/angular_devkit/architect/src/jobs/simple-scheduler.ts @@ -15,20 +15,18 @@ import { Subject, Subscription, concat, - from, - merge, - of, -} from 'rxjs'; -import { concatMap, filter, first, + from, ignoreElements, map, + merge, + of, shareReplay, switchMap, tap, -} from 'rxjs/operators'; +} from 'rxjs'; import { Job, JobDescription, diff --git a/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts b/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts index e8209482f3ff..2f6c7d3dd69e 100644 --- a/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts +++ b/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts @@ -7,8 +7,7 @@ */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { EMPTY, Observable, of, timer } from 'rxjs'; -import { map, take, toArray } from 'rxjs/operators'; +import { EMPTY, Observable, lastValueFrom, map, of, take, timer, toArray } from 'rxjs'; import { promisify } from 'util'; import { JobHandlerContext, JobOutboundMessage, JobOutboundMessageKind, JobState } from './api'; import { createJobHandler } from './create-job-handler'; @@ -511,7 +510,9 @@ describe('SimpleScheduler', () => { }; registry.register('job', Object.assign(fn, { jobDescription: {} })); - const allOutput = await scheduler.schedule('job', 0).outboundBus.pipe(toArray()).toPromise(); + const allOutput = await lastValueFrom( + scheduler.schedule('job', 0).outboundBus.pipe(toArray()), + ); expect(allOutput.map((x) => ({ ...x, description: null }))).toEqual([ { kind: JobOutboundMessageKind.OnReady, description: null }, @@ -524,7 +525,9 @@ describe('SimpleScheduler', () => { const fn = () => EMPTY; registry.register('job', Object.assign(fn, { jobDescription: {} })); - const allOutput = await scheduler.schedule('job', 0).outboundBus.pipe(toArray()).toPromise(); + const allOutput = await lastValueFrom( + scheduler.schedule('job', 0).outboundBus.pipe(toArray()), + ); expect(allOutput.map((x) => ({ ...x, description: null }))).toEqual([ { kind: JobOutboundMessageKind.OnReady, description: null }, @@ -542,7 +545,9 @@ describe('SimpleScheduler', () => { }; registry.register('job', Object.assign(fn, { jobDescription: {} })); - const allOutput = await scheduler.schedule('job', 0).outboundBus.pipe(toArray()).toPromise(); + const allOutput = await lastValueFrom( + scheduler.schedule('job', 0).outboundBus.pipe(toArray()), + ); expect(allOutput.map((x) => ({ ...x, description: null }))).toEqual([ { kind: JobOutboundMessageKind.OnReady, description: null }, diff --git a/packages/angular_devkit/architect/src/jobs/strategy.ts b/packages/angular_devkit/architect/src/jobs/strategy.ts index cbd9ad13531c..33dfce0625cb 100644 --- a/packages/angular_devkit/architect/src/jobs/strategy.ts +++ b/packages/angular_devkit/architect/src/jobs/strategy.ts @@ -7,8 +7,17 @@ */ import { JsonObject, JsonValue, isJsonObject } from '@angular-devkit/core'; -import { Observable, Subject, concat, of } from 'rxjs'; -import { finalize, ignoreElements, share, shareReplay, tap } from 'rxjs/operators'; +import { + Observable, + Subject, + concat, + finalize, + ignoreElements, + of, + share, + shareReplay, + tap, +} from 'rxjs'; import { JobDescription, JobHandler, diff --git a/packages/angular_devkit/architect/src/schedule-by-name.ts b/packages/angular_devkit/architect/src/schedule-by-name.ts index f28138a6d5fb..ec9ecb0856ce 100644 --- a/packages/angular_devkit/architect/src/schedule-by-name.ts +++ b/packages/angular_devkit/architect/src/schedule-by-name.ts @@ -7,8 +7,17 @@ */ import { json, logging } from '@angular-devkit/core'; -import { EMPTY, Subscription } from 'rxjs'; -import { catchError, first, ignoreElements, map, shareReplay } from 'rxjs/operators'; +import { + EMPTY, + Subscription, + catchError, + first, + firstValueFrom, + ignoreElements, + lastValueFrom, + map, + shareReplay, +} from 'rxjs'; import { BuilderInfo, BuilderInput, @@ -43,7 +52,7 @@ export async function scheduleByName( const workspaceRoot = await options.workspaceRoot; const currentDirectory = await options.currentDirectory; - const description = await job.description.toPromise(); + const description = await firstValueFrom(job.description); const info = description.info as BuilderInfo; const id = ++_uniqueId; @@ -58,33 +67,31 @@ export async function scheduleByName( // Wait for the job to be ready. if (job.state !== JobState.Started) { - stateSubscription = job.outboundBus.subscribe( - (event) => { + stateSubscription = job.outboundBus.subscribe({ + next: (event) => { if (event.kind === JobOutboundMessageKind.Start) { job.input.next(message); } }, - () => {}, - ); + error: () => {}, + }); } else { job.input.next(message); } - const logChannelSub = job.getChannel('log').subscribe( - (entry) => { + const logChannelSub = job.getChannel('log').subscribe({ + next: (entry) => { logger.next(entry); }, - () => {}, - ); + error: () => {}, + }); - const s = job.outboundBus.subscribe({ + const outboundBusSub = job.outboundBus.subscribe({ error() {}, complete() { - s.unsubscribe(); + outboundBusSub.unsubscribe(); logChannelSub.unsubscribe(); - if (stateSubscription) { - stateSubscription.unsubscribe(); - } + stateSubscription.unsubscribe(); }, }); const output = job.output.pipe( @@ -101,7 +108,7 @@ export async function scheduleByName( // Start the builder. output.pipe(first()).subscribe({ - error() {}, + error: () => {}, }); return { @@ -109,7 +116,10 @@ export async function scheduleByName( info, // This is a getter so that it always returns the next output, and not the same one. get result() { - return output.pipe(first()).toPromise(); + return firstValueFrom(output); + }, + get lastOutput() { + return lastValueFrom(output); }, output, progress: job diff --git a/packages/angular_devkit/architect/testing/test-project-host.ts b/packages/angular_devkit/architect/testing/test-project-host.ts index b6bebbc6cfbd..aaca7b502883 100644 --- a/packages/angular_devkit/architect/testing/test-project-host.ts +++ b/packages/angular_devkit/architect/testing/test-project-host.ts @@ -18,8 +18,19 @@ import { } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; import { Stats } from 'fs'; -import { EMPTY, Observable, from, of } from 'rxjs'; -import { concatMap, delay, finalize, map, mergeMap, retry, tap } from 'rxjs/operators'; +import { + EMPTY, + Observable, + concatMap, + delay, + finalize, + from, + map, + mergeMap, + of, + retry, + tap, +} from 'rxjs'; /** * @deprecated diff --git a/packages/angular_devkit/architect_cli/bin/architect.ts b/packages/angular_devkit/architect_cli/bin/architect.ts index f19b2d842b9f..91b606ede941 100644 --- a/packages/angular_devkit/architect_cli/bin/architect.ts +++ b/packages/angular_devkit/architect_cli/bin/architect.ts @@ -150,7 +150,7 @@ async function _executeTarget( // Wait for full completion of the builder. try { - const result = await run.output.toPromise(); + const result = await run.lastOutput; if (result.success) { parentLogger.info(colors.green('SUCCESS')); } else { diff --git a/packages/angular_devkit/benchmark/package.json b/packages/angular_devkit/benchmark/package.json index 34e781d1bc24..a0bbd040b44a 100644 --- a/packages/angular_devkit/benchmark/package.json +++ b/packages/angular_devkit/benchmark/package.json @@ -14,7 +14,7 @@ "ansi-colors": "4.1.3", "pidusage": "3.0.2", "pidtree": "0.6.0", - "rxjs": "6.6.7", + "rxjs": "7.8.0", "tree-kill": "^1.2.0", "yargs-parser": "21.1.1" } diff --git a/packages/angular_devkit/benchmark/src/default-stats-capture.ts b/packages/angular_devkit/benchmark/src/default-stats-capture.ts index f4088255701a..0eba9fe3c8f9 100644 --- a/packages/angular_devkit/benchmark/src/default-stats-capture.ts +++ b/packages/angular_devkit/benchmark/src/default-stats-capture.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable } from 'rxjs'; -import { map, reduce } from 'rxjs/operators'; +import { Observable, map, reduce } from 'rxjs'; import { AggregatedProcessStats, Capture, MetricGroup } from './interfaces'; import { cumulativeMovingAverage, max } from './utils'; diff --git a/packages/angular_devkit/benchmark/src/default-stats-capture_spec.ts b/packages/angular_devkit/benchmark/src/default-stats-capture_spec.ts index baeae8e8e69f..88fd865e7a3e 100644 --- a/packages/angular_devkit/benchmark/src/default-stats-capture_spec.ts +++ b/packages/angular_devkit/benchmark/src/default-stats-capture_spec.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable } from 'rxjs'; -import { toArray } from 'rxjs/operators'; +import { Observable, toArray } from 'rxjs'; import { defaultStatsCapture } from './default-stats-capture'; import { AggregatedProcessStats } from './interfaces'; diff --git a/packages/angular_devkit/benchmark/src/main.ts b/packages/angular_devkit/benchmark/src/main.ts index 390d0799a344..1e53af142cf8 100644 --- a/packages/angular_devkit/benchmark/src/main.ts +++ b/packages/angular_devkit/benchmark/src/main.ts @@ -11,7 +11,7 @@ import { logging, tags } from '@angular-devkit/core'; import { ProcessOutput } from '@angular-devkit/core/node'; import * as ansiColors from 'ansi-colors'; import { appendFileSync, writeFileSync } from 'fs'; -import { filter, map, toArray } from 'rxjs/operators'; +import { filter, lastValueFrom, map, toArray } from 'rxjs'; import yargsParser from 'yargs-parser'; import { Command } from '../src/command'; import { defaultReporter } from '../src/default-reporter'; @@ -215,7 +215,7 @@ export async function main({ res$ = runBenchmark({ command, captures, reporters, iterations, retries, logger }); } - const res = await res$.pipe(toArray()).toPromise(); + const res = await lastValueFrom(res$.pipe(toArray())); if (res.length === 0) { return 1; } diff --git a/packages/angular_devkit/benchmark/src/monitored-process_spec.ts b/packages/angular_devkit/benchmark/src/monitored-process_spec.ts index ec8a1c9466e9..4edc7ec4c7c0 100644 --- a/packages/angular_devkit/benchmark/src/monitored-process_spec.ts +++ b/packages/angular_devkit/benchmark/src/monitored-process_spec.ts @@ -7,7 +7,7 @@ */ import { dirname } from 'path'; -import { toArray } from 'rxjs/operators'; +import { toArray } from 'rxjs'; import { Command } from './command'; import { LocalMonitoredProcess } from './monitored-process'; diff --git a/packages/angular_devkit/benchmark/src/run-benchmark-watch.ts b/packages/angular_devkit/benchmark/src/run-benchmark-watch.ts index 58c36eed0b6c..0febfc09fc17 100644 --- a/packages/angular_devkit/benchmark/src/run-benchmark-watch.ts +++ b/packages/angular_devkit/benchmark/src/run-benchmark-watch.ts @@ -8,11 +8,14 @@ import { BaseException, logging } from '@angular-devkit/core'; import { spawnSync } from 'child_process'; -import { Observable, combineLatest, forkJoin, of, throwError } from 'rxjs'; import { + Observable, + combineLatest, concatMap, filter, first, + forkJoin, + of, reduce, repeat, retryWhen, @@ -20,9 +23,10 @@ import { take, takeUntil, tap, + throwError, throwIfEmpty, timeout, -} from 'rxjs/operators'; +} from 'rxjs'; import { Command } from './command'; import { MetricGroup } from './interfaces'; import { LocalMonitoredProcess } from './monitored-process'; diff --git a/packages/angular_devkit/benchmark/src/run-benchmark.ts b/packages/angular_devkit/benchmark/src/run-benchmark.ts index c15ad5e0ca0c..59a73662c752 100644 --- a/packages/angular_devkit/benchmark/src/run-benchmark.ts +++ b/packages/angular_devkit/benchmark/src/run-benchmark.ts @@ -7,8 +7,18 @@ */ import { BaseException, logging } from '@angular-devkit/core'; -import { Observable, forkJoin, of, throwError } from 'rxjs'; -import { concatMap, map, retryWhen, take, tap, throwIfEmpty } from 'rxjs/operators'; +import { + Observable, + concatMap, + forkJoin, + map, + of, + retryWhen, + take, + tap, + throwError, + throwIfEmpty, +} from 'rxjs'; import { Command } from './command'; import { BenchmarkReporter, Capture, MetricGroup } from './interfaces'; import { LocalMonitoredProcess } from './monitored-process'; diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 736b336a671f..d0a793a929f3 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -51,7 +51,7 @@ "postcss": "8.4.21", "postcss-loader": "7.0.2", "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", + "rxjs": "7.8.0", "sass": "1.58.1", "sass-loader": "13.2.0", "semver": "7.3.8", diff --git a/packages/angular_devkit/build_angular/src/builders/browser-esbuild/tests/options/inline-style-language_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser-esbuild/tests/options/inline-style-language_spec.ts index ffbc298413c9..609b0e6f0013 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser-esbuild/tests/options/inline-style-language_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser-esbuild/tests/options/inline-style-language_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { buildEsbuildBrowser } from '../../index'; import { InlineStyleLanguage } from '../../schema'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/index.ts b/packages/angular_devkit/build_angular/src/builders/browser/index.ts index c7361ffdb311..b4ff8cf68f2e 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/index.ts @@ -10,8 +10,7 @@ import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/ar import { EmittedFiles, WebpackLoggingCallback, runWebpack } from '@angular-devkit/build-webpack'; import * as fs from 'fs'; import * as path from 'path'; -import { Observable, from } from 'rxjs'; -import { concatMap, map, switchMap } from 'rxjs/operators'; +import { Observable, concatMap, from, map, switchMap } from 'rxjs'; import webpack, { StatsCompilation } from 'webpack'; import { ExecutionTransformer } from '../../transforms'; import { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts index 049b95ee8e42..ae7df1dd3b90 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts @@ -9,8 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, normalize, relative, virtualFs } from '@angular-devkit/core'; -import { Observable } from 'rxjs'; -import { take, tap } from 'rxjs/operators'; +import { Observable, lastValueFrom, take, tap } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder allow js', () => { @@ -40,7 +39,7 @@ describe('Browser Builder allow js', () => { expect(output.success).toBe(true); const content = virtualFs.fileBufferToString( - await host.read(join(normalize(output.outputPath), 'main.js')).toPromise(), + await lastValueFrom(host.read(join(normalize(output.outputPath), 'main.js'))), ); expect(content).toContain('const a = 2'); @@ -67,7 +66,7 @@ describe('Browser Builder allow js', () => { expect(output.success).toBe(true); const content = virtualFs.fileBufferToString( - await host.read(join(normalize(output.outputPath), 'main.js')).toPromise(), + await lastValueFrom(host.read(join(normalize(output.outputPath), 'main.js'))), ); expect(content).toContain('const a = 2'); @@ -92,8 +91,8 @@ describe('Browser Builder allow js', () => { let buildCount = 1; const run = await architect.scheduleTarget(targetSpec, overrides); - await (run.output as Observable) - .pipe( + await lastValueFrom( + (run.output as Observable).pipe( tap((output) => { const path = relative(host.root(), join(normalize(output.outputPath), 'main.js')); const content = virtualFs.fileBufferToString(host.scopedSync().read(path)); @@ -114,8 +113,8 @@ describe('Browser Builder allow js', () => { }), tap((buildEvent) => expect(buildEvent.success).toBe(true)), take(2), - ) - .toPromise(); + ), + ); await run.stop(); }); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/aot_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/aot_spec.ts index ae6b620aa37c..f73a85e64362 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/aot_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/aot_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, logging, normalize, virtualFs } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder AOT', () => { @@ -30,7 +31,9 @@ describe('Browser Builder AOT', () => { expect(output.success).toBeTrue(); const fileName = join(normalize(output.outputs[0].path), 'main.js'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toContain('AppComponent_Factory'); await run.stop(); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts index 536ea0c5ae16..294891c66ba7 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, normalize, tags, virtualFs } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder base href', () => { @@ -33,7 +34,7 @@ describe('Browser Builder base href', () => { expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(fileName).toPromise()); + const content = virtualFs.fileBufferToString(await lastValueFrom(host.read(fileName))); expect(content).toMatch(//); await run.stop(); @@ -54,7 +55,7 @@ describe('Browser Builder base href', () => { expect(output.success).toBeTrue(); const fileName = join(normalize(output.outputs[0].path), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(fileName).toPromise()); + const content = virtualFs.fileBufferToString(await lastValueFrom(host.read(fileName))); expect(content).toContain(``); await run.stop(); @@ -73,7 +74,9 @@ describe('Browser Builder base href', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toContain(''); await run.stop(); }); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts index 4c5147f53b5c..bc7567a1156a 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, normalize } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder build optimizer', () => { @@ -43,7 +44,7 @@ describe('Browser Builder build optimizer', () => { expect(output.success).toBe(true); - const noBoStats = await host.stat(join(normalize(output.outputPath), 'main.js')).toPromise(); + const noBoStats = await lastValueFrom(host.stat(join(normalize(output.outputPath), 'main.js'))); if (!noBoStats) { throw new Error('Main file has no stats'); } @@ -54,7 +55,9 @@ describe('Browser Builder build optimizer', () => { const boOutput = (await run.result) as BrowserBuilderOutput; expect(boOutput.success).toBe(true); - const boStats = await host.stat(join(normalize(output.outputPath), 'main.js')).toPromise(); + const boStats = await await lastValueFrom( + host.stat(join(normalize(output.outputPath), 'main.js')), + ); if (!boStats) { throw new Error('Main file has no stats'); } diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts index 5fcdd4e2fece..1d498a0e9ff1 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput, CrossOrigin } from '@angular-devkit/build-angular'; import { join, normalize, virtualFs } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder crossOrigin', () => { @@ -35,7 +36,9 @@ describe('Browser Builder crossOrigin', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `` + `` + @@ -53,7 +56,9 @@ describe('Browser Builder crossOrigin', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `` + `` + @@ -72,7 +77,9 @@ describe('Browser Builder crossOrigin', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `` + `` + @@ -97,7 +104,9 @@ describe('Browser Builder crossOrigin', () => { expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'runtime.js'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toContain('script.crossOrigin = "use-credentials"'); await run.stop(); }); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts index c40874adb534..ad8bfd85fcee 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, normalize, virtualFs } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder deploy url', () => { @@ -40,10 +41,12 @@ describe('Browser Builder deploy url', () => { const fileName = join(outputPath, 'index.html'); const runtimeFileName = join(outputPath, 'runtime.js'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toContain('deployUrl/main.js'); const runtimeContent = virtualFs.fileBufferToString( - await host.read(normalize(runtimeFileName)).toPromise(), + await lastValueFrom(host.read(normalize(runtimeFileName))), ); expect(runtimeContent).toContain('deployUrl/'); @@ -51,7 +54,9 @@ describe('Browser Builder deploy url', () => { const output2 = (await run2.result) as BrowserBuilderOutput; expect(output2.outputPath).toEqual(outputPath); // These should be the same. - const content2 = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content2 = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content2).toContain('http://example.com/some/path/main.js'); await run.stop(); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts index eee3427740cf..6612c79030d0 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts @@ -9,6 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { join, normalize, tags, virtualFs, workspaces } from '@angular-devkit/core'; +import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder index HTML processing', () => { @@ -33,7 +34,9 @@ describe('Browser Builder index HTML processing', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `` + `` + @@ -56,7 +59,9 @@ describe('Browser Builder index HTML processing', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `` + `` + @@ -79,7 +84,9 @@ describe('Browser Builder index HTML processing', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `í ` + `` + @@ -101,7 +108,9 @@ describe('Browser Builder index HTML processing', () => { const output = (await run.result) as BrowserBuilderOutput; expect(output.success).toBe(true); const fileName = join(normalize(output.outputPath), 'index.html'); - const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise()); + const content = virtualFs.fileBufferToString( + await lastValueFrom(host.read(normalize(fileName))), + ); expect(content).toBe( `<%= csrf_meta_tags %> ` + `` + @@ -149,7 +158,7 @@ describe('Browser Builder index HTML processing', () => { await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); const outputIndexPath = join(host.root(), 'dist', 'index.html'); - const content = await host.read(normalize(outputIndexPath)).toPromise(); + const content = await lastValueFrom(host.read(normalize(outputIndexPath))); expect(virtualFs.fileBufferToString(content)).toBe( `<%= csrf_meta_tags %> ` + `` + @@ -196,7 +205,7 @@ describe('Browser Builder index HTML processing', () => { await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); const outputIndexPath = join(host.root(), 'dist', 'main.html'); - const content = await host.read(normalize(outputIndexPath)).toPromise(); + const content = await lastValueFrom(host.read(normalize(outputIndexPath))); expect(virtualFs.fileBufferToString(content)).toBe( ` ` + `` + @@ -243,7 +252,7 @@ describe('Browser Builder index HTML processing', () => { await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); const outputIndexPath = join(host.root(), 'dist', 'extra', 'main.html'); - const content = await host.read(normalize(outputIndexPath)).toPromise(); + const content = await lastValueFrom(host.read(normalize(outputIndexPath))); expect(virtualFs.fileBufferToString(content)).toBe( ` ` + `` + diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts index fa0f7c381b1a..165581b5cf1b 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts @@ -9,7 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { TestProjectHost } from '@angular-devkit/architect/testing'; import { logging } from '@angular-devkit/core'; -import { debounceTime, take, tap } from 'rxjs/operators'; +import { debounceTime, take, tap } from 'rxjs'; import { browserBuild, createArchitect, diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/poll_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/poll_spec.ts index 74ed6da46d43..1360dd892c2e 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/poll_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/poll_spec.ts @@ -7,7 +7,7 @@ */ import { Architect } from '@angular-devkit/architect'; -import { debounceTime, take, tap, timeout } from 'rxjs/operators'; +import { debounceTime, take, tap, timeout } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; import { BUILD_TIMEOUT } from '../index'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/rebuild_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/rebuild_spec.ts index 3fd1698e08d2..7405c82d7480 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/rebuild_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/rebuild_spec.ts @@ -8,7 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { join, logging, normalize, virtualFs } from '@angular-devkit/core'; -import { debounceTime, take, takeWhile, tap, timeout } from 'rxjs/operators'; +import { debounceTime, take, takeWhile, tap, timeout } from 'rxjs'; import { createArchitect, host, diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/replacements_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/replacements_spec.ts index 39841f9aeb1f..2736b5a2bcfc 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/replacements_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/replacements_spec.ts @@ -8,8 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { logging, normalize, virtualFs } from '@angular-devkit/core'; -import { of, race } from 'rxjs'; -import { delay, filter, map, take, takeUntil, takeWhile, tap, timeout } from 'rxjs/operators'; +import { delay, filter, map, of, race, take, takeUntil, takeWhile, tap, timeout } from 'rxjs'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder file replacements', () => { @@ -182,7 +181,7 @@ describe('Browser Builder file replacements', () => { const logger = new logging.Logger(''); // Race between a timeout and the expected log entry. - const stop$ = race( + const stop$ = race( of(null).pipe(delay((45000 * 2) / 3)), logger.pipe( filter((entry) => entry.message.includes(expectedError)), diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/resolve-json-module_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/resolve-json-module_spec.ts index c47fd03462e7..b5872189eaa4 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/resolve-json-module_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/resolve-json-module_spec.ts @@ -8,7 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { join, virtualFs } from '@angular-devkit/core'; -import { take, tap } from 'rxjs/operators'; +import { take, tap } from 'rxjs'; import { createArchitect, host, outputPath } from '../../../testing/test-utils'; describe('Browser Builder resolve json module', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/service-worker_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/service-worker_spec.ts index 185b0f172b54..05cf08019e0b 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/service-worker_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/service-worker_spec.ts @@ -8,7 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { normalize, virtualFs } from '@angular-devkit/core'; -import { debounceTime, take, tap } from 'rxjs/operators'; +import { debounceTime, take, tap } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder service worker', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts index 5ff6302007f5..4b7c91dcfa94 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts @@ -9,7 +9,7 @@ import { Architect } from '@angular-devkit/architect'; import { BrowserBuilderOutput } from '@angular-devkit/build-angular'; import { logging } from '@angular-devkit/core'; -import { debounceTime, take, tap } from 'rxjs/operators'; +import { debounceTime, take, tap } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder unused files warnings', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/web-worker_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/web-worker_spec.ts index 489e1a392aee..66812ec442dd 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/web-worker_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/web-worker_spec.ts @@ -8,8 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { join, logging, virtualFs } from '@angular-devkit/core'; -import { timer } from 'rxjs'; -import { debounceTime, map, switchMap, takeWhile, tap } from 'rxjs/operators'; +import { debounceTime, lastValueFrom, map, switchMap, takeWhile, tap, timer } from 'rxjs'; import { browserBuild, createArchitect, host, outputPath } from '../../../testing/test-utils'; describe('Browser Builder Web Worker support', () => { @@ -150,8 +149,8 @@ describe('Browser Builder Web Worker support', () => { // The current linux-based CI environments may not fully settled in regards to filesystem // changes from previous tests which reuse the same directory and fileset. // The initial delay helps mitigate false positive rebuild triggers in such scenarios. - const { run } = await timer(1000) - .pipe( + const { run } = await lastValueFrom( + timer(1000).pipe( switchMap(() => architect.scheduleTarget(target, overrides)), switchMap((run) => run.output.pipe(map((output) => ({ run, output })))), debounceTime(1000), @@ -176,8 +175,8 @@ describe('Browser Builder Web Worker support', () => { } }), takeWhile(() => phase < 3), - ) - .toPromise(); + ), + ); await run.stop(); }); }); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/index_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/index_watch_spec.ts index b023f6f3833f..1ca361f1b3fd 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/index_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/index_watch_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { BUILD_TIMEOUT, buildWebpackBrowser } from '../../index'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/localize_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/localize_watch_spec.ts index 6b1e00abab3b..5d97477b5706 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/localize_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/localize_watch_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { BUILD_TIMEOUT, buildWebpackBrowser } from '../../index'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts index cb553c366c80..4a8bb8abc79b 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts @@ -7,7 +7,7 @@ */ import { logging } from '@angular-devkit/core'; -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { BUILD_TIMEOUT, buildWebpackBrowser } from '../../index'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/inline-style-language_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/inline-style-language_spec.ts index 7bd712dd422b..2f1e4e58808d 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/inline-style-language_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/inline-style-language_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { buildWebpackBrowser } from '../../index'; import { InlineStyleLanguage } from '../../schema'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/verbose_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/verbose_spec.ts index 598a2b44a21e..fd5d8f2567a4 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/verbose_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/verbose_spec.ts @@ -7,7 +7,7 @@ */ import { logging } from '@angular-devkit/core'; -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { BUILD_TIMEOUT, buildWebpackBrowser } from '../../index'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/watch_spec.ts index d9cb3f57399a..6fa791c86046 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/watch_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { buildWebpackBrowser } from '../../index'; import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts index 637f0f75229e..a07862bf85ca 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/index.ts @@ -14,8 +14,7 @@ import { } from '@angular-devkit/build-webpack'; import { json, tags } from '@angular-devkit/core'; import * as path from 'path'; -import { Observable, from } from 'rxjs'; -import { concatMap, switchMap } from 'rxjs/operators'; +import { Observable, concatMap, from, switchMap } from 'rxjs'; import * as url from 'url'; import webpack from 'webpack'; import webpackDevServer from 'webpack-dev-server'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts index 41a493ae8a36..d781882d8e08 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts @@ -9,7 +9,7 @@ import { Architect, BuilderRun } from '@angular-devkit/architect'; // eslint-disable-next-line import/no-extraneous-dependencies import puppeteer, { Browser, Page } from 'puppeteer'; -import { debounceTime, switchMap, take } from 'rxjs/operators'; +import { debounceTime, switchMap, take } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; /* eslint-disable @typescript-eslint/no-explicit-any */ diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts index cc6981723e5a..24ec00b3535f 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable max-len */ import fetch from 'node-fetch'; // eslint-disable-line import/no-extraneous-dependencies -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { URL } from 'url'; import { serveWebpackBrowser } from '../../index'; import { diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts index 630bd63e0f2c..f0eb409eb20d 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable max-len */ import fetch from 'node-fetch'; // eslint-disable-line import/no-extraneous-dependencies -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { URL } from 'url'; import { serveWebpackBrowser } from '../../index'; import { diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index ae19605a0edd..3315415db23b 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -12,7 +12,7 @@ import { createServer } from 'http'; import { createProxyServer } from 'http-proxy'; import { AddressInfo } from 'net'; import puppeteer, { Browser, Page } from 'puppeteer'; -import { count, debounceTime, finalize, switchMap, take, timeout } from 'rxjs/operators'; +import { count, debounceTime, finalize, switchMap, take, timeout } from 'rxjs'; import { serveWebpackBrowser } from '../../index'; import { BASE_OPTIONS, diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts index 51d663d61dcf..325855b47be5 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts @@ -8,7 +8,7 @@ // eslint-disable-next-line import/no-extraneous-dependencies import fetch from 'node-fetch'; -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { concatMap, count, take, timeout } from 'rxjs'; import { serveWebpackBrowser } from '../../index'; import { executeOnceAndFetch } from '../execute-fetch'; import { diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts index e62476d5912f..1ba246304bf6 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts @@ -7,7 +7,7 @@ */ import fetch, { RequestInit, Response } from 'node-fetch'; // eslint-disable-line import/no-extraneous-dependencies -import { mergeMap, take, timeout } from 'rxjs/operators'; +import { lastValueFrom, mergeMap, take, timeout } from 'rxjs'; import { URL } from 'url'; import { BuilderHarness, @@ -20,9 +20,8 @@ export async function executeOnceAndFetch( url: string, options?: Partial & { request?: RequestInit }, ): Promise { - return harness - .execute() - .pipe( + return lastValueFrom( + harness.execute().pipe( timeout(30000), mergeMap(async (executionResult) => { let response = undefined; @@ -36,6 +35,6 @@ export async function executeOnceAndFetch( return { ...executionResult, response }; }), take(1), - ) - .toPromise(); + ), + ); } diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/watch_spec.ts index 4da51b5ba03e..7fe43481ced1 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/watch_spec.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { TimeoutError } from 'rxjs'; -import { concatMap, count, take, timeout } from 'rxjs/operators'; +import { TimeoutError, concatMap, count, take, timeout } from 'rxjs'; import { serveWebpackBrowser } from '../../index'; import { BASE_OPTIONS, diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts index 77c1667836e8..4fe63607496e 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/index.ts @@ -13,6 +13,7 @@ import { BuildResult, runWebpack } from '@angular-devkit/build-webpack'; import { JsonObject } from '@angular-devkit/core'; import * as fs from 'fs'; import * as path from 'path'; +import { lastValueFrom } from 'rxjs'; import webpack, { Configuration } from 'webpack'; import { ExecutionTransformer } from '../../transforms'; import { createI18nOptions } from '../../utils/i18n-options'; @@ -242,14 +243,12 @@ export async function execute( const localizeToolsModule = await loadEsmModule( '@angular/localize/tools', ); - const webpackResult = await runWebpack( - (await transforms?.webpackConfiguration?.(config)) || config, - context, - { + const webpackResult = await lastValueFrom( + runWebpack((await transforms?.webpackConfiguration?.(config)) || config, context, { logging: createWebpackLoggingCallback(builderOptions, context.logger), webpackFactory: webpack, - }, - ).toPromise(); + }), + ); // Set the outputPath to the extraction output location for downstream consumers webpackResult.outputPath = outFile; diff --git a/packages/angular_devkit/build_angular/src/builders/karma/index.ts b/packages/angular_devkit/build_angular/src/builders/karma/index.ts index 1eb78886d1da..5dbc0c590858 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/index.ts @@ -11,8 +11,7 @@ import { strings } from '@angular-devkit/core'; import type { Config, ConfigOptions } from 'karma'; import { createRequire } from 'module'; import * as path from 'path'; -import { Observable, from } from 'rxjs'; -import { defaultIfEmpty, switchMap } from 'rxjs/operators'; +import { Observable, defaultIfEmpty, from, switchMap } from 'rxjs'; import { Configuration } from 'webpack'; import { ExecutionTransformer } from '../../transforms'; import { purgeStaleBuildCache } from '../../utils/purge-cache'; diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/code-coverage_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/code-coverage_spec.ts index da0e83528562..43e0a88d6552 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/code-coverage_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/code-coverage_spec.ts @@ -7,7 +7,7 @@ */ import { tags } from '@angular-devkit/core'; -import { last, tap } from 'rxjs/operators'; +import { last, tap } from 'rxjs'; import { promisify } from 'util'; import { execute } from '../../index'; import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeBuilder } from '../setup'; @@ -95,7 +95,7 @@ describeBuilder(execute, KARMA_BUILDER_INFO, (harness) => { `title = 'app'`, tags.stripIndents` title = 'app'; - + async foo() { return 'foo'; } diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/rebuilds_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/rebuilds_spec.ts index 10bd13eabf76..b29c085ad915 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/rebuilds_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/rebuilds_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { concatMap, count, debounceTime, take, timeout } from 'rxjs/operators'; +import { concatMap, count, debounceTime, take, timeout } from 'rxjs'; import { execute } from '../../index'; import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeBuilder } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts index 0122bce230e4..eeb945a68ae1 100644 --- a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts @@ -8,8 +8,7 @@ import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import { join, resolve } from 'path'; -import { Observable, from, of } from 'rxjs'; -import { catchError, mapTo, switchMap } from 'rxjs/operators'; +import { Observable, catchError, from, mapTo, of, switchMap } from 'rxjs'; import { normalizeCacheOptions } from '../../utils/normalize-cache'; import { purgeStaleBuildCache } from '../../utils/purge-cache'; import { Schema as NgPackagrBuilderOptions } from './schema'; diff --git a/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts index 14ab1f699d52..d31f81fed1cc 100644 --- a/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts @@ -17,7 +17,7 @@ import { virtualFs, workspaces, } from '@angular-devkit/core'; -import { debounceTime, map, take, tap } from 'rxjs/operators'; +import { debounceTime, map, take, tap } from 'rxjs'; // Default timeout for large specs is 2.5 minutes. jasmine.DEFAULT_TIMEOUT_INTERVAL = 150000; diff --git a/packages/angular_devkit/build_angular/src/builders/server/index.ts b/packages/angular_devkit/build_angular/src/builders/server/index.ts index 057ec10dedf2..e148bf4a1c70 100644 --- a/packages/angular_devkit/build_angular/src/builders/server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/server/index.ts @@ -9,8 +9,7 @@ import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import { runWebpack } from '@angular-devkit/build-webpack'; import * as path from 'path'; -import { Observable, from } from 'rxjs'; -import { concatMap } from 'rxjs/operators'; +import { Observable, concatMap, from } from 'rxjs'; import webpack, { Configuration } from 'webpack'; import { ExecutionTransformer } from '../../transforms'; import { diff --git a/packages/angular_devkit/build_angular/src/testing/builder-harness.ts b/packages/angular_devkit/build_angular/src/testing/builder-harness.ts index 267c43ebe8e8..c46c5c17363f 100644 --- a/packages/angular_devkit/build_angular/src/testing/builder-harness.ts +++ b/packages/angular_devkit/build_angular/src/testing/builder-harness.ts @@ -25,8 +25,19 @@ import { getSystemPath, json, logging } from '@angular-devkit/core'; import { existsSync, readFileSync, readdirSync } from 'node:fs'; import fs from 'node:fs/promises'; import { dirname, join } from 'node:path'; -import { Observable, Subject, from as observableFrom, of as observableOf } from 'rxjs'; -import { catchError, finalize, first, map, mergeMap, shareReplay } from 'rxjs/operators'; +import { + Observable, + Subject, + catchError, + finalize, + firstValueFrom, + lastValueFrom, + map, + mergeMap, + from as observableFrom, + of as observableOf, + shareReplay, +} from 'rxjs'; import { BuilderWatcherFactory, WatcherNotifier } from './file-watching'; export interface BuilderHarnessExecutionResult { @@ -281,7 +292,7 @@ export class BuilderHarness { options?: Partial, ): Promise { // Return the first result - return this.execute(options).pipe(first()).toPromise(); + return firstValueFrom(this.execute(options)); } async appendToFile(path: string, content: string): Promise { @@ -451,7 +462,10 @@ class HarnessBuilderContext implements BuilderContext { }, output: output.pipe(shareReplay()), get result() { - return this.output.pipe(first()).toPromise(); + return firstValueFrom(this.output); + }, + get lastOutput() { + return lastValueFrom(this.output); }, }; diff --git a/packages/angular_devkit/build_angular/src/testing/test-utils.ts b/packages/angular_devkit/build_angular/src/testing/test-utils.ts index c83d76f8d9c3..6ad88f9dce0e 100644 --- a/packages/angular_devkit/build_angular/src/testing/test-utils.ts +++ b/packages/angular_devkit/build_angular/src/testing/test-utils.ts @@ -20,6 +20,7 @@ import { virtualFs, workspaces, } from '@angular-devkit/core'; +import { firstValueFrom } from 'rxjs'; // Default timeout for large specs is 2.5 minutes. jasmine.DEFAULT_TIMEOUT_INTERVAL = 150000; @@ -87,7 +88,7 @@ export async function browserBuild( expect(path).toBeTruthy(); const outputPath = normalize(path); - const fileNames = await host.list(outputPath).toPromise(); + const fileNames = await firstValueFrom(host.list(outputPath)); const files = fileNames.reduce((acc: { [name: string]: Promise }, path) => { let cache: Promise | null = null; Object.defineProperty(acc, path, { @@ -99,11 +100,9 @@ export async function browserBuild( if (!fileNames.includes(path)) { return Promise.reject('No file named ' + path); } - - cache = host - .read(join(outputPath, path)) - .toPromise() - .then((content) => virtualFs.fileBufferToString(content)); + cache = firstValueFrom(host.read(join(outputPath, path))).then((content) => + virtualFs.fileBufferToString(content), + ); return cache; }, diff --git a/packages/angular_devkit/build_angular/src/webpack/plugins/hmr/hmr-accept.ts b/packages/angular_devkit/build_angular/src/webpack/plugins/hmr/hmr-accept.ts index ef0e5a7cd162..c305f028ef90 100644 --- a/packages/angular_devkit/build_angular/src/webpack/plugins/hmr/hmr-accept.ts +++ b/packages/angular_devkit/build_angular/src/webpack/plugins/hmr/hmr-accept.ts @@ -14,7 +14,7 @@ import { isDevMode, ɵresetCompiledComponents, } from '@angular/core'; -import { filter, take } from 'rxjs/operators'; +import { filter, take } from 'rxjs'; // For the time being we cannot use the DOM lib because it conflicts with @types/node, // In future when we remove `yarn admin build` we should have this as a seperate compilation unit diff --git a/packages/angular_devkit/build_webpack/package.json b/packages/angular_devkit/build_webpack/package.json index c566017e1f9f..fbf1893f4e83 100644 --- a/packages/angular_devkit/build_webpack/package.json +++ b/packages/angular_devkit/build_webpack/package.json @@ -8,7 +8,7 @@ "builders": "builders.json", "dependencies": { "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "rxjs": "6.6.7" + "rxjs": "7.8.0" }, "devDependencies": { "@angular-devkit/core": "0.0.0-PLACEHOLDER", diff --git a/packages/angular_devkit/build_webpack/src/webpack-dev-server/index.ts b/packages/angular_devkit/build_webpack/src/webpack-dev-server/index.ts index 8cd9febfd58e..91eb42c11b74 100644 --- a/packages/angular_devkit/build_webpack/src/webpack-dev-server/index.ts +++ b/packages/angular_devkit/build_webpack/src/webpack-dev-server/index.ts @@ -8,8 +8,7 @@ import { BuilderContext, createBuilder } from '@angular-devkit/architect'; import { resolve as pathResolve } from 'path'; -import { Observable, from, isObservable, of } from 'rxjs'; -import { switchMap } from 'rxjs/operators'; +import { Observable, from, isObservable, of, switchMap } from 'rxjs'; import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; import { getEmittedFiles, getWebpackConfig } from '../utils'; diff --git a/packages/angular_devkit/build_webpack/src/webpack/index.ts b/packages/angular_devkit/build_webpack/src/webpack/index.ts index cdb9f9b2ce28..da7746550d99 100644 --- a/packages/angular_devkit/build_webpack/src/webpack/index.ts +++ b/packages/angular_devkit/build_webpack/src/webpack/index.ts @@ -8,8 +8,7 @@ import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import { resolve as pathResolve } from 'path'; -import { Observable, from, isObservable, of } from 'rxjs'; -import { switchMap } from 'rxjs/operators'; +import { Observable, from, isObservable, of, switchMap } from 'rxjs'; import webpack from 'webpack'; import { EmittedFiles, getEmittedFiles, getWebpackConfig } from '../utils'; import { Schema as RealWebpackBuilderSchema } from './schema'; diff --git a/packages/angular_devkit/core/node/cli-logger.ts b/packages/angular_devkit/core/node/cli-logger.ts index 2ff2e1d145ef..fdca5f580d74 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 { filter } from 'rxjs/operators'; +import { filter } from 'rxjs'; import { logging } from '../src'; export interface ProcessOutput { diff --git a/packages/angular_devkit/core/node/host.ts b/packages/angular_devkit/core/node/host.ts index 00dc05dda331..5c026cbadba5 100644 --- a/packages/angular_devkit/core/node/host.ts +++ b/packages/angular_devkit/core/node/host.ts @@ -21,8 +21,7 @@ import { writeFileSync, } from 'node:fs'; import { dirname as pathDirname } from 'node:path'; -import { Observable, from as observableFrom } from 'rxjs'; -import { map, mergeMap, publish, refCount } from 'rxjs/operators'; +import { Observable, map, mergeMap, from as observableFrom, publish, refCount } from 'rxjs'; import { Path, PathFragment, dirname, fragment, getSystemPath, normalize, virtualFs } from '../src'; async function exists(path: PathLike): Promise { @@ -142,7 +141,9 @@ export class NodeJsAsyncHost implements virtualFs.Host { }); }); - return () => watcher.close(); + return () => { + void watcher.close(); + }; }).pipe(publish(), refCount()); } } @@ -257,7 +258,9 @@ export class NodeJsSyncHost implements virtualFs.Host { }); }); - return () => watcher.close(); + return () => { + void watcher.close(); + }; }).pipe(publish(), refCount()); } } diff --git a/packages/angular_devkit/core/package.json b/packages/angular_devkit/core/package.json index 22ddb4c1494f..2a50b340946c 100644 --- a/packages/angular_devkit/core/package.json +++ b/packages/angular_devkit/core/package.json @@ -11,7 +11,7 @@ "ajv-formats": "2.1.1", "ajv": "8.12.0", "jsonc-parser": "3.2.0", - "rxjs": "6.6.7", + "rxjs": "7.8.0", "source-map": "0.7.4" }, "peerDependencies": { diff --git a/packages/angular_devkit/core/src/json/schema/interface.ts b/packages/angular_devkit/core/src/json/schema/interface.ts index 70b0489aaf39..5d2667ea6eef 100644 --- a/packages/angular_devkit/core/src/json/schema/interface.ts +++ b/packages/angular_devkit/core/src/json/schema/interface.ts @@ -7,7 +7,7 @@ */ import { ErrorObject, Format } from 'ajv'; -import { Observable, SubscribableOrPromise } from 'rxjs'; +import { Observable, ObservableInput } from 'rxjs'; import { JsonArray, JsonObject, JsonValue } from '../utils'; export type JsonPointer = string & { @@ -69,7 +69,7 @@ export interface PromptDefinition { export type PromptProvider = ( definitions: Array, -) => SubscribableOrPromise<{ [id: string]: JsonValue }>; +) => ObservableInput<{ [id: string]: JsonValue }>; export interface SchemaRegistry { compile(schema: Object): Promise; diff --git a/packages/angular_devkit/core/src/json/schema/registry.ts b/packages/angular_devkit/core/src/json/schema/registry.ts index 9544c0d51ef9..d426677e1df2 100644 --- a/packages/angular_devkit/core/src/json/schema/registry.ts +++ b/packages/angular_devkit/core/src/json/schema/registry.ts @@ -10,7 +10,7 @@ import Ajv, { SchemaObjCxt, ValidateFunction } from 'ajv'; import ajvAddFormats from 'ajv-formats'; import * as http from 'http'; import * as https from 'https'; -import { Observable, from, isObservable } from 'rxjs'; +import { Observable, from, isObservable, lastValueFrom } from 'rxjs'; import * as Url from 'url'; import { BaseException } from '../../exception'; import { PartiallyOrderedSet, deepCopy } from '../../utils'; @@ -130,7 +130,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { } if (isObservable(handlerResult)) { - handlerResult = handlerResult.toPromise(); + handlerResult = lastValueFrom(handlerResult); } const value = await handlerResult; @@ -320,13 +320,9 @@ export class CoreSchemaRegistry implements SchemaRegistry { // Apply pre-validation transforms if (validationOptions.applyPreTransforms) { for (const visitor of this._pre.values()) { - data = await visitJson( - data, - visitor, - schema, - this._resolver.bind(this), - validator, - ).toPromise(); + data = await lastValueFrom( + visitJson(data, visitor, schema, this._resolver.bind(this), validator), + ); } } @@ -343,7 +339,9 @@ export class CoreSchemaRegistry implements SchemaRegistry { return value; }; if (typeof schema === 'object') { - await visitJson(data, visitor, schema, this._resolver.bind(this), validator).toPromise(); + await lastValueFrom( + visitJson(data, visitor, schema, this._resolver.bind(this), validator), + ); } const definitions = schemaInfo.promptDefinitions.filter( @@ -373,13 +371,9 @@ export class CoreSchemaRegistry implements SchemaRegistry { // Apply post-validation transforms if (validationOptions.applyPostTransforms) { for (const visitor of this._post.values()) { - data = await visitJson( - data, - visitor, - schema, - this._resolver.bind(this), - validator, - ).toPromise(); + data = await lastValueFrom( + visitJson(data, visitor, schema, this._resolver.bind(this), validator), + ); } } @@ -579,7 +573,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { return; } - const answers = await from(provider(prompts)).toPromise(); + const answers = await lastValueFrom(from(provider(prompts))); for (const path in answers) { const pathFragments = path.split('/').slice(1); @@ -643,8 +637,8 @@ export class CoreSchemaRegistry implements SchemaRegistry { } let value = source(schema); - if (isObservable<{}>(value)) { - value = await value.toPromise(); + if (isObservable(value)) { + value = (await lastValueFrom(value)) as {}; } CoreSchemaRegistry._set(data, fragments, value); diff --git a/packages/angular_devkit/core/src/json/schema/visitor.ts b/packages/angular_devkit/core/src/json/schema/visitor.ts index c3f7ad18df78..8d0781b2cdec 100644 --- a/packages/angular_devkit/core/src/json/schema/visitor.ts +++ b/packages/angular_devkit/core/src/json/schema/visitor.ts @@ -6,8 +6,17 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable, concat, from, isObservable, of as observableOf } from 'rxjs'; -import { concatMap, ignoreElements, mergeMap, tap } from 'rxjs/operators'; +import { + Observable, + concat, + concatMap, + from, + ignoreElements, + isObservable, + mergeMap, + of as observableOf, + tap, +} from 'rxjs'; import { JsonArray, JsonObject, JsonValue } from '../utils'; import { JsonPointer, JsonSchemaVisitor, JsonVisitor } from './interface'; import { buildJsonPointer, joinJsonPointer } from './pointer'; @@ -69,7 +78,7 @@ function _visitJsonRecursive( const value = visitor(json, ptr, schema as JsonObject, root); - return (isObservable(value) ? value : observableOf(value)).pipe( + return (isObservable(value) ? value : observableOf(value)).pipe( concatMap((value) => { if (Array.isArray(value)) { return concat( diff --git a/packages/angular_devkit/core/src/logger/indent.ts b/packages/angular_devkit/core/src/logger/indent.ts index 18c132de10b2..be114c3c81d9 100644 --- a/packages/angular_devkit/core/src/logger/indent.ts +++ b/packages/angular_devkit/core/src/logger/indent.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { map } from 'rxjs/operators'; +import { map } from 'rxjs'; import { Logger } from './logger'; /** diff --git a/packages/angular_devkit/core/src/logger/indent_spec.ts b/packages/angular_devkit/core/src/logger/indent_spec.ts index 3d1f922dce92..621cd4076297 100644 --- a/packages/angular_devkit/core/src/logger/indent_spec.ts +++ b/packages/angular_devkit/core/src/logger/indent_spec.ts @@ -7,16 +7,14 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { toArray } from 'rxjs/operators'; +import { lastValueFrom, toArray } from 'rxjs'; import { IndentLogger } from './indent'; import { LogEntry, Logger } from './logger'; describe('IndentSpec', () => { it('works', (done: DoneFn) => { const logger = new IndentLogger('test'); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: LogEntry[]) => { expect(observed).toEqual([ jasmine.objectContaining({ message: 'test', level: 'info', name: 'test' }) as any, diff --git a/packages/angular_devkit/core/src/logger/logger_spec.ts b/packages/angular_devkit/core/src/logger/logger_spec.ts index d3da5b331e85..7bcb362701c3 100644 --- a/packages/angular_devkit/core/src/logger/logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/logger_spec.ts @@ -7,16 +7,14 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { toArray } from 'rxjs/operators'; +import { lastValueFrom, toArray } from 'rxjs'; import { JsonValue } from '../json/utils'; import { Logger } from './logger'; describe('Logger', () => { it('works', (done: DoneFn) => { const logger = new Logger('test'); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: JsonValue[]) => { expect(observed).toEqual([ jasmine.objectContaining({ message: 'hello', level: 'debug', name: 'test' }), @@ -36,9 +34,7 @@ describe('Logger', () => { it('works with children', (done: DoneFn) => { const logger = new Logger('test'); let hasCompleted = false; - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: JsonValue[]) => { expect(observed).toEqual([ jasmine.objectContaining({ message: 'hello', level: 'debug', name: 'child' }) as any, @@ -62,9 +58,7 @@ describe('Logger', () => { const logger = new Logger('test'); logger.debug('woah'); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: JsonValue[]) => { expect(observed).toEqual([ jasmine.objectContaining({ message: 'hello', level: 'debug', name: 'test' }) as any, 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 f7639f6c254d..e12a62838587 100644 --- a/packages/angular_devkit/core/src/logger/null-logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/null-logger_spec.ts @@ -6,16 +6,14 @@ * found in the LICENSE file at https://angular.io/license */ -import { toArray } from 'rxjs/operators'; +import { lastValueFrom, toArray } from 'rxjs'; import { LogEntry, Logger } from './logger'; import { NullLogger } from './null-logger'; describe('NullLogger', () => { it('works', (done: DoneFn) => { const logger = new NullLogger(); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: LogEntry[]) => { expect(observed).toEqual([]); }) @@ -31,9 +29,7 @@ describe('NullLogger', () => { it('nullifies children', (done: DoneFn) => { const logger = new Logger('test'); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .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 f7b1268ece32..fa06bed552f7 100644 --- a/packages/angular_devkit/core/src/logger/transform-logger_spec.ts +++ b/packages/angular_devkit/core/src/logger/transform-logger_spec.ts @@ -7,7 +7,7 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { filter, map, toArray } from 'rxjs/operators'; +import { filter, lastValueFrom, map, toArray } from 'rxjs'; import { LogEntry } from './logger'; import { TransformLogger } from './transform-logger'; @@ -19,9 +19,7 @@ describe('TransformLogger', () => { map((entry) => ((entry.message += '1'), entry)), ); }); - logger - .pipe(toArray()) - .toPromise() + lastValueFrom(logger.pipe(toArray())) .then((observed: LogEntry[]) => { expect(observed).toEqual([ jasmine.objectContaining({ message: 'world1', level: 'info', name: 'test' }) as any, diff --git a/packages/angular_devkit/core/src/virtual-fs/host/record.ts b/packages/angular_devkit/core/src/virtual-fs/host/record.ts index 037789f4bdd9..7e33b7d4f59f 100644 --- a/packages/angular_devkit/core/src/virtual-fs/host/record.ts +++ b/packages/angular_devkit/core/src/virtual-fs/host/record.ts @@ -6,8 +6,19 @@ * found in the LICENSE file at https://angular.io/license */ -import { EMPTY, Observable, concat, from as observableFrom, of, throwError } from 'rxjs'; -import { concatMap, map, reduce, switchMap, toArray } from 'rxjs/operators'; +import { + EMPTY, + Observable, + concat, + concatMap, + map, + from as observableFrom, + of, + reduce, + switchMap, + throwError, + toArray, +} from 'rxjs'; import { FileAlreadyExistException, FileDoesNotExistException, diff --git a/packages/angular_devkit/core/src/virtual-fs/host/safe.ts b/packages/angular_devkit/core/src/virtual-fs/host/safe.ts index c39362033ab2..28880a41a701 100644 --- a/packages/angular_devkit/core/src/virtual-fs/host/safe.ts +++ b/packages/angular_devkit/core/src/virtual-fs/host/safe.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable, of } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { Observable, catchError, of } from 'rxjs'; import { Path, PathFragment } from '../path'; import { FileBuffer, HostCapabilities, ReadonlyHost, Stats } from './interface'; diff --git a/packages/angular_devkit/core/src/workspace/host.ts b/packages/angular_devkit/core/src/workspace/host.ts index e0c84b789a76..d2aff0e18dbc 100644 --- a/packages/angular_devkit/core/src/workspace/host.ts +++ b/packages/angular_devkit/core/src/workspace/host.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ +import { lastValueFrom } from 'rxjs'; import { normalize, virtualFs } from '../virtual-fs'; export interface WorkspaceHost { @@ -22,16 +23,16 @@ export interface WorkspaceHost { export function createWorkspaceHost(host: virtualFs.Host): WorkspaceHost { const workspaceHost: WorkspaceHost = { async readFile(path: string): Promise { - const data = await host.read(normalize(path)).toPromise(); + const data = await lastValueFrom(host.read(normalize(path))); return virtualFs.fileBufferToString(data); }, async writeFile(path: string, data: string): Promise { - return host.write(normalize(path), virtualFs.stringToFileBuffer(data)).toPromise(); + return lastValueFrom(host.write(normalize(path), virtualFs.stringToFileBuffer(data))); }, async isDirectory(path: string): Promise { try { - return await host.isDirectory(normalize(path)).toPromise(); + return await lastValueFrom(host.isDirectory(normalize(path))); } catch { // some hosts throw if path does not exist return false; @@ -39,7 +40,7 @@ export function createWorkspaceHost(host: virtualFs.Host): WorkspaceHost { }, async isFile(path: string): Promise { try { - return await host.isFile(normalize(path)).toPromise(); + return await lastValueFrom(host.isFile(normalize(path))); } catch { // some hosts throw if path does not exist return false; diff --git a/packages/angular_devkit/schematics/package.json b/packages/angular_devkit/schematics/package.json index 2d962010f2d9..16a8521ad7e9 100644 --- a/packages/angular_devkit/schematics/package.json +++ b/packages/angular_devkit/schematics/package.json @@ -17,6 +17,6 @@ "jsonc-parser": "3.2.0", "magic-string": "0.29.0", "ora": "5.4.1", - "rxjs": "6.6.7" + "rxjs": "7.8.0" } } diff --git a/packages/angular_devkit/schematics/src/engine/engine.ts b/packages/angular_devkit/schematics/src/engine/engine.ts index d89690c31932..04e86973ad4f 100644 --- a/packages/angular_devkit/schematics/src/engine/engine.ts +++ b/packages/angular_devkit/schematics/src/engine/engine.ts @@ -7,8 +7,7 @@ */ import { BaseException, PriorityQueue, logging } from '@angular-devkit/core'; -import { Observable, from as observableFrom } from 'rxjs'; -import { concatMap } from 'rxjs/operators'; +import { Observable, concatMap, from as observableFrom } from 'rxjs'; import { Url } from 'url'; import { MergeStrategy } from '../tree/interface'; import { NullTree } from '../tree/null'; diff --git a/packages/angular_devkit/schematics/src/engine/schematic.ts b/packages/angular_devkit/schematics/src/engine/schematic.ts index f98e46c69f9d..db035b41a067 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'; -import { concatMap, first, map } from 'rxjs/operators'; +import { Observable, concatMap, first, map } from 'rxjs'; import { callRule } from '../rules/call'; import { Tree } from '../tree/interface'; import { ScopedTree } from '../tree/scoped'; diff --git a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts index 4d69673f4e5d..c561e02120b9 100644 --- a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts +++ b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { logging } from '@angular-devkit/core'; -import { of as observableOf } from 'rxjs'; +import { lastValueFrom, of as observableOf } from 'rxjs'; import { chain } from '../rules/base'; import { MergeStrategy, Tree } from '../tree/interface'; import { branch, empty } from '../tree/static'; @@ -30,11 +30,11 @@ const context = { logger: new logging.NullLogger(), strategy: MergeStrategy.Default, }; -const engine: Engine = ({ +const engine: Engine = { createContext: (schematic: Schematic<{}, {}>) => ({ engine, schematic, ...context }), transformOptions: (_: {}, options: {}) => observableOf(options), defaultMergeStrategy: MergeStrategy.Default, -} as {}) as Engine; +} as {} as Engine; const collection = { name: 'collection', description: 'description', @@ -64,9 +64,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - schematic - .call({}, observableOf(empty())) - .toPromise() + lastValueFrom(schematic.call({}, observableOf(empty()))) .then((x) => { expect(files(inner!)).toEqual([]); expect(files(x)).toEqual(['/a/b/c']); @@ -89,9 +87,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - schematic - .call({}, observableOf(empty())) - .toPromise() + lastValueFrom(schematic.call({}, observableOf(empty()))) .then((x) => { expect(files(inner!)).toEqual([]); expect(files(x)).toEqual([]); @@ -141,9 +137,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - schematic - .call({}, observableOf(empty())) - .toPromise() + lastValueFrom(schematic.call({}, observableOf(empty()))) .then((_x) => { expect(chainCount).toBe(1); expect(oneCount).toBe(1); @@ -165,9 +159,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - schematic - .call({}, observableOf(empty()), {}, { scope: 'base' }) - .toPromise() + lastValueFrom(schematic.call({}, observableOf(empty()), {}, { scope: 'base' })) .then((x) => { expect(files(x)).toEqual(['/base/a/b/c']); }) diff --git a/packages/angular_devkit/schematics/src/rules/base.ts b/packages/angular_devkit/schematics/src/rules/base.ts index 739be3940cbf..40aaf77de12c 100644 --- a/packages/angular_devkit/schematics/src/rules/base.ts +++ b/packages/angular_devkit/schematics/src/rules/base.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable, concat } from 'rxjs'; -import { map, mapTo, toArray } from 'rxjs/operators'; +import { Observable, concat, map, mapTo, toArray } from 'rxjs'; import { FileOperator, Rule, Source } from '../engine/interface'; import { SchematicsException } from '../exception/exception'; import { FilterHostTree, HostTree } from '../tree/host-tree'; diff --git a/packages/angular_devkit/schematics/src/rules/base_spec.ts b/packages/angular_devkit/schematics/src/rules/base_spec.ts index 9a687cb6c71e..8c0ed380cfc5 100644 --- a/packages/angular_devkit/schematics/src/rules/base_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/base_spec.ts @@ -9,7 +9,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { Path, virtualFs } from '@angular-devkit/core'; import { HostTree, MergeStrategy, partitionApplyMerge } from '@angular-devkit/schematics'; -import { of as observableOf } from 'rxjs'; +import { lastValueFrom, of as observableOf } from 'rxjs'; import { Rule, SchematicContext, Source } from '../engine/interface'; import { Tree } from '../tree/interface'; import { empty } from '../tree/static'; @@ -36,8 +36,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]), observableOf(tree0), context) - .toPromise() + lastValueFrom(callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context)) .then((result) => { expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -66,7 +65,7 @@ describe('chain', () => { yield rule2; } - const result = await callRule(chain(generateRules()), tree0, context).toPromise(); + const result = await lastValueFrom(callRule(chain(generateRules()), tree0, context)); expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -93,7 +92,7 @@ describe('chain', () => { yield rule2; } - const result = await callRule(chain(generateRules()), tree0, context).toPromise(); + const result = await lastValueFrom(callRule(chain(generateRules()), tree0, context)); expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -114,8 +113,7 @@ describe('chain', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), observableOf(tree2)); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context) - .toPromise() + lastValueFrom(callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context)) .then((result) => { expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -140,8 +138,7 @@ describe('apply', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), tree2); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - callSource(apply(source, [rule0, rule1, rule2]), context) - .toPromise() + lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)) .then((result) => { expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -164,8 +161,7 @@ describe('apply', () => { 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) - .toPromise() + lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)) .then((result) => { expect(result).not.toBe(tree0); expect(rulesCalled[0]).toBe(tree0); @@ -199,8 +195,9 @@ describe('partitionApplyMerge', () => { return empty(); }; - callRule(partitionApplyMerge(predicate, ruleYes, ruleNo), observableOf(tree), context) - .toPromise() + lastValueFrom( + callRule(partitionApplyMerge(predicate, ruleYes, ruleNo), observableOf(tree), context), + ) .then((result) => { expect(result.exists('/test1')).toBe(false); expect(result.exists('/test2')).toBe(false); @@ -216,8 +213,7 @@ describe('applyToSubtree', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(applyToSubtree('a/b', [move('x')]), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(applyToSubtree('a/b', [move('x')]), observableOf(tree), context)) .then((result) => { expect(result.exists('a/b/x/file1')).toBe(true); expect(result.exists('a/b/x/file2')).toBe(true); diff --git a/packages/angular_devkit/schematics/src/rules/call.ts b/packages/angular_devkit/schematics/src/rules/call.ts index 346517f98cef..fd80dd68dd9b 100644 --- a/packages/angular_devkit/schematics/src/rules/call.ts +++ b/packages/angular_devkit/schematics/src/rules/call.ts @@ -7,8 +7,7 @@ */ import { BaseException } from '@angular-devkit/core'; -import { Observable, defer, isObservable } from 'rxjs'; -import { defaultIfEmpty, mergeMap } from 'rxjs/operators'; +import { Observable, defaultIfEmpty, defer, isObservable, lastValueFrom, mergeMap } from 'rxjs'; import { Rule, SchematicContext, Source } from '../engine/interface'; import { Tree, TreeSymbol } from '../tree/interface'; @@ -49,10 +48,10 @@ export class InvalidSourceResultException extends BaseException { export function callSource(source: Source, context: SchematicContext): Observable { return defer(async () => { - let result = source(context); + let result: Tree | Observable | undefined = source(context); if (isObservable(result)) { - result = await result.pipe(defaultIfEmpty()).toPromise(); + result = await lastValueFrom(result.pipe(defaultIfEmpty(undefined))); } if (result && TreeSymbol in result) { @@ -88,7 +87,7 @@ async function callRuleAsync(rule: Rule, tree: Tree, context: SchematicContext): } if (isObservable(result)) { - result = await result.pipe(defaultIfEmpty(tree)).toPromise(); + result = await lastValueFrom(result.pipe(defaultIfEmpty(tree))); } if (result && TreeSymbol in result) { diff --git a/packages/angular_devkit/schematics/src/rules/move_spec.ts b/packages/angular_devkit/schematics/src/rules/move_spec.ts index 7854eb050b43..20012fd87140 100644 --- a/packages/angular_devkit/schematics/src/rules/move_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/move_spec.ts @@ -7,7 +7,7 @@ */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { of as observableOf } from 'rxjs'; +import { lastValueFrom, of as observableOf } from 'rxjs'; import { SchematicContext } from '../engine/interface'; import { HostTree } from '../tree/host-tree'; import { callRule } from './call'; @@ -22,8 +22,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('sub'), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(move('sub'), observableOf(tree), context)) .then((result) => { expect(result.exists('sub/a/b/file1')).toBe(true); expect(result.exists('sub/a/b/file2')).toBe(true); @@ -38,8 +37,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('a/b', 'sub'), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(move('a/b', 'sub'), observableOf(tree), context)) .then((result) => { expect(result.exists('sub/file1')).toBe(true); expect(result.exists('sub/file2')).toBe(true); @@ -54,8 +52,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('a/b', 'a/b/c'), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(move('a/b', 'a/b/c'), observableOf(tree), context)) .then((result) => { expect(result.exists('a/b/c/file1')).toBe(true); expect(result.exists('a/b/c/file2')).toBe(true); @@ -70,8 +67,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move('a/b', 'a'), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(move('a/b', 'a'), observableOf(tree), context)) .then((result) => { expect(result.exists('file1')).toBe(false); expect(result.exists('file2')).toBe(false); @@ -88,8 +84,7 @@ describe('move', () => { tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - callRule(move(''), observableOf(tree), context) - .toPromise() + lastValueFrom(callRule(move(''), observableOf(tree), context)) .then((result) => { expect(result.exists('a/b/file1')).toBe(true); expect(result.exists('a/b/file2')).toBe(true); diff --git a/packages/angular_devkit/schematics/src/rules/schematic.ts b/packages/angular_devkit/schematics/src/rules/schematic.ts index f7f2deb75319..67380e9e22be 100644 --- a/packages/angular_devkit/schematics/src/rules/schematic.ts +++ b/packages/angular_devkit/schematics/src/rules/schematic.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { of as observableOf } from 'rxjs'; -import { last, map } from 'rxjs/operators'; +import { last, map, of as observableOf } from 'rxjs'; import { ExecutionOptions, Rule, SchematicContext } from '../engine/interface'; import { MergeStrategy, Tree } from '../tree/interface'; import { branch } from '../tree/static'; diff --git a/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts b/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts index 22f4b86acb13..970adc9136d5 100644 --- a/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts +++ b/packages/angular_devkit/schematics/src/sink/dryrun_spec.ts @@ -7,7 +7,7 @@ */ import { Path, normalize, virtualFs } from '@angular-devkit/core'; -import { toArray } from 'rxjs/operators'; +import { lastValueFrom, toArray } from 'rxjs'; import { HostCreateTree, HostTree } from '../tree/host-tree'; import { DryRunSink } from './dryrun'; @@ -36,8 +36,8 @@ describe('DryRunSink', () => { const sink = new DryRunSink(new virtualFs.SimpleMemoryHost()); const [infos] = await Promise.all([ - sink.reporter.pipe(toArray()).toPromise(), - sink.commit(tree).toPromise(), + lastValueFrom(sink.reporter.pipe(toArray())), + lastValueFrom(sink.commit(tree)), ]); expect(infos.length).toBe(4); @@ -68,8 +68,8 @@ describe('DryRunSink', () => { const sink = new DryRunSink(outputHost); const [infos] = await Promise.all([ - sink.reporter.pipe(toArray()).toPromise(), - sink.commit(tree).toPromise(), + lastValueFrom(sink.reporter.pipe(toArray())), + lastValueFrom(sink.commit(tree)), ]); expect(infos.map((x) => x.kind)).toEqual(['create', 'update']); diff --git a/packages/angular_devkit/schematics/src/sink/host.ts b/packages/angular_devkit/schematics/src/sink/host.ts index bcb193dea207..a83fc568503e 100644 --- a/packages/angular_devkit/schematics/src/sink/host.ts +++ b/packages/angular_devkit/schematics/src/sink/host.ts @@ -10,11 +10,12 @@ import { Path, virtualFs } from '@angular-devkit/core'; import { EMPTY, Observable, + concatMap, concat as concatObservables, from as observableFrom, of as observableOf, + reduce, } from 'rxjs'; -import { concatMap, reduce } from 'rxjs/operators'; import { CreateFileAction } from '../tree/action'; import { UpdateBufferBase } from '../utility/update-buffer'; import { SimpleSinkBase } from './sink'; diff --git a/packages/angular_devkit/schematics/src/sink/sink.ts b/packages/angular_devkit/schematics/src/sink/sink.ts index 95b31a2f54bb..bf3ca9a207eb 100644 --- a/packages/angular_devkit/schematics/src/sink/sink.ts +++ b/packages/angular_devkit/schematics/src/sink/sink.ts @@ -9,12 +9,16 @@ import { Observable, concat, + concatMap, + defaultIfEmpty, defer as deferObservable, + ignoreElements, isObservable, + map, + mergeMap, from as observableFrom, of as observableOf, } from 'rxjs'; -import { concatMap, ignoreElements, map, mergeMap } from 'rxjs/operators'; import { FileAlreadyExistException, FileDoesNotExistException } from '../exception/exception'; import { Action, @@ -167,7 +171,7 @@ export abstract class SimpleSinkBase implements Sink { ), deferObservable(() => this._done()), deferObservable(() => this.postCommit() || observableOf(null)), - ).pipe(ignoreElements()); + ).pipe(ignoreElements(), defaultIfEmpty(undefined)); } } diff --git a/packages/angular_devkit/schematics/src/tree/host-tree.ts b/packages/angular_devkit/schematics/src/tree/host-tree.ts index edcda81b5baf..c37d9d11027d 100644 --- a/packages/angular_devkit/schematics/src/tree/host-tree.ts +++ b/packages/angular_devkit/schematics/src/tree/host-tree.ts @@ -18,8 +18,7 @@ import { virtualFs, } from '@angular-devkit/core'; import { ParseError, parse as jsoncParse, printParseErrorCode } from 'jsonc-parser'; -import { EMPTY, Observable } from 'rxjs'; -import { concatMap, map, mergeMap } from 'rxjs/operators'; +import { EMPTY, Observable, concatMap, map, mergeMap } from 'rxjs'; import { TextDecoder } from 'util'; import { ContentHasMutatedException, diff --git a/packages/angular_devkit/schematics/src/workflow/base.ts b/packages/angular_devkit/schematics/src/workflow/base.ts index 1ae31f823416..13a39ba1a4f3 100644 --- a/packages/angular_devkit/schematics/src/workflow/base.ts +++ b/packages/angular_devkit/schematics/src/workflow/base.ts @@ -7,8 +7,20 @@ */ import { logging, schema, virtualFs } from '@angular-devkit/core'; -import { EMPTY, Observable, Subject, concat, from, of, throwError } from 'rxjs'; -import { concatMap, defaultIfEmpty, ignoreElements, last, tap } from 'rxjs/operators'; +import { + EMPTY, + Observable, + Subject, + concat, + concatMap, + defaultIfEmpty, + from, + ignoreElements, + last, + of, + tap, + throwError, +} from 'rxjs'; import { Engine, EngineHost, SchematicEngine } from '../engine'; import { UnsuccessfulWorkflowExecution } from '../exception/exception'; import { standardFormats } from '../formats'; @@ -183,7 +195,7 @@ export abstract class BaseWorkflow implements Workflow { .executePostTasks() .pipe( tap({ complete: () => this._lifeCycle.next({ kind: 'post-tasks-end' }) }), - defaultIfEmpty(), + defaultIfEmpty(undefined), last(), ); }), diff --git a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts index a39cf0c5733b..e4879d46a65c 100644 --- a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts +++ b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts @@ -7,7 +7,7 @@ */ import { logging, schema } from '@angular-devkit/core'; -import { Observable, from, of as observableOf } from 'rxjs'; +import { Observable, from, lastValueFrom, of as observableOf } from 'rxjs'; import { Collection, DelegateTree, @@ -86,7 +86,7 @@ export class SchematicTestRunner { const host = observableOf(tree || new HostTree()); this._engineHost.clearTasks(); - const newTree = await schematic.call(opts || {}, host, { logger: this._logger }).toPromise(); + const newTree = await lastValueFrom(schematic.call(opts || {}, host, { logger: this._logger })); return new UnitTestTree(newTree); } @@ -113,7 +113,7 @@ export class SchematicTestRunner { const host = observableOf(tree || new HostTree()); this._engineHost.clearTasks(); - const newTree = await schematic.call(opts || {}, host, { logger: this._logger }).toPromise(); + const newTree = await lastValueFrom(schematic.call(opts || {}, host, { logger: this._logger })); return new UnitTestTree(newTree); } diff --git a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts index 22d4bf450518..c356e2e64525 100644 --- a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ -import { Observable, of as observableOf, throwError } from 'rxjs'; -import { mergeMap } from 'rxjs/operators'; +import { Observable, mergeMap, of as observableOf, throwError } from 'rxjs'; import { Url } from 'url'; import { CollectionDescription, 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 4ee6f2e27bc8..faa126d37755 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 @@ -10,7 +10,7 @@ import { BaseException, JsonObject, normalize, virtualFs } from '@angular-devkit import { NodeJsSyncHost } from '@angular-devkit/core/node'; import { existsSync, statSync } from 'fs'; import { dirname, isAbsolute, join, resolve } from 'path'; -import { Observable, isObservable, from as observableFrom, throwError } from 'rxjs'; +import { Observable, isObservable, lastValueFrom, from as observableFrom, throwError } from 'rxjs'; import { Url } from 'url'; import { HostCreateTree, @@ -307,7 +307,7 @@ export abstract class FileSystemEngineHostBase implements FileSystemEngineHost { for (const transformer of this._transforms) { const transformerResult = transformer(schematic, transformedOptions, context); transformedOptions = await (isObservable(transformerResult) - ? transformerResult.toPromise() + ? lastValueFrom(transformerResult) : transformerResult); } diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host.ts index e4087a544e9b..51b956975221 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host.ts @@ -8,8 +8,7 @@ import { existsSync } from 'fs'; import { join } from 'path'; -import { Observable, from, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { Observable, catchError, from, throwError } from 'rxjs'; import { RuleFactory, TaskExecutor, UnregisteredTaskException } from '../src'; import { FileSystemCollectionDesc, FileSystemSchematicDesc } from './description'; import { ExportStringRef } from './export-ref'; diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts index fe9d5f22ee2b..41a575fea316 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts @@ -11,7 +11,7 @@ import { normalize, virtualFs } from '@angular-devkit/core'; import { HostSink, HostTree, SchematicEngine } from '@angular-devkit/schematics'; import { FileSystemEngineHost } from '@angular-devkit/schematics/tools'; import * as path from 'path'; -import { from, of as observableOf } from 'rxjs'; +import { from, lastValueFrom, of as observableOf } from 'rxjs'; describe('FileSystemEngineHost', () => { // We need to resolve a file that actually exists, and not just a folder. @@ -305,11 +305,9 @@ describe('FileSystemEngineHost', () => { const collection = engine.createCollection('extra-properties'); const schematic = collection.createSchematic('schematic1'); - schematic - .call({}, observableOf(new HostTree(host))) - .toPromise() + lastValueFrom(schematic.call({}, observableOf(new HostTree(host)))) .then((tree) => { - return new HostSink(host).commit(tree).toPromise(); + return lastValueFrom(new HostSink(host).commit(tree)); }) .then(() => { expect(host.files as string[]).toEqual(['/extra-schematic']); @@ -331,12 +329,10 @@ describe('FileSystemEngineHost', () => { engineHost.createTaskExecutor('file-tasks/file-task.js').subscribe((executor) => { expect(executor).toBeTruthy(); - from(executor(undefined, undefined as any)) - .toPromise() - .then( - () => done.fail, - () => done(), - ); + lastValueFrom(from(executor(undefined, undefined as any))).then( + () => done.fail, + () => done(), + ); }, done.fail); }); @@ -348,10 +344,10 @@ describe('FileSystemEngineHost', () => { const collection = engine.createCollection('file-tasks'); const schematic = collection.createSchematic('schematic-1'); - schematic - .call({}, observableOf(new HostTree(host))) - .toPromise() - .then((tree) => new HostSink(host).commit(tree).toPromise()) + lastValueFrom(schematic.call({}, observableOf(new HostTree(host)))) + .then((tree) => { + return lastValueFrom(new HostSink(host).commit(tree)); + }) .then(() => engine.executePostTasks().toPromise()) .then(() => done.fail()) .catch((reason) => { diff --git a/tests/legacy-cli/e2e/utils/process.ts b/tests/legacy-cli/e2e/utils/process.ts index 02b24edd5a5e..a76c6ed83933 100644 --- a/tests/legacy-cli/e2e/utils/process.ts +++ b/tests/legacy-cli/e2e/utils/process.ts @@ -1,10 +1,8 @@ import * as ansiColors from 'ansi-colors'; import { spawn, SpawnOptions } from 'child_process'; import * as child_process from 'child_process'; -import { concat, defer, EMPTY, from } from 'rxjs'; -import { repeat, takeLast } from 'rxjs/operators'; +import { concat, defer, EMPTY, from, lastValueFrom, catchError, repeat } from 'rxjs'; import { getGlobalVariable, getGlobalVariablesEnv } from './env'; -import { catchError } from 'rxjs/operators'; import treeKill from 'tree-kill'; import { delimiter, join, resolve } from 'path'; @@ -299,15 +297,15 @@ export function execAndWaitForOutputToMatch( // happened just before the build (e.g. `git clean`). // This seems to be due to host file system differences, see // https://nodejs.org/docs/latest/api/fs.html#fs_caveats - return concat( - from(_exec({ waitForMatch: match, env }, cmd, args)), - defer(() => waitForAnyProcessOutputToMatch(match, 2500)).pipe( - repeat(20), - catchError(() => EMPTY), + return lastValueFrom( + concat( + from(_exec({ waitForMatch: match, env }, cmd, args)), + defer(() => waitForAnyProcessOutputToMatch(match, 2500)).pipe( + repeat(20), + catchError(() => EMPTY), + ), ), - ) - .pipe(takeLast(1)) - .toPromise(); + ); } else { return _exec({ waitForMatch: match, env }, cmd, args); } diff --git a/yarn.lock b/yarn.lock index 18f82f1409f2..bc125122cfac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -121,7 +121,6 @@ "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#26fc36d66eb747768721cdb9eff3385187456a32": version "0.0.0-98bdad2a2ff3cd66c78048a3d2f48d50389c494a" - uid "26fc36d66eb747768721cdb9eff3385187456a32" resolved "https://github.com/angular/dev-infra-private-build-tooling-builds.git#26fc36d66eb747768721cdb9eff3385187456a32" dependencies: "@angular-devkit/build-angular" "15.2.0-next.3" @@ -307,7 +306,6 @@ "@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#fa4d4694084d46886ca28fd09768a7df69b5b84d": version "0.0.0-98bdad2a2ff3cd66c78048a3d2f48d50389c494a" - uid fa4d4694084d46886ca28fd09768a7df69b5b84d resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#fa4d4694084d46886ca28fd09768a7df69b5b84d" dependencies: "@yarnpkg/lockfile" "^1.1.0" @@ -2968,9 +2966,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.0.tgz#21724cfe12b96696feafab05829695d4d7bd7c48" - integrity sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA== + version "8.21.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" + integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -3025,11 +3023,12 @@ integrity sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w== "@types/inquirer@^8.0.0": - version "8.2.5" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.5.tgz#c508423bcc11126db278170ab07347783ac2300c" - integrity sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg== + version "8.2.6" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.6.tgz#abd41a5fb689c7f1acb12933d787d4262a02a0ab" + integrity sha512-3uT88kxg8lNzY8ay2ZjP44DKcRaTGztqeIvN2zHvhzIBH/uAPaL75aBtdNRKbA7xXoMbBt5kX0M00VKAnfOYlA== dependencies: "@types/through" "*" + rxjs "^7.2.0" "@types/is-windows@^1.0.0": version "1.0.0" @@ -4419,7 +4418,7 @@ browser-sync@^2.27.7: ua-parser-js "1.0.2" yargs "^17.3.1" -browserslist@*, browserslist@4.21.5, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: +browserslist@*, browserslist@4.21.5, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -4580,9 +4579,9 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: - version "1.0.30001451" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz#2e197c698fc1373d63e1406d6607ea4617c613f1" - integrity sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w== + version "1.0.30001452" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz#dff7b8bb834b3a91808f0a9ff0453abb1fbba02a" + integrity sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w== caseless@~0.12.0: version "0.12.0" @@ -4976,11 +4975,11 @@ copy-webpack-plugin@11.0.0: serialize-javascript "^6.0.0" core-js-compat@^3.25.1: - version "3.27.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.2.tgz#607c50ad6db8fd8326af0b2883ebb987be3786da" - integrity sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg== + version "3.28.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.28.0.tgz#c08456d854608a7264530a2afa281fadf20ecee6" + integrity sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg== dependencies: - browserslist "^4.21.4" + browserslist "^4.21.5" core-js@3.27.0: version "3.27.0" @@ -5407,9 +5406,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.284: - version "1.4.295" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66" - integrity sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw== + version "1.4.296" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.296.tgz#dbc84a25c25a432a12fbf62903cae4a87461eb8c" + integrity sha512-i/6Q+Y9bluDa2a0NbMvdtG5TuS/1Fr3TKK8L+7UUL9QjRS5iFJzCC3r70xjyOnLiYG8qGV4/mMpe6HuAbdJW4w== emoji-regex@^8.0.0: version "8.0.0" @@ -8642,9 +8641,9 @@ npm-user-validate@^1.0.1: integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm@^8.11.0: - version "8.19.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.3.tgz#adb51bf8886d519dd4df162726d0ad157ecfa272" - integrity sha512-0QjmyPtDxSyMWWD8I91QGbrgx9KzbV6C9FK1liEb/K0zppiZkr5KxXc990G+LzPwBHDfRjUBlO9T1qZ08vl9mA== + version "8.19.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.4.tgz#65ad6a2dfdd157a4ef4467fb86e8dcd35a43493f" + integrity sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/arborist" "^5.6.3" @@ -10006,6 +10005,13 @@ rxjs@6.6.7: dependencies: tslib "^1.9.0" +rxjs@7.8.0, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.5.6: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + rxjs@^5.5.6: version "5.5.12" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" @@ -10013,13 +10019,6 @@ rxjs@^5.5.6: dependencies: symbol-observable "1.0.1" -rxjs@^7.5.5, rxjs@^7.5.6: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10071,7 +10070,7 @@ sass@1.57.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@1.58.1: +sass@1.58.1, sass@^1.55.0: version "1.58.1" resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.1.tgz#17ab0390076a50578ed0733f1cc45429e03405f6" integrity sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg== @@ -10080,15 +10079,6 @@ sass@1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@^1.55.0: - version "1.58.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.0.tgz#ee8aea3ad5ea5c485c26b3096e2df6087d0bb1cc" - integrity sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - "sauce-connect-proxy@https://saucelabs.com/downloads/sc-4.8.1-linux.tar.gz": version "0.0.0" resolved "https://saucelabs.com/downloads/sc-4.8.1-linux.tar.gz#9c16682e4c9716734432789884f868212f95f563" @@ -11686,9 +11676,9 @@ ws@8.9.0: integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== ws@>=8.11.0, ws@^8.4.2: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" - integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== + version "8.12.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" + integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== ws@~8.11.0: version "8.11.0"