@ftschopp/dynatable-core 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +442 -2
- package/dist/builders/delete/types.d.ts +6 -1
- package/dist/builders/delete/types.d.ts.map +1 -1
- package/dist/builders/get/types.d.ts +6 -1
- package/dist/builders/get/types.d.ts.map +1 -1
- package/dist/builders/put/types.d.ts +6 -1
- package/dist/builders/put/types.d.ts.map +1 -1
- package/dist/builders/query/create-query-builder.d.ts +1 -1
- package/dist/builders/query/create-query-builder.d.ts.map +1 -1
- package/dist/builders/query/types.d.ts +9 -10
- package/dist/builders/query/types.d.ts.map +1 -1
- package/dist/builders/transact-write/create-transact-write-builder.d.ts.map +1 -1
- package/dist/builders/transact-write/create-transact-write-builder.js +1 -1
- package/dist/builders/transact-write/types.d.ts +33 -6
- package/dist/builders/transact-write/types.d.ts.map +1 -1
- package/dist/builders/update/create-update-builder.d.ts.map +1 -1
- package/dist/builders/update/create-update-builder.js +30 -9
- package/dist/builders/update/types.d.ts +8 -2
- package/dist/builders/update/types.d.ts.map +1 -1
- package/dist/core/types.d.ts +1 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/entity/create-entity-api.d.ts +15 -0
- package/dist/entity/create-entity-api.d.ts.map +1 -0
- package/dist/entity/create-entity-api.js +124 -0
- package/dist/entity/index.d.ts +12 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +18 -0
- package/dist/entity/middleware/factories.d.ts +6 -0
- package/dist/entity/middleware/factories.d.ts.map +1 -0
- package/dist/entity/middleware/factories.js +15 -0
- package/dist/entity/middleware/types.d.ts +8 -0
- package/dist/entity/middleware/types.d.ts.map +1 -0
- package/dist/entity/middleware/types.js +2 -0
- package/dist/entity/middleware/with-middleware.d.ts +8 -0
- package/dist/entity/middleware/with-middleware.d.ts.map +1 -0
- package/dist/entity/middleware/with-middleware.js +29 -0
- package/dist/{entity.d.ts → entity/types.d.ts} +6 -17
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +2 -0
- package/dist/entity/validation/key-validation.d.ts +7 -0
- package/dist/entity/validation/key-validation.d.ts.map +1 -0
- package/dist/entity/validation/key-validation.js +25 -0
- package/dist/table.d.ts +8 -1
- package/dist/table.d.ts.map +1 -1
- package/dist/table.js +1 -0
- package/dist/utils/model-utils.d.ts +7 -1
- package/dist/utils/model-utils.d.ts.map +1 -1
- package/dist/utils/model-utils.js +29 -1
- package/dist/utils/zod-utils.d.ts +1 -1
- package/package.json +3 -2
- package/src/builders/README.md +68 -1
- package/src/builders/delete/types.ts +7 -1
- package/src/builders/get/types.ts +7 -1
- package/src/builders/put/types.ts +7 -1
- package/src/builders/query/create-query-builder.ts +4 -6
- package/src/builders/query/types.ts +9 -12
- package/src/builders/transact-write/README.md +37 -1
- package/src/builders/transact-write/create-transact-write-builder.ts +20 -14
- package/src/builders/transact-write/types.ts +44 -6
- package/src/builders/update/create-update-builder.test.ts +43 -0
- package/src/builders/update/create-update-builder.ts +47 -9
- package/src/builders/update/types.ts +9 -2
- package/src/core/types.ts +1 -0
- package/src/entity/create-entity-api.ts +212 -0
- package/src/entity/index.ts +19 -0
- package/src/entity/middleware/factories.ts +15 -0
- package/src/entity/middleware/types.ts +7 -0
- package/src/entity/middleware/with-middleware.ts +37 -0
- package/src/entity/types.ts +79 -0
- package/src/entity/validation/key-validation.ts +34 -0
- package/src/table.ts +10 -3
- package/src/utils/model-utils.test.ts +131 -1
- package/src/utils/model-utils.ts +32 -0
- package/dist/entity.d.ts.map +0 -1
- package/dist/entity.js +0 -161
- package/src/entity.ts +0 -337
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import type { TransactWriteCommandInput, TransactWriteCommandOutput, PutCommandInput, UpdateCommandInput, DeleteCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
3
|
+
type TransactWriteItems = NonNullable<TransactWriteCommandInput['TransactItems']>;
|
|
4
|
+
type StrictTransactPut = NonNullable<TransactWriteItems[number]['Put']>;
|
|
5
|
+
type StrictTransactUpdate = NonNullable<TransactWriteItems[number]['Update']>;
|
|
6
|
+
type StrictTransactDelete = NonNullable<TransactWriteItems[number]['Delete']>;
|
|
7
|
+
type StrictTransactConditionCheck = NonNullable<TransactWriteItems[number]['ConditionCheck']>;
|
|
8
|
+
/**
|
|
9
|
+
* Parameters for a Put operation within a transaction
|
|
10
|
+
* Accepts both regular PutCommandInput and strict transaction Put params
|
|
11
|
+
*/
|
|
12
|
+
export type TransactPutParams = PutCommandInput | StrictTransactPut;
|
|
13
|
+
/**
|
|
14
|
+
* Parameters for an Update operation within a transaction
|
|
15
|
+
* Accepts both regular UpdateCommandInput and strict transaction Update params
|
|
16
|
+
*/
|
|
17
|
+
export type TransactUpdateParams = UpdateCommandInput | StrictTransactUpdate;
|
|
18
|
+
/**
|
|
19
|
+
* Parameters for a Delete operation within a transaction
|
|
20
|
+
* Accepts both regular DeleteCommandInput and strict transaction Delete params
|
|
21
|
+
*/
|
|
22
|
+
export type TransactDeleteParams = DeleteCommandInput | StrictTransactDelete;
|
|
23
|
+
/**
|
|
24
|
+
* Parameters for a ConditionCheck operation within a transaction
|
|
25
|
+
*/
|
|
26
|
+
export type TransactConditionCheckParams = StrictTransactConditionCheck;
|
|
2
27
|
/**
|
|
3
28
|
* Represents a single item in a TransactWrite operation
|
|
29
|
+
* Using any internally to allow flexibility between CommandInput and strict transaction types
|
|
4
30
|
*/
|
|
5
31
|
export type TransactWriteItem = {
|
|
6
32
|
Put: any;
|
|
@@ -23,12 +49,13 @@ export type TransactWriteState = {
|
|
|
23
49
|
* TransactWrite builder interface
|
|
24
50
|
*/
|
|
25
51
|
export type TransactWriteBuilder = {
|
|
26
|
-
readonly addPut: (params:
|
|
27
|
-
readonly addUpdate: (params:
|
|
28
|
-
readonly addDelete: (params:
|
|
29
|
-
readonly addConditionCheck: (params:
|
|
52
|
+
readonly addPut: (params: TransactPutParams) => TransactWriteBuilder;
|
|
53
|
+
readonly addUpdate: (params: TransactUpdateParams) => TransactWriteBuilder;
|
|
54
|
+
readonly addDelete: (params: TransactDeleteParams) => TransactWriteBuilder;
|
|
55
|
+
readonly addConditionCheck: (params: TransactConditionCheckParams) => TransactWriteBuilder;
|
|
30
56
|
readonly withClientRequestToken: (token: string) => TransactWriteBuilder;
|
|
31
|
-
readonly dbParams: () =>
|
|
32
|
-
readonly execute: () => Promise<
|
|
57
|
+
readonly dbParams: () => TransactWriteCommandInput;
|
|
58
|
+
readonly execute: () => Promise<TransactWriteCommandOutput>;
|
|
33
59
|
};
|
|
60
|
+
export {};
|
|
34
61
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/transact-write/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/transact-write/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,kBAAkB,GAAG,WAAW,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC;AAClF,KAAK,iBAAiB,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,KAAK,oBAAoB,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9E,KAAK,oBAAoB,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9E,KAAK,4BAA4B,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE9F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GACZ;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,GACf;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,GACf;IAAE,cAAc,EAAE,GAAG,CAAA;CAAE,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,oBAAoB,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,oBAAoB,CAAC;IAC3E,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,oBAAoB,CAAC;IAC3E,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,oBAAoB,CAAC;IAC3F,QAAQ,CAAC,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,oBAAoB,CAAC;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,yBAAyB,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-update-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/update/create-update-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgC,SAAS,EAA4B,MAAM,WAAW,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EACnB,MAAM,EAAE,cAAc,EACtB,cAAc,GAAE,SAAS,EAAO,EAChC,aAAa,GAAE;IACb,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;CACuB,EAChD,UAAU,GAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,aAAsB,EACnF,YAAY,SAAI,EAChB,gBAAgB,UAAQ,EACxB,MAAM,CAAC,EAAE,cAAc,GACtB,aAAa,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"create-update-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/update/create-update-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgC,SAAS,EAA4B,MAAM,WAAW,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,EACnB,MAAM,EAAE,cAAc,EACtB,cAAc,GAAE,SAAS,EAAO,EAChC,aAAa,GAAE;IACb,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;CACuB,EAChD,UAAU,GAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,aAAsB,EACnF,YAAY,SAAI,EAChB,gBAAgB,UAAQ,EACxB,MAAM,CAAC,EAAE,cAAc,GACtB,aAAa,CAAC,KAAK,CAAC,CAwStB"}
|
|
@@ -28,8 +28,32 @@ function createUpdateBuilder(tableName, key, client, prevConditions = [], update
|
|
|
28
28
|
const condition = fn(attrs, opBuilder);
|
|
29
29
|
return createUpdateBuilder(tableName, key, client, [...conditions, condition], updateActions, returnMode, valueCounter, enableTimestamps, logger);
|
|
30
30
|
},
|
|
31
|
-
set(
|
|
32
|
-
|
|
31
|
+
set(attrOrUpdates, value) {
|
|
32
|
+
// Check if this is a multiple updates object
|
|
33
|
+
// An AttrRef has only 'name' property and is a string value
|
|
34
|
+
// Multiple updates is an object with no value parameter
|
|
35
|
+
if (value === undefined &&
|
|
36
|
+
typeof attrOrUpdates === 'object' &&
|
|
37
|
+
attrOrUpdates !== null &&
|
|
38
|
+
!(Object.keys(attrOrUpdates).length === 1 &&
|
|
39
|
+
'name' in attrOrUpdates &&
|
|
40
|
+
typeof attrOrUpdates.name === 'string')) {
|
|
41
|
+
// Multiple updates case
|
|
42
|
+
const updates = attrOrUpdates;
|
|
43
|
+
const newActions = [];
|
|
44
|
+
for (const [attr, val] of Object.entries(updates)) {
|
|
45
|
+
const attrName = attr;
|
|
46
|
+
const valueName = getUniqueValueName(attrName);
|
|
47
|
+
newActions.push({
|
|
48
|
+
expression: `#${attrName} = :${valueName}`,
|
|
49
|
+
names: { [`#${attrName}`]: attrName },
|
|
50
|
+
values: { [`:${valueName}`]: val },
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return createUpdateBuilder(tableName, key, client, conditions, { ...updateActions, set: [...updateActions.set, ...newActions] }, returnMode, valueCounter, enableTimestamps, logger);
|
|
54
|
+
}
|
|
55
|
+
// Single update case
|
|
56
|
+
const attrName = normalizeAttr(attrOrUpdates);
|
|
33
57
|
const valueName = getUniqueValueName(attrName);
|
|
34
58
|
const action = {
|
|
35
59
|
expression: `#${attrName} = :${valueName}`,
|
|
@@ -165,15 +189,12 @@ function createUpdateBuilder(tableName, key, client, prevConditions = [], update
|
|
|
165
189
|
const params = build().dbParams();
|
|
166
190
|
const response = await client.send(new lib_dynamodb_1.UpdateCommand(params));
|
|
167
191
|
logger?.log('UpdateCommand', params, response);
|
|
168
|
-
// Return the
|
|
169
|
-
if (
|
|
170
|
-
return response.Attributes;
|
|
171
|
-
}
|
|
172
|
-
if (returnMode === 'UPDATED_NEW' && response.Attributes) {
|
|
192
|
+
// Return the item based on returnMode
|
|
193
|
+
if (response.Attributes) {
|
|
173
194
|
return response.Attributes;
|
|
174
195
|
}
|
|
175
|
-
//
|
|
176
|
-
return
|
|
196
|
+
// If no attributes returned (NONE mode), return undefined
|
|
197
|
+
return undefined;
|
|
177
198
|
},
|
|
178
199
|
});
|
|
179
200
|
return build();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UpdateCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
1
2
|
import { OperationBuilder, AttrRef } from '../shared';
|
|
2
3
|
/**
|
|
3
4
|
* Update actions that can be performed on attributes
|
|
@@ -10,11 +11,12 @@ export type UpdateAction = {
|
|
|
10
11
|
/**
|
|
11
12
|
* Builder interface for DynamoDB UpdateItem operations
|
|
12
13
|
*/
|
|
13
|
-
export interface UpdateBuilder<Model> extends OperationBuilder<Model> {
|
|
14
|
+
export interface UpdateBuilder<Model> extends Omit<OperationBuilder<Model>, 'dbParams'> {
|
|
14
15
|
/**
|
|
15
|
-
* Sets an attribute to a specific value
|
|
16
|
+
* Sets an attribute to a specific value, or sets multiple attributes at once
|
|
16
17
|
*/
|
|
17
18
|
set(attr: keyof Model | AttrRef, value: any): UpdateBuilder<Model>;
|
|
19
|
+
set(updates: Partial<Model>): UpdateBuilder<Model>;
|
|
18
20
|
/**
|
|
19
21
|
* Removes an attribute from the item
|
|
20
22
|
*/
|
|
@@ -31,5 +33,9 @@ export interface UpdateBuilder<Model> extends OperationBuilder<Model> {
|
|
|
31
33
|
* Configures what values should be returned after the update operation
|
|
32
34
|
*/
|
|
33
35
|
returning(mode: 'NONE' | 'ALL_OLD' | 'ALL_NEW' | 'UPDATED_OLD' | 'UPDATED_NEW'): UpdateBuilder<Model>;
|
|
36
|
+
/**
|
|
37
|
+
* Converts the builder state to DynamoDB UpdateItem parameters
|
|
38
|
+
*/
|
|
39
|
+
dbParams(): UpdateCommandInput;
|
|
34
40
|
}
|
|
35
41
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/update/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/update/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,CAAE,SAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACrF;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEnD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEnE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAEtE;;OAEG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,GACnE,aAAa,CAAC,KAAK,CAAC,CAAC;IAExB;;OAEG;IACH,QAAQ,IAAI,kBAAkB,CAAC;CAChC"}
|
package/dist/core/types.d.ts
CHANGED
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,aAAa,CAAC;IAClB,EAAE,EAAE,aAAa,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { InferInput, InferKeyInput, InferModel, ModelDefinition } from '../core/types';
|
|
3
|
+
import { EntityAPI, EntityAPIOptions } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Creates an entity API instance with validation, key resolution, and builder creation.
|
|
6
|
+
*
|
|
7
|
+
* @param tableName - The name of the DynamoDB table
|
|
8
|
+
* @param modelName - The name of the model/entity
|
|
9
|
+
* @param model - The model definition
|
|
10
|
+
* @param client - DynamoDB client instance
|
|
11
|
+
* @param options - Optional configuration (logger, timestamps, cleanInternalKeys)
|
|
12
|
+
* @returns EntityAPI with get, put, query, scan, update, delete, batchGet, and batchWrite methods
|
|
13
|
+
*/
|
|
14
|
+
export declare const createEntityAPI: <Model extends ModelDefinition>(tableName: string, modelName: string, model: Model, client: DynamoDBClient, options?: EntityAPIOptions) => EntityAPI<InferModel<Model>, InferInput<Model>, InferKeyInput<Model>>;
|
|
15
|
+
//# sourceMappingURL=create-entity-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-entity-api.d.ts","sourceRoot":"","sources":["../../src/entity/create-entity-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AActF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKtD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,SAAS,eAAe,EAC3D,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,OAAO,KAAK,EACZ,QAAQ,cAAc,EACtB,UAAS,gBAAqB,KAC7B,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CA8KtE,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEntityAPI = void 0;
|
|
4
|
+
const model_utils_1 = require("../utils/model-utils");
|
|
5
|
+
const zod_utils_1 = require("../utils/zod-utils");
|
|
6
|
+
const builders_1 = require("../builders");
|
|
7
|
+
const with_middleware_1 = require("./middleware/with-middleware");
|
|
8
|
+
const factories_1 = require("./middleware/factories");
|
|
9
|
+
const key_validation_1 = require("./validation/key-validation");
|
|
10
|
+
/**
|
|
11
|
+
* Creates an entity API instance with validation, key resolution, and builder creation.
|
|
12
|
+
*
|
|
13
|
+
* @param tableName - The name of the DynamoDB table
|
|
14
|
+
* @param modelName - The name of the model/entity
|
|
15
|
+
* @param model - The model definition
|
|
16
|
+
* @param client - DynamoDB client instance
|
|
17
|
+
* @param options - Optional configuration (logger, timestamps, cleanInternalKeys)
|
|
18
|
+
* @returns EntityAPI with get, put, query, scan, update, delete, batchGet, and batchWrite methods
|
|
19
|
+
*/
|
|
20
|
+
const createEntityAPI = (tableName, modelName, model, client, options = {}) => {
|
|
21
|
+
const { logger, timestamps = false, cleanInternalKeys = false } = options;
|
|
22
|
+
// Build a Zod schema from the model
|
|
23
|
+
const zodSchema = (0, zod_utils_1.modelToZod)(model);
|
|
24
|
+
return {
|
|
25
|
+
get(key) {
|
|
26
|
+
// Validate key fields
|
|
27
|
+
(0, key_validation_1.validateKeyFields)(modelName, model, key, 'get()');
|
|
28
|
+
// Resolve any key defaults or computed keys
|
|
29
|
+
const fullKey = (0, model_utils_1.resolveKeys)(model, key);
|
|
30
|
+
const builder = (0, builders_1.createGetBuilder)(tableName, fullKey, client, undefined, logger);
|
|
31
|
+
return (0, with_middleware_1.withMiddleware)(builder, (0, factories_1.createCleanKeysMiddleware)(cleanInternalKeys));
|
|
32
|
+
},
|
|
33
|
+
put(item) {
|
|
34
|
+
// Validate full input data
|
|
35
|
+
const parsed = zodSchema.parse(item);
|
|
36
|
+
// Apply post-processing defaults from the model (including timestamps for new items)
|
|
37
|
+
const withDefaults = (0, model_utils_1.applyPostDefaults)(model, parsed, {
|
|
38
|
+
isUpdate: false,
|
|
39
|
+
timestamps,
|
|
40
|
+
});
|
|
41
|
+
// Resolve keys again with defaults
|
|
42
|
+
const fullKey = (0, model_utils_1.resolveKeys)(model, withDefaults);
|
|
43
|
+
// Combine keys and data into full item, adding _type field
|
|
44
|
+
const fullItem = {
|
|
45
|
+
...withDefaults,
|
|
46
|
+
...fullKey,
|
|
47
|
+
_type: modelName, // Add entity type identifier
|
|
48
|
+
};
|
|
49
|
+
return (0, builders_1.createPutBuilder)(tableName, fullItem, client, [], false, 'NONE', false, logger);
|
|
50
|
+
},
|
|
51
|
+
query() {
|
|
52
|
+
// Query builder doesn't have execute() until after .where() is called
|
|
53
|
+
// The cleanInternalKeys will be handled in the builder itself
|
|
54
|
+
return (0, builders_1.createQueryBuilder)(tableName, client, model, logger);
|
|
55
|
+
},
|
|
56
|
+
scan() {
|
|
57
|
+
const builder = (0, builders_1.createScanBuilder)(tableName, client, [], [], undefined, false, undefined, undefined, undefined, logger);
|
|
58
|
+
return (0, with_middleware_1.withMiddleware)(builder, (0, factories_1.createCleanKeysMiddleware)(cleanInternalKeys));
|
|
59
|
+
},
|
|
60
|
+
update(key) {
|
|
61
|
+
// Validate key fields
|
|
62
|
+
(0, key_validation_1.validateKeyFields)(modelName, model, key, 'update()');
|
|
63
|
+
// Resolve any key defaults or computed keys
|
|
64
|
+
const fullKey = (0, model_utils_1.resolveKeys)(model, key);
|
|
65
|
+
const builder = (0, builders_1.createUpdateBuilder)(tableName, fullKey, client, [], { set: [], remove: [], add: [], delete: [] }, 'NONE', 0, timestamps, logger);
|
|
66
|
+
return (0, with_middleware_1.withMiddleware)(builder, (0, factories_1.createCleanKeysMiddleware)(cleanInternalKeys));
|
|
67
|
+
},
|
|
68
|
+
delete(key) {
|
|
69
|
+
// Validate key fields
|
|
70
|
+
(0, key_validation_1.validateKeyFields)(modelName, model, key, 'delete()');
|
|
71
|
+
// Resolve any key defaults or computed keys
|
|
72
|
+
const fullKey = (0, model_utils_1.resolveKeys)(model, key);
|
|
73
|
+
const builder = (0, builders_1.createDeleteBuilder)(tableName, fullKey, client, [], 'NONE', logger);
|
|
74
|
+
return (0, with_middleware_1.withMiddleware)(builder, (0, factories_1.createCleanKeysMiddleware)(cleanInternalKeys));
|
|
75
|
+
},
|
|
76
|
+
batchGet(keys) {
|
|
77
|
+
// Process all keys and validate them
|
|
78
|
+
const resolvedKeys = keys.map((key) => {
|
|
79
|
+
// Validate key fields
|
|
80
|
+
(0, key_validation_1.validateKeyFields)(modelName, model, key, 'batchGet()');
|
|
81
|
+
// Resolve any key defaults or computed keys
|
|
82
|
+
return (0, model_utils_1.resolveKeys)(model, key);
|
|
83
|
+
});
|
|
84
|
+
// Create the request items in the format expected by BatchGetItem
|
|
85
|
+
const requestItems = {
|
|
86
|
+
[tableName]: {
|
|
87
|
+
Keys: resolvedKeys,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
const builder = (0, builders_1.createBatchGetBuilder)(requestItems, client, undefined, logger);
|
|
91
|
+
return (0, with_middleware_1.withMiddleware)(builder, (0, factories_1.createCleanKeysMiddleware)(cleanInternalKeys));
|
|
92
|
+
},
|
|
93
|
+
batchWrite(items) {
|
|
94
|
+
// Validate and process all items
|
|
95
|
+
const processedItems = items.map((item) => {
|
|
96
|
+
// Validate full input data
|
|
97
|
+
const parsed = zodSchema.parse(item);
|
|
98
|
+
// Apply post-processing defaults from the model (including timestamps for new items)
|
|
99
|
+
const withDefaults = (0, model_utils_1.applyPostDefaults)(model, parsed, {
|
|
100
|
+
isUpdate: false,
|
|
101
|
+
timestamps,
|
|
102
|
+
});
|
|
103
|
+
// Resolve keys again with defaults
|
|
104
|
+
const fullKey = (0, model_utils_1.resolveKeys)(model, withDefaults);
|
|
105
|
+
// Combine keys and data into full item, adding _type field
|
|
106
|
+
return {
|
|
107
|
+
...withDefaults,
|
|
108
|
+
...fullKey,
|
|
109
|
+
_type: modelName, // Add entity type identifier
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
// Create the request items in the format expected by BatchWriteItem
|
|
113
|
+
const requestItems = {
|
|
114
|
+
[tableName]: processedItems.map((item) => ({
|
|
115
|
+
PutRequest: {
|
|
116
|
+
Item: item,
|
|
117
|
+
},
|
|
118
|
+
})),
|
|
119
|
+
};
|
|
120
|
+
return (0, builders_1.createBatchWriteBuilder)(requestItems, client, logger);
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
exports.createEntityAPI = createEntityAPI;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity API module
|
|
3
|
+
*
|
|
4
|
+
* Provides high-level entity management with validation, key resolution, and builder creation.
|
|
5
|
+
*/
|
|
6
|
+
export type { EntityAPI, EntityAPIOptions } from './types';
|
|
7
|
+
export type { ExecutionMiddleware } from './middleware/types';
|
|
8
|
+
export { withMiddleware } from './middleware/with-middleware';
|
|
9
|
+
export { createCleanKeysMiddleware } from './middleware/factories';
|
|
10
|
+
export { validateKeyFields } from './validation/key-validation';
|
|
11
|
+
export { createEntityAPI } from './create-entity-api';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Entity API module
|
|
4
|
+
*
|
|
5
|
+
* Provides high-level entity management with validation, key resolution, and builder creation.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createEntityAPI = exports.validateKeyFields = exports.createCleanKeysMiddleware = exports.withMiddleware = void 0;
|
|
9
|
+
var with_middleware_1 = require("./middleware/with-middleware");
|
|
10
|
+
Object.defineProperty(exports, "withMiddleware", { enumerable: true, get: function () { return with_middleware_1.withMiddleware; } });
|
|
11
|
+
var factories_1 = require("./middleware/factories");
|
|
12
|
+
Object.defineProperty(exports, "createCleanKeysMiddleware", { enumerable: true, get: function () { return factories_1.createCleanKeysMiddleware; } });
|
|
13
|
+
// Validation utilities
|
|
14
|
+
var key_validation_1 = require("./validation/key-validation");
|
|
15
|
+
Object.defineProperty(exports, "validateKeyFields", { enumerable: true, get: function () { return key_validation_1.validateKeyFields; } });
|
|
16
|
+
// Main entity API factory
|
|
17
|
+
var create_entity_api_1 = require("./create-entity-api");
|
|
18
|
+
Object.defineProperty(exports, "createEntityAPI", { enumerable: true, get: function () { return create_entity_api_1.createEntityAPI; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/entity/middleware/factories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,OAAO,GAAG,mBAAmB,CAQnF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCleanKeysMiddleware = createCleanKeysMiddleware;
|
|
4
|
+
const model_utils_1 = require("../../utils/model-utils");
|
|
5
|
+
/**
|
|
6
|
+
* Creates middleware configuration for cleaning internal keys
|
|
7
|
+
*/
|
|
8
|
+
function createCleanKeysMiddleware(shouldClean) {
|
|
9
|
+
if (!shouldClean) {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
after: (result) => (0, model_utils_1.stripInternalKeys)(result),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/entity/middleware/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI;IACzC,MAAM,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExecutionMiddleware } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Applies middleware hooks to a builder's execute method
|
|
4
|
+
*/
|
|
5
|
+
export declare function withMiddleware<B extends {
|
|
6
|
+
execute: () => Promise<any>;
|
|
7
|
+
}>(builder: B, middleware: ExecutionMiddleware): B;
|
|
8
|
+
//# sourceMappingURL=with-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-middleware.d.ts","sourceRoot":"","sources":["../../../src/entity/middleware/with-middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,EACtE,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,mBAAmB,GAC9B,CAAC,CA2BH"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withMiddleware = withMiddleware;
|
|
4
|
+
/**
|
|
5
|
+
* Applies middleware hooks to a builder's execute method
|
|
6
|
+
*/
|
|
7
|
+
function withMiddleware(builder, middleware) {
|
|
8
|
+
const { before, after } = middleware;
|
|
9
|
+
// If no middleware hooks provided, return builder as-is
|
|
10
|
+
if (!before && !after) {
|
|
11
|
+
return builder;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
...builder,
|
|
15
|
+
execute: async () => {
|
|
16
|
+
// Before execution hook
|
|
17
|
+
if (before) {
|
|
18
|
+
await before();
|
|
19
|
+
}
|
|
20
|
+
// Execute original builder
|
|
21
|
+
const result = await builder.execute();
|
|
22
|
+
// After execution hook
|
|
23
|
+
if (after) {
|
|
24
|
+
return await after(result);
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { GetBuilder, PutBuilder, QueryBuilder, UpdateBuilder, DeleteBuilder, ScanBuilder, BatchGetBuilder, BatchWriteBuilder } from './builders';
|
|
4
|
-
import { DynamoDBLogger } from './utils/dynamodb-logger';
|
|
1
|
+
import { DynamoDBLogger } from '../utils/dynamodb-logger';
|
|
2
|
+
import { GetBuilder, PutBuilder, QueryBuilder, UpdateBuilder, DeleteBuilder, ScanBuilder, BatchGetBuilder, BatchWriteBuilder } from '../builders';
|
|
5
3
|
/**
|
|
6
4
|
* Options for creating the Entity API
|
|
7
5
|
*/
|
|
8
6
|
export type EntityAPIOptions = {
|
|
9
7
|
logger?: DynamoDBLogger;
|
|
10
8
|
timestamps?: boolean;
|
|
9
|
+
cleanInternalKeys?: boolean;
|
|
11
10
|
};
|
|
12
11
|
/**
|
|
13
12
|
* Entity API interface for a model
|
|
14
13
|
*/
|
|
15
|
-
export type EntityAPI<Model, Input, KeyInput
|
|
14
|
+
export type EntityAPI<Model, Input, KeyInput> = {
|
|
16
15
|
/**
|
|
17
16
|
* Retrieves an item by its key.
|
|
18
17
|
* @param key - Partial or full key object to identify the item
|
|
@@ -29,7 +28,7 @@ export type EntityAPI<Model, Input, KeyInput, ModelDef extends ModelDefinition =
|
|
|
29
28
|
* Queries items using key conditions.
|
|
30
29
|
* @returns QueryBuilder for building and executing the query
|
|
31
30
|
*/
|
|
32
|
-
query: () => QueryBuilder<Model
|
|
31
|
+
query: () => QueryBuilder<Model>;
|
|
33
32
|
/**
|
|
34
33
|
* Scans the entire table or index without key conditions.
|
|
35
34
|
* @returns ScanBuilder for building and executing the scan
|
|
@@ -60,14 +59,4 @@ export type EntityAPI<Model, Input, KeyInput, ModelDef extends ModelDefinition =
|
|
|
60
59
|
*/
|
|
61
60
|
batchWrite: (items: Input[]) => BatchWriteBuilder;
|
|
62
61
|
};
|
|
63
|
-
|
|
64
|
-
* Creates an entity API instance with validation, key resolution, and builder creation.
|
|
65
|
-
*
|
|
66
|
-
* @param modelName - The name of the model/entity
|
|
67
|
-
* @param model - The model definition
|
|
68
|
-
* @param client - DynamoDB client instance
|
|
69
|
-
* @param options - Optional configuration (logger, timestamps)
|
|
70
|
-
* @returns EntityAPI with get and put methods
|
|
71
|
-
*/
|
|
72
|
-
export declare const createEntityAPI: <Model extends ModelDefinition>(tableName: string, modelName: string, model: Model, client: DynamoDBClient, options?: EntityAPIOptions) => EntityAPI<InferModel<Model>, InferInput<Model>, InferKeyInput<Model>, Model>;
|
|
73
|
-
//# sourceMappingURL=entity.d.ts.map
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/entity/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI;IAC9C;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEpD;;;;OAIG;IACH,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC;IAExC;;;OAGG;IACH,KAAK,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;IAEjC;;;OAGG;IACH,IAAI,EAAE,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IAE/B;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;IAEhD;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;IAEhD;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD;;;;OAIG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,iBAAiB,CAAC;CACnD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ModelDefinition } from '../../core/types';
|
|
2
|
+
/**
|
|
3
|
+
* Validates that all required key fields are present in the key object
|
|
4
|
+
* @throws Error if any required key fields are missing
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateKeyFields(modelName: string, model: ModelDefinition, key: Record<string, unknown>, operation?: string): void;
|
|
7
|
+
//# sourceMappingURL=key-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-validation.d.ts","sourceRoot":"","sources":["../../../src/entity/validation/key-validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAmBN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.validateKeyFields = validateKeyFields;
|
|
5
|
+
const model_utils_1 = require("../../utils/model-utils");
|
|
6
|
+
/**
|
|
7
|
+
* Validates that all required key fields are present in the key object
|
|
8
|
+
* @throws Error if any required key fields are missing
|
|
9
|
+
*/
|
|
10
|
+
function validateKeyFields(modelName, model, key, operation) {
|
|
11
|
+
// Extract required fields from key templates
|
|
12
|
+
const requiredFields = new Set();
|
|
13
|
+
if (model.key) {
|
|
14
|
+
for (const keyDef of Object.values(model.key)) {
|
|
15
|
+
(0, model_utils_1.extractTemplateVars)(keyDef.value).forEach((field) => requiredFields.add(field));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Check if all required fields are present
|
|
19
|
+
const missingFields = Array.from(requiredFields).filter((field) => key[field] === undefined);
|
|
20
|
+
if (missingFields.length > 0) {
|
|
21
|
+
const operationSuffix = operation ? ` for ${operation}` : '';
|
|
22
|
+
throw new Error(`[${modelName}] Missing required key field(s)${operationSuffix}: ${missingFields.join(', ')}. ` +
|
|
23
|
+
`Required fields: ${Array.from(requiredFields).join(', ')}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
package/dist/table.d.ts
CHANGED
|
@@ -17,11 +17,18 @@ export type TableConfig<S extends SchemaDefinition> = {
|
|
|
17
17
|
/** The schema definition for all models in the table */
|
|
18
18
|
schema: S;
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Helper type to force TypeScript to expand/simplify a type.
|
|
22
|
+
* This helps with type inference in callbacks by making the type "concrete".
|
|
23
|
+
*/
|
|
24
|
+
type Simplify<T> = {
|
|
25
|
+
[K in keyof T]: T[K];
|
|
26
|
+
} & {};
|
|
20
27
|
/**
|
|
21
28
|
* Internal helper type to infer all entity APIs from schema definition
|
|
22
29
|
*/
|
|
23
30
|
type EntityMap<S extends SchemaDefinition> = {
|
|
24
|
-
[K in keyof S['models']]: EntityAPI<InferModelFromSchema<S, K
|
|
31
|
+
[K in keyof S['models']]: EntityAPI<Simplify<InferModelFromSchema<S, K>>, Simplify<InferInputFromSchema<S, K>>, Simplify<InferKeyInput<S['models'][K]>>>;
|
|
25
32
|
};
|
|
26
33
|
/**
|
|
27
34
|
* Represents a typed DynamoDB Table with entity APIs
|
package/dist/table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmB,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAA8B,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAA4B,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,gBAAgB,IAAI;IACpD,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AAEF;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,gBAAgB,IAAI;KAC1C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CACjC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmB,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAA8B,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAA4B,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,gBAAgB,IAAI;IACpD,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,uDAAuD;IACvD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,wDAAwD;IACxD,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AAEF;;;GAGG;AACH,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAEjD;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,SAAS,gBAAgB,IAAI;KAC1C,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CACjC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACpC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACpC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACxC;CACF,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,gBAAgB;IAC3C,4BAA4B;IAC5B,SAAgB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvC,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAuBlC;;;;;;;;;;;;;OAaG;IACH,aAAa,IAAI,oBAAoB;IAIrC;;;;;;;;;;;;;OAaG;IACH,WAAW,IAAI,kBAAkB;CAGlC"}
|
package/dist/table.js
CHANGED
|
@@ -27,6 +27,7 @@ class Table {
|
|
|
27
27
|
rawEntities[modelName] = (0, entity_1.createEntityAPI)(tableName, modelName, model, client, {
|
|
28
28
|
logger,
|
|
29
29
|
timestamps: schema.params?.timestamps ?? false,
|
|
30
|
+
cleanInternalKeys: schema.params?.cleanInternalKeys ?? false,
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
33
|
this.entities = rawEntities;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InferModel, ModelDefinition } from '
|
|
1
|
+
import { InferModel, ModelDefinition } from '../core/types';
|
|
2
2
|
/**
|
|
3
3
|
* Extracts all variable names from a template string
|
|
4
4
|
* @param template - Template string with ${variable} syntax
|
|
@@ -21,4 +21,10 @@ export declare const applyPostDefaults: <M extends ModelDefinition>(model: M, va
|
|
|
21
21
|
isUpdate?: boolean;
|
|
22
22
|
timestamps?: boolean;
|
|
23
23
|
}) => InferModel<M>;
|
|
24
|
+
/**
|
|
25
|
+
* Removes internal DynamoDB keys from an item or array of items
|
|
26
|
+
* @param data - Single item or array of items from DynamoDB
|
|
27
|
+
* @returns Data with internal keys removed
|
|
28
|
+
*/
|
|
29
|
+
export declare const stripInternalKeys: <T>(data: T | T[] | undefined) => T | T[] | undefined;
|
|
24
30
|
//# sourceMappingURL=model-utils.d.ts.map
|