@ftschopp/dynatable-core 1.2.3 → 1.2.5

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 CHANGED
@@ -1,3 +1,17 @@
1
+ ## @ftschopp/dynatable-core [1.2.5](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-core@1.2.4...@ftschopp/dynatable-core@1.2.5) (2026-05-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * remove unused isoDates ([63c3064](https://github.com/ftschopp/dynatable/commit/63c30649c5fd88c63596bff22542acd2d3ec828b))
7
+
8
+ ## @ftschopp/dynatable-core [1.2.4](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-core@1.2.3...@ftschopp/dynatable-core@1.2.4) (2026-04-29)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * get keyname for attribute index ([5bd47c3](https://github.com/ftschopp/dynatable/commit/5bd47c38585c78153ff51f5e457777e928d6e667))
14
+
1
15
  ## @ftschopp/dynatable-core [1.2.3](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-core@1.2.2...@ftschopp/dynatable-core@1.2.3) (2026-04-27)
2
16
 
3
17
 
package/README.md CHANGED
@@ -54,7 +54,6 @@ const schema = {
54
54
  },
55
55
  params: {
56
56
  timestamps: true,
57
- isoDates: true,
58
57
  },
59
58
  } as const;
60
59
 
@@ -84,9 +83,7 @@ async function example() {
84
83
  }).execute();
85
84
 
86
85
  // Update
87
- await table.entities.User.update({ username: 'alice' })
88
- .set('name', 'Alice Johnson')
89
- .execute();
86
+ await table.entities.User.update({ username: 'alice' }).set('name', 'Alice Johnson').execute();
90
87
 
91
88
  // Query
92
89
  const users = await table.entities.User.query()
@@ -150,8 +147,7 @@ const schema = {
150
147
  },
151
148
 
152
149
  params: {
153
- timestamps: true, // Auto createdAt/updatedAt
154
- isoDates: true, // Use ISO 8601 dates
150
+ timestamps: true, // Auto createdAt/updatedAt as ISO 8601 strings
155
151
  cleanInternalKeys: false, // Hide PK/SK from results
156
152
  },
157
153
  } as const;
@@ -276,12 +272,7 @@ await table.entities.User.delete({ username: 'alice' })
276
272
 
277
273
  // QUERY - Query with conditions
278
274
  const photos = await table.entities.Photo.query()
279
- .where((attr, op) =>
280
- op.and(
281
- op.eq(attr.username, 'alice'),
282
- op.gt(attr.likesCount, 10)
283
- )
284
- )
275
+ .where((attr, op) => op.and(op.eq(attr.username, 'alice'), op.gt(attr.likesCount, 10)))
285
276
  .limit(20)
286
277
  .scanIndexForward(false)
287
278
  .execute();
@@ -312,7 +303,8 @@ Atomic operations across multiple items:
312
303
 
