Skip to content

Commit 3ca5de3

Browse files
authoredAug 7, 2020
feat: respect pageSize and pageToken from gaxOptions (#781)
1 parent 09c03f5 commit 3ca5de3

File tree

3 files changed

+243
-18
lines changed

3 files changed

+243
-18
lines changed
 

‎src/instance.ts

+67-11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {promisifyAll} from '@google-cloud/promisify';
1616
import {Transform} from 'stream';
1717
import arrify = require('arrify');
1818
import * as is from 'is';
19+
import * as extend from 'extend';
1920
// eslint-disable-next-line @typescript-eslint/no-var-requires
2021
const pumpify = require('pumpify');
2122

@@ -653,21 +654,33 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
653654
optionsOrCallback?: CallOptions | GetAppProfilesCallback,
654655
cb?: GetAppProfilesCallback
655656
): void | Promise<GetAppProfilesResponse> {
656-
const gaxOptions =
657-
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
657+
const gaxOpts =
658+
typeof optionsOrCallback === 'object'
659+
? extend(true, {}, optionsOrCallback)
660+
: {};
658661
const callback =
659662
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!;
660663

661-
const reqOpts = {
664+
const reqOpts: google.bigtable.admin.v2.IListAppProfilesRequest = {
662665
parent: this.name,
663666
};
664667

668+
if (is.number(gaxOpts.pageSize)) {
669+
reqOpts.pageSize = gaxOpts.pageSize;
670+
}
671+
delete gaxOpts.pageSize;
672+
673+
if (gaxOpts.pageToken) {
674+
reqOpts.pageToken = gaxOpts.pageToken;
675+
}
676+
delete gaxOpts.pageToken;
677+
665678
this.bigtable.request<google.bigtable.admin.v2.IAppProfile[]>(
666679
{
667680
client: 'BigtableInstanceAdminClient',
668681
method: 'listAppProfiles',
669682
reqOpts,
670-
gaxOpts: gaxOptions,
683+
gaxOpts,
671684
},
672685
(err, resp) => {
673686
if (err) {
@@ -718,10 +731,21 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
718731
* this.end();
719732
* });
720733
*/
721-
getAppProfilesStream(gaxOptions?: CallOptions): NodeJS.ReadableStream {
722-
const reqOpts = {
734+
getAppProfilesStream(gaxOptions: CallOptions = {}): NodeJS.ReadableStream {
735+
const reqOpts: google.bigtable.admin.v2.IListAppProfilesRequest = {
723736
parent: this.name,
724737
};
738+
const gaxOpts = extend(true, {}, gaxOptions);
739+
740+
if (is.number(gaxOpts.pageSize)) {
741+
reqOpts.pageSize = gaxOpts.pageSize;
742+
}
743+
delete gaxOpts.pageSize;
744+
745+
if (gaxOpts.pageToken) {
746+
reqOpts.pageToken = gaxOpts.pageToken;
747+
}
748+
delete gaxOpts.pageToken;
725749

726750
// eslint-disable-next-line @typescript-eslint/no-this-alias
727751
const self = this;
@@ -739,7 +763,7 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
739763
client: 'BigtableInstanceAdminClient',
740764
method: 'listAppProfilesStream',
741765
reqOpts,
742-
gaxOpts: gaxOptions,
766+
gaxOpts,
743767
}),
744768
new Transform({objectMode: true, transform: transformToAppProfile}),
745769
]);
@@ -938,19 +962,35 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
938962
const callback =
939963
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb!;
940964

941-
const reqOpts = Object.assign({}, options, {
965+
const gaxOpts = extend(true, {}, options.gaxOptions);
966+
let reqOpts = Object.assign({}, options, {
942967
parent: this.name,
943968
view: Table.VIEWS[options.view || 'unspecified'],
944969
});
945970

971+
// Copy over pageSize and pageToken values from gaxOptions.
972+
// However values set on options take precedence.
973+
if (gaxOpts) {
974+
reqOpts = extend(
975+
{},
976+
{
977+
pageSize: gaxOpts.pageSize,
978+
pageToken: gaxOpts.pageToken,
979+
},
980+
reqOpts
981+
);
982+
delete gaxOpts.pageSize;
983+
delete gaxOpts.pageToken;
984+
}
985+
946986
delete (reqOpts as GetTablesOptions).gaxOptions;
947987

948988
this.bigtable.request<Table[]>(
949989
{
950990
client: 'BigtableTableAdminClient',
951991
method: 'listTables',
952992
reqOpts,
953-
gaxOpts: options.gaxOptions,
993+
gaxOpts,
954994
},
955995
(...args) => {
956996
if (args[1]) {
@@ -998,14 +1038,30 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
9981038
* });
9991039
*/
10001040
getTablesStream(options: GetTablesOptions = {}): NodeJS.ReadableStream {
1001-
const reqOpts = Object.assign({}, options, {
1041+
const gaxOpts = extend(true, {}, options.gaxOptions);
1042+
let reqOpts = Object.assign({}, options, {
10021043
parent: this.name,
10031044
view: Table.VIEWS[options.view || 'unspecified'],
10041045
});
10051046

10061047
// eslint-disable-next-line @typescript-eslint/no-explicit-any
10071048
delete (reqOpts as any).gaxOptions;
10081049

1050+
// Copy over pageSize and pageToken values from gaxOptions.
1051+
// However values set on options take precedence.
1052+
if (gaxOpts) {
1053+
reqOpts = extend(
1054+
{},
1055+
{
1056+
pageSize: gaxOpts.pageSize,
1057+
pageToken: gaxOpts.pageToken,
1058+
},
1059+
reqOpts
1060+
);
1061+
delete gaxOpts.pageSize;
1062+
delete gaxOpts.pageToken;
1063+
}
1064+
10091065
// eslint-disable-next-line @typescript-eslint/no-this-alias
10101066
const self = this;
10111067
const transformToTable = (
@@ -1022,7 +1078,7 @@ Please use the format 'my-instance' or '${bigtable.projectName}/instances/my-ins
10221078
client: 'BigtableTableAdminClient',
10231079
method: 'listTablesStream',
10241080
reqOpts,
1025-
gaxOpts: options.gaxOptions,
1081+
gaxOpts,
10261082
}),
10271083
new Transform({objectMode: true, transform: transformToTable}),
10281084
]);

‎src/table.ts

+2
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ export interface GetTablesOptions {
180180
* 'full'. Default: 'name'.
181181
*/
182182
view?: 'name' | 'schema' | 'full';
183+
pageSize?: number;
184+
pageToken?: string;
183185
}
184186

185187
export interface GetRowsOptions {

0 commit comments

Comments
 (0)