diff --git a/src/request.ts b/src/request.ts index 95b5dd0c1..6e13fe10c 100644 --- a/src/request.ts +++ b/src/request.ts @@ -473,8 +473,7 @@ class DatastoreRequest { callback: GetCallback): void; get(keys: Entities, optionsOrCallback?: CreateReadStreamOptions|GetCallback, cb?: GetCallback): void|Promise { - const options = - typeof optionsOrCallback === 'object' && optionsOrCallback !== null ? + const options = typeof optionsOrCallback === 'object' && optionsOrCallback ? optionsOrCallback : {}; const callback = @@ -667,8 +666,7 @@ class DatastoreRequest { query = extend(true, new Query(), query); const makeRequest = (query: Query) => { - // tslint:disable-next-line no-any - const reqOpts: any = { + const reqOpts: Any = { query: entity.queryToQueryProto(query), }; @@ -701,8 +699,7 @@ class DatastoreRequest { return; } - // tslint:disable-next-line no-any - const info: any = { + const info: Any = { moreResults: resp.batch.moreResults, }; @@ -710,8 +707,7 @@ class DatastoreRequest { info.endCursor = resp.batch.endCursor.toString('base64'); } - // tslint:disable-next-line no-any - let entities: any[] = []; + let entities: Any[] = []; if (resp.batch.entityResults) { entities = entity.formatArray(resp.batch.entityResults); @@ -1050,17 +1046,16 @@ class DatastoreRequest { return; } - arrify(resp.mutationResults) - .forEach((result: Entity, index: number) => { //! Entity malo - if (!result.key) { - return; - } + arrify(resp.mutationResults).forEach((result, index) => { + if (!result.key) { + return; + } - if (insertIndexes[index]) { - const id = entity.keyFromKeyProto(result.key).id; - entities[index].key.id = id; - } - }); + if (insertIndexes[index]) { + const id = entity.keyFromKeyProto(result.key).id; + entities[index].key.id = id; + } + }); callback(null, resp); } @@ -1208,6 +1203,8 @@ class DatastoreRequest { } } +// tslint:disable-next-line no-any +type Any = any; export interface BooleanObject { [key: string]: boolean; } @@ -1253,8 +1250,7 @@ export interface Mutation extends google.datastore.v1.IMutation { [key: string]: Entity; } export interface PrepareEntityObject { - [key: string]: google.datastore.v1.Key| - undefined; // TODO: Fix "Symbol cannot be key" TS error + [key: string]: google.datastore.v1.Key|undefined; } export interface PrepareEntityObjectResponse { key?: google.datastore.v1.Key; @@ -1269,10 +1265,10 @@ export interface RequestCallback { } export interface RequestConfig { client: string; - gaxOpts?: number|CallOptions|KeyProto|undefined; + gaxOpts?: number|CallOptions|KeyProto; method: string; prepared?: boolean; - reqOpts?: RequestOptions; + reqOpts?: Entity|RequestOptions; } export interface RequestOptions { mutations?: []|Array<{delete: KeyProto;}>|Array<{}>; @@ -1284,7 +1280,6 @@ export interface RequestOptions { mode?: string; projectId?: string; } -export interface RequestResponse extends google.datastore.v1.ICommitResponse {} export interface RunQueryStreamOptions { gaxOptions?: CallOptions; consistency?: 'strong'|'eventual'; diff --git a/test/request.ts b/test/request.ts index fe870f9de..81f392ce0 100644 --- a/test/request.ts +++ b/test/request.ts @@ -18,13 +18,20 @@ import * as pjy from '@google-cloud/projectify'; import * as pfy from '@google-cloud/promisify'; import * as assert from 'assert'; import * as extend from 'extend'; +import {CallOptions} from 'grpc'; import * as is from 'is'; import * as proxyquire from 'proxyquire'; import * as sinon from 'sinon'; import * as through from 'through2'; + +import {google} from '../proto/datastore'; import * as ds from '../src'; -import {entity, KeyProto} from '../src/entity.js'; +import {entity, Entity, KeyProto} from '../src/entity.js'; import {Query, QueryProto} from '../src/query.js'; +import {AllocateIdsRequestResponse, RequestConfig, RequestOptions} from '../src/request'; + +// tslint:disable-next-line no-any +type Any = any; let promisified = false; const fakePfy = Object.assign({}, pfy, { @@ -57,8 +64,7 @@ let pjyOverride: Function|null; describe('Request', () => { // tslint:disable-next-line variable-name let Request: typeof ds.DatastoreRequest; - // tslint:disable-next-line no-any - let request: any; + let request: Any; let key: entity.Key; const sandbox = sinon.createSandbox(); @@ -105,8 +111,7 @@ describe('Request', () => { method: 'insert', }; const expectedPreparedEntityObject = extend(true, {}, obj); - // tslint:disable-next-line no-any - const preparedEntityObject = Request.prepareEntityObject_(obj) as any; + const preparedEntityObject = Request.prepareEntityObject_(obj) as Any; assert.notStrictEqual(preparedEntityObject, obj); assert.notStrictEqual(preparedEntityObject.data.nested, obj.data.nested); assert.deepStrictEqual( @@ -118,8 +123,7 @@ describe('Request', () => { const entityObject = {data: true}; entityObject[entity.KEY_SYMBOL] = key; const preparedEntityObject = - // tslint:disable-next-line no-any - Request.prepareEntityObject_(entityObject) as any; + Request.prepareEntityObject_(entityObject) as Any; assert.strictEqual(preparedEntityObject.key, key); assert.strictEqual(preparedEntityObject.data.data, entityObject.data); }); @@ -152,7 +156,7 @@ describe('Request', () => { return keyProto; }); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'allocateIds'); @@ -170,7 +174,7 @@ describe('Request', () => { it('should allow a numeric shorthand for allocations', done => { sandbox.stub(entity, 'isKeyComplete'); sandbox.stub(entity, 'keyToKeyProto'); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.reqOpts!.keys.length, ALLOCATIONS); done(); }; @@ -184,7 +188,7 @@ describe('Request', () => { gaxOptions: {}, }); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, options.gaxOptions); done(); }; @@ -197,7 +201,7 @@ describe('Request', () => { const API_RESPONSE = {}; beforeEach(() => { - request.request_ = (_, callback) => { + request.request_ = (_: object, callback: Function) => { callback(ERROR, API_RESPONSE); }; }); @@ -205,12 +209,13 @@ describe('Request', () => { it('should exec callback with error & API response', done => { sandbox.stub(entity, 'isKeyComplete'); sandbox.stub(entity, 'keyToKeyProto'); - request.allocateIds(INCOMPLETE_KEY, OPTIONS, (err, keys, resp) => { - assert.strictEqual(err, ERROR); - assert.strictEqual(keys, null); - assert.strictEqual(resp, API_RESPONSE); - done(); - }); + request.allocateIds( + INCOMPLETE_KEY, OPTIONS, (err: Error, keys: null, resp: {}) => { + assert.strictEqual(err, ERROR); + assert.strictEqual(keys, null); + assert.strictEqual(resp, API_RESPONSE); + done(); + }); }); }); @@ -221,7 +226,7 @@ describe('Request', () => { }; beforeEach(() => { - request.request_ = (_, callback) => { + request.request_ = (_: object, callback: Function) => { callback(null!, API_RESPONSE); }; }); @@ -234,12 +239,15 @@ describe('Request', () => { assert.strictEqual(keyProto, API_RESPONSE.keys[0]); return key; }); - request.allocateIds(INCOMPLETE_KEY, OPTIONS, (err, keys, resp) => { - assert.ifError(err); - assert.deepStrictEqual(keys, [key]); - assert.strictEqual(resp, API_RESPONSE); - done(); - }); + request.allocateIds( + INCOMPLETE_KEY, OPTIONS, + (err: Error, keys: entity.Key[], + resp: AllocateIdsRequestResponse) => { + assert.ifError(err); + assert.deepStrictEqual(keys, [key]); + assert.strictEqual(resp, API_RESPONSE); + done(); + }); }); }); }); @@ -266,7 +274,7 @@ describe('Request', () => { }); it('should make correct request when stream is ready', done => { - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'lookup'); assert.deepStrictEqual( @@ -282,7 +290,7 @@ describe('Request', () => { gaxOptions: {}, }; - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, options.gaxOptions); done(); }; @@ -291,7 +299,7 @@ describe('Request', () => { }); it('should allow setting strong read consistency', done => { - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.reqOpts!.readOptions!.readConsistency, 1); done(); }; @@ -302,7 +310,7 @@ describe('Request', () => { }); it('should allow setting strong eventual consistency', done => { - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.reqOpts!.readOptions!.readConsistency, 2); done(); }; @@ -317,7 +325,7 @@ describe('Request', () => { const apiResponse = {a: 'b', c: 'd'}; beforeEach(() => { - request.request_ = (_, callback) => { + request.request_ = (_: object, callback: Function) => { setImmediate(() => { callback(error, apiResponse); }); @@ -325,10 +333,12 @@ describe('Request', () => { }); it('should emit error', done => { - request.createReadStream(key).on('data', () => {}).on('error', err => { - assert.strictEqual(err, error); - done(); - }); + request.createReadStream(key) + .on('data', () => {}) + .on('error', (err: Error) => { + assert.strictEqual(err, error); + done(); + }); }); it('should end stream', done => { @@ -336,8 +346,7 @@ describe('Request', () => { stream.on('data', () => {}).on('error', () => { setImmediate(() => { - // tslint:disable-next-line no-any - assert.strictEqual((stream as any)._destroyed, true); + assert.strictEqual((stream as Any)._destroyed, true); done(); }); }); @@ -394,21 +403,19 @@ describe('Request', () => { ], }; - // tslint:disable-next-line no-any - const expectedResult = entity.formatArray(apiResponse.found as any)[0]; + const expectedResult = entity.formatArray(apiResponse.found as Any)[0]; const apiResponseWithMultiEntities = extend(true, {}, apiResponse); const entities = apiResponseWithMultiEntities.found; entities.push(entities[0]); - // tslint:disable-next-line no-any - const apiResponseWithDeferred = extend(true, {}, apiResponse) as any; + const apiResponseWithDeferred = extend(true, {}, apiResponse) as Any; apiResponseWithDeferred.deferred = [ apiResponseWithDeferred.found[0].entity.key, ]; beforeEach(() => { - request.request_ = (_, callback) => { + request.request_ = (_: object, callback: Function) => { callback(null!, apiResponse); }; }); @@ -426,7 +433,7 @@ describe('Request', () => { it('should continue looking for deferred results', done => { let numTimesCalled = 0; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { numTimesCalled++; if (numTimesCalled === 1) { @@ -449,7 +456,7 @@ describe('Request', () => { request.createReadStream(key) .on('error', done) .on('data', - entity => { + (entity: Entity) => { assert.deepStrictEqual(entity, expectedResult); }) .on('end', done) @@ -459,7 +466,7 @@ describe('Request', () => { it('should not push more results if stream was ended', done => { let entitiesEmitted = 0; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { setImmediate(() => { callback(null!, apiResponseWithMultiEntities); }); @@ -483,7 +490,7 @@ describe('Request', () => { it('should not get more results if stream was ended', done => { let lookupCount = 0; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { lookupCount++; setImmediate(() => { callback(null!, apiResponseWithDeferred); @@ -505,11 +512,10 @@ describe('Request', () => { describe('delete', () => { it('should delete by key', done => { - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'commit'); - // tslint:disable-next-line no-any - assert(is.object((config.reqOpts as any).mutations[0].delete)); + assert(is.object((config.reqOpts as Any).mutations[0].delete)); callback(null!); }; request.delete(key, done); @@ -517,18 +523,20 @@ describe('Request', () => { it('should return apiResponse in callback', done => { const resp = {success: true}; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { callback(null!, resp); }; - request.delete(key, (err, apiResponse) => { - assert.ifError(err); - assert.deepStrictEqual(resp, apiResponse); - done(); - }); + request.delete( + key, + (err: Error, apiResponse: [google.datastore.v1.CommitResponse]) => { + assert.ifError(err); + assert.deepStrictEqual(resp, apiResponse); + done(); + }); }); it('should multi delete by keys', done => { - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { assert.strictEqual(config.reqOpts!.mutations!.length, 2); callback(null!); }; @@ -537,7 +545,7 @@ describe('Request', () => { it('should allow customization of GAX options', done => { const gaxOptions = {}; - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -577,11 +585,10 @@ describe('Request', () => { it('should return an array of entities', done => { const options = {}; - request.get(keys, options, (err, entities) => { + request.get(keys, options, (err: Error, entities: Entity[]) => { assert.ifError(err); assert.deepStrictEqual(entities, fakeEntities); - // tslint:disable-next-line no-any - const spy = (request.createReadStream as any).getCall(0); + const spy = (request.createReadStream as Any).getCall(0); assert.strictEqual(spy.args[0], keys); assert.strictEqual(spy.args[1], options); done(); @@ -589,7 +596,7 @@ describe('Request', () => { }); it('should return a single entity', done => { - request.get(key, (err, entity) => { + request.get(key, (err: Error, entity: Entity) => { assert.ifError(err); assert.strictEqual(entity, fakeEntities[0]); done(); @@ -597,17 +604,16 @@ describe('Request', () => { }); it('should allow options to be omitted', done => { - request.get(keys, err => { + request.get(keys, (err: Error) => { assert.ifError(err); done(); }); }); it('should default options to an object', done => { - request.get(keys, null!, err => { + request.get(keys, null!, (err: Error) => { assert.ifError(err); - // tslint:disable-next-line no-any - const spy = (request.createReadStream as any).getCall(0); + const spy = (request.createReadStream as Any).getCall(0); assert.deepStrictEqual(spy.args[1], {}); done(); }); @@ -628,7 +634,7 @@ describe('Request', () => { }); it('send an error to the callback', done => { - request.get(key, err => { + request.get(key, (err: Error) => { assert.strictEqual(err, error); done(); }); @@ -649,7 +655,7 @@ describe('Request', () => { return preparedEntityObject as {}; }); - request.save = entities => { + request.save = (entities: Entity[]) => { assert.deepStrictEqual(entities[0], expectedEntityObject); done(); }; @@ -658,7 +664,7 @@ describe('Request', () => { }); it('should pass the correct arguments to save', done => { - request.save = (entities, callback) => { + request.save = (entities: Entity[], callback: Function) => { assert.deepStrictEqual(JSON.parse(JSON.stringify(entities)), [ { key: { @@ -703,10 +709,10 @@ describe('Request', () => { sandbox.stub(entity, 'queryToQueryProto').returns(queryProto); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'runQuery'); - assert(is.empty(config.reqOpts.readOptions)); + assert(is.empty(config.reqOpts!.readOptions)); assert.strictEqual(config.reqOpts.query, queryProto); assert.strictEqual( config.reqOpts.partitionId.namespaceId, query.namespace); @@ -724,7 +730,7 @@ describe('Request', () => { gaxOptions: {}, }; - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, options.gaxOptions); done(); }; @@ -734,7 +740,7 @@ describe('Request', () => { it('should allow setting strong read consistency', done => { sandbox.stub(entity, 'queryToQueryProto'); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.reqOpts.readOptions.readConsistency, 1); done(); }; @@ -746,7 +752,7 @@ describe('Request', () => { it('should allow setting strong eventual consistency', done => { sandbox.stub(entity, 'queryToQueryProto'); - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.reqOpts.readOptions.readConsistency, 2); done(); }; @@ -760,7 +766,7 @@ describe('Request', () => { const error = new Error('Error.'); beforeEach(() => { - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { callback(error); }; }); @@ -769,7 +775,7 @@ describe('Request', () => { sandbox.stub(entity, 'queryToQueryProto'); request.runQueryStream({}) .on('error', - err => { + (err: Error) => { assert.strictEqual(err, error); done(); }) @@ -778,7 +784,7 @@ describe('Request', () => { }); describe('success', () => { - const entityResultsPerApiCall = { + const entityResultsPerApiCall: Any = { 1: [{a: true}], 2: [{b: true}, {c: true}], }; @@ -792,9 +798,9 @@ describe('Request', () => { }, }; - let formatArrayStub; + let formatArrayStub: Any; beforeEach(() => { - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { callback(null, apiResponse); }; @@ -816,7 +822,7 @@ describe('Request', () => { request.runQueryStream({}) .on('error', done) - .on('data', entity => entities.push(entity)) + .on('data', (entity: Entity) => entities.push(entity)) .on('end', () => { assert.deepStrictEqual(entities, apiResponse.batch.entityResults); done(); @@ -845,7 +851,7 @@ describe('Request', () => { return entityResultsPerApiCall[timesRequestCalled]; }); - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { timesRequestCalled++; const resp = extend(true, {}, apiResponse); @@ -899,16 +905,16 @@ describe('Request', () => { }); const entities: Array<{}> = []; - let info; + let info: Any; request.runQueryStream(query) .on('error', done) .on('info', - (_info) => { + (_info: object) => { info = _info; }) .on('data', - (entity) => { + (entity: Entity) => { entities.push(entity); }) .on('end', () => { @@ -934,7 +940,7 @@ describe('Request', () => { limitVal: -1, }; - request.request_ = (_, callback) => { + request.request_ = (_: object, callback: Function) => { let batch; if (++timesRequestCalled === 2) { batch = {}; @@ -966,7 +972,7 @@ describe('Request', () => { sandbox.stub(entity, 'queryToQueryProto'); - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { timesRequestCalled++; const resp = extend(true, {}, apiResponse); @@ -997,7 +1003,7 @@ describe('Request', () => { it('should not get more results if stream was ended', done => { let timesRequestCalled = 0; sandbox.stub(entity, 'queryToQueryProto'); - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { timesRequestCalled++; callback(null!, apiResponse); }; @@ -1041,27 +1047,28 @@ describe('Request', () => { it('should return an array of entities', done => { const options = {}; - request.runQuery(query, options, (err, entities, info) => { - assert.ifError(err); - assert.deepStrictEqual(entities, fakeEntities); - assert.strictEqual(info, fakeInfo); + request.runQuery( + query, options, (err: Error|null, entities: Entity[], info: {}) => { + assert.ifError(err); + assert.deepStrictEqual(entities, fakeEntities); + assert.strictEqual(info, fakeInfo); - const spy = request.runQueryStream.getCall(0); - assert.strictEqual(spy.args[0], query); - assert.strictEqual(spy.args[1], options); - done(); - }); + const spy = request.runQueryStream.getCall(0); + assert.strictEqual(spy.args[0], query); + assert.strictEqual(spy.args[1], options); + done(); + }); }); it('should allow options to be omitted', done => { - request.runQuery(query, err => { + request.runQuery(query, (err: Error) => { assert.ifError(err); done(); }); }); it('should default options to an object', done => { - request.runQuery(query, null, err => { + request.runQuery(query, null, (err: Error) => { assert.ifError(err); const spy = request.runQueryStream.getCall(0); @@ -1087,7 +1094,7 @@ describe('Request', () => { }); it('send an error to the callback', done => { - request.runQuery(query, err => { + request.runQuery(query, (err: Error) => { assert.strictEqual(err, error); done(); }); @@ -1142,7 +1149,7 @@ describe('Request', () => { ], }; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { assert.strictEqual(config.client, 'DatastoreClient'); assert.strictEqual(config.method, 'commit'); @@ -1157,7 +1164,7 @@ describe('Request', () => { it('should allow customization of GAX options', done => { const gaxOptions = {}; - request.request_ = config => { + request.request_ = (config: RequestConfig) => { assert.strictEqual(config.gaxOpts, gaxOptions); done(); }; @@ -1193,7 +1200,7 @@ describe('Request', () => { }); it('should save with specific method', done => { - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { assert.strictEqual(config.reqOpts.mutations.length, 3); assert(is.object(config.reqOpts.mutations[0].insert)); assert(is.object(config.reqOpts.mutations[1].update)); @@ -1263,10 +1270,10 @@ describe('Request', () => { it('should return apiResponse in callback', done => { const key = new entity.Key({namespace: 'ns', path: ['Company']}); const mockCommitResponse = {}; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { callback(null, mockCommitResponse); }; - request.save({key, data: {}}, (err, apiResponse) => { + request.save({key, data: {}}, (err: Error|null, apiResponse: Entity) => { assert.ifError(err); assert.strictEqual(mockCommitResponse, apiResponse); done(); @@ -1274,7 +1281,7 @@ describe('Request', () => { }); it('should allow setting the indexed value of a property', done => { - request.request_ = config => { + request.request_ = (config: RequestConfig) => { const property = config.reqOpts.mutations[0].upsert.properties.name; assert.strictEqual(property.stringValue, 'value'); assert.strictEqual(property.excludeFromIndexes, true); @@ -1296,10 +1303,10 @@ describe('Request', () => { }); it('should allow setting the indexed value on arrays', done => { - request.request_ = config => { + request.request_ = (config: RequestConfig) => { const property = config.reqOpts.mutations[0].upsert.properties.name; - property.arrayValue.values.forEach((value) => { + property.arrayValue.values.forEach((value: Any) => { assert.strictEqual(value.excludeFromIndexes, true); }); @@ -1340,7 +1347,7 @@ describe('Request', () => { ], }; - request.request_ = (config, callback) => { + request.request_ = (config: RequestConfig, callback: Function) => { callback(null, response); }; @@ -1357,7 +1364,7 @@ describe('Request', () => { {key: incompleteKey2, data: {}}, {key: completeKey, data: {}}, ], - err => { + (err: Error) => { assert.ifError(err); assert.strictEqual(incompleteKey.id, ids[0]); @@ -1404,7 +1411,7 @@ describe('Request', () => { return preparedEntityObject as {}; }); - request.save = entities => { + request.save = (entities: Entity[]) => { assert.deepStrictEqual(entities[0], expectedEntityObject); done(); }; @@ -1413,7 +1420,7 @@ describe('Request', () => { }); it('should pass the correct arguments to save', done => { - request.save = (entities, callback) => { + request.save = (entities: Entity[], callback: Function) => { assert.deepStrictEqual(JSON.parse(JSON.stringify(entities)), [ { key: { @@ -1446,7 +1453,7 @@ describe('Request', () => { return preparedEntityObject as {}; }); - request.save = entities => { + request.save = (entities: Entity[]) => { assert.deepStrictEqual(entities[0], expectedEntityObject); done(); }; @@ -1455,7 +1462,7 @@ describe('Request', () => { }); it('should pass the correct arguments to save', done => { - request.save = (entities, callback) => { + request.save = (entities: Entity[], callback: Function) => { assert.deepStrictEqual(JSON.parse(JSON.stringify(entities)), [ { key: { @@ -1500,7 +1507,7 @@ describe('Request', () => { request.datastore = { clients_, auth: { - getProjectId(callback) { + getProjectId(callback: Function) { callback(null, PROJECT_ID); }, }, @@ -1517,10 +1524,10 @@ describe('Request', () => { it('should return error if getting project ID failed', done => { const error = new Error('Error.'); - request.datastore.auth.getProjectId = (callback) => { + request.datastore.auth.getProjectId = (callback: Function) => { callback(error); }; - request.request_(CONFIG, err => { + request.request_(CONFIG, (err: Error) => { assert.strictEqual(err, error); done(); }); @@ -1530,7 +1537,7 @@ describe('Request', () => { const fakeClient = { [CONFIG.method]() {}, }; - v1FakeClientOverride = (options) => { + v1FakeClientOverride = (options: object) => { assert.deepStrictEqual(options, request.datastore.options); return fakeClient; }; @@ -1552,11 +1559,10 @@ describe('Request', () => { it('should replace the project ID token', done => { const replacedReqOpts = {}; - // tslint:disable-next-line no-any - const expectedReqOpts: any = Object.assign({}, CONFIG.reqOpts); + const expectedReqOpts: Any = Object.assign({}, CONFIG.reqOpts); expectedReqOpts.projectId = request.projectId; - pjyOverride = (reqOpts, projectId) => { + pjyOverride = (reqOpts: RequestOptions, projectId: string) => { assert.notStrictEqual(reqOpts, CONFIG.reqOpts); assert.deepStrictEqual(reqOpts, expectedReqOpts); assert.strictEqual(projectId, PROJECT_ID); @@ -1565,7 +1571,7 @@ describe('Request', () => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - [CONFIG.method](reqOpts) { + [CONFIG.method](reqOpts: RequestOptions) { assert.strictEqual(reqOpts, replacedReqOpts); done(); }, @@ -1577,7 +1583,7 @@ describe('Request', () => { it('should send gaxOpts', done => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - [CONFIG.method](_, gaxO) { + [CONFIG.method](_: object, gaxO: CallOptions) { delete gaxO.headers; assert.deepStrictEqual(gaxO, CONFIG.gaxOpts); done(); @@ -1590,7 +1596,7 @@ describe('Request', () => { it('should send google-cloud-resource-prefix', done => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - [CONFIG.method](_, gaxO) { + [CONFIG.method](_: object, gaxO: CallOptions) { assert.deepStrictEqual(gaxO.headers, { 'google-cloud-resource-prefix': 'projects/' + PROJECT_ID, }); @@ -1605,7 +1611,7 @@ describe('Request', () => { it('should set the mode', done => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - commit(reqOpts) { + commit(reqOpts: RequestOptions) { assert.strictEqual(reqOpts.mode, 'NON_TRANSACTIONAL'); done(); }, @@ -1627,7 +1633,7 @@ describe('Request', () => { it('should set the commit transaction info', done => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - commit(reqOpts) { + commit(reqOpts: RequestOptions) { assert.strictEqual(reqOpts.mode, 'TRANSACTIONAL'); assert.strictEqual(reqOpts.transaction, TRANSACTION_ID); done(); @@ -1643,7 +1649,7 @@ describe('Request', () => { it('should set the rollback transaction info', done => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - rollback(reqOpts) { + rollback(reqOpts: RequestOptions) { assert.strictEqual(reqOpts.transaction, TRANSACTION_ID); done(); }, @@ -1662,8 +1668,9 @@ describe('Request', () => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - lookup(reqOpts) { - assert.strictEqual(reqOpts.readOptions.transaction, TRANSACTION_ID); + lookup(reqOpts: RequestOptions) { + assert.strictEqual( + reqOpts.readOptions!.transaction, TRANSACTION_ID); done(); }, }); @@ -1678,8 +1685,9 @@ describe('Request', () => { request.datastore.clients_ = new Map(); request.datastore.clients_.set(CONFIG.client, { - runQuery(reqOpts) { - assert.strictEqual(reqOpts.readOptions.transaction, TRANSACTION_ID); + runQuery(reqOpts: RequestOptions) { + assert.strictEqual( + reqOpts.readOptions!.transaction, TRANSACTION_ID); done(); }, });