Skip to content

Provides a function to paginate over a list function on aws-sdk

License

Notifications You must be signed in to change notification settings

jurijzahn8019/aws-sdk-paginate-list

Repository files navigation

aws-sdk-paginate-list

Build Coverage Status Dependabot Status GitHub npm Vulnerabilities npm bundle size (scoped) GitHub last commit

Synopsis

A function which wraps execution of pagination on aws-sdk results which paginate their results. For example SecretsManager.listSecrets

Motivation

  1. implementing a pagiantion for every aws-sdk function is a pain.
  2. 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.

Features

  • No Dependencies
  • Typings
  • Type inference on the usage

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");

vscode_intellisense_kms

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"
);

vscode_intellisense_sns

The typescript inference will help you to pass parameter in a right way

vscode_error_kms_marker

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);
});

Contribution

if you miss a function/service for better type inference, feel free to add it to Mappings and PR it back

Test

execute tests:

npm run test

Changelog

See change history here Changelog.

License

MIT License