313
304
  ```typescript
314
305
  // TransactWrite - Atomic writes
315
- await table.transactWrite()
306
+ await table
307
+ .transactWrite()
316
308
  .addPut(
317
309
  table.entities.Like.put({
318
310
  photoId: 'photo1',
@@ -321,15 +313,12 @@ await table.transactWrite()
321
313
  .ifNotExists()
322
314
  .dbParams()
323
315
  )
324
- .addUpdate(
325
- table.entities.Photo.update({ photoId: 'photo1' })
326
- .add('likesCount', 1)
327
- .dbParams()
328
- )
316
+ .addUpdate(table.entities.Photo.update({ photoId: 'photo1' }).add('likesCount', 1).dbParams())
329
317
  .execute();
330
318
 
331
319
  // TransactGet - Atomic reads
332
- const result = await table.transactGet()
320
+ const result = await table
321
+ .transactGet()
333
322
  .addGet(table.entities.User.get({ username: 'alice' }).dbParams())
334
323
  .addGet(table.entities.Photo.get({ photoId: 'photo1' }).dbParams())
335
324
  .execute();
@@ -342,6 +331,7 @@ const [user, photo] = result.items;
342
331
  Build complex conditions with type-safe operators:
343
332
 
344
333
  ### Comparison
334
+
345
335
  - `eq(attr, value)` - Equals
346
336
  - `ne(attr, value)` - Not equals
347
337
  - `lt(attr, value)` - Less than
@@ -351,19 +341,23 @@ Build complex conditions with type-safe operators:
351
341
  - `between(attr, low, high)` - Between values
352
342
 
353
343
  ### String
344
+
354
345
  - `beginsWith(attr, prefix)` - Begins with prefix
355
346
  - `contains(attr, value)` - Contains value (strings, sets, lists)
356
347
 
357
348
  ### Existence
349
+
358
350
  - `exists(attr)` - Attribute exists
359
351
  - `notExists(attr)` - Attribute doesn't exist
360
352
 
361
353
  ### Advanced
354
+
362
355
  - `attributeType(attr, type)` - Check attribute type ('S', 'N', 'M', 'L', etc.)
363
356
  - `in(attr, values[])` - Value in array
364
357
  - `size(attr)` - Get size, returns object with `.eq()`, `.gt()`, etc.
365
358
 
366
359
  ### Logical
360
+
367
361
  - `and(...conditions)` - Combine with AND
368
362
  - `or(...conditions)` - Combine with OR
369
363
  - `not(condition)` - Negate condition
@@ -379,12 +373,7 @@ await table.entities.User.update({ username: 'alice' })
379
373
 
380
374
  // Contains
381
375
  const users = await table.entities.User.query()
382
- .where((attr, op) =>
383
- op.and(
384
- op.eq(attr.username, 'alice'),
385
- op.contains(attr.tags, 'premium')
386
- )
387
- )
376
+ .where((attr, op) => op.and(op.eq(attr.username, 'alice'), op.contains(attr.tags, 'premium')))
388
377
  .execute();
389
378
 
390
379
  // IN operator
@@ -394,12 +383,7 @@ const activeUsers = await table.entities.User.scan()
394
383
 
395
384
  // Size function
396
385
  const posts = await table.entities.Post.query()
397
- .where((attr, op) =>
398
- op.and(
399
- op.eq(attr.userId, 'alice'),
400
- op.size(attr.tags).gte(3)
401
- )
402
- )
386
+ .where((attr, op) => op.and(op.eq(attr.userId, 'alice'), op.size(attr.tags).gte(3)))
403
387
  .execute();
404
388
 
405
389
  // Complex nested conditions
@@ -409,10 +393,7 @@ await table.entities.Photo.query()
409
393
  op.eq(attr.username, 'alice'),
410
394
  op.or(
411
395
  op.gt(attr.likesCount, 100),
412
- op.and(
413
- op.gt(attr.commentCount, 50),
414
- op.exists(attr.featured)
415
- )
396
+ op.and(op.gt(attr.commentCount, 50), op.exists(attr.featured))
416
397
  )
417
398
  )
418
399
  )
@@ -469,28 +450,28 @@ if (page1.lastEvaluatedKey) {
469
450
 
470
451
  ```typescript
