UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

39 lines (38 loc) 1.5 kB
const makePagedClientRequest = async (CommandCtor, client, input, ...args) => { return await client.send(new CommandCtor(input), ...args); }; export function createPaginator(ClientCtor, CommandCtor, inputTokenName, outputTokenName, pageSizeTokenName) { return async function* paginateOperation(config, input, ...additionalArguments) { let token = config.startingToken || undefined; let hasNext = true; let page; while (hasNext) { input[inputTokenName] = token; if (pageSizeTokenName) { input[pageSizeTokenName] = input[pageSizeTokenName] ?? 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 = get(page, outputTokenName); hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken)); } return undefined; }; } const get = (fromObject, path) => { let cursor = fromObject; const pathComponents = path.split("."); for (const step of pathComponents) { if (!cursor || typeof cursor !== "object") { return undefined; } cursor = cursor[step]; } return cursor; };