From e0fb73d6a3b2594693a8050c56ac38a3eaf53538 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 2 Apr 2020 09:43:13 -0700 Subject: [PATCH 1/8] Drop Node 6 / Replace grpc w/ @grpc/grpc-js --- package.json | 6 +- packages/firebase/package.json | 4 + packages/firestore/package.json | 5 +- .../firestore/src/local/local_serializer.ts | 2 +- .../src/platform_node/grpc_connection.ts | 25 ++-- .../src/platform_node/load_protos.ts | 2 +- packages/firestore/src/util/async_queue.ts | 1 + packages/testing/package.json | 6 +- packages/testing/src/api/index.ts | 2 +- yarn.lock | 136 ++++-------------- 10 files changed, 63 insertions(+), 126 deletions(-) diff --git a/package.json b/package.json index 39ddb1bb69b..eff26ce0945 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,16 @@ "private": true, "author": "Firebase (https://firebase.google.com/)", "license": "Apache-2.0", + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, "homepage": "https://github.com/firebase/firebase-js-sdk", "keywords": [ "authentication", "database", "Firebase", "firebase", + "firestore", "functions", "realtime", "storage", @@ -55,7 +59,7 @@ "@types/chai-as-promised": "7.1.2", "@types/long": "4.0.1", "@types/mocha": "7.0.2", - "@types/node": "8.10.59", + "@types/node": "13.11.0", "@types/sinon": "7.5.2", "@types/sinon-chai": "3.2.3", "@typescript-eslint/eslint-plugin": "2.24.0", diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 18122ed9857..32e5ff2d1be 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -5,11 +5,15 @@ "author": "Firebase (https://firebase.google.com/)", "license": "Apache-2.0", "homepage": "https://firebase.google.com/", + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, "keywords": [ "authentication", "database", "Firebase", "firebase", + "firestore", "realtime", "storage", "performance", diff --git a/packages/firestore/package.json b/packages/firestore/package.json index 406156c4966..c1fa7b32f79 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -1,6 +1,9 @@ { "name": "@firebase/firestore", "version": "1.13.0", + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, "description": "The Cloud Firestore component of the Firebase JS SDK.", "author": "Firebase (https://firebase.google.com/)", "scripts": { @@ -41,8 +44,8 @@ "@firebase/logger": "0.2.0", "@firebase/util": "0.2.43", "@firebase/webchannel-wrapper": "0.2.38", + "@grpc/grpc-js": "0.7.5", "@grpc/proto-loader": "^0.5.0", - "grpc": "1.24.2", "tslib": "1.11.1" }, "peerDependencies": { diff --git a/packages/firestore/src/local/local_serializer.ts b/packages/firestore/src/local/local_serializer.ts index e4200b06a16..718e4e35745 100644 --- a/packages/firestore/src/local/local_serializer.ts +++ b/packages/firestore/src/local/local_serializer.ts @@ -170,7 +170,7 @@ export class LocalSerializer { mutations ); } - + /** Decodes a DbTarget into TargetData */ fromDbTarget(dbTarget: DbTarget): TargetData { const version = this.fromDbTimestamp(dbTarget.readTime); diff --git a/packages/firestore/src/platform_node/grpc_connection.ts b/packages/firestore/src/platform_node/grpc_connection.ts index a933af52f6e..f25aff73312 100644 --- a/packages/firestore/src/platform_node/grpc_connection.ts +++ b/packages/firestore/src/platform_node/grpc_connection.ts @@ -15,13 +15,18 @@ * limitations under the License. */ -import * as grpc from 'grpc'; +import { + Metadata, + GrpcObject, + credentials as GrpcCredentials, + ServiceError +} from '@grpc/grpc-js'; import firebase from '@firebase/app'; const SDK_VERSION = firebase.SDK_VERSION; // eslint-disable-next-line @typescript-eslint/no-require-imports -const grpcVersion = require('grpc/package.json').version; +const grpcVersion = require('@grpc/grpc-js/package.json').version; import { Token } from '../api/credentials'; import { DatabaseInfo } from '../core/database_info'; @@ -44,13 +49,13 @@ const X_GOOG_API_CLIENT_VALUE = `gl-node/${process.versions.node} fire/${SDK_VER function createMetadata( databaseInfo: DatabaseInfo, token: Token | null -): grpc.Metadata { +): Metadata { assert( token === null || token.type === 'OAuth', 'If provided, token must be OAuth' ); - const metadata = new grpc.Metadata(); + const metadata = new Metadata(); if (token) { for (const header in token.authHeaders) { if (token.authHeaders.hasOwnProperty(header)) { @@ -84,7 +89,7 @@ export class GrpcConnection implements Connection { // We cache stubs for the most-recently-used token. private cachedStub: GeneratedGrpcStub | null = null; - constructor(protos: grpc.GrpcObject, private databaseInfo: DatabaseInfo) { + constructor(protos: GrpcObject, private databaseInfo: DatabaseInfo) { // eslint-disable-next-line @typescript-eslint/no-explicit-any this.firestore = (protos as any)['google']['firestore']['v1']; } @@ -93,8 +98,8 @@ export class GrpcConnection implements Connection { if (!this.cachedStub) { logDebug(LOG_TAG, 'Creating Firestore stub.'); const credentials = this.databaseInfo.ssl - ? grpc.credentials.createSsl() - : grpc.credentials.createInsecure(); + ? GrpcCredentials.createSsl() + : GrpcCredentials.createInsecure(); this.cachedStub = new this.firestore.Firestore( this.databaseInfo.host, credentials @@ -116,7 +121,7 @@ export class GrpcConnection implements Connection { return stub[rpcName]( request, metadata, - (grpcError?: grpc.ServiceError, value?: Resp) => { + (grpcError?: ServiceError, value?: Resp) => { if (grpcError) { logDebug(LOG_TAG, `RPC '${rpcName}' failed with error:`, grpcError); callback( @@ -162,7 +167,7 @@ export class GrpcConnection implements Connection { logDebug(LOG_TAG, `RPC '${rpcName}' completed.`); responseDeferred.resolve(results); }); - stream.on('error', (grpcError: grpc.ServiceError) => { + stream.on('error', (grpcError: ServiceError) => { logDebug(LOG_TAG, `RPC '${rpcName}' failed with error:`, grpcError); const code = mapCodeFromRpcCode(grpcError.code); responseDeferred.reject(new FirestoreError(code, grpcError.message)); @@ -224,7 +229,7 @@ export class GrpcConnection implements Connection { close(); }); - grpcStream.on('error', (grpcError: grpc.ServiceError) => { + grpcStream.on('error', (grpcError: ServiceError) => { logDebug( LOG_TAG, 'GRPC stream error. Code:', diff --git a/packages/firestore/src/platform_node/load_protos.ts b/packages/firestore/src/platform_node/load_protos.ts index 823388e19b2..ad0fe167292 100644 --- a/packages/firestore/src/platform_node/load_protos.ts +++ b/packages/firestore/src/platform_node/load_protos.ts @@ -16,7 +16,7 @@ */ import { loadSync } from '@grpc/proto-loader'; -import { loadPackageDefinition, GrpcObject } from 'grpc'; +import { loadPackageDefinition, GrpcObject } from '@grpc/grpc-js'; import { join, resolve, isAbsolute } from 'path'; // only used in tests // eslint-disable-next-line import/no-extraneous-dependencies diff --git a/packages/firestore/src/util/async_queue.ts b/packages/firestore/src/util/async_queue.ts index 477649bb594..4db95f735be 100644 --- a/packages/firestore/src/util/async_queue.ts +++ b/packages/firestore/src/util/async_queue.ts @@ -168,6 +168,7 @@ class DelayedOperation implements CancelablePromise { readonly [Symbol.toStringTag]: 'Promise'; then = this.deferred.promise.then.bind(this.deferred.promise); catch = this.deferred.promise.catch.bind(this.deferred.promise); + finally = this.deferred.promise.finally.bind(this.deferred.promise); private handleDelayElapsed(): void { this.asyncQueue.enqueueAndForget(() => { diff --git a/packages/testing/package.json b/packages/testing/package.json index 25493ced84e..b5b60b2a1dc 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -4,6 +4,9 @@ "description": "", "author": "Firebase (https://firebase.google.com/)", "main": "dist/index.cjs.js", + "engines": { + "node": "^8.13.0 || >=10.10.0" + }, "files": [ "dist" ], @@ -16,11 +19,10 @@ }, "license": "Apache-2.0", "dependencies": { - "firebase": "7.13.1", "@firebase/logger": "0.2.0", "@firebase/util": "0.2.43", "@types/request": "2.48.4", - "grpc": "1.24.2", + "firebase": "7.13.1", "request": "2.88.2" }, "devDependencies": { diff --git a/packages/testing/src/api/index.ts b/packages/testing/src/api/index.ts index 5fd64c41b32..d5f528b5d1b 100644 --- a/packages/testing/src/api/index.ts +++ b/packages/testing/src/api/index.ts @@ -21,7 +21,7 @@ import { FirebaseAuthInternal } from '@firebase/auth-interop-types'; import * as request from 'request'; import { base64 } from '@firebase/util'; import { setLogLevel, LogLevel } from '@firebase/logger'; -import * as grpc from 'grpc'; +import * as grpc from '@grpc/grpc-js'; import * as protoLoader from '@grpc/proto-loader'; import { resolve } from 'path'; import { Component, ComponentType } from '@firebase/component'; diff --git a/yarn.lock b/yarn.lock index 933e487e34c..710c36d01ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1045,10 +1045,17 @@ p-defer "^3.0.0" protobufjs "^6.8.1" +"@grpc/grpc-js@0.7.5": + version "0.7.5" + resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.7.5.tgz#17bc4565fa753e737b3e172aa93b93b865c69c96" + integrity sha512-hhWT+vHPtG4tn0zZJw4ndfv730pBPb+lhJfvQhc7ANBvqixtlNOaXm9VNI98wYF/em0PnrskXnOr8rHh96zjlg== + dependencies: + semver "^6.2.0" + "@grpc/grpc-js@^0.6.12": - version "0.6.14" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.6.14.tgz#956d38e8541af2296fdb651fcc6e80f30e51b3b5" - integrity sha512-M6q3MtHzk0NQPs1PB+SXSJtkDtK8WXJh+1B1WVJQp5HTURadzj9t1bUb/Fjhq+K57lKsOgL60r8WGmE7vks1eg== + version "0.6.18" + resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.6.18.tgz#ba3b3dfef869533161d192a385412a4abd0db127" + integrity sha512-uAzv/tM8qpbf1vpx1xPMfcUMzbfdqJtdCYAqY/LsLeQQlnTb4vApylojr+wlCyr7bZeg3AFfHvtihnNOQQt/nA== dependencies: semver "^6.2.0" @@ -2011,14 +2018,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bytebuffer@^5.0.40": - version "5.0.40" - resolved "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz#d6faac40dcfb09cd856cdc4c01d3690ba536d3ee" - integrity sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g== - dependencies: - "@types/long" "*" - "@types/node" "*" - "@types/caseless@*": version "0.12.2" resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" @@ -2121,16 +2120,16 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== -"@types/long@*", "@types/long@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" - integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== - "@types/long@4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== +"@types/long@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" + integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== + "@types/mime@*": version "2.0.1" resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" @@ -2151,10 +2150,10 @@ resolved "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz#1c88eb253ac1210f1a5876953fb70f7cc4928402" integrity sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg== -"@types/node@8.10.59": - version "8.10.59" - resolved "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz#9e34261f30183f9777017a13d185dfac6b899e04" - integrity sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ== +"@types/node@13.11.0": + version "13.11.0" + resolved "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" + integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== "@types/node@^10.1.0": version "10.14.21" @@ -2988,14 +2987,6 @@ asap@^2.0.0: resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -ascli@~1: - version "1.0.1" - resolved "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc" - integrity sha1-vPpZdKYvGOgcq660lzKrSoj5Brw= - dependencies: - colour "~0.7.1" - optjs "~3.2.2" - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -3761,13 +3752,6 @@ byte-size@^5.0.1: resolved "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== -bytebuffer@~5: - version "5.0.1" - resolved "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" - integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= - dependencies: - long "~3" - bytes@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3880,7 +3864,7 @@ camelcase-keys@^4.0.0: map-obj "^2.0.0" quick-lru "^1.0.0" -camelcase@^2.0.0, camelcase@^2.0.1: +camelcase@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= @@ -4182,7 +4166,7 @@ cli-width@^2.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -cliui@^3.0.3, cliui@^3.2.0: +cliui@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= @@ -4336,11 +4320,6 @@ colors@^1.1.0, colors@^1.1.2, colors@^1.3.3: resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colour@~0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" - integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g= - columnify@^1.5.4: version "1.5.4" resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -7075,7 +7054,7 @@ glob@7.1.6, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -7406,18 +7385,6 @@ growl@1.10.5: resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -grpc@1.24.2: - version "1.24.2" - resolved "https://registry.npmjs.org/grpc/-/grpc-1.24.2.tgz#76d047bfa7b05b607cbbe3abb99065dcefe0c099" - integrity sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw== - dependencies: - "@types/bytebuffer" "^5.0.40" - lodash.camelcase "^4.3.0" - lodash.clone "^4.5.0" - nan "^2.13.2" - node-pre-gyp "^0.14.0" - protobufjs "^5.0.3" - gtoken@^2.3.0: version "2.3.3" resolved "https://registry.npmjs.org/gtoken/-/gtoken-2.3.3.tgz#8a7fe155c5ce0c4b71c886cfb282a9060d94a641" @@ -9543,7 +9510,7 @@ lodash.camelcase@^4.3.0: resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.clone@^4.3.2, lodash.clone@^4.5.0: +lodash.clone@^4.3.2: version "4.5.0" resolved "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= @@ -9783,7 +9750,7 @@ loglevel@^1.6.1: resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== -long@3.2.0, long@~3: +long@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= @@ -10413,7 +10380,7 @@ mz@2.7.0, mz@^2.5.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1: version "2.14.0" resolved "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -10623,22 +10590,6 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-pre-gyp@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-preload@^0.2.0: version "0.2.1" resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" @@ -11052,11 +11003,6 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -optjs@~3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" - integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4= - ora@4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" @@ -11787,16 +11733,6 @@ protobufjs@6.8.9: "@types/node" "^10.1.0" long "^4.0.0" -protobufjs@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17" - integrity sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA== - dependencies: - ascli "~1" - bytebuffer "~5" - glob "^7.0.5" - yargs "^3.10.0" - protobufjs@^6.8.1, protobufjs@^6.8.6, protobufjs@^6.8.8: version "6.8.8" resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" @@ -13925,7 +13861,7 @@ tar@4.4.2: safe-buffer "^5.1.2" yallist "^3.0.2" -tar@^4, tar@^4.3.0, tar@^4.4.10, tar@^4.4.12, tar@^4.4.2, tar@^4.4.8: +tar@^4, tar@^4.3.0, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: version "4.4.13" resolved "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -15255,11 +15191,6 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= - windows-release@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" @@ -15463,7 +15394,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.0, y18n@^3.2.1: +y18n@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= @@ -15622,19 +15553,6 @@ yargs@^15.0.2: y18n "^4.0.0" yargs-parser "^16.1.0" -yargs@^3.10.0: - version "3.32.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" - yargs@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" From 3928eaa3f2d9cc485f5f8623b6c04de5d4a94380 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 2 Apr 2020 10:51:04 -0700 Subject: [PATCH 2/8] Fix finally usage --- packages/firestore/src/util/async_queue.ts | 1 - packages/firestore/src/util/promise.ts | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/firestore/src/util/async_queue.ts b/packages/firestore/src/util/async_queue.ts index 4db95f735be..477649bb594 100644 --- a/packages/firestore/src/util/async_queue.ts +++ b/packages/firestore/src/util/async_queue.ts @@ -168,7 +168,6 @@ class DelayedOperation implements CancelablePromise { readonly [Symbol.toStringTag]: 'Promise'; then = this.deferred.promise.then.bind(this.deferred.promise); catch = this.deferred.promise.catch.bind(this.deferred.promise); - finally = this.deferred.promise.finally.bind(this.deferred.promise); private handleDelayElapsed(): void { this.asyncQueue.enqueueAndForget(() => { diff --git a/packages/firestore/src/util/promise.ts b/packages/firestore/src/util/promise.ts index 54c655152af..b9992d5e7e4 100644 --- a/packages/firestore/src/util/promise.ts +++ b/packages/firestore/src/util/promise.ts @@ -23,7 +23,25 @@ export interface Rejecter { (reason?: Error): void; } -export interface CancelablePromise extends Promise { +export interface CancelablePromise { + // We are not extending Promise, since Node's Promise API require us to + // implement 'finally', which is not fully supported on Web. + then( + onfulfilled?: + | ((value: T) => TResult1 | PromiseLike) + | undefined + | null, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | undefined + | null + ): Promise; + catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | undefined + | null + ): Promise; cancel(): void; } From e557f4a4acd88b5cdcb4dd717644682030adc39c Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 2 Apr 2020 11:12:33 -0700 Subject: [PATCH 3/8] Lint --- packages/firestore/src/util/promise.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/firestore/src/util/promise.ts b/packages/firestore/src/util/promise.ts index b9992d5e7e4..aeb0923526e 100644 --- a/packages/firestore/src/util/promise.ts +++ b/packages/firestore/src/util/promise.ts @@ -31,13 +31,15 @@ export interface CancelablePromise { | ((value: T) => TResult1 | PromiseLike) | undefined | null, - onrejected?: + onrejected?: + // eslint-disable-next-line @typescript-eslint/no-explicit-any | ((reason: any) => TResult2 | PromiseLike) | undefined | null ): Promise; catch( onrejected?: + // eslint-disable-next-line @typescript-eslint/no-explicit-any | ((reason: any) => TResult | PromiseLike) | undefined | null From 9d42bf312195f1c3746fe15536e39b158ef9e39f Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 3 Apr 2020 12:00:37 -0700 Subject: [PATCH 4/8] [AUTOMATED]: Prettier Code Styling --- packages/firestore/src/util/promise.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/firestore/src/util/promise.ts b/packages/firestore/src/util/promise.ts index aeb0923526e..f856d92d7eb 100644 --- a/packages/firestore/src/util/promise.ts +++ b/packages/firestore/src/util/promise.ts @@ -31,18 +31,12 @@ export interface CancelablePromise { | ((value: T) => TResult1 | PromiseLike) | undefined | null, - onrejected?: - // eslint-disable-next-line @typescript-eslint/no-explicit-any - | ((reason: any) => TResult2 | PromiseLike) - | undefined - | null + onrejected?: // eslint-disable-next-line @typescript-eslint/no-explicit-any + ((reason: any) => TResult2 | PromiseLike) | undefined | null ): Promise; catch( - onrejected?: - // eslint-disable-next-line @typescript-eslint/no-explicit-any - | ((reason: any) => TResult | PromiseLike) - | undefined - | null + onrejected?: // eslint-disable-next-line @typescript-eslint/no-explicit-any + ((reason: any) => TResult | PromiseLike) | undefined | null ): Promise; cancel(): void; } From ad2d2d8073b22e252cd72f8c6cd5866eee300f08 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 3 Apr 2020 12:00:37 -0700 Subject: [PATCH 5/8] [AUTOMATED]: License Headers --- packages/firestore/src/util/promise.ts | 2 +- packages/testing/src/api/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firestore/src/util/promise.ts b/packages/firestore/src/util/promise.ts index f856d92d7eb..09dd18f4eae 100644 --- a/packages/firestore/src/util/promise.ts +++ b/packages/firestore/src/util/promise.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google Inc. + * Copyright 2017 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/testing/src/api/index.ts b/packages/testing/src/api/index.ts index d5f528b5d1b..740339165d9 100644 --- a/packages/testing/src/api/index.ts +++ b/packages/testing/src/api/index.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2018 Google Inc. + * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 99af5fe54a0bcf63b18fb9baebf9e99f02c90e80 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Mon, 6 Apr 2020 10:14:41 -0700 Subject: [PATCH 6/8] Review --- package.json | 2 +- packages/firestore/src/platform_node/grpc_connection.ts | 3 +-- packages/testing/package.json | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index eff26ce0945..a079dc15f97 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@types/chai-as-promised": "7.1.2", "@types/long": "4.0.1", "@types/mocha": "7.0.2", - "@types/node": "13.11.0", + "@types/node": "12.13.0", "@types/sinon": "7.5.2", "@types/sinon-chai": "3.2.3", "@typescript-eslint/eslint-plugin": "2.24.0", diff --git a/packages/firestore/src/platform_node/grpc_connection.ts b/packages/firestore/src/platform_node/grpc_connection.ts index f25aff73312..a0e0c972431 100644 --- a/packages/firestore/src/platform_node/grpc_connection.ts +++ b/packages/firestore/src/platform_node/grpc_connection.ts @@ -25,8 +25,7 @@ import { import firebase from '@firebase/app'; const SDK_VERSION = firebase.SDK_VERSION; -// eslint-disable-next-line @typescript-eslint/no-require-imports -const grpcVersion = require('@grpc/grpc-js/package.json').version; +const grpcVersion = import('@grpc/grpc-js/package.json').version; import { Token } from '../api/credentials'; import { DatabaseInfo } from '../core/database_info'; diff --git a/packages/testing/package.json b/packages/testing/package.json index 947fc9eccde..72683259acc 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -23,7 +23,6 @@ "@firebase/logger": "0.2.1", "@firebase/util": "0.2.44", "@types/request": "2.48.4", - "firebase": "7.13.1", "request": "2.88.2" }, "devDependencies": { From 76e54291890435417147ea6c43566a95ca7c3907 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Mon, 6 Apr 2020 10:21:24 -0700 Subject: [PATCH 7/8] Fix compile again --- packages/firestore/src/util/promise.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/firestore/src/util/promise.ts b/packages/firestore/src/util/promise.ts index 54c655152af..09dd18f4eae 100644 --- a/packages/firestore/src/util/promise.ts +++ b/packages/firestore/src/util/promise.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google Inc. + * Copyright 2017 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,21 @@ export interface Rejecter { (reason?: Error): void; } -export interface CancelablePromise extends Promise { +export interface CancelablePromise { + // We are not extending Promise, since Node's Promise API require us to + // implement 'finally', which is not fully supported on Web. + then( + onfulfilled?: + | ((value: T) => TResult1 | PromiseLike) + | undefined + | null, + onrejected?: // eslint-disable-next-line @typescript-eslint/no-explicit-any + ((reason: any) => TResult2 | PromiseLike) | undefined | null + ): Promise; + catch( + onrejected?: // eslint-disable-next-line @typescript-eslint/no-explicit-any + ((reason: any) => TResult | PromiseLike) | undefined | null + ): Promise; cancel(): void; } From 467efa66a57e5b9286b3e504307eb9b43cb270bd Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Mon, 6 Apr 2020 10:43:02 -0700 Subject: [PATCH 8/8] Remove dynamic import --- packages/firestore/src/platform_node/grpc_connection.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/firestore/src/platform_node/grpc_connection.ts b/packages/firestore/src/platform_node/grpc_connection.ts index a0e0c972431..b81d699be9c 100644 --- a/packages/firestore/src/platform_node/grpc_connection.ts +++ b/packages/firestore/src/platform_node/grpc_connection.ts @@ -1,3 +1,4 @@ + /** * @license * Copyright 2017 Google LLC @@ -21,11 +22,12 @@ import { credentials as GrpcCredentials, ServiceError } from '@grpc/grpc-js'; +import * as grpcPkgJson from '@grpc/grpc-js/package.json'; import firebase from '@firebase/app'; const SDK_VERSION = firebase.SDK_VERSION; -const grpcVersion = import('@grpc/grpc-js/package.json').version; +const grpcVersion = grpcPkgJson.version; import { Token } from '../api/credentials'; import { DatabaseInfo } from '../core/database_info';