471
452
  export {
472
- Table, // Main Table class
473
- type SchemaDefinition, // Schema type
474
- type ModelDefinition, // Model type
475
- type AttributeDefinition, // Union of all attribute types
476
- type ScalarAttributeDefinition, // String/Number/Boolean/Date attribute
477
- type ObjectAttributeDefinition, // Nested object attribute with schema
478
- type ArrayAttributeDefinition, // Typed array attribute with items
479
- type PrimaryKeyDefinition, // PK + SK key definition
480
- type KeyDefinition, // Single key definition
481
- type IndexDefinition, // Index (hash + optional sort)
482
- type IndexesDefinition, // All table indexes
483
- type SchemaParams, // Global schema params
484
- type InferModel, // Infer model type (deprecated)
485
- type InferInput, // Infer input type (deprecated)
486
- type InferKeyInput, // Infer key type
487
- type InferModelFromSchema, // Infer from full schema (preferred)
488
- type InferInputFromSchema, // Infer input from full schema (preferred)
489
- type TimestampFields, // createdAt/updatedAt fields type
490
- type ArrayItem, // Extract item type from array attribute
491
- createDynamoDBLogger, // Logger factory
492
- type DynamoDBLogger, // Logger type
493
- type DynamoDBLoggerConfig, // Logger config
453
+ Table, // Main Table class
454
+ type SchemaDefinition, // Schema type
455
+ type ModelDefinition, // Model type
456
+ type AttributeDefinition, // Union of all attribute types
457
+ type ScalarAttributeDefinition, // String/Number/Boolean/Date attribute
458
+ type ObjectAttributeDefinition, // Nested object attribute with schema
459
+ type ArrayAttributeDefinition, // Typed array attribute with items
460
+ type PrimaryKeyDefinition, // PK + SK key definition
461
+ type KeyDefinition, // Single key definition
462
+ type IndexDefinition, // Index (hash + optional sort)
463
+ type IndexesDefinition, // All table indexes
464
+ type SchemaParams, // Global schema params
465
+ type InferModel, // Infer model type (deprecated)
466
+ type InferInput, // Infer input type (deprecated)
467
+ type InferKeyInput, // Infer key type
468
+ type InferModelFromSchema, // Infer from full schema (preferred)
469
+ type InferInputFromSchema, // Infer input from full schema (preferred)
470
+ type TimestampFields, // createdAt/updatedAt fields type
471
+ type ArrayItem, // Extract item type from array attribute
472
+ createDynamoDBLogger, // Logger factory
473
+ type DynamoDBLogger, // Logger type
474
+ type DynamoDBLoggerConfig, // Logger config
494
475
  };
