From 35414cdfac9445c72b2eafbdaef066276f299ed8 Mon Sep 17 00:00:00 2001 From: Alka Trivedi Date: Mon, 13 Jul 2026 08:51:24 +0530 Subject: [PATCH 1/3] perf: eliminate extend overhead --- handwritten/spanner/src/batch-transaction.ts | 7 +- handwritten/spanner/src/database.ts | 64 +++++----- handwritten/spanner/src/index.ts | 106 ++++++++-------- handwritten/spanner/src/instance-config.ts | 3 +- handwritten/spanner/src/instance.ts | 120 +++++++++---------- handwritten/spanner/src/session.ts | 3 +- 6 files changed, 150 insertions(+), 153 deletions(-) diff --git a/handwritten/spanner/src/batch-transaction.ts b/handwritten/spanner/src/batch-transaction.ts index 4f88d9a65948..1ea2557d0efd 100644 --- a/handwritten/spanner/src/batch-transaction.ts +++ b/handwritten/spanner/src/batch-transaction.ts @@ -16,7 +16,6 @@ import {PreciseDate} from '@google-cloud/precise-date'; import {promisifyAll} from '@google-cloud/promisify'; -import * as extend from 'extend'; import { ExecuteSqlRequest, ReadCallback, @@ -233,11 +232,11 @@ class BatchTransaction extends Snapshot { 'BatchTransaction.createPartitions_', traceConfig, span => { - const query = extend({}, config.reqOpts, { + const query = Object.assign({}, config.reqOpts, { session: this.session.formattedName_, transaction: {id: this.id}, }); - config.reqOpts = extend({}, query); + config.reqOpts = Object.assign({}, query); const headers = { [CLOUD_RESOURCE_HEADER]: (this.session.parent as Database) .formattedName_, @@ -253,7 +252,7 @@ class BatchTransaction extends Snapshot { } const partitions = resp.partitions.map(partition => { - return extend({}, query, partition); + return Object.assign({}, query, partition); }); if (resp.transaction) { diff --git a/handwritten/spanner/src/database.ts b/handwritten/spanner/src/database.ts index 38ddef26d14e..9246d17f0250 100644 --- a/handwritten/spanner/src/database.ts +++ b/handwritten/spanner/src/database.ts @@ -596,7 +596,7 @@ class Database extends common.GrpcServiceObject { typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; const reqOpts = { - database: extend( + database: Object.assign( { name: this.formattedName_, }, @@ -1027,7 +1027,7 @@ class Database extends common.GrpcServiceObject { typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; const options = typeof optionsOrCallback === 'object' && optionsOrCallback - ? extend({}, optionsOrCallback) + ? Object.assign({}, optionsOrCallback) : ({} as CreateSessionOptions); const reqOpts: google.spanner.v1.ICreateSessionRequest = { @@ -1951,7 +1951,7 @@ class Database extends common.GrpcServiceObject { ? optionsOrCallback : ({} as GetSessionsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { database: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -1959,14 +1959,14 @@ class Database extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetSessionsOptions).pageSize, - pageToken: (gaxOpts as GetSessionsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetSessionsOptions).pageSize; + const pageToken = (gaxOpts as GetSessionsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetSessionsOptions).pageSize; delete (gaxOpts as GetSessionsOptions).pageToken; } @@ -2004,7 +2004,7 @@ class Database extends common.GrpcServiceObject { } span.end(); const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, sessionInstances!, nextQuery, ...args); }, @@ -2055,7 +2055,7 @@ class Database extends common.GrpcServiceObject { getSessionsStream(options: GetSessionsOptions = {}): NodeJS.ReadableStream { const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { database: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -2063,14 +2063,14 @@ class Database extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetSessionsOptions).pageSize, - pageToken: (gaxOpts as GetSessionsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetSessionsOptions).pageSize; + const pageToken = (gaxOpts as GetSessionsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetSessionsOptions).pageSize; delete (gaxOpts as GetSessionsOptions).pageToken; } @@ -2476,21 +2476,21 @@ class Database extends common.GrpcServiceObject { typeof optionsOrCallback === 'object' ? optionsOrCallback : {}; const callback = typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; - let reqOpts = { + const reqOpts = { parent: this.formattedName_, }; // Copy over pageSize and pageToken values from gaxOptions. // However, values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetDatabaseRolesOptions).pageSize, - pageToken: (gaxOpts as GetDatabaseRolesOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetDatabaseRolesOptions).pageSize; + const pageToken = (gaxOpts as GetDatabaseRolesOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetDatabaseRolesOptions).pageSize; delete (gaxOpts as GetDatabaseRolesOptions).pageToken; } @@ -2508,7 +2508,7 @@ class Database extends common.GrpcServiceObject { }, (err, roles, nextPageRequest, ...args) => { const nextQuery = nextPageRequest! - ? extend({}, gaxOpts, nextPageRequest!) + ? Object.assign({}, gaxOpts, nextPageRequest!) : null; callback!(err, roles, nextQuery, ...args); @@ -4051,7 +4051,7 @@ class Database extends common.GrpcServiceObject { }; } const reqOpts: databaseAdmin.spanner.admin.database.v1.IUpdateDatabaseDdlRequest = - extend( + Object.assign( { database: this.formattedName_, }, diff --git a/handwritten/spanner/src/index.ts b/handwritten/spanner/src/index.ts index 4c59d917ac23..9b3e15823e52 100644 --- a/handwritten/spanner/src/index.ts +++ b/handwritten/spanner/src/index.ts @@ -739,7 +739,7 @@ class Spanner extends GrpcService { const reqOpts = { parent: this.projectFormattedName_, instanceId: formattedName.split('/').pop(), - instance: extend( + instance: Object.assign( { name: formattedName, displayName, @@ -892,7 +892,7 @@ class Spanner extends GrpcService { const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: 'projects/' + this.projectId, }); @@ -901,14 +901,14 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetInstancesOptions).pageSize, - pageToken: (gaxOpts as GetInstancesOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetInstancesOptions).pageSize; + const pageToken = (gaxOpts as GetInstancesOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetInstancesOptions).pageToken; delete (gaxOpts as GetInstancesOptions).pageSize; } @@ -931,7 +931,7 @@ class Spanner extends GrpcService { }); } const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, instanceInstances, nextQuery, ...args); }, @@ -977,8 +977,7 @@ class Spanner extends GrpcService { */ getInstancesStream(options: GetInstancesOptions = {}): NodeJS.ReadableStream { const gaxOpts = extend(true, {}, options.gaxOptions); - - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: 'projects/' + this.projectId, }); delete reqOpts.gaxOptions; @@ -986,14 +985,14 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetInstancesOptions).pageSize, - pageToken: (gaxOpts as GetInstancesOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetInstancesOptions).pageSize; + const pageToken = (gaxOpts as GetInstancesOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetInstancesOptions).pageSize; delete (gaxOpts as GetInstancesOptions).pageToken; } @@ -1141,7 +1140,7 @@ class Spanner extends GrpcService { const reqOpts = { parent: this.projectFormattedName_, instanceConfigId: formattedName.split('/').pop(), - instanceConfig: extend( + instanceConfig: Object.assign( { name: formattedName, displayName, @@ -1286,7 +1285,7 @@ class Spanner extends GrpcService { : ({} as GetInstanceConfigsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: 'projects/' + this.projectId, }); delete reqOpts.gaxOptions; @@ -1294,14 +1293,14 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetInstanceConfigsOptions).pageSize, - pageToken: (gaxOpts as GetInstanceConfigsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetInstanceConfigsOptions).pageSize; + const pageToken = (gaxOpts as GetInstanceConfigsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetInstanceConfigsOptions).pageSize; delete (gaxOpts as GetInstanceConfigsOptions).pageToken; } @@ -1316,7 +1315,7 @@ class Spanner extends GrpcService { }, (err, instanceConfigs, nextPageRequest, ...args) => { const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, instanceConfigs, nextQuery, ...args); }, @@ -1363,21 +1362,21 @@ class Spanner extends GrpcService { ): NodeJS.ReadableStream { const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: 'projects/' + this.projectId, }); // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetInstancesOptions).pageSize, - pageToken: (gaxOpts as GetInstancesOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetInstancesOptions).pageSize; + const pageToken = (gaxOpts as GetInstancesOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetInstancesOptions).pageSize; delete (gaxOpts as GetInstancesOptions).pageToken; } @@ -1469,13 +1468,13 @@ class Spanner extends GrpcService { ? optionsOrCallback : ({} as GetInstanceConfigOptions); - const reqOpts = extend( + const reqOpts = Object.assign( {}, { name: 'projects/' + this.projectId + '/instanceConfigs/' + name, }, ); - const gaxOpts = extend({}, options.gaxOptions); + const gaxOpts = Object.assign({}, options.gaxOptions); return this.request( { @@ -1577,7 +1576,7 @@ class Spanner extends GrpcService { ? optionsOrCallback : ({} as GetInstanceConfigOperationsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.projectFormattedName_, }); delete reqOpts.gaxOptions; @@ -1585,14 +1584,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However, values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetInstanceConfigOperationsOptions).pageSize, - pageToken: (gaxOpts as GetInstanceConfigOperationsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetInstanceConfigOperationsOptions).pageSize; + const pageToken = (gaxOpts as GetInstanceConfigOperationsOptions) + .pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetInstanceConfigOperationsOptions).pageSize; delete (gaxOpts as GetInstanceConfigOperationsOptions).pageToken; } @@ -1607,7 +1607,7 @@ class Spanner extends GrpcService { }, (err, operations, nextPageRequest, ...args) => { const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, operations, nextQuery, ...args); diff --git a/handwritten/spanner/src/instance-config.ts b/handwritten/spanner/src/instance-config.ts index 626edee9d7ed..5566c23590fb 100644 --- a/handwritten/spanner/src/instance-config.ts +++ b/handwritten/spanner/src/instance-config.ts @@ -36,7 +36,6 @@ import { } from './index'; import {promisifyAll} from '@google-cloud/promisify'; import {CallOptions, grpc} from 'google-gax'; -import extend = require('extend'); export type IOperation = instanceAdmin.longrunning.IOperation; @@ -316,7 +315,7 @@ class InstanceConfig extends common.GrpcServiceObject { callback?: SetInstanceConfigMetadataCallback, ): void | Promise { const reqOpts = { - instanceConfig: extend( + instanceConfig: Object.assign( { name: this.formattedName_, }, diff --git a/handwritten/spanner/src/instance.ts b/handwritten/spanner/src/instance.ts index 2315d781663d..9e89b2b58e37 100644 --- a/handwritten/spanner/src/instance.ts +++ b/handwritten/spanner/src/instance.ts @@ -404,7 +404,7 @@ class Instance extends common.GrpcServiceObject { ? optionsOrCallback : ({} as GetBackupsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -412,14 +412,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -445,7 +445,7 @@ class Instance extends common.GrpcServiceObject { }); } const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback(err, backupInstances, nextQuery, ...args); @@ -495,7 +495,7 @@ class Instance extends common.GrpcServiceObject { getBackupsStream(options: GetBackupsOptions = {}): NodeJS.ReadableStream { const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -503,14 +503,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -610,7 +610,7 @@ class Instance extends common.GrpcServiceObject { ? optionsOrCallback : ({} as GetBackupOperationsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -618,14 +618,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -643,7 +643,7 @@ class Instance extends common.GrpcServiceObject { }, (err, operations, nextPageRequest, ...args) => { const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, operations, nextQuery, ...args); @@ -738,7 +738,7 @@ class Instance extends common.GrpcServiceObject { ? optionsOrCallback : ({} as GetDatabaseOperationsOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -746,14 +746,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -771,7 +771,7 @@ class Instance extends common.GrpcServiceObject { }, (err, operations, nextPageRequest, ...args) => { const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback!(err, operations, nextQuery, ...args); @@ -899,7 +899,7 @@ class Instance extends common.GrpcServiceObject { ) { createStatement = 'CREATE DATABASE "' + name.split('/').pop() + '"'; } - const reqOpts = extend( + const reqOpts = Object.assign( { parent: this.formattedName_, createStatement: createStatement, @@ -1338,7 +1338,7 @@ class Instance extends common.GrpcServiceObject { : ({} as GetDatabasesOptions); const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -1346,14 +1346,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -1380,7 +1380,7 @@ class Instance extends common.GrpcServiceObject { }); } const nextQuery = nextPageRequest! - ? extend({}, options, nextPageRequest!) + ? Object.assign({}, options, nextPageRequest!) : null; callback(err, databases, nextQuery, ...args); @@ -1430,7 +1430,7 @@ class Instance extends common.GrpcServiceObject { getDatabasesStream(options: GetDatabasesOptions = {}): NodeJS.ReadableStream { const gaxOpts = extend(true, {}, options.gaxOptions); - let reqOpts = extend({}, options, { + const reqOpts = Object.assign({}, options, { parent: this.formattedName_, }); delete reqOpts.gaxOptions; @@ -1438,14 +1438,14 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - reqOpts = extend( - {}, - { - pageSize: (gaxOpts as GetBackupsOptions).pageSize, - pageToken: (gaxOpts as GetBackupsOptions).pageToken, - }, - reqOpts, - ); + const pageSize = (gaxOpts as GetBackupsOptions).pageSize; + const pageToken = (gaxOpts as GetBackupsOptions).pageToken; + if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { + (reqOpts as any).pageSize = pageSize; + } + if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { + (reqOpts as any).pageToken = pageToken; + } delete (gaxOpts as GetBackupsOptions).pageSize; delete (gaxOpts as GetBackupsOptions).pageToken; } @@ -1632,7 +1632,7 @@ class Instance extends common.GrpcServiceObject { typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!; const reqOpts = { - instance: extend( + instance: Object.assign( { name: this.formattedName_, }, diff --git a/handwritten/spanner/src/session.ts b/handwritten/spanner/src/session.ts index 3ebc728ed1ac..6f73cdb54406 100644 --- a/handwritten/spanner/src/session.ts +++ b/handwritten/spanner/src/session.ts @@ -21,7 +21,6 @@ // eslint-disable-next-line @typescript-eslint/no-var-requires const common = require('./common-grpc/service-object'); import {promisifyAll} from '@google-cloud/promisify'; -import * as extend from 'extend'; import * as r from 'teeny-request'; import { Snapshot, @@ -250,7 +249,7 @@ export class Session extends common.GrpcServiceObject { return; } - extend(this, session); + Object.assign(this, session); callback(null, this, apiResponse); }); }, From 290051221f1bdd0ec96dfb6131031955942bfde7 Mon Sep 17 00:00:00 2001 From: Alka Trivedi Date: Mon, 13 Jul 2026 09:03:15 +0530 Subject: [PATCH 2/3] tests --- handwritten/spanner/src/database.ts | 45 +++++----- handwritten/spanner/src/index.ts | 66 ++++++++------ handwritten/spanner/src/instance.ts | 90 +++++++++---------- handwritten/spanner/test/backup.ts | 19 ++-- handwritten/spanner/test/batch-transaction.ts | 11 ++- handwritten/spanner/test/database.ts | 40 +++++---- handwritten/spanner/test/index.ts | 58 ++++++------ handwritten/spanner/test/instance-config.ts | 13 ++- handwritten/spanner/test/instance.ts | 79 ++++++++-------- handwritten/spanner/test/session-pool.ts | 3 +- handwritten/spanner/test/session.ts | 9 +- handwritten/spanner/test/table.ts | 7 +- 12 files changed, 221 insertions(+), 219 deletions(-) diff --git a/handwritten/spanner/src/database.ts b/handwritten/spanner/src/database.ts index 9246d17f0250..113361ecc0eb 100644 --- a/handwritten/spanner/src/database.ts +++ b/handwritten/spanner/src/database.ts @@ -1959,16 +1959,15 @@ class Database extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetSessionsOptions).pageSize; - const pageToken = (gaxOpts as GetSessionsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetSessionsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetSessionsOptions).pageSize; - delete (gaxOpts as GetSessionsOptions).pageToken; } const headers = this._metadataWithRequestId( @@ -2063,16 +2062,15 @@ class Database extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetSessionsOptions).pageSize; - const pageToken = (gaxOpts as GetSessionsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetSessionsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetSessionsOptions).pageSize; - delete (gaxOpts as GetSessionsOptions).pageToken; } return this.requestStream({ @@ -2483,16 +2481,15 @@ class Database extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However, values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetDatabaseRolesOptions).pageSize; - const pageToken = (gaxOpts as GetDatabaseRolesOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetDatabaseRolesOptions; + if (gax.pageSize !== undefined) { + (reqOpts as any).pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + (reqOpts as any).pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetDatabaseRolesOptions).pageSize; - delete (gaxOpts as GetDatabaseRolesOptions).pageToken; } this.request< diff --git a/handwritten/spanner/src/index.ts b/handwritten/spanner/src/index.ts index 9b3e15823e52..9388908a5781 100644 --- a/handwritten/spanner/src/index.ts +++ b/handwritten/spanner/src/index.ts @@ -901,13 +901,17 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetInstancesOptions).pageSize; - const pageToken = (gaxOpts as GetInstancesOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + if ( + (gaxOpts as GetInstancesOptions).pageSize !== undefined && + (reqOpts as any).pageSize === undefined + ) { + (reqOpts as any).pageSize = (gaxOpts as GetInstancesOptions).pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if ( + (gaxOpts as GetInstancesOptions).pageToken !== undefined && + (reqOpts as any).pageToken === undefined + ) { + (reqOpts as any).pageToken = (gaxOpts as GetInstancesOptions).pageToken; } delete (gaxOpts as GetInstancesOptions).pageToken; delete (gaxOpts as GetInstancesOptions).pageSize; @@ -985,16 +989,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetInstancesOptions).pageSize; - const pageToken = (gaxOpts as GetInstancesOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetInstancesOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetInstancesOptions).pageSize; - delete (gaxOpts as GetInstancesOptions).pageToken; } return this.requestStream({ @@ -1293,13 +1296,21 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetInstanceConfigsOptions).pageSize; - const pageToken = (gaxOpts as GetInstanceConfigsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + if ( + (gaxOpts as GetInstanceConfigsOptions).pageSize !== undefined && + (reqOpts as any).pageSize === undefined + ) { + (reqOpts as any).pageSize = ( + gaxOpts as GetInstanceConfigsOptions + ).pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if ( + (gaxOpts as GetInstanceConfigsOptions).pageToken !== undefined && + (reqOpts as any).pageToken === undefined + ) { + (reqOpts as any).pageToken = ( + gaxOpts as GetInstanceConfigsOptions + ).pageToken; } delete (gaxOpts as GetInstanceConfigsOptions).pageSize; delete (gaxOpts as GetInstanceConfigsOptions).pageToken; @@ -1369,16 +1380,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetInstancesOptions).pageSize; - const pageToken = (gaxOpts as GetInstancesOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetInstancesOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetInstancesOptions).pageSize; - delete (gaxOpts as GetInstancesOptions).pageToken; } delete reqOpts.gaxOptions; diff --git a/handwritten/spanner/src/instance.ts b/handwritten/spanner/src/instance.ts index 9e89b2b58e37..b42103110fd1 100644 --- a/handwritten/spanner/src/instance.ts +++ b/handwritten/spanner/src/instance.ts @@ -412,16 +412,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } this.request< @@ -503,16 +502,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } return this.requestStream({ @@ -618,16 +616,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } this.request< @@ -746,16 +743,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } this.request< @@ -1346,16 +1342,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } this.request< @@ -1438,16 +1433,15 @@ class Instance extends common.GrpcServiceObject { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetBackupsOptions).pageSize; - const pageToken = (gaxOpts as GetBackupsOptions).pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetBackupsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetBackupsOptions).pageSize; - delete (gaxOpts as GetBackupsOptions).pageToken; } return this.requestStream({ diff --git a/handwritten/spanner/test/backup.ts b/handwritten/spanner/test/backup.ts index a331f82beba9..04c49a427564 100644 --- a/handwritten/spanner/test/backup.ts +++ b/handwritten/spanner/test/backup.ts @@ -17,7 +17,6 @@ import * as assert from 'assert'; import {EventEmitter} from 'events'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; import {util} from '@google-cloud/common'; @@ -33,7 +32,7 @@ import EncryptionType = google.spanner.admin.database.v1.CreateBackupEncryptionC let promisified = false; // let callbackified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Backup') { return; @@ -157,8 +156,8 @@ describe('Backup', () => { it('should make the correct request', done => { const QUERY = {}; - const ORIGINAL_QUERY = extend({}, QUERY); - const expectedReqOpts = extend({}, QUERY, { + const ORIGINAL_QUERY = Object.assign({}, QUERY); + const expectedReqOpts = Object.assign({}, QUERY, { parent: INSTANCE_NAME, backupId: BACKUP_NAME, backup: { @@ -351,8 +350,8 @@ describe('Backup', () => { it('should make the correct request', done => { const QUERY = {}; - const ORIGINAL_QUERY = extend({}, QUERY); - const expectedReqOpts = extend({}, QUERY, { + const ORIGINAL_QUERY = Object.assign({}, QUERY); + const expectedReqOpts = Object.assign({}, QUERY, { name: BACKUP_FORMATTED_NAME, }); @@ -623,8 +622,8 @@ describe('Backup', () => { it('should make the correct request', done => { const QUERY = {}; - const ORIGINAL_QUERY = extend({}, QUERY); - const expectedReqOpts = extend({}, QUERY, { + const ORIGINAL_QUERY = Object.assign({}, QUERY); + const expectedReqOpts = Object.assign({}, QUERY, { backup: { name: BACKUP_FORMATTED_NAME, expireTime: EXP_NEW_EXPIRE_TIME.toStruct(), @@ -683,8 +682,8 @@ describe('Backup', () => { describe('delete', () => { it('should make the correct request', done => { const QUERY = {}; - const ORIGINAL_QUERY = extend({}, QUERY); - const expectedReqOpts = extend({}, QUERY, { + const ORIGINAL_QUERY = Object.assign({}, QUERY); + const expectedReqOpts = Object.assign({}, QUERY, { name: BACKUP_FORMATTED_NAME, }); diff --git a/handwritten/spanner/test/batch-transaction.ts b/handwritten/spanner/test/batch-transaction.ts index 6f8d13894975..6fb7907ca2a0 100644 --- a/handwritten/spanner/test/batch-transaction.ts +++ b/handwritten/spanner/test/batch-transaction.ts @@ -20,7 +20,6 @@ import {util} from '@google-cloud/common'; import * as pfy from '@google-cloud/promisify'; import * as assert from 'assert'; import {before, beforeEach, afterEach, describe, it} from 'mocha'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; @@ -36,7 +35,7 @@ import {ExecuteSqlRequest} from '../src/transaction'; import {CallOptions} from 'google-gax'; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'BatchTransaction') { return; @@ -313,7 +312,11 @@ describe('BatchTransaction', () => { assert.ifError(err); parts.forEach((partition, i) => { - const expectedPartition = extend({}, expectedQuery, PARTITIONS[i]); + const expectedPartition = Object.assign( + {}, + expectedQuery, + PARTITIONS[i], + ); assert.deepStrictEqual(partition, expectedPartition); }); @@ -322,7 +325,7 @@ describe('BatchTransaction', () => { }); it('should update the transaction with returned metadata', done => { - const response = extend({}, RESPONSE, { + const response = Object.assign({}, RESPONSE, { transaction: { id: ID, readTimestamp: TIMESTAMP, diff --git a/handwritten/spanner/test/database.ts b/handwritten/spanner/test/database.ts index 106587cef083..e1b3b45cfa0f 100644 --- a/handwritten/spanner/test/database.ts +++ b/handwritten/spanner/test/database.ts @@ -57,7 +57,7 @@ import { } from '../src/request_id_header'; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Database') { return; @@ -305,13 +305,13 @@ describe('Database', () => { }, }).Database; // The following commented out line is the one that will trigger the error. - // DatabaseCached = extend({}, Database); + // DatabaseCached = Object.assign({}, Database); DatabaseCached = Object.assign({}, Database); }); beforeEach(() => { fakeCodec.encode = util.noop; - extend(Database, DatabaseCached); + Object.assign(Database, DatabaseCached); database = new Database(INSTANCE, NAME, POOL_OPTIONS); database.parent = INSTANCE; database.databaseRole = 'parent_role'; @@ -385,7 +385,7 @@ describe('Database', () => { it('should inherit from ServiceObject', done => { const options = {}; - const instanceInstance = extend({}, INSTANCE, { + const instanceInstance = Object.assign({}, INSTANCE, { createDatabase(name, options_, callback) { assert.strictEqual(name, database.formattedName_); assert.strictEqual(options_, options); @@ -591,7 +591,7 @@ describe('Database', () => { const METADATA = { needsToBeSnakeCased: true, } as inst.IDatabase; - const ORIGINAL_METADATA = extend({}, METADATA); + const ORIGINAL_METADATA = Object.assign({}, METADATA); it('should make and return the request', () => { const requestReturnValue = {}; @@ -602,7 +602,7 @@ describe('Database', () => { assert.strictEqual(config.client, 'DatabaseAdminClient'); assert.strictEqual(config.method, 'updateDatabase'); - const expectedReqOpts = extend({}, METADATA, { + const expectedReqOpts = Object.assign({}, METADATA, { name: database.formattedName_, }); @@ -1648,7 +1648,7 @@ describe('Database', () => { database.request = config => { assert.deepStrictEqual( config.reqOpts, - extend({}, CONFIG.reqOpts, { + Object.assign({}, CONFIG.reqOpts, { session: SESSION.formattedName_, }), ); @@ -2182,7 +2182,7 @@ describe('Database', () => { otherConfiguration: {}, }; - const expectedReqOpts = extend({}, config, { + const expectedReqOpts = Object.assign({}, config, { database: database.formattedName_, }); @@ -2657,7 +2657,7 @@ describe('Database', () => { gaxOptions?: {}; } = {a: 'a', gaxOptions: gaxOpts}; - const expectedReqOpts = extend({}, options, { + const expectedReqOpts = Object.assign({}, options, { database: database.formattedName_, }); @@ -2687,7 +2687,7 @@ describe('Database', () => { a: string; gaxOptions?: {pageSize: number; pageToken: string; timeout: number}; } = {a: 'a', gaxOptions: gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, options, { @@ -2727,7 +2727,7 @@ describe('Database', () => { gaxOptions, }, ); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, options, { @@ -2812,7 +2812,11 @@ describe('Database', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend({}, GETSESSIONOPTIONS, NEXTPAGEREQUEST); + const EXPECTEDNEXTQUERY = Object.assign( + {}, + GETSESSIONOPTIONS, + NEXTPAGEREQUEST, + ); database.request = (config, callback) => { callback(...RESPONSE); }; @@ -2831,7 +2835,7 @@ describe('Database', () => { const returnValue = {} as Duplex; it('should make and return the correct gax API call', () => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { database: database.formattedName_, }); delete expectedReqOpts.gaxOptions; @@ -2858,7 +2862,7 @@ describe('Database', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { database: database.formattedName_, @@ -2892,7 +2896,7 @@ describe('Database', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { database: database.formattedName_, @@ -3501,8 +3505,8 @@ describe('Database', () => { it('should make the correct request', done => { const QUERY = {}; - const ORIGINAL_QUERY = extend({}, QUERY); - const expectedReqOpts = extend({}, QUERY, { + const ORIGINAL_QUERY = Object.assign({}, QUERY); + const expectedReqOpts = Object.assign({}, QUERY, { databaseId: NAME, parent: INSTANCE.formattedName_, backup: BACKUP_FORMATTED_NAME, @@ -3526,7 +3530,7 @@ describe('Database', () => { it('should accept a backup name', done => { const QUERY = {}; - const expectedReqOpts = extend({}, QUERY, { + const expectedReqOpts = Object.assign({}, QUERY, { databaseId: NAME, parent: INSTANCE.formattedName_, backup: BACKUP_FORMATTED_NAME, diff --git a/handwritten/spanner/test/index.ts b/handwritten/spanner/test/index.ts index 9dcae83797a9..efdf23272361 100644 --- a/handwritten/spanner/test/index.ts +++ b/handwritten/spanner/test/index.ts @@ -90,7 +90,7 @@ const fakeGrpcGcp = () => { }; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Spanner') { return; @@ -223,7 +223,7 @@ describe('Spanner', () => { afterEach(() => sandbox.restore()); describe('instantiation', () => { - const EXPECTED_OPTIONS = extend({}, OPTIONS, { + const EXPECTED_OPTIONS = Object.assign({}, OPTIONS, { libName: 'gccl', libVersion: require('../../package.json').version, scopes: [], @@ -266,7 +266,7 @@ describe('Spanner', () => { const spanner = new Spanner(OPTIONS); - const expectedOptions = extend({}, EXPECTED_OPTIONS, { + const expectedOptions = Object.assign({}, EXPECTED_OPTIONS, { scopes: expectedScopes, }); @@ -281,7 +281,7 @@ describe('Spanner', () => { 'grpc.keepalive_time_ms': 300, 'grpc.keepalive_timeout_ms': 100, }; - const options = extend({}, OPTIONS, keepaliveOptions); + const options = Object.assign({}, OPTIONS, keepaliveOptions); const spanner = new Spanner(options); const expectedOptions = Object.assign( {}, @@ -879,7 +879,7 @@ describe('Spanner', () => { const CONFIG: any = { config: 'b', }; - const ORIGINAL_CONFIG = extend({}, CONFIG); + const ORIGINAL_CONFIG = Object.assign({}, CONFIG); beforeEach(() => { PATH = 'projects/' + spanner.projectId + '/instances/' + NAME; @@ -999,7 +999,7 @@ describe('Spanner', () => { describe('config.nodes', () => { it('should rename to nodeCount', () => { - const config = extend({}, CONFIG, {nodes: 10}); + const config = Object.assign({}, CONFIG, {nodes: 10}); const stub = sandbox.stub(spanner, 'request'); spanner.createInstance(NAME, config, assert.ifError); @@ -1013,8 +1013,8 @@ describe('Spanner', () => { describe('config.config', () => { it('should format a name', done => { const name = 'config-name'; - const config = extend({}, CONFIG, {config: name}); - const originalConfig = extend({}, config); + const config = Object.assign({}, CONFIG, {config: name}); + const originalConfig = Object.assign({}, config); spanner.request = config_ => { assert.deepStrictEqual(config, originalConfig); const reqOpts = config_.reqOpts; @@ -1084,14 +1084,14 @@ describe('Spanner', () => { const OPTIONS: GetInstancesOptions = { filter: 'b', }; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); beforeEach(() => { spanner.request = util.noop; }); it('should make the correct request', done => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: 'projects/' + spanner.projectId, }); @@ -1117,7 +1117,7 @@ describe('Spanner', () => { const pageToken = 'token'; const gaxOptions = {pageSize, pageToken, timeout: 1000}; const options = Object.assign({}, OPTIONS, {gaxOptions}); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1152,7 +1152,7 @@ describe('Spanner', () => { pageToken: optionsPageToken, gaxOptions, }); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1258,7 +1258,7 @@ describe('Spanner', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETINSTANCESOPTIONS, NEXTPAGEREQUEST, @@ -1279,11 +1279,11 @@ describe('Spanner', () => { const OPTIONS: GetInstancesOptions = { filter: 'b', }; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); const returnValue = {}; it('should make and return the correct gax API call', () => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: 'projects/' + spanner.projectId, }); @@ -1309,7 +1309,7 @@ describe('Spanner', () => { const pageToken = 'token'; const gaxOptions = {pageSize, pageToken, timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: 'projects/' + spanner.projectId, @@ -1344,7 +1344,7 @@ describe('Spanner', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: 'projects/' + spanner.projectId, @@ -1391,7 +1391,7 @@ describe('Spanner', () => { const CONFIG: any = { baseConfig: 'x', }; - const ORIGINAL_CONFIG = extend({}, CONFIG); + const ORIGINAL_CONFIG = Object.assign({}, CONFIG); beforeEach(() => { PATH = 'projects/' + spanner.projectId + '/instanceConfigs/' + NAME; @@ -1556,7 +1556,7 @@ describe('Spanner', () => { pageSize: 5, gaxOptions: {autoPaginate: false}, }; - const expectedQuery = extend({}, options, { + const expectedQuery = Object.assign({}, options, { parent: 'projects/' + spanner.projectId, }); delete expectedQuery.gaxOptions; @@ -1589,7 +1589,7 @@ describe('Spanner', () => { const pageToken = 'token'; const gaxOptions = {pageSize, pageToken, timeout: 1000}; const options = Object.assign({}, OPTIONS, {gaxOptions}); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1624,7 +1624,7 @@ describe('Spanner', () => { pageToken: optionsPageToken, gaxOptions, }); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1677,7 +1677,7 @@ describe('Spanner', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETINSTANCECONFIGSOPTIONS, NEXTPAGEREQUEST, @@ -1697,7 +1697,7 @@ describe('Spanner', () => { const OPTIONS = { a: 'b', } as spnr.GetInstanceConfigOperationsOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should make the correct request', done => { const gaxOpts = { @@ -1705,7 +1705,7 @@ describe('Spanner', () => { }; const options = {a: 'b', gaxOptions: gaxOpts}; - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: spanner.projectFormattedName_, }); @@ -1730,7 +1730,7 @@ describe('Spanner', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = Object.assign({}, OPTIONS, {gaxOptions}); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1764,7 +1764,7 @@ describe('Spanner', () => { pageToken: optionsPageToken, gaxOptions, }); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1814,7 +1814,7 @@ describe('Spanner', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTED_NEXT_QUERY = extend( + const EXPECTED_NEXT_QUERY = Object.assign( {}, GET_INSTANCE_CONFIGS_OPERATIONS_OPTIONS, NEXT_PAGE_REQUEST, @@ -1844,7 +1844,7 @@ describe('Spanner', () => { const returnValue = {}; it('should make and return the correct gax API call', () => { - const expectedOptions: {gaxOptions?: {}} = extend({}, OPTIONS, { + const expectedOptions: {gaxOptions?: {}} = Object.assign({}, OPTIONS, { parent: 'projects/' + spanner.projectId, }); delete expectedOptions.gaxOptions; @@ -1937,7 +1937,7 @@ describe('Spanner', () => { gaxOptions, }, ); - const expectedReqOpts: {gaxOptions?: {}} = extend( + const expectedReqOpts: {gaxOptions?: {}} = Object.assign( {}, OPTIONS, { diff --git a/handwritten/spanner/test/instance-config.ts b/handwritten/spanner/test/instance-config.ts index eb5db6863927..dd050be447f0 100644 --- a/handwritten/spanner/test/instance-config.ts +++ b/handwritten/spanner/test/instance-config.ts @@ -18,7 +18,6 @@ import * as assert from 'assert'; import {before, beforeEach, afterEach, describe, it} from 'mocha'; import {grpc} from 'google-gax'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import * as pfy from '@google-cloud/promisify'; import * as sinon from 'sinon'; @@ -28,7 +27,7 @@ import {Spanner, GetInstanceConfigResponse} from '../src'; import {CLOUD_RESOURCE_HEADER} from '../src/common'; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'InstanceConfig') { return; @@ -100,7 +99,7 @@ describe('InstanceConfig', () => { }); it('should localize the request function', done => { - const spannerInstance = extend({}, SPANNER); + const spannerInstance = Object.assign({}, SPANNER); spannerInstance.request = function () { assert.strictEqual(this, spannerInstance); @@ -114,7 +113,7 @@ describe('InstanceConfig', () => { it('should inherit from ServiceObject', done => { const options = {}; - const spannerInstance = extend({}, SPANNER, { + const spannerInstance = Object.assign({}, SPANNER, { createInstanceConfig(name, options_, callback) { assert.strictEqual(name, instanceConfig.formattedName_); assert.strictEqual(options_, options); @@ -307,7 +306,7 @@ describe('InstanceConfig', () => { const METADATA = { needsToBeSnakeCased: true, } as instConfig.IInstanceConfig; - const ORIGINAL_METADATA = extend({}, METADATA); + const ORIGINAL_METADATA = Object.assign({}, METADATA); it('should make and return the request', () => { const requestReturnValue = {}; @@ -318,9 +317,9 @@ describe('InstanceConfig', () => { assert.strictEqual(config.client, 'InstanceAdminClient'); assert.strictEqual(config.method, 'updateInstanceConfig'); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, - extend({}, METADATA, { + Object.assign({}, METADATA, { name: instanceConfig.formattedName_, }), ) as instConfig.IInstanceConfig as instConfig.SetInstanceConfigMetadataRequest; diff --git a/handwritten/spanner/test/instance.ts b/handwritten/spanner/test/instance.ts index 46666908d006..294ed0616a76 100644 --- a/handwritten/spanner/test/instance.ts +++ b/handwritten/spanner/test/instance.ts @@ -20,7 +20,6 @@ import * as assert from 'assert'; import {before, beforeEach, afterEach, describe, it} from 'mocha'; import {ApiError} from '@google-cloud/common'; import {grpc} from 'google-gax'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import * as pfy from '@google-cloud/promisify'; import * as sinon from 'sinon'; @@ -36,7 +35,7 @@ import {PreciseDate} from '@google-cloud/precise-date'; import {CLOUD_RESOURCE_HEADER, AFE_SERVER_TIMING_HEADER} from '../src/common'; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Instance') { return; @@ -129,7 +128,7 @@ describe('Instance', () => { }); it('should localize the request function', done => { - const spannerInstance = extend({}, SPANNER); + const spannerInstance = Object.assign({}, SPANNER); spannerInstance.request = function () { assert.strictEqual(this, spannerInstance); @@ -142,7 +141,7 @@ describe('Instance', () => { }); it('should localize the requestStream function', done => { - const spannerInstance = extend({}, SPANNER); + const spannerInstance = Object.assign({}, SPANNER); const CONFIG = {}; spannerInstance.requestStream = function (config) { @@ -157,7 +156,7 @@ describe('Instance', () => { it('should inherit from ServiceObject', done => { const options = {}; - const spannerInstance = extend({}, SPANNER, { + const spannerInstance = Object.assign({}, SPANNER, { createInstance(name, options_, callback) { assert.strictEqual(name, instance.formattedName_); assert.strictEqual(options_, options); @@ -205,7 +204,7 @@ describe('Instance', () => { const OPTIONS = { a: 'b', } as inst.CreateDatabaseOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should throw if a name is not provided', () => { assert.throws(() => { @@ -234,7 +233,7 @@ describe('Instance', () => { instance.request = config => { assert.deepStrictEqual(OPTIONS, ORIGINAL_OPTIONS); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( { parent: instance.formattedName_, createStatement: 'CREATE DATABASE `' + NAME + '`', @@ -284,7 +283,7 @@ describe('Instance', () => { it('should only use the name in the createStatement', done => { instance.request = config => { - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( { parent: instance.formattedName_, createStatement: 'CREATE DATABASE `' + NAME + '`', @@ -304,7 +303,7 @@ describe('Instance', () => { it('should allow specifying session pool options', done => { const poolOptions = {}; - const options = extend({}, OPTIONS, { + const options = Object.assign({}, OPTIONS, { poolOptions, }); @@ -325,7 +324,7 @@ describe('Instance', () => { it('should allow specifying session pool constructor', done => { const poolCtor = {}; - const options = extend({}, OPTIONS, { + const options = Object.assign({}, OPTIONS, { poolCtor, }); @@ -348,7 +347,7 @@ describe('Instance', () => { it('should arrify and rename to extraStatements', done => { const SCHEMA = 'schema'; - const options = extend({}, OPTIONS, { + const options = Object.assign({}, OPTIONS, { schema: SCHEMA, }); @@ -364,7 +363,7 @@ describe('Instance', () => { it('should arrify and rename to extraStatements from array style schema filed', done => { const SCHEMA = ['schema', 'schema2']; - const options = extend({}, OPTIONS, { + const options = Object.assign({}, OPTIONS, { schema: SCHEMA, }); @@ -917,10 +916,10 @@ describe('Instance', () => { pageSize, gaxOptions: {autoPaginate: false}, } as inst.GetDatabasesOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should make the correct request', done => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); delete expectedReqOpts.gaxOptions; @@ -947,7 +946,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts: {gaxOptions?: {}} = extend( + const expectedReqOpts: {gaxOptions?: {}} = Object.assign( {}, options, { @@ -981,7 +980,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1087,7 +1086,7 @@ describe('Instance', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETDATABASESOPTIONS, NEXTPAGEREQUEST, @@ -1111,7 +1110,7 @@ describe('Instance', () => { const returnValue = {} as Duplex; it('should make and return the correct gax API call', () => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); delete expectedReqOpts.gaxOptions; @@ -1139,7 +1138,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: instance.formattedName_, @@ -1173,7 +1172,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1299,7 +1298,7 @@ describe('Instance', () => { const METADATA = { needsToBeSnakeCased: true, } as inst.IInstance; - const ORIGINAL_METADATA = extend({}, METADATA); + const ORIGINAL_METADATA = Object.assign({}, METADATA); it('should make and return the request', () => { const requestReturnValue = {}; @@ -1310,7 +1309,7 @@ describe('Instance', () => { assert.strictEqual(config.client, 'InstanceAdminClient'); assert.strictEqual(config.method, 'updateInstance'); - const expectedReqOpts = extend({}, METADATA, { + const expectedReqOpts = Object.assign({}, METADATA, { name: instance.formattedName_, }); @@ -1352,7 +1351,7 @@ describe('Instance', () => { const OPTIONS = { a: 'b', } as inst.GetBackupsOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should make the correct request', done => { const gaxOpts = { @@ -1360,7 +1359,7 @@ describe('Instance', () => { }; const options = {a: 'b', gaxOptions: gaxOpts}; - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); @@ -1386,7 +1385,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: instance.formattedName_, @@ -1419,7 +1418,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: instance.formattedName_, @@ -1522,7 +1521,7 @@ describe('Instance', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETBACKUPSOPTIONS, NEXTPAGEREQUEST, @@ -1546,7 +1545,7 @@ describe('Instance', () => { const returnValue = {} as Duplex; it('should make and return the correct gax API call', () => { - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); delete expectedReqOpts.gaxOptions; @@ -1574,7 +1573,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = {gaxOptions}; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, { parent: instance.formattedName_, @@ -1608,7 +1607,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }; - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1668,7 +1667,7 @@ describe('Instance', () => { const OPTIONS = { a: 'b', } as inst.GetBackupOperationsOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should make the correct request', done => { const gaxOpts = { @@ -1676,7 +1675,7 @@ describe('Instance', () => { }; const options = {a: 'b', gaxOptions: gaxOpts}; - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); @@ -1701,7 +1700,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = Object.assign({}, OPTIONS, {gaxOptions}); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1735,7 +1734,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1785,7 +1784,7 @@ describe('Instance', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETBACKUPOPSOPTIONS, NEXTPAGEREQUEST, @@ -1805,7 +1804,7 @@ describe('Instance', () => { const OPTIONS = { a: 'b', } as inst.GetDatabaseOperationsOptions; - const ORIGINAL_OPTIONS = extend({}, OPTIONS); + const ORIGINAL_OPTIONS = Object.assign({}, OPTIONS); it('should make the correct request', done => { const gaxOpts = { @@ -1813,7 +1812,7 @@ describe('Instance', () => { }; const options = {a: 'b', gaxOptions: gaxOpts}; - const expectedReqOpts = extend({}, OPTIONS, { + const expectedReqOpts = Object.assign({}, OPTIONS, { parent: instance.formattedName_, }); @@ -1839,7 +1838,7 @@ describe('Instance', () => { const gaxOptions = {pageSize, pageToken, timeout: 1000}; const expectedGaxOpts = {timeout: 1000}; const options = Object.assign({}, OPTIONS, {gaxOptions}); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1873,7 +1872,7 @@ describe('Instance', () => { pageToken: optionsPageToken, gaxOptions, }); - const expectedReqOpts = extend( + const expectedReqOpts = Object.assign( {}, OPTIONS, { @@ -1923,7 +1922,7 @@ describe('Instance', () => { filter, gaxOptions: {timeout: 1000, autoPaginate: false}, }; - const EXPECTEDNEXTQUERY = extend( + const EXPECTEDNEXTQUERY = Object.assign( {}, GETDATABASEOPSOPTIONS, NEXTPAGEREQUEST, diff --git a/handwritten/spanner/test/session-pool.ts b/handwritten/spanner/test/session-pool.ts index b27f2b43e78a..d279da8699f7 100644 --- a/handwritten/spanner/test/session-pool.ts +++ b/handwritten/spanner/test/session-pool.ts @@ -17,7 +17,6 @@ import * as assert from 'assert'; import {before, beforeEach, afterEach, describe, it} from 'mocha'; import * as events from 'events'; -import * as extend from 'extend'; import PQueue from 'p-queue'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; @@ -47,7 +46,7 @@ export class FakeTransaction { async begin(): Promise {} } -const fakeStackTrace = extend({}, stackTrace); +const fakeStackTrace = Object.assign({}, stackTrace); function noop() {} diff --git a/handwritten/spanner/test/session.ts b/handwritten/spanner/test/session.ts index f02eb34e39c3..3ca0f635fe82 100644 --- a/handwritten/spanner/test/session.ts +++ b/handwritten/spanner/test/session.ts @@ -19,7 +19,6 @@ import * as pfy from '@google-cloud/promisify'; import * as assert from 'assert'; import {before, beforeEach, describe, it} from 'mocha'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import { CLOUD_RESOURCE_HEADER, @@ -33,7 +32,7 @@ import { } from '../src/request_id_header'; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Session') { return; @@ -173,7 +172,7 @@ describe('Session', () => { uniqueProperty: true, }; - const databaseInstance = extend({}, DATABASE, { + const databaseInstance = Object.assign({}, DATABASE, { createSession(options_, callback) { assert.strictEqual(options_, options); callback(null, createdSession, apiResponse); @@ -202,7 +201,7 @@ describe('Session', () => { }); it('should check for options', done => { - const databaseInstance = extend({}, DATABASE, { + const databaseInstance = Object.assign({}, DATABASE, { createSession(options, callback) { assert.deepStrictEqual(options, {}); callback(null, {}, apiResponse); @@ -224,7 +223,7 @@ describe('Session', () => { const error = new Error('Error.'); const apiResponse = {}; - const databaseInstance = extend({}, DATABASE, { + const databaseInstance = Object.assign({}, DATABASE, { createSession(options_, callback) { callback(error, null, apiResponse); }, diff --git a/handwritten/spanner/test/table.ts b/handwritten/spanner/test/table.ts index 9eb322621c2d..88b4356d9048 100644 --- a/handwritten/spanner/test/table.ts +++ b/handwritten/spanner/test/table.ts @@ -17,7 +17,6 @@ import * as pfy from '@google-cloud/promisify'; import * as assert from 'assert'; import {before, beforeEach, afterEach, describe, it} from 'mocha'; -import * as extend from 'extend'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; import {split} from 'split-array-stream'; @@ -31,7 +30,7 @@ import IsolationLevel = google.spanner.v1.TransactionOptions.IsolationLevel; import ReadLockMode = google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; let promisified = false; -const fakePfy = extend({}, pfy, { +const fakePfy = Object.assign({}, pfy, { promisifyAll(klass, options) { if (klass.name !== 'Table') { return; @@ -84,11 +83,11 @@ describe('Table', () => { Table = proxyquire('../src/table.js', { '@google-cloud/promisify': fakePfy, }).Table; - TableCached = extend({}, Table); + TableCached = Object.assign({}, Table); }); beforeEach(() => { - extend(Table, TableCached); + Object.assign(Table, TableCached); table = new Table(DATABASE, NAME); tableWithSchema = new Table(DATABASE, NAMEWITHSCHEMA); transaction = new FakeTransaction(); From dcae79ff90da6302677b78803c8f633f3ce17e9b Mon Sep 17 00:00:00 2001 From: Alka Trivedi Date: Mon, 13 Jul 2026 13:38:45 +0530 Subject: [PATCH 3/3] refactor --- handwritten/spanner/src/index.ts | 58 ++++++++++++-------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/handwritten/spanner/src/index.ts b/handwritten/spanner/src/index.ts index 9388908a5781..06e23cf385ae 100644 --- a/handwritten/spanner/src/index.ts +++ b/handwritten/spanner/src/index.ts @@ -901,20 +901,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - if ( - (gaxOpts as GetInstancesOptions).pageSize !== undefined && - (reqOpts as any).pageSize === undefined - ) { - (reqOpts as any).pageSize = (gaxOpts as GetInstancesOptions).pageSize; + const gax = gaxOpts as GetInstancesOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if ( - (gaxOpts as GetInstancesOptions).pageToken !== undefined && - (reqOpts as any).pageToken === undefined - ) { - (reqOpts as any).pageToken = (gaxOpts as GetInstancesOptions).pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetInstancesOptions).pageToken; - delete (gaxOpts as GetInstancesOptions).pageSize; } this.request( @@ -1296,24 +1291,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However values set on options take precedence. if (gaxOpts) { - if ( - (gaxOpts as GetInstanceConfigsOptions).pageSize !== undefined && - (reqOpts as any).pageSize === undefined - ) { - (reqOpts as any).pageSize = ( - gaxOpts as GetInstanceConfigsOptions - ).pageSize; + const gax = gaxOpts as GetInstanceConfigsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if ( - (gaxOpts as GetInstanceConfigsOptions).pageToken !== undefined && - (reqOpts as any).pageToken === undefined - ) { - (reqOpts as any).pageToken = ( - gaxOpts as GetInstanceConfigsOptions - ).pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetInstanceConfigsOptions).pageSize; - delete (gaxOpts as GetInstanceConfigsOptions).pageToken; } return this.request( @@ -1594,17 +1580,15 @@ class Spanner extends GrpcService { // Copy over pageSize and pageToken values from gaxOptions. // However, values set on options take precedence. if (gaxOpts) { - const pageSize = (gaxOpts as GetInstanceConfigOperationsOptions).pageSize; - const pageToken = (gaxOpts as GetInstanceConfigOperationsOptions) - .pageToken; - if (pageSize !== undefined && (reqOpts as any).pageSize === undefined) { - (reqOpts as any).pageSize = pageSize; + const gax = gaxOpts as GetInstanceConfigOperationsOptions; + if (gax.pageSize !== undefined) { + reqOpts.pageSize ??= gax.pageSize; + delete gax.pageSize; } - if (pageToken !== undefined && (reqOpts as any).pageToken === undefined) { - (reqOpts as any).pageToken = pageToken; + if (gax.pageToken !== undefined) { + reqOpts.pageToken ??= gax.pageToken; + delete gax.pageToken; } - delete (gaxOpts as GetInstanceConfigOperationsOptions).pageSize; - delete (gaxOpts as GetInstanceConfigOperationsOptions).pageToken; } this.request(