diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5e6ee784..784df60e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,17 +18,22 @@ jobs: strategy: matrix: - node-version: - - 12.x - - 14.x - - "16.8" + environment: + - node-version: '14.15' + node-options: --require "abort-controller/polyfill" + - node-version: '14.17' + node-options: --experimental-abortcontroller + - node-version: 16.x + - node-version: 18.x steps: - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} + - name: Use Node.js ${{ matrix.environment.node-version }} uses: actions/setup-node@v1 with: - node-version: ${{ matrix.node-version }} + node-version: ${{ matrix.environment.node-version }} - run: yarn --frozen-lockfile - run: yarn build - - run: yarn test + - env: + NODE_OPTIONS: ${{ matrix.environment.node-options }} + run: yarn test diff --git a/package.json b/package.json index f0d0decb..44017660 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "devDependencies": { "@types/jest": "^27.4.0", + "abort-controller": "^3.0.0", "jest": "^27.0.4", "lerna": "^4.0.0", "prettier": "^2.3.1", diff --git a/packages/nice-grpc-client-middleware-deadline/package.json b/packages/nice-grpc-client-middleware-deadline/package.json index 2a5a0a87..e11d7aed 100644 --- a/packages/nice-grpc-client-middleware-deadline/package.json +++ b/packages/nice-grpc-client-middleware-deadline/package.json @@ -24,14 +24,13 @@ "devDependencies": { "@tsconfig/recommended": "^1.0.1", "@types/google-protobuf": "^3.7.4", - "abort-controller-x": "^0.2.6", + "abort-controller-x": "^0.4.0", "google-protobuf": "^3.14.0", "grpc-tools": "^1.10.0", "grpc_tools_node_protoc_ts": "^5.0.1", "nice-grpc": "^1.2.2" }, "dependencies": { - "nice-grpc-common": "^1.1.0", - "node-abort-controller": "^2.0.0" + "nice-grpc-common": "^1.1.0" } } diff --git a/packages/nice-grpc-client-middleware-deadline/src/index.ts b/packages/nice-grpc-client-middleware-deadline/src/index.ts index 230c6d0d..17ca7da5 100644 --- a/packages/nice-grpc-client-middleware-deadline/src/index.ts +++ b/packages/nice-grpc-client-middleware-deadline/src/index.ts @@ -1,5 +1,4 @@ import {ClientError, ClientMiddleware, Status} from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; export type DeadlineOptions = { deadline?: Date | number; diff --git a/packages/nice-grpc-client-middleware-retry/README.md b/packages/nice-grpc-client-middleware-retry/README.md index fcbd2c7b..b24b495c 100644 --- a/packages/nice-grpc-client-middleware-retry/README.md +++ b/packages/nice-grpc-client-middleware-retry/README.md @@ -72,13 +72,12 @@ const response = await client.exampleMethod(request, { ### Infinite retries -You can also set `retryMaxAttempts` to `Infinity` and use `AbortSignal` to +You can also set `retryMaxAttempts` to `Infinity` and use +[`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to [cancel](https://github.com/deeplay-io/nice-grpc/tree/master/packages/nice-grpc#cancelling-calls) the retried call: ```ts -import AbortController from 'node-abort-controller'; - const abortController = new AbortController(); setTimeout(() => { diff --git a/packages/nice-grpc-client-middleware-retry/package.json b/packages/nice-grpc-client-middleware-retry/package.json index 6d373af2..e16d6366 100644 --- a/packages/nice-grpc-client-middleware-retry/package.json +++ b/packages/nice-grpc-client-middleware-retry/package.json @@ -29,8 +29,7 @@ "ts-proto": "^1.112.0" }, "dependencies": { - "abort-controller-x": "^0.2.6", - "nice-grpc-common": "^1.1.0", - "node-abort-controller": "^2.0.0" + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^1.1.0" } } diff --git a/packages/nice-grpc-client-middleware-retry/src/index.ts b/packages/nice-grpc-client-middleware-retry/src/index.ts index 2b21ddf4..be0c512e 100644 --- a/packages/nice-grpc-client-middleware-retry/src/index.ts +++ b/packages/nice-grpc-client-middleware-retry/src/index.ts @@ -1,6 +1,5 @@ import {delay, rethrowAbortError} from 'abort-controller-x'; import {ClientError, ClientMiddleware, Status} from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; /** * These options are added to `CallOptions` by diff --git a/packages/nice-grpc-common/package.json b/packages/nice-grpc-common/package.json index a7e2e55a..ca14702e 100644 --- a/packages/nice-grpc-common/package.json +++ b/packages/nice-grpc-common/package.json @@ -23,7 +23,6 @@ "@tsconfig/recommended": "^1.0.1" }, "dependencies": { - "node-abort-controller": "^2.0.0", "ts-error": "^1.0.6" } } diff --git a/packages/nice-grpc-common/src/client/CallOptions.ts b/packages/nice-grpc-common/src/client/CallOptions.ts index b70dcd3d..86955179 100644 --- a/packages/nice-grpc-common/src/client/CallOptions.ts +++ b/packages/nice-grpc-common/src/client/CallOptions.ts @@ -1,5 +1,3 @@ -import {AbortSignal} from 'node-abort-controller'; - import {Metadata} from '../Metadata'; /** diff --git a/packages/nice-grpc-common/src/server/CallContext.ts b/packages/nice-grpc-common/src/server/CallContext.ts index d68a394d..53e9ea87 100644 --- a/packages/nice-grpc-common/src/server/CallContext.ts +++ b/packages/nice-grpc-common/src/server/CallContext.ts @@ -1,5 +1,3 @@ -import {AbortSignal} from 'node-abort-controller'; - import {Metadata} from '../Metadata'; /** diff --git a/packages/nice-grpc-common/tsconfig.json b/packages/nice-grpc-common/tsconfig.json index c39a1994..cdb809d1 100644 --- a/packages/nice-grpc-common/tsconfig.json +++ b/packages/nice-grpc-common/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "@tsconfig/recommended/tsconfig.json", "compilerOptions": { - "target": "ES2018", "outDir": "lib", "sourceMap": true, "declaration": true, diff --git a/packages/nice-grpc-server-health/package.json b/packages/nice-grpc-server-health/package.json index 4da28301..3aac9611 100644 --- a/packages/nice-grpc-server-health/package.json +++ b/packages/nice-grpc-server-health/package.json @@ -23,8 +23,8 @@ "author": "Daniel Lytkin ", "license": "MIT", "devDependencies": { - "@tsconfig/node12": "^1.0.8", - "@types/node": "^12.0.0", + "@tsconfig/node14": "^1.0.3", + "@types/node": "^14.18.23", "grpc-tools": "^1.10.0", "jest-os-detection": "^1.3.1", "mkdirp": "^1.0.4", @@ -34,7 +34,7 @@ "ts-proto": "^1.112.0" }, "dependencies": { - "abort-controller-x": "^0.2.6", + "abort-controller-x": "^0.4.0", "nice-grpc": "^1.2.2", "protobufjs": "^6.11.2", "typed-emitter": "^2.0.0" diff --git a/packages/nice-grpc-server-health/tsconfig.json b/packages/nice-grpc-server-health/tsconfig.json index e8252bd4..5d52f373 100644 --- a/packages/nice-grpc-server-health/tsconfig.json +++ b/packages/nice-grpc-server-health/tsconfig.json @@ -1,7 +1,6 @@ { - "extends": "@tsconfig/node12/tsconfig.json", + "extends": "@tsconfig/node14/tsconfig.json", "compilerOptions": { - "target": "ES2018", "outDir": "lib", "sourceMap": true, "declaration": true, diff --git a/packages/nice-grpc-server-middleware-terminator/package.json b/packages/nice-grpc-server-middleware-terminator/package.json index 0c310200..3c6ff4ed 100644 --- a/packages/nice-grpc-server-middleware-terminator/package.json +++ b/packages/nice-grpc-server-middleware-terminator/package.json @@ -24,14 +24,13 @@ "devDependencies": { "@tsconfig/recommended": "^1.0.1", "@types/defer-promise": "^1.0.0", - "abort-controller-x": "^0.2.6", + "abort-controller-x": "^0.4.0", "defer-promise": "^2.0.1", "grpc-tools": "^1.10.0", "nice-grpc": "^1.2.2", "ts-proto": "^1.112.0" }, "dependencies": { - "nice-grpc-common": "^1.1.0", - "node-abort-controller": "^2.0.0" + "nice-grpc-common": "^1.1.0" } } diff --git a/packages/nice-grpc-server-middleware-terminator/src/index.test.ts b/packages/nice-grpc-server-middleware-terminator/src/index.test.ts index 7853a1ef..79408fa1 100644 --- a/packages/nice-grpc-server-middleware-terminator/src/index.test.ts +++ b/packages/nice-grpc-server-middleware-terminator/src/index.test.ts @@ -1,7 +1,6 @@ import {forever, isAbortError} from 'abort-controller-x'; import defer from 'defer-promise'; import {createChannel, createClient, createServer} from 'nice-grpc'; -import AbortController from 'node-abort-controller'; import {TerminatorMiddleware} from '.'; import {TestDefinition} from '../fixtures/test'; diff --git a/packages/nice-grpc-server-middleware-terminator/src/index.ts b/packages/nice-grpc-server-middleware-terminator/src/index.ts index a140310b..aaad3ab1 100644 --- a/packages/nice-grpc-server-middleware-terminator/src/index.ts +++ b/packages/nice-grpc-server-middleware-terminator/src/index.ts @@ -5,7 +5,6 @@ import { ServerMiddlewareCall, Status, } from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; export type TerminatorContext = { abortOnTerminate(): void; diff --git a/packages/nice-grpc-server-reflection/package.json b/packages/nice-grpc-server-reflection/package.json index 2468ff5c..24ac9e67 100644 --- a/packages/nice-grpc-server-reflection/package.json +++ b/packages/nice-grpc-server-reflection/package.json @@ -27,7 +27,8 @@ "author": "Daniel Lytkin ", "license": "MIT", "devDependencies": { - "@tsconfig/node12": "^1.0.8", + "@tsconfig/node14": "^1.0.3", + "@types/node": "^14.18.23", "cpr": "^3.0.1", "grpc-tools": "^1.11.0", "grpc_tools_node_protoc_ts": "^5.1.3", diff --git a/packages/nice-grpc-server-reflection/tsconfig.json b/packages/nice-grpc-server-reflection/tsconfig.json index ca5c2c36..a28e3622 100644 --- a/packages/nice-grpc-server-reflection/tsconfig.json +++ b/packages/nice-grpc-server-reflection/tsconfig.json @@ -1,7 +1,6 @@ { - "extends": "@tsconfig/node12/tsconfig.json", + "extends": "@tsconfig/node14/tsconfig.json", "compilerOptions": { - "target": "ES2018", "outDir": "lib", "sourceMap": true, "declaration": true, diff --git a/packages/nice-grpc-web/README.md b/packages/nice-grpc-web/README.md index 64964302..63f2461f 100644 --- a/packages/nice-grpc-web/README.md +++ b/packages/nice-grpc-web/README.md @@ -29,6 +29,13 @@ A Browser gRPC client library that is nice to you. Built on top of [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). - Middleware support via concise API that uses Async Generators. +## Prerequisites + +Global +[`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) +is required. A [polyfill](https://www.npmjs.com/package/abort-controller) is +available for older browsers. + ## Installation ``` @@ -273,7 +280,6 @@ A client call can be cancelled using [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). ```ts -import AbortController from 'node-abort-controller'; import {isAbortError} from 'abort-controller-x'; const abortController = new AbortController(); diff --git a/packages/nice-grpc-web/package.json b/packages/nice-grpc-web/package.json index 54746c4c..743970e4 100644 --- a/packages/nice-grpc-web/package.json +++ b/packages/nice-grpc-web/package.json @@ -52,9 +52,8 @@ }, "dependencies": { "@improbable-eng/grpc-web": "^0.15.0", - "abort-controller-x": "^0.2.6", + "abort-controller-x": "^0.4.0", "js-base64": "^3.7.2", - "nice-grpc-common": "^1.1.0", - "node-abort-controller": "^2.0.0" + "nice-grpc-common": "^1.1.0" } } diff --git a/packages/nice-grpc-web/src/__tests__/bidiStreaming.ts b/packages/nice-grpc-web/src/__tests__/bidiStreaming.ts index aa3bb77d..996f34f3 100644 --- a/packages/nice-grpc-web/src/__tests__/bidiStreaming.ts +++ b/packages/nice-grpc-web/src/__tests__/bidiStreaming.ts @@ -2,7 +2,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; import {createServer, ServerError} from 'nice-grpc'; -import AbortController from 'node-abort-controller'; import {createChannel, createClient, Metadata, Status} from '..'; import {TestService} from '../../fixtures/grpc-js/test_grpc_pb'; import {TestRequest, TestResponse} from '../../fixtures/grpc-js/test_pb'; diff --git a/packages/nice-grpc-web/src/__tests__/clientStreaming.ts b/packages/nice-grpc-web/src/__tests__/clientStreaming.ts index c75605d6..b83518f0 100644 --- a/packages/nice-grpc-web/src/__tests__/clientStreaming.ts +++ b/packages/nice-grpc-web/src/__tests__/clientStreaming.ts @@ -2,7 +2,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; import {createServer, ServerError} from 'nice-grpc'; -import AbortController from 'node-abort-controller'; import {createChannel, createClient, Metadata, Status} from '..'; import {TestService} from '../../fixtures/grpc-js/test_grpc_pb'; import {TestRequest, TestResponse} from '../../fixtures/grpc-js/test_pb'; diff --git a/packages/nice-grpc-web/src/__tests__/serverStreaming.ts b/packages/nice-grpc-web/src/__tests__/serverStreaming.ts index f79ec79f..ad8f6cd5 100644 --- a/packages/nice-grpc-web/src/__tests__/serverStreaming.ts +++ b/packages/nice-grpc-web/src/__tests__/serverStreaming.ts @@ -2,7 +2,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; import {createServer, ServerError} from 'nice-grpc'; -import AbortController from 'node-abort-controller'; import {createChannel, createClient, Metadata, Status} from '..'; import {TestService} from '../../fixtures/grpc-js/test_grpc_pb'; import {TestRequest, TestResponse} from '../../fixtures/grpc-js/test_pb'; diff --git a/packages/nice-grpc-web/src/__tests__/unary.ts b/packages/nice-grpc-web/src/__tests__/unary.ts index 84a47ab4..4f8bf68a 100644 --- a/packages/nice-grpc-web/src/__tests__/unary.ts +++ b/packages/nice-grpc-web/src/__tests__/unary.ts @@ -2,7 +2,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; import {createServer, ServerError} from 'nice-grpc'; -import AbortController from 'node-abort-controller'; import {createChannel, createClient, Metadata, Status} from '..'; import {TestService} from '../../fixtures/grpc-js/test_grpc_pb'; import {TestRequest, TestResponse} from '../../fixtures/grpc-js/test_pb'; diff --git a/packages/nice-grpc-web/src/__tests__/utils/grpcwebproxy.ts b/packages/nice-grpc-web/src/__tests__/utils/grpcwebproxy.ts index a2e0c705..d8080f8a 100644 --- a/packages/nice-grpc-web/src/__tests__/utils/grpcwebproxy.ts +++ b/packages/nice-grpc-web/src/__tests__/utils/grpcwebproxy.ts @@ -18,7 +18,7 @@ export async function startProxy( const childProcess = spawn( executablePath, [ - `--server_bind_address=localhost`, + `--server_bind_address=0.0.0.0`, `--server_http_debug_port=${listenPort}`, `--run_tls_server=false`, `--backend_addr=${backendAddress}`, diff --git a/packages/nice-grpc-web/src/client/createBidiStreamingMethod.ts b/packages/nice-grpc-web/src/client/createBidiStreamingMethod.ts index df82ae53..a4c678e7 100644 --- a/packages/nice-grpc-web/src/client/createBidiStreamingMethod.ts +++ b/packages/nice-grpc-web/src/client/createBidiStreamingMethod.ts @@ -8,7 +8,6 @@ import { } from 'nice-grpc-common'; import {grpc} from '@improbable-eng/grpc-web'; import {AbortError, isAbortError, throwIfAborted} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import {AsyncSink} from '../utils/AsyncSink'; import { AnyMethodDefinition, diff --git a/packages/nice-grpc-web/src/client/createClientStreamingMethod.ts b/packages/nice-grpc-web/src/client/createClientStreamingMethod.ts index c6e2785e..bb68adc3 100644 --- a/packages/nice-grpc-web/src/client/createClientStreamingMethod.ts +++ b/packages/nice-grpc-web/src/client/createClientStreamingMethod.ts @@ -8,7 +8,6 @@ import { } from 'nice-grpc-common'; import {grpc} from '@improbable-eng/grpc-web'; import {execute, isAbortError, throwIfAborted} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { AnyMethodDefinition, MethodDefinition, diff --git a/packages/nice-grpc-web/src/client/createServerStreamingMethod.ts b/packages/nice-grpc-web/src/client/createServerStreamingMethod.ts index 80bdf913..12b70804 100644 --- a/packages/nice-grpc-web/src/client/createServerStreamingMethod.ts +++ b/packages/nice-grpc-web/src/client/createServerStreamingMethod.ts @@ -9,7 +9,6 @@ import { MethodDescriptor, Status, } from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; import { MethodDefinition, toGrpcWebMethodDefinition, diff --git a/packages/nice-grpc-web/src/client/createUnaryMethod.ts b/packages/nice-grpc-web/src/client/createUnaryMethod.ts index a7f35f2c..cbe09194 100644 --- a/packages/nice-grpc-web/src/client/createUnaryMethod.ts +++ b/packages/nice-grpc-web/src/client/createUnaryMethod.ts @@ -8,7 +8,6 @@ import { } from 'nice-grpc-common'; import {grpc} from '@improbable-eng/grpc-web'; import {execute} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { MethodDefinition, toGrpcWebMethodDefinition, diff --git a/packages/nice-grpc/README.md b/packages/nice-grpc/README.md index 733c36db..0627588e 100644 --- a/packages/nice-grpc/README.md +++ b/packages/nice-grpc/README.md @@ -42,6 +42,15 @@ A Node.js gRPC library that is nice to you. Built on top of - Client and server middleware support via concise API that uses Async Generators. +## Prerequisites + +Supports NodeJS 14+. Global `AbortController` is required which is +[available in NodeJS](https://nodejs.org/api/globals.html#class-abortcontroller) +since 15.0.0, NodeJS 14.17+ requires the +[--experimental-abortcontroller](https://nodejs.org/docs/latest-v14.x/api/cli.html#cli_experimental_abortcontroller) +flag. A [polyfill](https://www.npmjs.com/package/abort-controller) is available +for older NodeJS versions. + ## Installation ``` @@ -804,7 +813,6 @@ A client call can be cancelled using [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). ```ts -import AbortController from 'node-abort-controller'; import {isAbortError} from 'abort-controller-x'; const abortController = new AbortController(); diff --git a/packages/nice-grpc/package.json b/packages/nice-grpc/package.json index 50463062..446a0a10 100644 --- a/packages/nice-grpc/package.json +++ b/packages/nice-grpc/package.json @@ -32,10 +32,11 @@ "author": "Daniel Lytkin ", "license": "MIT", "devDependencies": { - "@tsconfig/node12": "^1.0.8", + "@tsconfig/node14": "^1.0.3", "@types/defer-promise": "^1.0.0", "@types/get-port": "^4.2.0", "@types/google-protobuf": "^3.7.4", + "@types/node": "^14.18.23", "defer-promise": "^2.0.1", "get-port": "^5.1.1", "google-protobuf": "^3.14.0", @@ -47,8 +48,7 @@ }, "dependencies": { "@grpc/grpc-js": "^1.6.1", - "abort-controller-x": "^0.2.4", - "nice-grpc-common": "^1.1.0", - "node-abort-controller": "^1.2.1" + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^1.1.0" } } diff --git a/packages/nice-grpc/src/__tests__/bidiStreaming.ts b/packages/nice-grpc/src/__tests__/bidiStreaming.ts index 2ef381e7..00d715b4 100644 --- a/packages/nice-grpc/src/__tests__/bidiStreaming.ts +++ b/packages/nice-grpc/src/__tests__/bidiStreaming.ts @@ -1,7 +1,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { createChannel, createClient, diff --git a/packages/nice-grpc/src/__tests__/clientStreaming.ts b/packages/nice-grpc/src/__tests__/clientStreaming.ts index b2dbf948..1dbb1d01 100644 --- a/packages/nice-grpc/src/__tests__/clientStreaming.ts +++ b/packages/nice-grpc/src/__tests__/clientStreaming.ts @@ -1,7 +1,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { createChannel, createClient, diff --git a/packages/nice-grpc/src/__tests__/serverStreaming.ts b/packages/nice-grpc/src/__tests__/serverStreaming.ts index a1605eeb..08ef4d12 100644 --- a/packages/nice-grpc/src/__tests__/serverStreaming.ts +++ b/packages/nice-grpc/src/__tests__/serverStreaming.ts @@ -1,7 +1,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { createChannel, createClient, diff --git a/packages/nice-grpc/src/__tests__/unary.ts b/packages/nice-grpc/src/__tests__/unary.ts index 52d7519f..f081e6a3 100644 --- a/packages/nice-grpc/src/__tests__/unary.ts +++ b/packages/nice-grpc/src/__tests__/unary.ts @@ -1,7 +1,6 @@ import getPort = require('get-port'); import defer = require('defer-promise'); import {forever, isAbortError} from 'abort-controller-x'; -import AbortController from 'node-abort-controller'; import { createChannel, createClient, diff --git a/packages/nice-grpc/src/client/createBidiStreamingMethod.ts b/packages/nice-grpc/src/client/createBidiStreamingMethod.ts index 4bb370fb..5e36b002 100644 --- a/packages/nice-grpc/src/client/createBidiStreamingMethod.ts +++ b/packages/nice-grpc/src/client/createBidiStreamingMethod.ts @@ -1,25 +1,25 @@ import {Client, ClientWritableStream} from '@grpc/grpc-js'; +import {isAbortError, throwIfAborted, waitForEvent} from 'abort-controller-x'; import { - Metadata, CallOptions, ClientMiddleware, + Metadata, MethodDescriptor, } from 'nice-grpc-common'; -import {isAbortError, throwIfAborted, waitForEvent} from 'abort-controller-x'; -import AbortController, {AbortSignal} from 'node-abort-controller'; -import {isAsyncIterable} from '../utils/isAsyncIterable'; -import {patchClientWritableStream} from '../utils/patchClientWritableStream'; -import {readableToAsyncIterable} from '../utils/readableToAsyncIterable'; +import { + MethodDefinition, + toGrpcJsMethodDefinition, +} from '../service-definitions'; +import {CompatAbortSignal} from '../utils/compatAbortSignal'; import { convertMetadataFromGrpcJs, convertMetadataToGrpcJs, } from '../utils/convertMetadata'; +import {isAsyncIterable} from '../utils/isAsyncIterable'; +import {patchClientWritableStream} from '../utils/patchClientWritableStream'; +import {readableToAsyncIterable} from '../utils/readableToAsyncIterable'; import {BidiStreamingClientMethod} from './Client'; import {wrapClientError} from './wrapClientError'; -import { - MethodDefinition, - toGrpcJsMethodDefinition, -} from '../service-definitions'; /** @internal */ export function createBidiStreamingMethod( @@ -47,12 +47,10 @@ export function createBidiStreamingMethod( ); } - const { - metadata = Metadata(), - signal = new AbortController().signal, - onHeader, - onTrailer, - } = options; + const {metadata = Metadata(), onHeader, onTrailer} = options; + + const signal = (options.signal ?? + new AbortController().signal) as CompatAbortSignal; const pipeAbortController = new AbortController(); diff --git a/packages/nice-grpc/src/client/createClientStreamingMethod.ts b/packages/nice-grpc/src/client/createClientStreamingMethod.ts index c5ac303b..7d97c1e3 100644 --- a/packages/nice-grpc/src/client/createClientStreamingMethod.ts +++ b/packages/nice-grpc/src/client/createClientStreamingMethod.ts @@ -11,7 +11,6 @@ import { Metadata, MethodDescriptor, } from 'nice-grpc-common'; -import AbortController, {AbortSignal} from 'node-abort-controller'; import { MethodDefinition, toGrpcJsMethodDefinition, diff --git a/packages/nice-grpc/src/client/createServerStreamingMethod.ts b/packages/nice-grpc/src/client/createServerStreamingMethod.ts index f68fa89b..9977cc10 100644 --- a/packages/nice-grpc/src/client/createServerStreamingMethod.ts +++ b/packages/nice-grpc/src/client/createServerStreamingMethod.ts @@ -6,11 +6,11 @@ import { Metadata, MethodDescriptor, } from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; import { MethodDefinition, toGrpcJsMethodDefinition, } from '../service-definitions'; +import {CompatAbortSignal} from '../utils/compatAbortSignal'; import { convertMetadataFromGrpcJs, convertMetadataToGrpcJs, @@ -46,12 +46,10 @@ export function createServerStreamingMethod( ); } - const { - metadata = Metadata(), - signal = new AbortController().signal, - onHeader, - onTrailer, - } = options; + const {metadata = Metadata(), onHeader, onTrailer} = options; + + const signal = (options.signal ?? + new AbortController().signal) as CompatAbortSignal; const call = client.makeServerStreamRequest( grpcMethodDefinition.path, diff --git a/packages/nice-grpc/src/client/createUnaryMethod.ts b/packages/nice-grpc/src/client/createUnaryMethod.ts index bec36fda..3460738d 100644 --- a/packages/nice-grpc/src/client/createUnaryMethod.ts +++ b/packages/nice-grpc/src/client/createUnaryMethod.ts @@ -6,7 +6,6 @@ import { Metadata, MethodDescriptor, } from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; import { MethodDefinition, toGrpcJsMethodDefinition, diff --git a/packages/nice-grpc/src/server/createCallContext.ts b/packages/nice-grpc/src/server/createCallContext.ts index 13dbd808..b6e8d94f 100644 --- a/packages/nice-grpc/src/server/createCallContext.ts +++ b/packages/nice-grpc/src/server/createCallContext.ts @@ -1,6 +1,5 @@ import {ServerSurfaceCall} from '@grpc/grpc-js/build/src/server-call'; import {CallContext, Metadata} from 'nice-grpc-common'; -import AbortController from 'node-abort-controller'; import { convertMetadataFromGrpcJs, convertMetadataToGrpcJs, diff --git a/packages/nice-grpc/src/utils/compatAbortSignal.ts b/packages/nice-grpc/src/utils/compatAbortSignal.ts new file mode 100644 index 00000000..1e7b6ef0 --- /dev/null +++ b/packages/nice-grpc/src/utils/compatAbortSignal.ts @@ -0,0 +1,4 @@ +export type CompatAbortSignal = AbortSignal & { + addEventListener(type: 'abort', listener: () => void): void; + removeEventListener(type: 'abort', listener: () => void): void; +}; diff --git a/packages/nice-grpc/tsconfig.json b/packages/nice-grpc/tsconfig.json index 5ecdb8b6..e8506a33 100644 --- a/packages/nice-grpc/tsconfig.json +++ b/packages/nice-grpc/tsconfig.json @@ -1,7 +1,6 @@ { - "extends": "@tsconfig/node12/tsconfig.json", + "extends": "@tsconfig/node14/tsconfig.json", "compilerOptions": { - "target": "ES2018", "outDir": "lib", "sourceMap": true, "declaration": true, diff --git a/yarn.lock b/yarn.lock index 3388201e..8aca27bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1639,10 +1639,10 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tsconfig/node12@^1.0.8": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== +"@tsconfig/node14@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/recommended@^1.0.1": version "1.0.1" @@ -1753,15 +1753,10 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0": - version "15.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" - integrity sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg== - -"@types/node@^12.0.0": - version "12.20.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.19.tgz#538e61fc220f77ae4a4663c3d8c3cb391365c209" - integrity sha512-niAuZrwrjKck4+XhoCw6AAVQBENHftpXw9F4ryk66fTgYaKQ53R4FI7c9vUGGw5vQis1HKBHDR1gcYI/Bq1xvw== +"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^14.18.23": + version "14.18.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.23.tgz#70f5f20b0b1b38f696848c1d3647bb95694e615e" + integrity sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1830,12 +1825,17 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller-x@^0.2.4, abort-controller-x@^0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/abort-controller-x/-/abort-controller-x-0.2.7.tgz#6fa9be5b278b9c533d4d078d0ba660d40683907e" - integrity sha512-hq/lt8yODKrwuZa69GhSTl2l2kcrus2khZ7OjD6Bmqmx6tbW6dnV8cVGnkkdLCWnjXpgSx8zjQo+HUc9mvoQ/w== +abort-controller-x@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/abort-controller-x/-/abort-controller-x-0.4.0.tgz#fde25da52548c7ff3d8b3b32dffc943452874d5f" + integrity sha512-cuNbw3c/SvEOkWkgxoWOOS3QzcTCC6YXCFH6oTZ/jvjZPBhkjaoUyCLwdAViRRhYmluJPD7vGaTLkHCp67xQVQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: - node-abort-controller "^1.2.1 || ^2.0.0" + event-target-shim "^5.0.0" acorn-globals@^6.0.0: version "6.0.0" @@ -3005,6 +3005,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -5015,16 +5020,6 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-abort-controller@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-1.2.1.tgz#1eddb57eb8fea734198b11b28857596dc6165708" - integrity sha512-79PYeJuj6S9+yOHirR0JBLFOgjB6sQCir10uN6xRx25iD+ZD4ULqgRn3MwWBRaQGB0vEgReJzWwJo42T1R6YbQ== - -"node-abort-controller@^1.2.1 || ^2.0.0", node-abort-controller@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-2.0.0.tgz#800e0d250d3b977175e48df4f74c2d3960076a79" - integrity sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA== - node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"