495
476
  ```
496
477
 
@@ -1 +1 @@
1
- {"version":3,"file":"create-batch-get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/create-batch-get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,EAC7C,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,EACD,MAAM,CAAC,EAAE,cAAc,GACtB,eAAe,CAAC,KAAK,CAAC,CA+ExB"}
1
+ {"version":3,"file":"create-batch-get-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/create-batch-get-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM1D,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,EAC7C,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,EACD,MAAM,CAAC,EAAE,cAAc,GACtB,eAAe,CAAC,KAAK,CAAC,CA0ExB"}
@@ -52,20 +52,16 @@ function createBatchGetBuilder(requestItems, client, options, logger) {
52
52
  };
53
53
  },
54
54
  /**
55
- * Execute the BatchGetItem command and return the items.
55
+ * Execute the BatchGetItem command and return the items as a flat array.
56
56
  */
57
57
  async execute() {
58
58
  const params = this.dbParams();
59
59
  const result = await client.send(new lib_dynamodb_1.BatchGetCommand(params));
60
60
  logger?.log('BatchGetCommand', params, result);
61
- // Transform the response into a more usable format
62
- const responses = {};
63
- if (result.Responses) {
64
- for (const [tableName, items] of Object.entries(result.Responses)) {
65
- responses[tableName] = items;
66
- }
61
+ if (!result.Responses) {
62
+ return [];
67
63
  }
68
- return responses;
64
+ return Object.values(result.Responses).flat();
69
65
  },
70
66
  };
71
67
  }
@@ -17,9 +17,8 @@ export type BatchGetBuilder<Model> = {
17
17
  */
18
18
  dbParams(): BatchGetItemCommandInput;
19
19
  /**
20
- * Execute the BatchGetItem command and return the items.
21
- * Returns an object mapping table names to arrays of items.
20
+ * Execute the BatchGetItem command and return the items as a flat array.
22
21
  */
23
- execute(): Promise<Record<string, Model[]>>;
22
+ execute(): Promise<Model[]>;
24
23
  };
25
24
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI;IACnC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD;;OAEG;IACH,cAAc,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAEzC;;OAEG;IACH,QAAQ,IAAI,wBAAwB,CAAC;IAErC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;CAC7C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/batch-get/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI;IACnC;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvD;;OAEG;IACH,cAAc,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAEzC;;OAEG;IACH,QAAQ,IAAI,wBAAwB,CAAC;IAErC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;CAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/get/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAE,SAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,UAAU,CAAC;IACzG;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE5D;;;OAGG;IACH,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE9C;;;;;;;;OAQG;IACH,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAExF;;OAEG;IACH,QAAQ,IAAI,eAAe,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builders/get/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAE,SAAQ,IAAI,CACvD,iBAAiB,CAAC,KAAK,GAAG,SAAS,CAAC,EACpC,UAAU,CACX;IACC;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE5D;;;OAGG;IACH,cAAc,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE9C;;;;;;;;OAQG;IACH,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAExF;;OAEG;IACH,QAAQ,IAAI,eAAe,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-put-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/put/create-put-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgC,SAAS,EAAmB,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAgB7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,cAAc,EACtB,cAAc,GAAE,SAAS,EAAO,EAChC,oBAAoB,UAAQ,EAC5B,UAAU,GAAE,MAAM,GAAG,SAAkB,EACvC,gBAAgB,UAAQ,EACxB,MAAM,CAAC,EAAE,cAAc,GACtB,UAAU,CAAC,KAAK,CAAC,CAqHnB"}
1
+ {"version":3,"file":"create-put-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/put/create-put-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAgC,SAAS,EAAmB,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAgB7D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,KAAK,EACX,MAAM,EAAE,cAAc,EACtB,cAAc,GAAE,SAAS,EAAO,EAChC,oBAAoB,UAAQ,EAC5B,UAAU,GAAE,MAAM,GAAG,SAAkB,EACvC,gBAAgB,UAAQ,EACxB,MAAM,CAAC,EAAE,cAAc,GACtB,UAAU,CAAC,KAAK,CAAC,CA8HnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-query-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/query/create-query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,YAAY,EAA8B,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAuU7D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,cAAc,GACtB,YAAY,CAAC,KAAK,CAAC,CA4BrB"}
1
+ {"version":3,"file":"create-query-builder.d.ts","sourceRoot":"","sources":["../../../src/builders/query/create-query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EAAE,YAAY,EAA8B,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAoT7D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,cAAc,GACtB,YAAY,CAAC,KAAK,CAAC,CA4BrB"}
@@ -5,30 +5,6 @@ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
5
  const operators_1 = require("../shared/operators");
6
6
  const conditions_1 = require("../shared/conditions");
7
7
  const model_utils_1 = require("../../utils/model-utils");
8
- /**
9
- * Determines if a field is a key field (used in pk/sk or index key templates)
10
- */
11
- function isKeyField(fieldName, model, indexName) {
12
- if (!model?.key)
13
- return false;
14
- // When an index is specified, also check model.index for key templates
15
- if (indexName && model.index) {
16
- for (const [, keyDef] of Object.entries(model.index)) {
17
- const templateVars = (0, model_utils_1.extractTemplateVars)(keyDef.value);
18
- if (templateVars.includes(fieldName)) {
19
- return true;
20
- }
21
- }
22
- }
23
- const keyEntries = Object.entries(model.key);
24
- for (const [, keyDef] of keyEntries) {
25
- const templateVars = (0, model_utils_1.extractTemplateVars)(keyDef.value);
26
- if (templateVars.includes(fieldName)) {
27
- return true;
28
- }
29
- }
30
- return false;
31
- }
32
8
  /**
33
9
  * Maps a model attribute name to its corresponding DynamoDB key name (PK/SK)
34
10
  * Also returns the key template for value transformation
@@ -39,6 +15,9 @@ function getKeyNameForAttribute(fieldName, model, indexName) {
39
15
  // When an index is specified, check model.index first for key templates
40
16
  if (indexName && model.index) {
41
17
  for (const [keyName, keyDef] of Object.entries(model.index)) {
18
+ if (!keyName.startsWith(indexName)) {
19
+ continue;
20
+ }
42
21
  const templateVars = (0, model_utils_1.extractTemplateVars)(keyDef.value);
43
22
  if (templateVars.includes(fieldName)) {
44
23
  return { keyName, template: keyDef.value };
@@ -124,7 +124,6 @@ export type ModelDefinition = {
124
124
  * Schema parameters configuration
125
125
  */
126
126
  export type SchemaParams = {
127
- isoDates?: boolean;
128
127
  timestamps?: boolean;
129
128
  cleanInternalKeys?: boolean;
130
129
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,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;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,yBAAyB,GACzB,yBAAyB,GACzB,wBAAwB,CAAC;AAE7B;;;;;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,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACtE,iBAAiB,CAAC,CAAC,CAAC,GACpB,CAAC,SAAS;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GAClD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GACnB,CAAC,SAAS;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACnC,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACnC,MAAM,GACN,CAAC,SAAS;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GACpC,OAAO,GACP,CAAC,SAAS;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACjC,IAAI,GACJ,OAAO,CAAC;AAEtB;;GAEG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/E,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChF,CAAC;AAEF;;;GAGG;AACH,KAAK,sBAAsB,CAAC,CAAC,SAAS,eAAe,IAAI;KACtD,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC1E,KAAK,GACL,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAC3C,CAAC,GACD,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,GAAG;KACD,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC1E,KAAK,GACL,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,KAAK,CAAA;KAAE,GAC5C,CAAC,GACD,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAC3C,KAAK,GACL,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,KAAK,mBAAmB,CAAC,CAAC,SAAS,eAAe,IAAI;KACnD,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC1E,CAAC,GACD,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,MAAM,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,GAC3F,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAC/B,KAAK,CAAC;AAEV;;GAEG;AACH,KAAK,cAAc,CAAC,CAAC,SAAS,eAAe,IACzC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAC5C,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAEjD;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,SAAS,eAAe,IACzC,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC5C;KACG,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;CACrE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GACnB,KAAK,CAAC;AAEZ;;GAEG;AACH,KAAK,OAAO,CAAC,CAAC,SAAS,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAE9E,KAAK,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,CAAC,CAAC,YAAY,CAAC,GAC3F,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7C,IAAI,GACJ,KAAK,GACP,KAAK,CAAC;AAEV,KAAK,yBAAyB,CAC5B,CAAC,SAAS,eAAe,EACzB,CAAC,SAAS,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAC3B,CAAC,SAAS,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAE5E;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,SAAS,eAAe,IAAI;KAC5C,CAAC,IAAI,MAAM,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACjE,QAAQ,EAAE,IAAI,CAAC;KAChB,GACG,CAAC,GACD,KAAK;CACV,CAAC,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,eAAe,IAAI;KACjD,CAAC,IAAI,MAAM,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAC9D,CAAC,GACD,KAAK,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,GAAG;KACD,CAAC,IAAI,MAAM,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAC9D,KAAK,GACL,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtC,GAAG;KACD,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,GAAG,MAAM;CAC5C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,gBAAgB,EAC1B,SAAS,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,IACjC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAEvC;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,SAAS,eAAe,IAAI,sBAAsB,CAAC,CAAC,CAAC,GACzE,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,gBAAgB,EAC1B,SAAS,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,IACjC,CAAC,CAAC,QAAQ,CAAC,SAAS;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,GACxC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,eAAe,GACzD,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG;KAC9E,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM;CAC9B,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC/C;KACG,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM;CAChC,GACD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7B;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,SAAS,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,eAAe,IAAI;KACpD,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM;CAClC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ftschopp/dynatable-core",
3
- "version": "1.2.3",
3
+ "version": "1.2.5",
4
4
  "description": "Core library for DynamoDB single table design",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,57 +1,29 @@
1
1
  # BatchGet Builder
2
2
 
3
- The `BatchGetBuilder` allows retrieving multiple items from one or more tables in a single request to DynamoDB.
3
+ The `BatchGetBuilder` retrieves multiple items by key in a single DynamoDB `BatchGetItem` request. It is consumed via the entity API (`table.entities.<Entity>.batchGet([...])`), and `execute()` returns a flat `Model[]`.
4
4
 
5
5
  ## Features
6
6
 
7
7
  - Retrieve multiple items by their keys
8
8
  - Supports attribute projection (select only specific fields)
9
9
  - Supports consistent read
10
- - Can retrieve items from multiple tables in a single request
11
10
 
12
11
  ## Basic Usage
13
12
 
14
13
  ```typescript
