@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.
Files changed (81) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/builders/query/create-query-builder.d.ts.map +1 -1
  3. package/dist/builders/query/create-query-builder.js +19 -2
  4. package/dist/core/types.d.ts +5 -0
  5. package/dist/core/types.d.ts.map +1 -1
  6. package/package.json +11 -2
  7. package/eslint.config.mjs +0 -4
  8. package/jest.config.js +0 -11
  9. package/src/builders/README.md +0 -339
  10. package/src/builders/batch-get/README.md +0 -43
  11. package/src/builders/batch-get/create-batch-get-builder.test.ts +0 -193
  12. package/src/builders/batch-get/create-batch-get-builder.ts +0 -108
  13. package/src/builders/batch-get/index.ts +0 -2
  14. package/src/builders/batch-get/types.ts +0 -28
  15. package/src/builders/batch-write/README.md +0 -204
  16. package/src/builders/batch-write/create-batch-write-builder.test.ts +0 -173
  17. package/src/builders/batch-write/create-batch-write-builder.ts +0 -49
  18. package/src/builders/batch-write/index.ts +0 -2
  19. package/src/builders/batch-write/types.ts +0 -33
  20. package/src/builders/delete/create-delete-builder.test.ts +0 -294
  21. package/src/builders/delete/create-delete-builder.ts +0 -100
  22. package/src/builders/delete/index.ts +0 -2
  23. package/src/builders/delete/types.ts +0 -17
  24. package/src/builders/get/create-get-builder.test.ts +0 -272
  25. package/src/builders/get/create-get-builder.ts +0 -117
  26. package/src/builders/get/index.ts +0 -2
  27. package/src/builders/get/types.ts +0 -39
  28. package/src/builders/index.ts +0 -14
  29. package/src/builders/put/create-put-builder.test.ts +0 -213
  30. package/src/builders/put/create-put-builder.ts +0 -160
  31. package/src/builders/put/index.ts +0 -2
  32. package/src/builders/put/types.ts +0 -24
  33. package/src/builders/query/create-query-builder.test.ts +0 -770
  34. package/src/builders/query/create-query-builder.ts +0 -455
  35. package/src/builders/query/index.ts +0 -2
  36. package/src/builders/query/types.ts +0 -109
  37. package/src/builders/scan/create-scan-builder.test.ts +0 -416
  38. package/src/builders/scan/create-scan-builder.ts +0 -265
  39. package/src/builders/scan/index.ts +0 -2
  40. package/src/builders/scan/types.ts +0 -88
  41. package/src/builders/shared/conditions.ts +0 -58
  42. package/src/builders/shared/index.ts +0 -4
  43. package/src/builders/shared/operators.test.ts +0 -270
  44. package/src/builders/shared/operators.ts +0 -208
  45. package/src/builders/shared/projection.ts +0 -28
  46. package/src/builders/shared/types.ts +0 -101
  47. package/src/builders/transact-get/README.md +0 -167
  48. package/src/builders/transact-get/create-transact-get-builder.test.ts +0 -239
  49. package/src/builders/transact-get/create-transact-get-builder.ts +0 -67
  50. package/src/builders/transact-get/index.ts +0 -2
  51. package/src/builders/transact-get/types.ts +0 -31
  52. package/src/builders/transact-write/README.md +0 -202
  53. package/src/builders/transact-write/create-transact-write-builder.test.ts +0 -288
  54. package/src/builders/transact-write/create-transact-write-builder.ts +0 -124
  55. package/src/builders/transact-write/index.ts +0 -2
  56. package/src/builders/transact-write/types.ts +0 -71
  57. package/src/builders/update/create-update-builder.test.ts +0 -573
  58. package/src/builders/update/create-update-builder.ts +0 -375
  59. package/src/builders/update/index.ts +0 -2
  60. package/src/builders/update/types.ts +0 -63
  61. package/src/core/types.test.ts +0 -641
  62. package/src/core/types.ts +0 -366
  63. package/src/entity/create-entity-api.ts +0 -224
  64. package/src/entity/index.ts +0 -19
  65. package/src/entity/middleware/factories.ts +0 -15
  66. package/src/entity/middleware/types.ts +0 -7
  67. package/src/entity/middleware/with-middleware.ts +0 -37
  68. package/src/entity/types.ts +0 -79
  69. package/src/entity/validation/key-validation.ts +0 -34
  70. package/src/index.ts +0 -23
  71. package/src/table.ts +0 -116
  72. package/src/utils/dynamodb-logger.test.ts +0 -246
  73. package/src/utils/dynamodb-logger.ts +0 -175
  74. package/src/utils/model-utils.test.ts +0 -452
  75. package/src/utils/model-utils.ts +0 -188
  76. package/src/utils/zod-utils.test.ts +0 -363
  77. package/src/utils/zod-utils.ts +0 -56
  78. package/tests/integration/instagram-clone.integration.test.ts +0 -1019
  79. package/tests/integration/pagination-timestamps.integration.test.ts +0 -374
  80. package/tests/integration/transactions.integration.test.ts +0 -528
  81. 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,2 +0,0 @@
1
- export * from './types';
2
- export * from './create-put-builder';
@@ -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
- }