@ftschopp/dynatable-core 1.4.2 → 1.4.4

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