15
- import { createBatchGetBuilder } from './builders/batch-get';
16
- import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
14
+ const users = await table.entities.User.batchGet([
15
+ { username: 'alice' },
16
+ { username: 'bob' },
17
+ { username: 'charlie' },
18
+ ]).execute();
17
19
 
18
- const client = new DynamoDBClient({});
19
-
20
- // Retrieve multiple users
21
- const result = await createBatchGetBuilder(
22
- {
23
- Users: {
24
- Keys: [
25
- { pk: 'USER#alice', sk: 'USER#alice' },
26
- { pk: 'USER#bob', sk: 'USER#bob' },
27
- { pk: 'USER#charlie', sk: 'USER#charlie' },
28
- ],
29
- },
30
- },
31
- client
32
- ).execute();
20
+ users.forEach((user) => console.log(user.username));
33
21
  ```
34
22
 
35
23
  ## With Attribute Projection
36
24
 
37
25
  ```typescript
38
- interface User {
39
- username: string;
40
- name: string;
41
- followerCount: number;
42
- }
43
-
44
- const result = await createBatchGetBuilder<User>(
45
- {
46
- Users: {
47
- Keys: [
48
- { pk: 'USER#alice', sk: 'USER#alice' },
49
- { pk: 'USER#bob', sk: 'USER#bob' },
50
- ],
51
- },
52
- },
53
- client
54
- )
26
+ const users = await table.entities.User.batchGet([{ username: 'alice' }, { username: 'bob' }])
55
27
  .select(['username', 'name', 'followerCount'])
