From 1acc74df68a136d018af06dabcb7b2b368ba19a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sasu=20M=C3=A4kinen?= Date: Thu, 14 Mar 2024 16:31:26 +0200 Subject: [PATCH] prevent await --- src/queryBuilders/getItemQueryBuilder.ts | 6 ++++++ src/tsynamo.integration.test.ts | 15 +++++++++++++++ src/util/preventAwait.ts | 10 ++++++++++ 3 files changed, 31 insertions(+) create mode 100644 src/util/preventAwait.ts diff --git a/src/queryBuilders/getItemQueryBuilder.ts b/src/queryBuilders/getItemQueryBuilder.ts index 93879f7..c939a16 100644 --- a/src/queryBuilders/getItemQueryBuilder.ts +++ b/src/queryBuilders/getItemQueryBuilder.ts @@ -6,6 +6,7 @@ import { SelectAttributes, StripKeys, } from "../typeHelpers"; +import { preventAwait } from "../util/preventAwait"; export interface GetQueryBuilderInterface { keys & PickSkRequired>( @@ -87,6 +88,11 @@ export class GetQueryBuilder }; } +preventAwait( + GetQueryBuilder, + "Don't await GetQueryBuilder instances directly. To execute the query you need to call the `execute` method" +); + interface GetQueryBuilderProps { readonly node: GetNode; readonly ddbClient: DynamoDBDocumentClient; diff --git a/src/tsynamo.integration.test.ts b/src/tsynamo.integration.test.ts index 29992f8..1115084 100644 --- a/src/tsynamo.integration.test.ts +++ b/src/tsynamo.integration.test.ts @@ -84,6 +84,21 @@ describe("tsynamo", () => { expect(data?.someBoolean).toBe(TEST_ITEM_1.someBoolean); expect(Object.keys(data!).length).toBe(2); }); + it("can't await instance directly", async () => { + expect( + async () => + await tsynamoClient + .getItemFrom("myTable") + .keys({ + userId: TEST_ITEM_1.userId, + timestamp: TEST_ITEM_1.timestamp, + }) + .consistentRead(true) + .attributes(["somethingElse", "someBoolean"]) + ).rejects.toThrowError( + "Don't await GetQueryBuilder instances directly. To execute the query you need to call the `execute` method" + ); + }); }); }); diff --git a/src/util/preventAwait.ts b/src/util/preventAwait.ts new file mode 100644 index 0000000..91ae905 --- /dev/null +++ b/src/util/preventAwait.ts @@ -0,0 +1,10 @@ +export const preventAwait = (c: Function, message: string): void => { + Object.defineProperties(c.prototype, { + then: { + enumerable: false, + value: () => { + throw new Error(message); + }, + }, + }); +};