diff --git a/src/v1/operations/batch/batchWrite.ts b/src/v1/operations/batch/batchWrite.ts index 4901201e2..25d9c0b8e 100644 --- a/src/v1/operations/batch/batchWrite.ts +++ b/src/v1/operations/batch/batchWrite.ts @@ -28,7 +28,7 @@ export const batchWrite = async ( } = {} ): Promise => { const documentClient = - options?.dynamoDBDocumentClient ?? requests[0][$entity].table.documentClient + options?.dynamoDBDocumentClient ?? requests[0][$entity].table.getDocumentClient() const commandInput = getBatchWriteCommandInput(requests, options?.batchWriteOptions) diff --git a/src/v1/operations/batch/batchWrite.unit.test.ts b/src/v1/operations/batch/batchWrite.unit.test.ts index b67680c37..7feb494f8 100644 --- a/src/v1/operations/batch/batchWrite.unit.test.ts +++ b/src/v1/operations/batch/batchWrite.unit.test.ts @@ -1,15 +1,8 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' - import { DynamoDBToolboxError, EntityV2, TableV2, schema, string } from 'v1' import { BatchPutItemRequest } from './putItem/operation' import { BatchDeleteItemRequest } from './deleteItem/operation' import { getBatchWriteCommandInput } from './batchWrite' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -19,8 +12,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestTable2 = new TableV2({ name: 'test-table2', @@ -38,8 +30,7 @@ const TestTable2 = new TableV2({ sortKey: { name: 'GSIsk1', type: 'string' }, type: 'global' } - }, - documentClient + } }) const TestEntity = new EntityV2({ diff --git a/src/v1/operations/batch/deleteItem/BatchDeleteItemParams.unit.test.ts b/src/v1/operations/batch/deleteItem/BatchDeleteItemParams.unit.test.ts index b7bc9fde5..a3c946cb4 100644 --- a/src/v1/operations/batch/deleteItem/BatchDeleteItemParams.unit.test.ts +++ b/src/v1/operations/batch/deleteItem/BatchDeleteItemParams.unit.test.ts @@ -1,13 +1,6 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' - import { DynamoDBToolboxError, EntityV2, TableV2, schema, string } from 'v1' import { BatchDeleteItemRequest } from './operation' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -17,8 +10,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ diff --git a/src/v1/operations/batch/putItem/BatchPutItemParams.unit.test.ts b/src/v1/operations/batch/putItem/BatchPutItemParams.unit.test.ts index bfaffc84c..195da1773 100644 --- a/src/v1/operations/batch/putItem/BatchPutItemParams.unit.test.ts +++ b/src/v1/operations/batch/putItem/BatchPutItemParams.unit.test.ts @@ -1,13 +1,6 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' - import { DynamoDBToolboxError, EntityV2, TableV2, schema, string } from 'v1' import { BatchPutItemRequest } from './operation' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -17,8 +10,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ diff --git a/src/v1/operations/deleteItem/command.ts b/src/v1/operations/deleteItem/command.ts index 99dcfc8f1..0d5a71646 100644 --- a/src/v1/operations/deleteItem/command.ts +++ b/src/v1/operations/deleteItem/command.ts @@ -79,9 +79,9 @@ export class DeleteItemCommand< async send(): Promise> { const deleteItemParams = this.params() - const commandOutput = await this[$entity].table.documentClient.send( - new DeleteCommand(deleteItemParams) - ) + const commandOutput = await this[$entity].table + .getDocumentClient() + .send(new DeleteCommand(deleteItemParams)) const { Attributes: attributes, ...restCommandOutput } = commandOutput diff --git a/src/v1/operations/deleteItem/deleteItemParams/deleteItemParams.unit.test.ts b/src/v1/operations/deleteItem/deleteItemParams/deleteItemParams.unit.test.ts index d5b7b1bb5..ab80bb243 100644 --- a/src/v1/operations/deleteItem/deleteItemParams/deleteItemParams.unit.test.ts +++ b/src/v1/operations/deleteItem/deleteItemParams/deleteItemParams.unit.test.ts @@ -1,6 +1,3 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' - import { TableV2, EntityV2, @@ -11,10 +8,6 @@ import { prefix } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -24,8 +17,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ diff --git a/src/v1/operations/errors.ts b/src/v1/operations/errors.ts index 16c8dd8d4..86d7eaa76 100644 --- a/src/v1/operations/errors.ts +++ b/src/v1/operations/errors.ts @@ -71,6 +71,12 @@ type UnknownOptionErrorBlueprint = ErrorBlueprint<{ payload: { option: unknown } }> +type MissingDocumentClientErrorBlueprint = ErrorBlueprint<{ + code: 'operations.missingDocumentClient' + hasPath: false + payload: undefined +}> + export type OperationsErrorBlueprints = | ScanCommandErrorBlueprints | QueryCommandErrorBlueprints @@ -87,3 +93,4 @@ export type OperationsErrorBlueprints = | InvalidSelectOptionErrorBlueprint | UnknownOptionErrorBlueprint | ExpressionParsersErrorBlueprints + | MissingDocumentClientErrorBlueprint diff --git a/src/v1/operations/getItem/command.ts b/src/v1/operations/getItem/command.ts index 31ad727c6..cc00a6cad 100644 --- a/src/v1/operations/getItem/command.ts +++ b/src/v1/operations/getItem/command.ts @@ -72,9 +72,9 @@ export class GetItemCommand< async send(): Promise> { const getItemParams = this.params() - const commandOutput = await this[$entity].table.documentClient.send( - new GetCommand(getItemParams) - ) + const commandOutput = await this[$entity].table + .getDocumentClient() + .send(new GetCommand(getItemParams)) const { Item: item, ...restCommandOutput } = commandOutput diff --git a/src/v1/operations/getItem/getItemParams/getItemParams.unit.test.ts b/src/v1/operations/getItem/getItemParams/getItemParams.unit.test.ts index f6b3d2b9e..a01d39abe 100644 --- a/src/v1/operations/getItem/getItemParams/getItemParams.unit.test.ts +++ b/src/v1/operations/getItem/getItemParams/getItemParams.unit.test.ts @@ -1,12 +1,5 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' - import { TableV2, EntityV2, schema, string, DynamoDBToolboxError, GetItemCommand, prefix } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -16,8 +9,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ @@ -33,8 +25,7 @@ const TestEntity = new EntityV2({ const TestTable2 = new TableV2({ name: 'test-table', partitionKey: { type: 'string', name: 'pk' }, - sortKey: { type: 'string', name: 'sk' }, - documentClient + sortKey: { type: 'string', name: 'sk' } }) const TestEntity2 = new EntityV2({ diff --git a/src/v1/operations/putItem/command.ts b/src/v1/operations/putItem/command.ts index f3eeb2926..e63243b62 100644 --- a/src/v1/operations/putItem/command.ts +++ b/src/v1/operations/putItem/command.ts @@ -94,9 +94,9 @@ export class PutItemCommand< async send(): Promise> { const putItemParams = this.params() - const commandOutput = await this[$entity].table.documentClient.send( - new PutCommand(putItemParams) - ) + const commandOutput = await this[$entity].table + .getDocumentClient() + .send(new PutCommand(putItemParams)) const { Attributes: attributes, ...restCommandOutput } = commandOutput diff --git a/src/v1/operations/putItem/putItemParams/putItemParams.unit.test.ts b/src/v1/operations/putItem/putItemParams/putItemParams.unit.test.ts index dc3470839..8c16dcbba 100644 --- a/src/v1/operations/putItem/putItemParams/putItemParams.unit.test.ts +++ b/src/v1/operations/putItem/putItemParams/putItemParams.unit.test.ts @@ -1,6 +1,3 @@ -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' - import { TableV2, EntityV2, @@ -19,10 +16,6 @@ import { prefix } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -32,8 +25,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ @@ -62,8 +54,7 @@ const TestEntity = new EntityV2({ const TestTable2 = new TableV2({ name: 'test-table', - partitionKey: { type: 'string', name: 'pk' }, - documentClient + partitionKey: { type: 'string', name: 'pk' } }) const TestEntity2 = new EntityV2({ @@ -97,8 +88,7 @@ const TestEntity3 = new EntityV2({ const TestTable3 = new TableV2({ name: 'TestTable3', partitionKey: { type: 'string', name: 'pk' }, - sortKey: { type: 'string', name: 'sk' }, - documentClient + sortKey: { type: 'string', name: 'sk' } }) const TestEntity4 = new EntityV2({ diff --git a/src/v1/operations/query/command.ts b/src/v1/operations/query/command.ts index 4c988b124..e581e4221 100644 --- a/src/v1/operations/query/command.ts +++ b/src/v1/operations/query/command.ts @@ -169,7 +169,7 @@ export class QueryCommand< ScannedCount: pageScannedCount, ConsumedCapacity: pageConsumedCapacity, $metadata: pageMetadata - } = await this[$table].documentClient.send(new _QueryCommand(pageQueryParams)) + } = await this[$table].getDocumentClient().send(new _QueryCommand(pageQueryParams)) for (const item of items) { const itemEntityName = item[this[$table].entityAttributeSavedAs] diff --git a/src/v1/operations/query/queryParams/queryParams.unit.test.ts b/src/v1/operations/query/queryParams/queryParams.unit.test.ts index 3dedda3ca..11afbac83 100644 --- a/src/v1/operations/query/queryParams/queryParams.unit.test.ts +++ b/src/v1/operations/query/queryParams/queryParams.unit.test.ts @@ -1,5 +1,3 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' import type { A } from 'ts-toolbelt' import { @@ -14,10 +12,6 @@ import { prefix } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -47,8 +41,7 @@ const TestTable = new TableV2({ type: 'string' } } - }, - documentClient + } }) const Entity1 = new EntityV2({ diff --git a/src/v1/operations/scan/command.ts b/src/v1/operations/scan/command.ts index 5581b0ea7..21664a1da 100644 --- a/src/v1/operations/scan/command.ts +++ b/src/v1/operations/scan/command.ts @@ -128,7 +128,7 @@ export class ScanCommand< ScannedCount: pageScannedCount, ConsumedCapacity: pageConsumedCapacity, $metadata: pageMetadata - } = await this[$table].documentClient.send(new _ScanCommand(pageScanParams)) + } = await this[$table].getDocumentClient().send(new _ScanCommand(pageScanParams)) for (const item of items) { const itemEntityName = item[this[$table].entityAttributeSavedAs] diff --git a/src/v1/operations/scan/scanParams/scanParams.unit.test.ts b/src/v1/operations/scan/scanParams/scanParams.unit.test.ts index 2aedde3d7..a492ab19b 100644 --- a/src/v1/operations/scan/scanParams/scanParams.unit.test.ts +++ b/src/v1/operations/scan/scanParams/scanParams.unit.test.ts @@ -1,5 +1,3 @@ -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' import type { A } from 'ts-toolbelt' import { @@ -14,10 +12,6 @@ import { prefix } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -40,8 +34,7 @@ const TestTable = new TableV2({ type: 'string' } } - }, - documentClient + } }) const Entity1 = new EntityV2({ diff --git a/src/v1/operations/transactions/deleteItem/operation.ts b/src/v1/operations/transactions/deleteItem/operation.ts index 455519e9b..546060d4a 100644 --- a/src/v1/operations/transactions/deleteItem/operation.ts +++ b/src/v1/operations/transactions/deleteItem/operation.ts @@ -58,7 +58,7 @@ export class DeleteItemTransaction< params: TransactDeleteItemParams } { return { - documentClient: this[$entity].table.documentClient, + documentClient: this[$entity].table.getDocumentClient(), type: 'Delete', params: this.params() } diff --git a/src/v1/operations/transactions/deleteItem/transactDeleteItemParams/transactDeleteItemParams.unit.test.ts b/src/v1/operations/transactions/deleteItem/transactDeleteItemParams/transactDeleteItemParams.unit.test.ts index c1baf860a..f7bdf1751 100644 --- a/src/v1/operations/transactions/deleteItem/transactDeleteItemParams/transactDeleteItemParams.unit.test.ts +++ b/src/v1/operations/transactions/deleteItem/transactDeleteItemParams/transactDeleteItemParams.unit.test.ts @@ -1,13 +1,6 @@ -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' - import { TableV2, EntityV2, schema, string, DynamoDBToolboxError } from 'v1' import { DeleteItemTransaction } from '../operation' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -17,8 +10,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ diff --git a/src/v1/operations/transactions/putItem/operation.ts b/src/v1/operations/transactions/putItem/operation.ts index 06c84fdb3..bf2b40740 100644 --- a/src/v1/operations/transactions/putItem/operation.ts +++ b/src/v1/operations/transactions/putItem/operation.ts @@ -58,7 +58,7 @@ export class PutItemTransaction< params: TransactPutItemParams } { return { - documentClient: this[$entity].table.documentClient, + documentClient: this[$entity].table.getDocumentClient(), type: 'Put', params: this.params() } diff --git a/src/v1/operations/transactions/putItem/transactPutItemParams/transactPutItemParams.unit.test.ts b/src/v1/operations/transactions/putItem/transactPutItemParams/transactPutItemParams.unit.test.ts index 9e326ee08..45e72faeb 100644 --- a/src/v1/operations/transactions/putItem/transactPutItemParams/transactPutItemParams.unit.test.ts +++ b/src/v1/operations/transactions/putItem/transactPutItemParams/transactPutItemParams.unit.test.ts @@ -1,6 +1,3 @@ -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' - import { TableV2, EntityV2, @@ -17,10 +14,6 @@ import { PutItemTransaction } from 'v1' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -30,8 +23,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ @@ -58,8 +50,7 @@ const TestEntity = new EntityV2({ const TestTable2 = new TableV2({ name: 'test-table', - partitionKey: { type: 'string', name: 'pk' }, - documentClient + partitionKey: { type: 'string', name: 'pk' } }) const TestEntity2 = new EntityV2({ @@ -93,8 +84,7 @@ const TestEntity3 = new EntityV2({ const TestTable3 = new TableV2({ name: 'TestTable3', partitionKey: { type: 'string', name: 'pk' }, - sortKey: { type: 'string', name: 'sk' }, - documentClient + sortKey: { type: 'string', name: 'sk' } }) const TestEntity4 = new EntityV2({ diff --git a/src/v1/operations/transactions/updateItem/operation.ts b/src/v1/operations/transactions/updateItem/operation.ts index f7b33df65..4d3d9ed9f 100644 --- a/src/v1/operations/transactions/updateItem/operation.ts +++ b/src/v1/operations/transactions/updateItem/operation.ts @@ -58,7 +58,7 @@ export class UpdateItemTransaction< params: TransactUpdateItemParams } { return { - documentClient: this[$entity].table.documentClient, + documentClient: this[$entity].table.getDocumentClient(), type: 'Update', params: this.params() } diff --git a/src/v1/operations/transactions/updateItem/transactUpdateItemParams/transactUpdateItemParams.unit.test.ts b/src/v1/operations/transactions/updateItem/transactUpdateItemParams/transactUpdateItemParams.unit.test.ts index 3cb728d3c..bdb45666c 100644 --- a/src/v1/operations/transactions/updateItem/transactUpdateItemParams/transactUpdateItemParams.unit.test.ts +++ b/src/v1/operations/transactions/updateItem/transactUpdateItemParams/transactUpdateItemParams.unit.test.ts @@ -1,6 +1,3 @@ -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' - import { TableV2, EntityV2, @@ -30,10 +27,6 @@ import { $prepend } from 'v1/operations/updateItem/utils' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -43,8 +36,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ @@ -88,8 +80,7 @@ const TestTable2 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity2 = new EntityV2({ @@ -121,8 +112,7 @@ const TestTable3 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity3 = new EntityV2({ @@ -142,8 +132,7 @@ const TestTable4 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity4 = new EntityV2({ diff --git a/src/v1/operations/updateItem/command.ts b/src/v1/operations/updateItem/command.ts index 013248de7..200bb575c 100644 --- a/src/v1/operations/updateItem/command.ts +++ b/src/v1/operations/updateItem/command.ts @@ -94,9 +94,9 @@ export class UpdateItemCommand< async send(): Promise> { const getItemParams = this.params() - const commandOutput = await this[$entity].table.documentClient.send( - new UpdateCommand(getItemParams) - ) + const commandOutput = await this[$entity].table + .getDocumentClient() + .send(new UpdateCommand(getItemParams)) const { Attributes: attributes, ...restCommandOutput } = commandOutput diff --git a/src/v1/operations/updateItem/updateItemParams/updateItemParams.unit.test.ts b/src/v1/operations/updateItem/updateItemParams/updateItemParams.unit.test.ts index b768da6be..0b4a488ff 100644 --- a/src/v1/operations/updateItem/updateItemParams/updateItemParams.unit.test.ts +++ b/src/v1/operations/updateItem/updateItemParams/updateItemParams.unit.test.ts @@ -1,6 +1,3 @@ -import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' -import { DynamoDBClient } from '@aws-sdk/client-dynamodb' - import { TableV2, EntityV2, @@ -20,10 +17,6 @@ import { } from 'v1' import { $set, $get, $remove, $sum, $subtract, $add, $delete, $append, $prepend } from '../utils' -const dynamoDbClient = new DynamoDBClient({}) - -const documentClient = DynamoDBDocumentClient.from(dynamoDbClient) - const TestTable = new TableV2({ name: 'test-table', partitionKey: { @@ -33,8 +26,7 @@ const TestTable = new TableV2({ sortKey: { type: 'string', name: 'sk' - }, - documentClient + } }) const TestEntity = new EntityV2({ @@ -78,8 +70,7 @@ const TestTable2 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity2 = new EntityV2({ @@ -111,8 +102,7 @@ const TestTable3 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity3 = new EntityV2({ @@ -132,8 +122,7 @@ const TestTable4 = new TableV2({ partitionKey: { type: 'string', name: 'pk' - }, - documentClient + } }) const TestEntity4 = new EntityV2({ diff --git a/src/v1/table/class.ts b/src/v1/table/class.ts index 0d00d4749..285223193 100644 --- a/src/v1/table/class.ts +++ b/src/v1/table/class.ts @@ -1,5 +1,6 @@ import type { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb' +import { DynamoDBToolboxError } from 'v1/errors' import type { TableCommand } from 'v1/operations/class' import type { NarrowObject, NarrowObjectRec } from 'v1/types/narrowObject' import { isString } from 'v1/utils/validation/isString' @@ -12,7 +13,7 @@ export class TableV2< INDEXES extends Record = Key extends PARTITION_KEY ? Record : {}, ENTITY_ATTRIBUTE_SAVED_AS extends string = Key extends PARTITION_KEY ? string : '_et' > { - public documentClient: DynamoDBDocumentClient + public documentClient?: DynamoDBDocumentClient public name: string | (() => string) public partitionKey: PARTITION_KEY public sortKey?: SORT_KEY @@ -22,7 +23,7 @@ export class TableV2< /** * Define a Table * - * @param documentClient DynamoDBDocumentClient + * @param documentClient _(optional)_ DynamoDBDocumentClient * @param name string * @param partitionKey Partition key * @param sortKey _(optional)_ Sort key @@ -36,7 +37,7 @@ export class TableV2< indexes = {} as INDEXES, entityAttributeSavedAs = '_et' as ENTITY_ATTRIBUTE_SAVED_AS }: { - documentClient: DynamoDBDocumentClient + documentClient?: DynamoDBDocumentClient name: string | (() => string) partitionKey: NarrowObject sortKey?: NarrowObject @@ -66,4 +67,14 @@ export class TableV2< ): TABLE_COMMAND_CLASS { return new commandClass(this) } + + getDocumentClient = () => { + if (this.documentClient === undefined) { + throw new DynamoDBToolboxError('operations.missingDocumentClient', { + message: 'You need to set a document client on your table to send a command' + }) + } + + return this.documentClient + } }