56
28
  .execute();
57
29
  ```
@@ -59,38 +31,11 @@ const result = await createBatchGetBuilder<User>(
59
31
  ## With Consistent Read
60
32
 
61
33
  ```typescript
62
- const result = await createBatchGetBuilder(
63
- {
64
- Users: {
65
- Keys: [
66
- { pk: 'USER#alice', sk: 'USER#alice' },
67
- { pk: 'USER#bob', sk: 'USER#bob' },
68
- ],
69
- },
70
- },
71
- client
72
- )
34
+ const users = await table.entities.User.batchGet([{ username: 'alice' }, { username: 'bob' }])
73
35
  .consistentRead()
74
36
  .execute();
75
37
  ```
76
38
 
77
- ## Using the Table Class
78
-
79
- ```typescript
80
- // Retrieve multiple users using the Table class
81
- const result = await table
82
- .batchGet({
83
- InstagramClone: {
84
- Keys: [
85
- { pk: 'USER#alice', sk: 'USER#alice' },
86
- { pk: 'USER#bob', sk: 'USER#bob' },
87
- ],
88
- },
89
- })
90
- .select(['username', 'name'])
91
- .execute();
92
- ```
93
-
94
39
  ## DynamoDB Limitations
95
40
 
96
41
  - Maximum 100 items per request
@@ -84,23 +84,18 @@ export function createBatchGetBuilder<Model>(
84
84
  },
85
85
 
86
86
  /**
87
- * Execute the BatchGetItem command and return the items.
87
+ * Execute the BatchGetItem command and return the items as a flat array.
88
88
  */
89
- async execute(): Promise<Record<string, Model[]>> {
89
+ async execute(): Promise<Model[]> {
90
90
  const params = this.dbParams();
91
91
  const result: BatchGetCommandOutput = await client.send(new BatchGetCommand(params));
92
92
  logger?.log('BatchGetCommand', params, result);
93
93
 
94
- // Transform the response into a more usable format
95
- const responses: Record<string, Model[]> = {};
96
-
97
- if (result.Responses) {
98
- for (const [tableName, items] of Object.entries(result.Responses)) {
99
- responses[tableName] = items as unknown as Model[];
100
- }
94
+ if (!result.Responses) {
95
+ return [];
101
96
  }
102
97
 
103
- return responses;
98
+ return Object.values(result.Responses).flat() as unknown as Model[];
104
99
  },
105
100
  };
106
101
  }
@@ -22,8 +22,7 @@ export type BatchGetBuilder<Model> = {
22
22
  dbParams(): BatchGetItemCommandInput;
23
23
 
24
24
  /**
25
- * Execute the BatchGetItem command and return the items.
26
- * Returns an object mapping table names to arrays of items.
25
+ * Execute the BatchGetItem command and return the items as a flat array.
27
26
  */
28
- execute(): Promise<Record<string, Model[]>>;
27
+ execute(): Promise<Model[]>;
29
28
  };
@@ -5,7 +5,10 @@ import { ExecutableBuilder } from '../shared';
5
5
  * Builder for DynamoDB GetItem operations.
6
6
  * Supports projection, consistent read, and inspection of the final parameters.
7
7
  */
8
- export interface GetBuilder<KeyInput, Model> extends Omit<ExecutableBuilder<Model | undefined>, 'dbParams'> {
8
+ export interface GetBuilder<KeyInput, Model> extends Omit<
9
+ ExecutableBuilder<Model | undefined>,
10
+ 'dbParams'
11
+ > {
9
12
  /**
10
13
  * Adds a projection expression to only return specific attributes.
11
14
  * Returns a new immutable builder.
@@ -57,7 +57,16 @@ export function createPutBuilder<Model>(
57
57
  },
58
58
 
59
59
  ifNotExists() {
60
- return createPutBuilder(tableName, item, client, conditions, true, returnMode, enableTimestamps, logger);
60
+ return createPutBuilder(
61
+ tableName,
62
+ item,
63
+ client,
64
+ conditions,
65
+ true,
66
+ returnMode,
67
+ enableTimestamps,
68
+ logger
69
+ );
61
70
  },
62
71
 
63
72
  returning(mode) {
@@ -26,32 +26,6 @@ type QueryState<Model> = {
26
26
  logger?: DynamoDBLogger;
27
27
  };
28
28
 
29
- /**
30
- * Determines if a field is a key field (used in pk/sk or index key templates)
31
- */
32
- function isKeyField(fieldName: string, model?: ModelDefinition, indexName?: string): boolean {
33
- if (!model?.key) return false;
34
-
35
- // When an index is specified, also check model.index for key templates
36
- if (indexName && model.index) {
37
- for (const [, keyDef] of Object.entries(model.index)) {
38
- const templateVars = extractTemplateVars(keyDef.value);
39
- if (templateVars.includes(fieldName)) {
40
- return true;
41
- }
42
- }
43
- }
44
-
45
- const keyEntries = Object.entries(model.key);
46
- for (const [, keyDef] of keyEntries) {
47
- const templateVars = extractTemplateVars(keyDef.value);
48
- if (templateVars.includes(fieldName)) {
49
- return true;
50
- }
51
- }
52
- return false;
53
- }
54
-
55
29
  /**
56
30
  * Maps a model attribute name to its corresponding DynamoDB key name (PK/SK)
57
31
  * Also returns the key template for value transformation
@@ -66,6 +40,9 @@ function getKeyNameForAttribute(
66
40
  // When an index is specified, check model.index first for key templates
67
41
  if (indexName && model.index) {
68
42
  for (const [keyName, keyDef] of Object.entries(model.index)) {
43
+ if (!keyName.startsWith(indexName)) {
44
+ continue;
45
+ }
69
46
  const templateVars = extractTemplateVars(keyDef.value);
70
47
  if (templateVars.includes(fieldName)) {
71
48
  return { keyName, template: keyDef.value };
@@ -253,7 +230,11 @@ function createQueryExecutor<Model>(state: QueryState<Model>): QueryExecutor<Mod
253
230
  }
254
231
 
255
232
  // Separate key conditions from filter conditions
256
- const { keyConditions, filterConditions } = separateConditions(state.condition, state.model, state.indexName);
233
+ const { keyConditions, filterConditions } = separateConditions(
234
+ state.condition,
235
+ state.model,
236
+ state.indexName
237
+ );
257
238
 
258
239
  // Build KeyConditionExpression (simple AND)
259
240
  const keyExpr = buildSimpleAndExpression(keyConditions);
@@ -287,12 +287,10 @@ describe('Schema Definition Validation', () => {
287
287
  },
288
288
  },
289
289
  params: {
290
- isoDates: true,
291
290
  timestamps: true,
292
291
  },
293
292
  } as const satisfies SchemaDefinition;
294
293
 
295
- expect(schemaWithParams.params?.isoDates).toBe(true);
296
294
  expect(schemaWithParams.params?.timestamps).toBe(true);
297
295
  });
298
296
 
package/src/core/types.ts CHANGED
@@ -141,7 +141,6 @@ export type ModelDefinition = {
141
141
  * Schema parameters configuration
142
142
  */
143
143
  export type SchemaParams = {
144
- isoDates?: boolean;
145
144
  timestamps?: boolean;
146
145
  cleanInternalKeys?: boolean;
147
146
  };
@@ -138,9 +138,7 @@ describe('zod-utils', () => {
138
138
  const zodType = typeToZod(attr);
139
139
 
140
140
  expect(() => zodType.parse([{ status: 'PENDING' }])).not.toThrow();
141
- expect(() =>
142
- zodType.parse([{ date: '2024-01-01', status: 'DONE' }])
143
- ).not.toThrow();
141
+ expect(() => zodType.parse([{ date: '2024-01-01', status: 'DONE' }])).not.toThrow();
144
142
  expect(() => zodType.parse([{ date: '2024-01-01' }])).toThrow(); // missing status
145
143
  });
146
144
 
@@ -172,9 +170,7 @@ describe('zod-utils', () => {
172
170
  };
173
171
  const zodType = typeToZod(attr);
174
172
 
175
- expect(() =>
176
- zodType.parse({ value: 100, breakdown: { base: 90, fees: 10 } })
177
- ).not.toThrow();
173
+ expect(() => zodType.parse({ value: 100, breakdown: { base: 90, fees: 10 } })).not.toThrow();
178
174
  expect(() => zodType.parse({ value: 100 })).not.toThrow(); // breakdown optional
179
175
  expect(() => zodType.parse({})).toThrow(); // value required
180
176
  });
@@ -98,7 +98,6 @@ const InstagramSchema = {
98
98
  },
99
99
  },
100
100
  params: {
101
- isoDates: true,
102
101
  timestamps: true,
103
102
  },
104
103
  } as const;
@@ -42,8 +42,7 @@ describe('Pagination and Timestamps Integration Tests', () => {
42
42
  },
43
43
  },
44
44
  params: {
45
- isoDates: true,
46
- timestamps: true, // Enable automatic timestamps
45
+ timestamps: true, // Enable automatic timestamps (stored as ISO strings)
47
46
  },
48
47
  } as const;
49
48
 
@@ -84,7 +84,6 @@ const InstagramSchema = {
84
84
  },
85
85
  },
86
86
  params: {
87
- isoDates: true,
88
87
  timestamps: true,
89
88
  },
90
89
  } as const;