diff --git a/.changeset/light-snakes-exercise.md b/.changeset/light-snakes-exercise.md new file mode 100644 index 0000000000..45bd37cf27 --- /dev/null +++ b/.changeset/light-snakes-exercise.md @@ -0,0 +1,16 @@ +--- +'@backstage/backend-common': minor +'@backstage/backend-tasks': minor +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-search-backend-node': patch +--- + +Changed to use native `AbortController` and `AbortSignal` from Node.js, instead +of the one from `node-abort-controller`. This is possible now that the minimum +supported Node.js version of the project is 16. + +Note that their interfaces are very slightly different, but typically not in a +way that matters to consumers. If you see any typescript errors as a direct +result from this, they are compatible with each other in the ways that we +interact with them, and should be possible to type-cast across without ill +effects. diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index a063815056..784f3295c6 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -6,8 +6,6 @@ /// /// -import { AbortController as AbortController_2 } from 'node-abort-controller'; -import { AbortSignal as AbortSignal_2 } from 'node-abort-controller'; import aws from 'aws-sdk'; import { AwsS3Integration } from '@backstage/integration'; import { AzureIntegration } from '@backstage/integration'; @@ -200,7 +198,7 @@ export interface ContainerRunner { // @alpha export interface Context { - readonly abortSignal: AbortSignal_2; + readonly abortSignal: AbortSignal; readonly deadline: Date | undefined; value(key: string): T | undefined; } @@ -210,7 +208,7 @@ export class Contexts { static root(): Context; static withAbort( parentCtx: Context, - source: AbortController_2 | AbortSignal_2, + source: AbortController | AbortSignal, ): Context; static withTimeoutDuration(parentCtx: Context, timeout: Duration): Context; static withTimeoutMillis(parentCtx: Context, timeout: number): Context; @@ -544,7 +542,7 @@ export type ReadTreeOptions = { }, ): boolean; etag?: string; - signal?: AbortSignal_2; + signal?: AbortSignal; }; // @public @@ -598,7 +596,7 @@ export type ReadTreeResponseFile = { // @public export type ReadUrlOptions = { etag?: string; - signal?: AbortSignal_2; + signal?: AbortSignal; }; // @public @@ -657,7 +655,7 @@ export type RunContainerOptions = { // @public export type SearchOptions = { etag?: string; - signal?: AbortSignal_2; + signal?: AbortSignal; }; // @public diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 9fadc0aeb7..2d9f02d576 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -73,7 +73,6 @@ "minimatch": "^5.0.0", "minimist": "^1.2.5", "morgan": "^1.10.0", - "node-abort-controller": "^3.0.1", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", "raw-body": "^2.4.1", diff --git a/packages/backend-common/src/context/AbortContext.test.ts b/packages/backend-common/src/context/AbortContext.test.ts index f69e282d28..a6c522ffcf 100644 --- a/packages/backend-common/src/context/AbortContext.test.ts +++ b/packages/backend-common/src/context/AbortContext.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { AbortController } from 'node-abort-controller'; import { AbortContext } from './AbortContext'; import { RootContext } from './RootContext'; diff --git a/packages/backend-common/src/context/AbortContext.ts b/packages/backend-common/src/context/AbortContext.ts index 8a119358a6..92735fbcc6 100644 --- a/packages/backend-common/src/context/AbortContext.ts +++ b/packages/backend-common/src/context/AbortContext.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { AbortController, AbortSignal } from 'node-abort-controller'; import { Context } from './types'; /** diff --git a/packages/backend-common/src/context/Contexts.test.ts b/packages/backend-common/src/context/Contexts.test.ts index cbd61d20a9..c895b3bb49 100644 --- a/packages/backend-common/src/context/Contexts.test.ts +++ b/packages/backend-common/src/context/Contexts.test.ts @@ -15,7 +15,6 @@ */ import { Duration } from 'luxon'; -import { AbortController } from 'node-abort-controller'; import { Contexts } from './Contexts'; describe('Contexts', () => { diff --git a/packages/backend-common/src/context/Contexts.ts b/packages/backend-common/src/context/Contexts.ts index e22a76f673..4eeb56b029 100644 --- a/packages/backend-common/src/context/Contexts.ts +++ b/packages/backend-common/src/context/Contexts.ts @@ -15,7 +15,6 @@ */ import { Duration } from 'luxon'; -import { AbortController, AbortSignal } from 'node-abort-controller'; import { AbortContext } from './AbortContext'; import { RootContext } from './RootContext'; import { Context } from './types'; diff --git a/packages/backend-common/src/context/RootContext.ts b/packages/backend-common/src/context/RootContext.ts index 61962380a4..aa2213ccab 100644 --- a/packages/backend-common/src/context/RootContext.ts +++ b/packages/backend-common/src/context/RootContext.ts @@ -14,29 +14,36 @@ * limitations under the License. */ -import { AbortSignal } from 'node-abort-controller'; import { Context } from './types'; /** - * Since the root context can never abort, and since nobody is every meant to - * dispatch events through it, we can use a static dummy instance for + * Since the root context can never abort, and since nobody is ever meant to + * dispatch events through it, we can use a static fake instance for * efficiency. */ -const dummyAbortSignal: AbortSignal = Object.freeze({ - aborted: false, - addEventListener() {}, - removeEventListener() {}, - dispatchEvent() { - return true; - }, - onabort: null, -}); +const fakeAbortController = new AbortController(); +const fakeAbortSignal: AbortSignal = Object.freeze( + Object.assign( + { + aborted: false, + reason: undefined, + throwIfAborted() {}, + onabort() {}, + addEventListener() {}, + removeEventListener() {}, + dispatchEvent() { + return true; + }, + }, + fakeAbortController.signal, + ), +); /** * An empty root context. */ export class RootContext implements Context { - readonly abortSignal = dummyAbortSignal; + readonly abortSignal = fakeAbortSignal; readonly deadline = undefined; value(_key: string): T | undefined { diff --git a/packages/backend-common/src/context/ValueContext.ts b/packages/backend-common/src/context/ValueContext.ts index 441aaec984..c8e4426d05 100644 --- a/packages/backend-common/src/context/ValueContext.ts +++ b/packages/backend-common/src/context/ValueContext.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { AbortSignal } from 'node-abort-controller'; import { Context } from './types'; /** diff --git a/packages/backend-common/src/context/types.ts b/packages/backend-common/src/context/types.ts index 664745bbf6..3b53225163 100644 --- a/packages/backend-common/src/context/types.ts +++ b/packages/backend-common/src/context/types.ts @@ -14,8 +14,6 @@ * limitations under the License. */ -import { AbortSignal } from 'node-abort-controller'; - /** * A context that is meant to be passed as a ctx variable down the call chain, * to pass along scoped information and abort signals. diff --git a/packages/backend-common/src/reading/types.ts b/packages/backend-common/src/reading/types.ts index 2ebf38c08a..bce737f3c7 100644 --- a/packages/backend-common/src/reading/types.ts +++ b/packages/backend-common/src/reading/types.ts @@ -17,7 +17,6 @@ import { Readable } from 'stream'; import { Logger } from 'winston'; import { Config } from '@backstage/config'; -import { AbortSignal } from 'node-abort-controller'; /** * A generic interface for fetching plain data from URLs. diff --git a/packages/backend-tasks/api-report.md b/packages/backend-tasks/api-report.md index 8f53d1e5ae..f7b4782263 100644 --- a/packages/backend-tasks/api-report.md +++ b/packages/backend-tasks/api-report.md @@ -3,7 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AbortSignal as AbortSignal_2 } from 'node-abort-controller'; import { Config } from '@backstage/config'; import { DatabaseManager } from '@backstage/backend-common'; import { Duration } from 'luxon'; @@ -29,14 +28,14 @@ export function readTaskScheduleDefinitionFromConfig( // @public export type TaskFunction = - | ((abortSignal: AbortSignal_2) => void | Promise) + | ((abortSignal: AbortSignal) => void | Promise) | (() => void | Promise); // @public export interface TaskInvocationDefinition { fn: TaskFunction; id: string; - signal?: AbortSignal_2; + signal?: AbortSignal; } // @public diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 1e209a4d10..78a29c122a 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -41,7 +41,6 @@ "knex": "^2.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", - "node-abort-controller": "^3.0.1", "uuid": "^8.0.0", "winston": "^3.2.1", "zod": "^3.9.5" diff --git a/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts b/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts index b81f7ab1c2..c46743ae59 100644 --- a/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts +++ b/packages/backend-tasks/src/tasks/LocalTaskWorker.test.ts @@ -15,7 +15,6 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { AbortController } from 'node-abort-controller'; import { LocalTaskWorker } from './LocalTaskWorker'; describe('LocalTaskWorker', () => { diff --git a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts index be30988aa8..0edec5e84e 100644 --- a/packages/backend-tasks/src/tasks/LocalTaskWorker.ts +++ b/packages/backend-tasks/src/tasks/LocalTaskWorker.ts @@ -17,7 +17,6 @@ import { ConflictError } from '@backstage/errors'; import { CronTime } from 'cron'; import { DateTime, Duration } from 'luxon'; -import { AbortController, AbortSignal } from 'node-abort-controller'; import { Logger } from 'winston'; import { TaskFunction, TaskSettingsV2 } from './types'; import { delegateAbortController, sleep } from './util'; diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts index d61948a929..1847370d2b 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerImpl.test.ts @@ -18,7 +18,6 @@ import { getVoidLogger } from '@backstage/backend-common'; import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils'; import { ConflictError, NotFoundError } from '@backstage/errors'; import { Duration } from 'luxon'; -import { AbortSignal } from 'node-abort-controller'; import { migrateBackendTasks } from '../database/migrateBackendTasks'; import { parseDuration, diff --git a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts index bedf03d08a..81b0345c2c 100644 --- a/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts +++ b/packages/backend-tasks/src/tasks/PluginTaskSchedulerJanitor.ts @@ -16,7 +16,6 @@ import { Knex } from 'knex'; import { Duration } from 'luxon'; -import { AbortSignal } from 'node-abort-controller'; import { Logger } from 'winston'; import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables'; import { sleep } from './util'; diff --git a/packages/backend-tasks/src/tasks/TaskWorker.test.ts b/packages/backend-tasks/src/tasks/TaskWorker.test.ts index e631dcce54..28dbcc4337 100644 --- a/packages/backend-tasks/src/tasks/TaskWorker.test.ts +++ b/packages/backend-tasks/src/tasks/TaskWorker.test.ts @@ -17,7 +17,6 @@ import { getVoidLogger } from '@backstage/backend-common'; import { TestDatabases } from '@backstage/backend-test-utils'; import { Duration } from 'luxon'; -import { AbortController } from 'node-abort-controller'; import waitForExpect from 'wait-for-expect'; import { migrateBackendTasks } from '../database/migrateBackendTasks'; import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables'; diff --git a/packages/backend-tasks/src/tasks/TaskWorker.ts b/packages/backend-tasks/src/tasks/TaskWorker.ts index f56c03c3d5..483fb1a02d 100644 --- a/packages/backend-tasks/src/tasks/TaskWorker.ts +++ b/packages/backend-tasks/src/tasks/TaskWorker.ts @@ -18,7 +18,6 @@ import { ConflictError, NotFoundError } from '@backstage/errors'; import { CronTime } from 'cron'; import { Knex } from 'knex'; import { DateTime, Duration } from 'luxon'; -import { AbortSignal } from 'node-abort-controller'; import { v4 as uuid } from 'uuid'; import { Logger } from 'winston'; import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables'; diff --git a/packages/backend-tasks/src/tasks/types.ts b/packages/backend-tasks/src/tasks/types.ts index dbf2595e1d..6ec5165aec 100644 --- a/packages/backend-tasks/src/tasks/types.ts +++ b/packages/backend-tasks/src/tasks/types.ts @@ -17,7 +17,6 @@ import { HumanDuration } from '@backstage/types'; import { CronTime } from 'cron'; import { Duration } from 'luxon'; -import { AbortSignal } from 'node-abort-controller'; import { z } from 'zod'; /** diff --git a/packages/backend-tasks/src/tasks/util.test.ts b/packages/backend-tasks/src/tasks/util.test.ts index ceeeba14d6..e17cf1ef1f 100644 --- a/packages/backend-tasks/src/tasks/util.test.ts +++ b/packages/backend-tasks/src/tasks/util.test.ts @@ -16,7 +16,6 @@ import knexFactory, { Knex } from 'knex'; import { Duration } from 'luxon'; -import { AbortController } from 'node-abort-controller'; import { delegateAbortController, nowPlus, sleep, validateId } from './util'; class KnexBuilder { diff --git a/packages/backend-tasks/src/tasks/util.ts b/packages/backend-tasks/src/tasks/util.ts index 2561203318..70d67a9fbe 100644 --- a/packages/backend-tasks/src/tasks/util.ts +++ b/packages/backend-tasks/src/tasks/util.ts @@ -17,7 +17,6 @@ import { InputError } from '@backstage/errors'; import { Knex } from 'knex'; import { DateTime, Duration } from 'luxon'; -import { AbortController, AbortSignal } from 'node-abort-controller'; // Keep the IDs compatible with e.g. Prometheus labels export function validateId(id: string) { diff --git a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts index a742f63045..86c58b0082 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts +++ b/plugins/catalog-backend-module-incremental-ingestion/src/engine/IncrementalIngestionEngine.ts @@ -21,7 +21,6 @@ import { IterationEngineOptions, } from '../types'; import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager'; -import type { AbortSignal } from 'node-abort-controller'; import { performance } from 'perf_hooks'; import { Duration, DurationObjectUnits } from 'luxon'; import { v4 } from 'uuid'; diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 8a15127040..0122af5ae3 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -33,7 +33,6 @@ "lodash": "^4.17.21", "lunr": "^2.3.9", "ndjson": "^2.0.0", - "node-abort-controller": "^3.0.1", "uuid": "^8.3.2", "winston": "^3.2.1" }, diff --git a/plugins/search-backend-node/src/Scheduler.ts b/plugins/search-backend-node/src/Scheduler.ts index 82d45df090..39c423263c 100644 --- a/plugins/search-backend-node/src/Scheduler.ts +++ b/plugins/search-backend-node/src/Scheduler.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { AbortController } from 'node-abort-controller'; import { Logger } from 'winston'; import { TaskFunction, TaskRunner } from '@backstage/backend-tasks'; diff --git a/yarn.lock b/yarn.lock index bc9afbb479..c41d9800c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3590,7 +3590,6 @@ __metadata: morgan: ^1.10.0 msw: ^0.49.0 mysql2: ^2.2.5 - node-abort-controller: ^3.0.1 node-fetch: ^2.6.7 node-forge: ^1.3.1 raw-body: ^2.4.1 @@ -3654,7 +3653,6 @@ __metadata: knex: ^2.0.0 lodash: ^4.17.21 luxon: ^3.0.0 - node-abort-controller: ^3.0.1 uuid: ^8.0.0 wait-for-expect: ^3.0.2 winston: ^3.2.1 @@ -7676,7 +7674,6 @@ __metadata: lodash: ^4.17.21 lunr: ^2.3.9 ndjson: ^2.0.0 - node-abort-controller: ^3.0.1 uuid: ^8.3.2 winston: ^3.2.1 languageName: unknown