@ftschopp/dynatable-core 1.4.2 → 1.4.3
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 +7 -0
- package/dist/builders/query/create-query-builder.d.ts.map +1 -1
- package/dist/builders/query/create-query-builder.js +19 -2
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/package.json +11 -2
- package/eslint.config.mjs +0 -4
- package/jest.config.js +0 -11
- package/src/builders/README.md +0 -339
- package/src/builders/batch-get/README.md +0 -43
- package/src/builders/batch-get/create-batch-get-builder.test.ts +0 -193
- package/src/builders/batch-get/create-batch-get-builder.ts +0 -108
- package/src/builders/batch-get/index.ts +0 -2
- package/src/builders/batch-get/types.ts +0 -28
- package/src/builders/batch-write/README.md +0 -204
- package/src/builders/batch-write/create-batch-write-builder.test.ts +0 -173
- package/src/builders/batch-write/create-batch-write-builder.ts +0 -49
- package/src/builders/batch-write/index.ts +0 -2
- package/src/builders/batch-write/types.ts +0 -33
- package/src/builders/delete/create-delete-builder.test.ts +0 -294
- package/src/builders/delete/create-delete-builder.ts +0 -100
- package/src/builders/delete/index.ts +0 -2
- package/src/builders/delete/types.ts +0 -17
- package/src/builders/get/create-get-builder.test.ts +0 -272
- package/src/builders/get/create-get-builder.ts +0 -117
- package/src/builders/get/index.ts +0 -2
- package/src/builders/get/types.ts +0 -39
- package/src/builders/index.ts +0 -14
- package/src/builders/put/create-put-builder.test.ts +0 -213
- package/src/builders/put/create-put-builder.ts +0 -160
- package/src/builders/put/index.ts +0 -2
- package/src/builders/put/types.ts +0 -24
- package/src/builders/query/create-query-builder.test.ts +0 -770
- package/src/builders/query/create-query-builder.ts +0 -455
- package/src/builders/query/index.ts +0 -2
- package/src/builders/query/types.ts +0 -109
- package/src/builders/scan/create-scan-builder.test.ts +0 -416
- package/src/builders/scan/create-scan-builder.ts +0 -265
- package/src/builders/scan/index.ts +0 -2
- package/src/builders/scan/types.ts +0 -88
- package/src/builders/shared/conditions.ts +0 -58
- package/src/builders/shared/index.ts +0 -4
- package/src/builders/shared/operators.test.ts +0 -270
- package/src/builders/shared/operators.ts +0 -208
- package/src/builders/shared/projection.ts +0 -28
- package/src/builders/shared/types.ts +0 -101
- package/src/builders/transact-get/README.md +0 -167
- package/src/builders/transact-get/create-transact-get-builder.test.ts +0 -239
- package/src/builders/transact-get/create-transact-get-builder.ts +0 -67
- package/src/builders/transact-get/index.ts +0 -2
- package/src/builders/transact-get/types.ts +0 -31
- package/src/builders/transact-write/README.md +0 -202
- package/src/builders/transact-write/create-transact-write-builder.test.ts +0 -288
- package/src/builders/transact-write/create-transact-write-builder.ts +0 -124
- package/src/builders/transact-write/index.ts +0 -2
- package/src/builders/transact-write/types.ts +0 -71
- package/src/builders/update/create-update-builder.test.ts +0 -573
- package/src/builders/update/create-update-builder.ts +0 -375
- package/src/builders/update/index.ts +0 -2
- package/src/builders/update/types.ts +0 -63
- package/src/core/types.test.ts +0 -641
- package/src/core/types.ts +0 -366
- package/src/entity/create-entity-api.ts +0 -224
- package/src/entity/index.ts +0 -19
- package/src/entity/middleware/factories.ts +0 -15
- package/src/entity/middleware/types.ts +0 -7
- package/src/entity/middleware/with-middleware.ts +0 -37
- package/src/entity/types.ts +0 -79
- package/src/entity/validation/key-validation.ts +0 -34
- package/src/index.ts +0 -23
- package/src/table.ts +0 -116
- package/src/utils/dynamodb-logger.test.ts +0 -246
- package/src/utils/dynamodb-logger.ts +0 -175
- package/src/utils/model-utils.test.ts +0 -452
- package/src/utils/model-utils.ts +0 -188
- package/src/utils/zod-utils.test.ts +0 -363
- package/src/utils/zod-utils.ts +0 -56
- package/tests/integration/instagram-clone.integration.test.ts +0 -1019
- package/tests/integration/pagination-timestamps.integration.test.ts +0 -374
- package/tests/integration/transactions.integration.test.ts +0 -528
- package/tsconfig.json +0 -12
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
3
|
-
import { PutCommand } from '@aws-sdk/lib-dynamodb';
|
|
4
|
-
import { buildExpression, AttrBuilder, Condition, createOpBuilder } from '../shared';
|
|
5
|
-
import { PutBuilder } from './types';
|
|
6
|
-
import { DynamoDBLogger } from '../../utils/dynamodb-logger';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Utility to infer if attribute exists in the item and returns condition.
|
|
10
|
-
*/
|
|
11
|
-
function buildNotExistsConditions(item: any): Condition[] {
|
|
12
|
-
// Check for common key names (both uppercase and lowercase)
|
|
13
|
-
const possibleKeys = ['PK', 'SK', 'pk', 'sk'];
|
|
14
|
-
const foundKeys = possibleKeys.filter((key) => key in item);
|
|
15
|
-
|
|
16
|
-
return foundKeys.map((key) => ({
|
|
17
|
-
expression: `attribute_not_exists(#${key})`,
|
|
18
|
-
names: { [`#${key}`]: key },
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Creates a PutBuilder for an item and table.
|
|
24
|
-
*/
|
|
25
|
-
export function createPutBuilder<Model>(
|
|
26
|
-
tableName: string,
|
|
27
|
-
item: Model,
|
|
28
|
-
client: DynamoDBClient,
|
|
29
|
-
prevConditions: Condition[] = [],
|
|
30
|
-
shouldCheckNotExists = false,
|
|
31
|
-
returnMode: 'NONE' | 'ALL_OLD' = 'NONE',
|
|
32
|
-
enableTimestamps = false,
|
|
33
|
-
logger?: DynamoDBLogger
|
|
34
|
-
): PutBuilder<Model> {
|
|
35
|
-
const conditions = [...prevConditions];
|
|
36
|
-
|
|
37
|
-
const build = (): PutBuilder<Model> => ({
|
|
38
|
-
where(fn) {
|
|
39
|
-
const attrs = new Proxy({} as AttrBuilder<Model>, {
|
|
40
|
-
get(_, prop: string) {
|
|
41
|
-
return { name: prop };
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
// Create a scoped opBuilder for this operation to avoid global state
|
|
45
|
-
const opBuilder = createOpBuilder();
|
|
46
|
-
const condition = fn(attrs, opBuilder);
|
|
47
|
-
return createPutBuilder(
|
|
48
|
-
tableName,
|
|
49
|
-
item,
|
|
50
|
-
client,
|
|
51
|
-
[...conditions, condition],
|
|
52
|
-
shouldCheckNotExists,
|
|
53
|
-
returnMode,
|
|
54
|
-
enableTimestamps,
|
|
55
|
-
logger
|
|
56
|
-
);
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
ifNotExists() {
|
|
60
|
-
return createPutBuilder(
|
|
61
|
-
tableName,
|
|
62
|
-
item,
|
|
63
|
-
client,
|
|
64
|
-
conditions,
|
|
65
|
-
true,
|
|
66
|
-
returnMode,
|
|
67
|
-
enableTimestamps,
|
|
68
|
-
logger
|
|
69
|
-
);
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
returning(mode) {
|
|
73
|
-
return createPutBuilder(
|
|
74
|
-
tableName,
|
|
75
|
-
item,
|
|
76
|
-
client,
|
|
77
|
-
conditions,
|
|
78
|
-
shouldCheckNotExists,
|
|
79
|
-
mode,
|
|
80
|
-
enableTimestamps,
|
|
81
|
-
logger
|
|
82
|
-
);
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
dbParams() {
|
|
86
|
-
let finalConditions = [...conditions];
|
|
87
|
-
|
|
88
|
-
if (shouldCheckNotExists) {
|
|
89
|
-
finalConditions = [...finalConditions, ...buildNotExistsConditions(item)];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Add timestamps if enabled
|
|
93
|
-
let finalItem = item;
|
|
94
|
-
if (enableTimestamps) {
|
|
95
|
-
const now = new Date().toISOString();
|
|
96
|
-
finalItem = {
|
|
97
|
-
...item,
|
|
98
|
-
createdAt: now,
|
|
99
|
-
updatedAt: now,
|
|
100
|
-
} as Model;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Build ConditionExpression from condition tree
|
|
104
|
-
let conditionExpression = '';
|
|
105
|
-
let expressionAttributeNames = {};
|
|
106
|
-
let expressionAttributeValues = {};
|
|
107
|
-
|
|
108
|
-
if (finalConditions.length > 0) {
|
|
109
|
-
// If there's only one condition, use it directly
|
|
110
|
-
// Otherwise, combine with AND
|
|
111
|
-
const combinedCondition =
|
|
112
|
-
finalConditions.length === 1 && finalConditions[0]
|
|
113
|
-
? finalConditions[0]
|
|
114
|
-
: {
|
|
115
|
-
expression: '',
|
|
116
|
-
operator: 'AND' as const,
|
|
117
|
-
children: finalConditions,
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
const result = buildExpression(combinedCondition);
|
|
121
|
-
conditionExpression = result.expression;
|
|
122
|
-
expressionAttributeNames = result.names;
|
|
123
|
-
expressionAttributeValues = result.values;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const extra: any = returnMode !== 'NONE' ? { ReturnValues: returnMode } : {};
|
|
127
|
-
|
|
128
|
-
return {
|
|
129
|
-
TableName: tableName,
|
|
130
|
-
Item: finalItem,
|
|
131
|
-
...(conditionExpression && {
|
|
132
|
-
ConditionExpression: conditionExpression,
|
|
133
|
-
}),
|
|
134
|
-
...(Object.keys(expressionAttributeNames).length && {
|
|
135
|
-
ExpressionAttributeNames: expressionAttributeNames,
|
|
136
|
-
}),
|
|
137
|
-
...(Object.keys(expressionAttributeValues).length && {
|
|
138
|
-
ExpressionAttributeValues: expressionAttributeValues,
|
|
139
|
-
}),
|
|
140
|
-
...extra,
|
|
141
|
-
};
|
|
142
|
-
},
|
|
143
|
-
|
|
144
|
-
async execute() {
|
|
145
|
-
const params = build().dbParams();
|
|
146
|
-
const response = await client.send(new PutCommand(params));
|
|
147
|
-
logger?.log('PutCommand', params, response);
|
|
148
|
-
|
|
149
|
-
// Return the old item if returnMode is ALL_OLD and it was replaced
|
|
150
|
-
if (returnMode === 'ALL_OLD' && response.Attributes) {
|
|
151
|
-
return response.Attributes as Model;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// For NONE mode or when no old item existed, return the new item with timestamps
|
|
155
|
-
return params.Item as Model;
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
return build();
|
|
160
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { PutCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
-
import { OperationBuilder } from '../shared';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Builder interface for DynamoDB PutItem operations
|
|
6
|
-
*/
|
|
7
|
-
export interface PutBuilder<Model> extends Omit<OperationBuilder<Model>, 'dbParams'> {
|
|
8
|
-
/**
|
|
9
|
-
* Adds a condition that the item must not exist (checks pk and sk)
|
|
10
|
-
*/
|
|
11
|
-
ifNotExists(): PutBuilder<Model>;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Configures what values should be returned after the put operation.
|
|
15
|
-
* - NONE: Nothing is returned (default)
|
|
16
|
-
* - ALL_OLD: Returns the item as it was before being replaced (if it existed)
|
|
17
|
-
*/
|
|
18
|
-
returning(mode: 'NONE' | 'ALL_OLD'): PutBuilder<Model>;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Converts the builder state to DynamoDB PutItem parameters
|
|
22
|
-
*/
|
|
23
|
-
dbParams(): PutCommandInput;
|
|
24
|
-
}
|