From cd8c667b548058273bbf30520fa8822085a77c03 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Mon, 21 Nov 2022 14:38:48 -0500 Subject: [PATCH] TypeScript 4.7.4 upgrade for Firestore (#6796) --- .changeset/breezy-wombats-care.md | 7 +++ packages/firestore-compat/package.json | 2 +- .../test/array_transforms.test.ts | 3 +- .../test/transactions.test.ts | 11 +++-- packages/firestore/package.json | 4 +- packages/firestore/scripts/remove-asserts.js | 2 +- packages/firestore/scripts/remove-asserts.ts | 2 +- .../platform/browser_lite/fetch_connection.ts | 3 +- packages/firestore/src/util/types.ts | 2 +- .../api_internal/transaction.test.ts | 7 ++- .../unit/local/indexeddb_persistence.test.ts | 8 +-- .../test/unit/specs/spec_test_runner.ts | 2 +- packages/firestore/test/util/test_platform.ts | 6 +-- yarn.lock | 49 ++++++++++++++++--- 14 files changed, 79 insertions(+), 29 deletions(-) create mode 100644 .changeset/breezy-wombats-care.md diff --git a/.changeset/breezy-wombats-care.md b/.changeset/breezy-wombats-care.md new file mode 100644 index 00000000000..c8476b92007 --- /dev/null +++ b/.changeset/breezy-wombats-care.md @@ -0,0 +1,7 @@ +--- +'@firebase/firestore': minor +'@firebase/firestore-compat': minor +'firebase': minor +--- + +Upgrade TypeScript to 4.7.4 (was 4.2.2) diff --git a/packages/firestore-compat/package.json b/packages/firestore-compat/package.json index d914fdddd00..bb8f0eec060 100644 --- a/packages/firestore-compat/package.json +++ b/packages/firestore-compat/package.json @@ -58,7 +58,7 @@ "rollup-plugin-typescript2": "0.31.2", "@rollup/plugin-node-resolve": "13.3.0", "ts-node": "10.9.1", - "typescript": "4.2.2" + "typescript": "4.7.4" }, "license": "Apache-2.0", "typings": "dist/src/index.d.ts", diff --git a/packages/firestore-compat/test/array_transforms.test.ts b/packages/firestore-compat/test/array_transforms.test.ts index 02e3bc45601..e00aca091e9 100644 --- a/packages/firestore-compat/test/array_transforms.test.ts +++ b/packages/firestore-compat/test/array_transforms.test.ts @@ -189,7 +189,8 @@ apiDescribe('Array Transforms:', (persistence: boolean) => { let errCaught = false; try { await docRef.get({ source: 'cache' }); - } catch (err) { + } catch (e) { + const err = e as firestore.FirestoreError; expect(err.code).to.equal('unavailable'); errCaught = true; } diff --git a/packages/firestore-compat/test/transactions.test.ts b/packages/firestore-compat/test/transactions.test.ts index 5151d672b0a..0109ea62f93 100644 --- a/packages/firestore-compat/test/transactions.test.ts +++ b/packages/firestore-compat/test/transactions.test.ts @@ -116,7 +116,8 @@ apiDescribe('Database transactions', (persistence: boolean) => { const snapshot = await this.docRef.get(); expect(snapshot.exists).to.equal(true); expect(snapshot.data()).to.deep.equal(expected); - } catch (err) { + } catch (e) { + const err = e as firestore.FirestoreError; expect.fail( 'Expected the sequence (' + this.listStages(this.stages) + @@ -133,7 +134,8 @@ apiDescribe('Database transactions', (persistence: boolean) => { await this.runTransaction(); const snapshot = await this.docRef.get(); expect(snapshot.exists).to.equal(false); - } catch (err) { + } catch (e) { + const err = e as firestore.FirestoreError; expect.fail( 'Expected the sequence (' + this.listStages(this.stages) + @@ -150,8 +152,9 @@ apiDescribe('Database transactions', (persistence: boolean) => { await this.prepareDoc(); await this.runTransaction(); succeeded = true; - } catch (err) { - expect((err as firestore.FirestoreError).code).to.equal(expected); + } catch (e) { + const err = e as firestore.FirestoreError; + expect(err.code).to.equal(expected); } if (succeeded) { expect.fail( diff --git a/packages/firestore/package.json b/packages/firestore/package.json index fc27caf32de..4492bc0547d 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -84,7 +84,7 @@ "@firebase/logger": "0.3.4", "@firebase/util": "1.7.3", "@firebase/webchannel-wrapper": "0.8.1", - "@grpc/grpc-js": "^1.3.2", + "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.6.13", "node-fetch": "2.6.7", "tslib": "^2.1.0" @@ -111,7 +111,7 @@ "rollup-plugin-terser": "7.0.2", "rollup-plugin-typescript2": "0.31.2", "ts-node": "10.9.1", - "typescript": "4.2.2" + "typescript": "4.7.4" }, "repository": { "directory": "packages/firestore", diff --git a/packages/firestore/scripts/remove-asserts.js b/packages/firestore/scripts/remove-asserts.js index 4df836c1832..f6a3577ff0b 100644 --- a/packages/firestore/scripts/remove-asserts.js +++ b/packages/firestore/scripts/remove-asserts.js @@ -14,4 +14,4 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */exports.__esModule=true;exports.removeAsserts=void 0;var ts=require("typescript");var ASSERT_LOCATION="packages/firestore/src/util/assert.ts";function removeAsserts(program){var removeAsserts=new RemoveAsserts(program.getTypeChecker());return function(context){return function(file){return removeAsserts.visitNodeAndChildren(file,context)}}}exports.removeAsserts=removeAsserts;var RemoveAsserts=function(){function RemoveAsserts(typeChecker){this.typeChecker=typeChecker}RemoveAsserts.prototype.visitNodeAndChildren=function(node,context){var _this=this;return ts.visitEachChild(this.visitNode(node),(function(childNode){return _this.visitNodeAndChildren(childNode,context)}),context)};RemoveAsserts.prototype.visitNode=function(node){var updatedNode=null;if(ts.isCallExpression(node)){var signature=this.typeChecker.getResolvedSignature(node);if(signature&&signature.declaration&&signature.declaration.kind===ts.SyntaxKind.FunctionDeclaration){var declaration=signature.declaration;if(declaration&&declaration.getSourceFile().fileName.indexOf(ASSERT_LOCATION)>=0){var method=declaration.name.text;if(method==="debugAssert"){updatedNode=ts.createEmptyStatement()}else if(method==="hardAssert"){updatedNode=ts.createCall(declaration.name,undefined,[node.arguments[0]])}else if(method==="fail"){updatedNode=ts.createCall(declaration.name,undefined,[])}}}}if(updatedNode){ts.setSourceMapRange(updatedNode,ts.getSourceMapRange(node));return updatedNode}else{return node}};return RemoveAsserts}(); \ No newline at end of file + */exports.__esModule=true;exports.removeAsserts=void 0;var ts=require("typescript");var ASSERT_LOCATION="packages/firestore/src/util/assert.ts";function removeAsserts(program){var removeAsserts=new RemoveAsserts(program.getTypeChecker());return function(context){return function(file){return removeAsserts.visitNodeAndChildren(file,context)}}}exports.removeAsserts=removeAsserts;var RemoveAsserts=function(){function RemoveAsserts(typeChecker){this.typeChecker=typeChecker}RemoveAsserts.prototype.visitNodeAndChildren=function(node,context){var _this=this;return ts.visitEachChild(this.visitNode(node),(function(childNode){return _this.visitNodeAndChildren(childNode,context)}),context)};RemoveAsserts.prototype.visitNode=function(node){var updatedNode=null;if(ts.isCallExpression(node)){var signature=this.typeChecker.getResolvedSignature(node);if(signature&&signature.declaration&&signature.declaration.kind===ts.SyntaxKind.FunctionDeclaration){var declaration=signature.declaration;if(declaration&&declaration.getSourceFile().fileName.indexOf(ASSERT_LOCATION)>=0){var method=declaration.name.text;if(method==="debugAssert"){updatedNode=ts.createOmittedExpression()}else if(method==="hardAssert"){updatedNode=ts.createCall(declaration.name,undefined,[node.arguments[0]])}else if(method==="fail"){updatedNode=ts.createCall(declaration.name,undefined,[])}}}}if(updatedNode){ts.setSourceMapRange(updatedNode,ts.getSourceMapRange(node));return updatedNode}else{return node}};return RemoveAsserts}(); diff --git a/packages/firestore/scripts/remove-asserts.ts b/packages/firestore/scripts/remove-asserts.ts index 7fcb9d1b877..f195f7bd2ab 100644 --- a/packages/firestore/scripts/remove-asserts.ts +++ b/packages/firestore/scripts/remove-asserts.ts @@ -64,7 +64,7 @@ class RemoveAsserts { ) { const method = declaration.name!.text; if (method === 'debugAssert') { - updatedNode = ts.createEmptyStatement(); + updatedNode = ts.createOmittedExpression(); } else if (method === 'hardAssert') { // Remove the log message but keep the assertion updatedNode = ts.createCall( diff --git a/packages/firestore/src/platform/browser_lite/fetch_connection.ts b/packages/firestore/src/platform/browser_lite/fetch_connection.ts index 432a2e7073f..cad3c372ad5 100644 --- a/packages/firestore/src/platform/browser_lite/fetch_connection.ts +++ b/packages/firestore/src/platform/browser_lite/fetch_connection.ts @@ -61,7 +61,8 @@ export class FetchConnection extends RestConnection { headers, body: requestJson }); - } catch (err) { + } catch (e) { + const err = e as { status: number | undefined; statusText: string }; throw new FirestoreError( mapCodeFromHttpStatus(err.status), 'Request failed with error: ' + err.statusText diff --git a/packages/firestore/src/util/types.ts b/packages/firestore/src/util/types.ts index be547455983..c298bfe2131 100644 --- a/packages/firestore/src/util/types.ts +++ b/packages/firestore/src/util/types.ts @@ -61,7 +61,7 @@ export interface WindowLike { /** The subset of the browser's Document interface used by the SDK. */ export interface DocumentLike { - readonly visibilityState: VisibilityState; + readonly visibilityState: DocumentVisibilityState; addEventListener(type: string, listener: EventListener): void; removeEventListener(type: string, listener: EventListener): void; } diff --git a/packages/firestore/test/integration/api_internal/transaction.test.ts b/packages/firestore/test/integration/api_internal/transaction.test.ts index 7eab6d7d53d..54cca274e98 100644 --- a/packages/firestore/test/integration/api_internal/transaction.test.ts +++ b/packages/firestore/test/integration/api_internal/transaction.test.ts @@ -17,6 +17,7 @@ import { expect } from 'chai'; +import { FirestoreError } from '../../../src'; import { DEFAULT_TRANSACTION_OPTIONS } from '../../../src/core/transaction_options'; import { TimerId } from '../../../src/util/async_queue'; import { Deferred } from '../../util/promise'; @@ -155,7 +156,8 @@ apiDescribe( await transaction.set(docRef, { count: 16 }); }); expect.fail('transaction should fail'); - } catch (err) { + } catch (e) { + const err = e as FirestoreError; expect(err).to.exist; expect(err.code).to.equal('aborted'); } @@ -194,7 +196,8 @@ apiDescribe( options ); expect.fail('transaction should fail'); - } catch (err) { + } catch (e) { + const err = e as FirestoreError; expect(err).to.exist; expect(err.code).to.equal('aborted'); } diff --git a/packages/firestore/test/unit/local/indexeddb_persistence.test.ts b/packages/firestore/test/unit/local/indexeddb_persistence.test.ts index 674e893fabe..991b149cfc7 100644 --- a/packages/firestore/test/unit/local/indexeddb_persistence.test.ts +++ b/packages/firestore/test/unit/local/indexeddb_persistence.test.ts @@ -1310,8 +1310,8 @@ describe('IndexedDb: canActAsPrimary', () => { after(() => SimpleDb.delete(INDEXEDDB_TEST_DATABASE_NAME)); - const visible: VisibilityState = 'visible'; - const hidden: VisibilityState = 'hidden'; + const visible: DocumentVisibilityState = 'visible'; + const hidden: DocumentVisibilityState = 'hidden'; const networkEnabled = true; const networkDisabled = false; const primary = true; @@ -1319,9 +1319,9 @@ describe('IndexedDb: canActAsPrimary', () => { type ExpectedPrimaryStateTestCase = [ boolean, - VisibilityState, + DocumentVisibilityState, boolean, - VisibilityState, + DocumentVisibilityState, boolean ]; diff --git a/packages/firestore/test/unit/specs/spec_test_runner.ts b/packages/firestore/test/unit/specs/spec_test_runner.ts index 6a649bb213f..8a6909b3f2e 100644 --- a/packages/firestore/test/unit/specs/spec_test_runner.ts +++ b/packages/firestore/test/unit/specs/spec_test_runner.ts @@ -1571,7 +1571,7 @@ export interface SpecWatchEntity { // PORTING NOTE: Only used by web multi-tab tests. export interface SpecClientState { /** The visibility state of the browser tab running the client. */ - visibility?: VisibilityState; + visibility?: DocumentVisibilityState; /** Whether this tab should try to forcefully become primary. */ primary?: true; } diff --git a/packages/firestore/test/util/test_platform.ts b/packages/firestore/test/util/test_platform.ts index 13b0086b3a4..7803a2fb3c6 100644 --- a/packages/firestore/test/util/test_platform.ts +++ b/packages/firestore/test/util/test_platform.ts @@ -93,10 +93,10 @@ export function testWindow( * `Document` fake that implements the `visibilitychange` API used by Firestore. */ export class FakeDocument implements DocumentLike { - private _visibilityState: VisibilityState = 'hidden'; + private _visibilityState: DocumentVisibilityState = 'hidden'; private visibilityListener: EventListener | null = null; - get visibilityState(): VisibilityState { + get visibilityState(): DocumentVisibilityState { return this._visibilityState; } @@ -114,7 +114,7 @@ export class FakeDocument implements DocumentLike { } } - raiseVisibilityEvent(visibility: VisibilityState): void { + raiseVisibilityEvent(visibility: DocumentVisibilityState): void { this._visibilityState = visibility; if (this.visibilityListener) { this.visibilityListener(new Event('visibilitychange')); diff --git a/yarn.lock b/yarn.lock index 47ba68aa47f..97f84385334 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1815,13 +1815,6 @@ lodash.snakecase "^4.1.1" p-defer "^3.0.0" -"@grpc/grpc-js@^1.3.2": - version "1.3.7" - resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.7.tgz#58b687aff93b743aafde237fd2ee9a3259d7f2d8" - integrity sha512-CKQVuwuSPh40tgOkR7c0ZisxYRiN05PcKPW72mQL5y++qd7CwBRoaJZvU5xfXnCJDFBmS3qZGQ71Frx6Ofo2XA== - dependencies: - "@types/node" ">=12.12.47" - "@grpc/grpc-js@~1.6.0": version "1.6.7" resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz#4c4fa998ff719fe859ac19fe977fdef097bb99aa" @@ -1830,6 +1823,14 @@ "@grpc/proto-loader" "^0.6.4" "@types/node" ">=12.12.47" +"@grpc/grpc-js@~1.7.0": + version "1.7.3" + resolved "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz#f2ea79f65e31622d7f86d4b4c9ae38f13ccab99a" + integrity sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog== + dependencies: + "@grpc/proto-loader" "^0.7.0" + "@types/node" ">=12.12.47" + "@grpc/proto-loader@^0.6.12", "@grpc/proto-loader@^0.6.13", "@grpc/proto-loader@^0.6.4": version "0.6.13" resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz#008f989b72a40c60c96cd4088522f09b05ac66bc" @@ -1841,6 +1842,17 @@ protobufjs "^6.11.3" yargs "^16.2.0" +"@grpc/proto-loader@^0.7.0": + version "0.7.3" + resolved "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz#75a6f95b51b85c5078ac7394da93850c32d36bb8" + integrity sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^7.0.0" + yargs "^16.2.0" + "@gulp-sourcemaps/identity-map@^2.0.1": version "2.0.1" resolved "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz#a6e8b1abec8f790ec6be2b8c500e6e68037c0019" @@ -11889,6 +11901,11 @@ long@^4.0.0: resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" + integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A== + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -14128,6 +14145,24 @@ protobufjs@6.11.3, protobufjs@^6.11.3: "@types/node" ">=13.7.0" long "^4.0.0" +protobufjs@^7.0.0: + version "7.1.2" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz#a0cf6aeaf82f5625bffcf5a38b7cd2a7de05890c" + integrity sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + protocols@^1.1.0, protocols@^1.4.0: version "1.4.8" resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8"