"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPaginator = void 0; const makePagedClientRequest = async (CommandCtor, client, input, ...args) => { return await client.send(new CommandCtor(input), ...args); }; function createPaginator(ClientCtor, CommandCtor, inputTokenName, outputTokenName, pageSizeTokenName) { return async function* paginateOperation(config, input, ...additionalArguments) { var _a; let token = config.startingToken || undefined; let hasNext = true; let page; while (hasNext) { input[inputTokenName] = token; if (pageSizeTokenName) { input[pageSizeTokenName] = (_a = input[pageSizeTokenName]) !== null && _a !== void 0 ? _a : config.pageSize; } if (config.client instanceof ClientCtor) { page = await makePagedClientRequest(CommandCtor, config.client, input, ...additionalArguments); } else { throw new Error(`Invalid client, expected instance of ${ClientCtor.name}`); } yield page; const prevToken = token; token = page[outputTokenName]; hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken)); } return undefined; }; } exports.createPaginator = createPaginator;