A function which wraps execution of pagination on aws-sdk results which
paginate their results. For example SecretsManager.listSecrets
- implementing a pagiantion for every aws-sdk function is a pain.
- implementing a generic function is easy, but could get messy.
This package provides the generic wrapper function and also typings to infer the results and input args for the used pagination function in order to simplify the usage of those.
- No Dependencies
- Typings
- Type inference on the usage
If the conditionally types are already setup fo the service/function. The usage is very easy:
import { KMS } from "aws-sdk";
import { paginate } from "@jurijzahn8019/aws-sdk-paginate-list";
const kms = new KMS();
const { Keys } = await paginate(kms, "listKeys");
But even if there are no mappings for certain types (PRs are welcome 😀) You can supply own config and metadata
import { SNS } from "aws-sdk";
import { paginate } from "@jurijzahn8019/aws-sdk-paginate-list";
const svc = new SNS();
const { Topics } = await paginate<SNS, "listTopics", SNS.ListTopicsInput>(
svc,
"listTopics"
);
The typescript inference will help you to pass parameter in a right way
Works Great with mocks
import { paginate } from "@jurijzahn8019/aws-sdk-paginate-list";
export async function getSecrets(only?: string[]): Promise<SecretsManager.SecretListType> {
const smn = new SecretsManager();
const { SecretList } = await paginate(smn, "listSecrets"));
return SecretList;
}
import { on } from "@jurijzahn8019/aws-promise-jest-mock";
import { SecretsManager } from "aws-sdk";
jest.mock("aws-sdk");
const listSecrets = on(SecretsManager)
.mock("listSecrets")
.resolve({
SecretList: [
{ Name: "one", Tags: [{ Key: "foo", Value: "bar" }] },
{ Name: "two" },
],
});
it("Should list secrets from secretsmanager", async () => {
const res = await getSecrets();
expect(res).toMatchSnapshot();
expect(listSecrets.mock).toHaveBeenCalledTimes(1);
});
if you miss a function/service for better type inference, feel free to add it to Mappings and PR it back
execute tests:
npm run test
See change history here Changelog.