vitest-dynamodb-lite
Version:
fast dynamodb mock on local for vitest
57 lines (50 loc) • 1.48 kB
text/typescript
import http from "node:http";
// @ts-ignore
import dynalite from "dynalite";
import { getTables, getDynalitePort } from "./config";
import * as dynamodb from "./dynamodb";
export const dynaliteInstance: http.Server = dynalite({
createTableMs: 0,
deleteTableMs: 0,
updateTableMs: 0,
});
const listen = async () => {
await new Promise<void>((resolve, reject) => {
dynaliteInstance.once("error", reject);
dynaliteInstance.listen(process.env.MOCK_DYNAMODB_PORT, resolve);
});
};
const close = async () => {
await new Promise<void>((resolve) =>
dynaliteInstance.close((err: unknown) => {
if (err) {
console.error(err);
}
resolve();
}),
);
};
export const start = async (): Promise<void> => {
if (!dynaliteInstance.listening) {
await listen();
}
};
export const stop = async (): Promise<void> => {
// v3 does something to prevent dynalite
// from shutting down until we have
// killed the dynamodb connection
dynamodb.killConnection();
if (dynaliteInstance.listening) {
await close();
}
};
export const deleteTables = async (): Promise<void> => {
const tablesNames = (await getTables()).map((table) => table.TableName);
const port = await getDynalitePort();
await dynamodb.deleteTables(tablesNames, port);
};
export const createTables = async (): Promise<void> => {
const tables = await getTables();
const port = await getDynalitePort();
await dynamodb.createTables(tables, port);
};