import { DynamoDBClient } from "../DynamoDBClient"; import { DescribeTableCommand, DescribeTableCommandInput } from "../commands/DescribeTableCommand"; import { WaiterConfiguration, WaiterResult, WaiterState, checkExceptions, createWaiter } from "@aws-sdk/util-waiter"; const checkState = async (client: DynamoDBClient, input: DescribeTableCommandInput): Promise => { let reason; try { let result: any = await client.send(new DescribeTableCommand(input)); reason = result; try { let returnComparator = () => { return result.Table.TableStatus; }; if (returnComparator() === "ACTIVE") { return { state: WaiterState.SUCCESS, reason }; } } catch (e) {} } catch (exception) { reason = exception; if (exception.name && exception.name == "ResourceNotFoundException") { return { state: WaiterState.RETRY, reason }; } } return { state: WaiterState.RETRY, reason }; }; /** * * @deprecated Use waitUntilTableExists instead. waitForTableExists does not throw error in non-success cases. */ export const waitForTableExists = async ( params: WaiterConfiguration, input: DescribeTableCommandInput ): Promise => { const serviceDefaults = { minDelay: 20, maxDelay: 120 }; return createWaiter({ ...serviceDefaults, ...params }, input, checkState); }; /** * * @param params - Waiter configuration options. * @param input - The input to DescribeTableCommand for polling. */ export const waitUntilTableExists = async ( params: WaiterConfiguration, input: DescribeTableCommandInput ): Promise => { const serviceDefaults = { minDelay: 20, maxDelay: 120 }; const result = await createWaiter({ ...serviceDefaults, ...params }, input, checkState); return checkExceptions(result); };