dyno-table 2.3.2 → 2.4.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.
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunkELULXDSB_cjs = require('./chunk-ELULXDSB.cjs');
3
4
  var chunk7UJJ7JXM_cjs = require('./chunk-7UJJ7JXM.cjs');
4
5
 
5
6
  // src/builders/entity-aware-builders.ts
@@ -114,9 +115,6 @@ var EntityAwareUpdateBuilder = class {
114
115
  if (typeof valuesOrPath === "object") {
115
116
  this.builder.set(valuesOrPath);
116
117
  } else {
117
- if (value === void 0) {
118
- throw new Error("Value is required when setting a single path");
119
- }
120
118
  this.builder.set(valuesOrPath, value);
121
119
  }
122
120
  return this;
@@ -161,6 +159,136 @@ function createEntityAwareUpdateBuilder(builder, entityName) {
161
159
  return new EntityAwareUpdateBuilder(builder, entityName);
162
160
  }
163
161
 
162
+ // src/utils/error-utils.ts
163
+ function isConditionalCheckFailed(error) {
164
+ if (typeof error === "object" && error !== null && "name" in error) {
165
+ return error.name === "ConditionalCheckFailedException";
166
+ }
167
+ return false;
168
+ }
169
+ function isTransactionCanceled(error) {
170
+ if (typeof error === "object" && error !== null && "name" in error) {
171
+ return error.name === "TransactionCanceledException";
172
+ }
173
+ return false;
174
+ }
175
+ function isValidationException(error) {
176
+ if (typeof error === "object" && error !== null && "name" in error) {
177
+ return error.name === "ValidationException";
178
+ }
179
+ return false;
180
+ }
181
+ function isProvisionedThroughputExceeded(error) {
182
+ if (typeof error === "object" && error !== null && "name" in error) {
183
+ return error.name === "ProvisionedThroughputExceededException";
184
+ }
185
+ return false;
186
+ }
187
+ function isRetryableError(error) {
188
+ if (typeof error === "object" && error !== null && "name" in error) {
189
+ const errorName = error.name;
190
+ return errorName === "ProvisionedThroughputExceededException" || errorName === "ThrottlingException" || errorName === "RequestLimitExceeded" || errorName === "InternalServerError" || errorName === "ServiceUnavailable";
191
+ }
192
+ return false;
193
+ }
194
+ function getAwsErrorCode(error) {
195
+ if (typeof error === "object" && error !== null && "name" in error) {
196
+ return error.name;
197
+ }
198
+ return void 0;
199
+ }
200
+ function getAwsErrorMessage(error) {
201
+ if (error instanceof Error) {
202
+ return error.message;
203
+ }
204
+ if (typeof error === "object" && error !== null && "message" in error) {
205
+ return String(error.message);
206
+ }
207
+ return void 0;
208
+ }
209
+ function extractRequiredAttributes(error) {
210
+ const message = getAwsErrorMessage(error);
211
+ if (!message) return void 0;
212
+ const patterns = [
213
+ /(?:missing|required)\s+(?:attribute|field|property)(?:s)?[:\s]+([a-zA-Z0-9_,\s]+)/i,
214
+ /(?:attribute|field|property)[:\s]+([a-zA-Z0-9_]+)\s+is\s+(?:missing|required)/i,
215
+ /"([a-zA-Z0-9_]+)"\s+is\s+(?:missing|required)/i
216
+ ];
217
+ for (const pattern of patterns) {
218
+ const match = message.match(pattern);
219
+ if (match?.[1]) {
220
+ return match[1].split(",").map((attr) => attr.trim()).filter((attr) => attr.length > 0);
221
+ }
222
+ }
223
+ return void 0;
224
+ }
225
+ function formatErrorContext(context, indent = 0) {
226
+ const indentStr = " ".repeat(indent);
227
+ const lines = [];
228
+ for (const [key, value] of Object.entries(context)) {
229
+ if (value === void 0 || value === null) {
230
+ lines.push(`${indentStr}${key}: ${value}`);
231
+ } else if (Array.isArray(value)) {
232
+ lines.push(`${indentStr}${key}: [${value.map((v) => JSON.stringify(v)).join(", ")}]`);
233
+ } else if (typeof value === "object") {
234
+ lines.push(`${indentStr}${key}:`);
235
+ lines.push(formatErrorContext(value, indent + 1));
236
+ } else if (typeof value === "string" && value.length > 100) {
237
+ lines.push(`${indentStr}${key}: ${value.substring(0, 100)}...`);
238
+ } else {
239
+ lines.push(`${indentStr}${key}: ${JSON.stringify(value)}`);
240
+ }
241
+ }
242
+ return lines.join("\n");
243
+ }
244
+ function getErrorSummary(error) {
245
+ const parts = [];
246
+ parts.push(`Error: ${error.name}`);
247
+ parts.push(`Code: ${error.code}`);
248
+ parts.push(`Message: ${error.message}`);
249
+ if (Object.keys(error.context).length > 0) {
250
+ parts.push("Context:");
251
+ parts.push(formatErrorContext(error.context, 1));
252
+ }
253
+ if (error.cause) {
254
+ parts.push(`Caused by: ${error.cause.name}: ${error.cause.message}`);
255
+ }
256
+ return parts.join("\n");
257
+ }
258
+ function isDynoTableError(error) {
259
+ return typeof error === "object" && error !== null && "code" in error && "context" in error && error instanceof Error;
260
+ }
261
+ function isValidationError(error) {
262
+ return error instanceof Error && error.name === "ValidationError";
263
+ }
264
+ function isOperationError(error) {
265
+ return error instanceof Error && error.name === "OperationError";
266
+ }
267
+ function isTransactionError(error) {
268
+ return error instanceof Error && error.name === "TransactionError";
269
+ }
270
+ function isBatchError(error) {
271
+ return error instanceof Error && error.name === "BatchError";
272
+ }
273
+ function isExpressionError(error) {
274
+ return error instanceof Error && error.name === "ExpressionError";
275
+ }
276
+ function isConfigurationError(error) {
277
+ return error instanceof Error && error.name === "ConfigurationError";
278
+ }
279
+ function isEntityError(error) {
280
+ return error instanceof Error && error.name === "EntityError";
281
+ }
282
+ function isKeyGenerationError(error) {
283
+ return error instanceof Error && error.name === "KeyGenerationError";
284
+ }
285
+ function isIndexGenerationError(error) {
286
+ return error instanceof Error && error.name === "IndexGenerationError";
287
+ }
288
+ function isEntityValidationError(error) {
289
+ return error instanceof Error && error.name === "EntityValidationError";
290
+ }
291
+
164
292
  // src/entity/ddb-indexing.ts
165
293
  var IndexBuilder = class {
166
294
  /**
@@ -186,10 +314,26 @@ var IndexBuilder = class {
186
314
  if (options.excludeReadOnly && indexDef.isReadOnly) {
187
315
  continue;
188
316
  }
189
- const key = indexDef.generateKey(item);
317
+ let key;
318
+ try {
319
+ key = indexDef.generateKey(item);
320
+ if (this.hasUndefinedValues(key)) {
321
+ throw chunkELULXDSB_cjs.IndexErrors.undefinedValues(indexName, "create", key, item);
322
+ }
323
+ } catch (error) {
324
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
325
+ throw chunkELULXDSB_cjs.IndexErrors.generationFailed(
326
+ indexName,
327
+ "create",
328
+ item,
329
+ indexDef.partitionKey,
330
+ indexDef.sortKey,
331
+ error instanceof Error ? error : void 0
332
+ );
333
+ }
190
334
  const gsiConfig = this.table.gsis[indexName];
191
335
  if (!gsiConfig) {
192
- throw new Error(`GSI configuration not found for index: ${indexName}`);
336
+ throw chunkELULXDSB_cjs.ConfigurationErrors.gsiNotFound(indexName, this.table.tableName, Object.keys(this.table.gsis));
193
337
  }
194
338
  if (key.pk) {
195
339
  attributes[gsiConfig.partitionKey] = key.pk;
@@ -214,9 +358,7 @@ var IndexBuilder = class {
214
358
  if (options.forceRebuildIndexes && options.forceRebuildIndexes.length > 0) {
215
359
  const invalidIndexes = options.forceRebuildIndexes.filter((indexName) => !this.indexes[indexName]);
216
360
  if (invalidIndexes.length > 0) {
217
- throw new Error(
218
- `Cannot force rebuild unknown indexes: ${invalidIndexes.join(", ")}. Available indexes: ${Object.keys(this.indexes).join(", ")}`
219
- );
361
+ throw chunkELULXDSB_cjs.IndexErrors.notFound(invalidIndexes, Object.keys(this.indexes), void 0, this.table.tableName);
220
362
  }
221
363
  }
222
364
  for (const [indexName, indexDef] of Object.entries(this.indexes)) {
@@ -243,19 +385,22 @@ var IndexBuilder = class {
243
385
  try {
244
386
  key = indexDef.generateKey(updatedItem);
245
387
  } catch (error) {
246
- if (error instanceof Error) {
247
- throw new Error(`Missing attributes: ${error.message}`);
248
- }
249
- throw error;
388
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
389
+ throw chunkELULXDSB_cjs.IndexErrors.missingAttributes(
390
+ indexName,
391
+ "update",
392
+ [],
393
+ // We don't know which specific attributes are missing from the error
394
+ updates,
395
+ indexDef.isReadOnly
396
+ );
250
397
  }
251
398
  if (this.hasUndefinedValues(key)) {
252
- throw new Error(
253
- `Missing attributes: Cannot update entity: insufficient data to regenerate index "${indexName}". All attributes required by the index must be provided in the update operation, or the index must be marked as readOnly.`
254
- );
399
+ throw chunkELULXDSB_cjs.IndexErrors.undefinedValues(indexName, "update", key, updates);
255
400
  }
256
401
  const gsiConfig = this.table.gsis[indexName];
257
402
  if (!gsiConfig) {
258
- throw new Error(`GSI configuration not found for index: ${indexName}`);
403
+ throw chunkELULXDSB_cjs.ConfigurationErrors.gsiNotFound(indexName, this.table.tableName, Object.keys(this.table.gsis));
259
404
  }
260
405
  if (key.pk) {
261
406
  attributes[gsiConfig.partitionKey] = key.pk;
@@ -342,13 +487,28 @@ function defineEntity(config) {
342
487
  const prepareValidatedItemAsync = async () => {
343
488
  const validatedData = await config.schema["~standard"].validate(data);
344
489
  if ("issues" in validatedData && validatedData.issues) {
345
- throw new Error(`Validation failed: ${validatedData.issues.map((i) => i.message).join(", ")}`);
490
+ throw chunkELULXDSB_cjs.EntityErrors.validationFailed(config.name, "create", validatedData.issues, data);
346
491
  }
347
492
  const dataForKeyGeneration = {
348
493
  ...validatedData.value,
349
494
  ...generateTimestamps(["createdAt", "updatedAt"], validatedData.value)
350
495
  };
351
- const primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
496
+ let primaryKey;
497
+ try {
498
+ primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
499
+ if (primaryKey.pk === void 0 || primaryKey.pk === null) {
500
+ throw chunkELULXDSB_cjs.EntityErrors.keyInvalidFormat(config.name, "create", dataForKeyGeneration, primaryKey);
501
+ }
502
+ } catch (error) {
503
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
504
+ throw chunkELULXDSB_cjs.EntityErrors.keyGenerationFailed(
505
+ config.name,
506
+ "create",
507
+ dataForKeyGeneration,
508
+ extractRequiredAttributes(error),
509
+ error instanceof Error ? error : void 0
510
+ );
511
+ }
352
512
  const indexes = buildIndexes(dataForKeyGeneration, table, config.indexes, false);
353
513
  const validatedItem = {
354
514
  ...dataForKeyGeneration,
@@ -363,18 +523,31 @@ function defineEntity(config) {
363
523
  const prepareValidatedItemSync = () => {
364
524
  const validationResult = config.schema["~standard"].validate(data);
365
525
  if (validationResult instanceof Promise) {
366
- throw new Error(
367
- "Async validation is not supported in withBatch or withTransaction. The schema must support synchronous validation for compatibility."
368
- );
526
+ throw chunkELULXDSB_cjs.EntityErrors.asyncValidationNotSupported(config.name, "create");
369
527
  }
370
528
  if ("issues" in validationResult && validationResult.issues) {
371
- throw new Error(`Validation failed: ${validationResult.issues.map((i) => i.message).join(", ")}`);
529
+ throw chunkELULXDSB_cjs.EntityErrors.validationFailed(config.name, "create", validationResult.issues, data);
372
530
  }
373
531
  const dataForKeyGeneration = {
374
532
  ...validationResult.value,
375
533
  ...generateTimestamps(["createdAt", "updatedAt"], validationResult.value)
376
534
  };
377
- const primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
535
+ let primaryKey;
536
+ try {
537
+ primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
538
+ if (primaryKey.pk === void 0 || primaryKey.pk === null) {
539
+ throw chunkELULXDSB_cjs.EntityErrors.keyInvalidFormat(config.name, "create", dataForKeyGeneration, primaryKey);
540
+ }
541
+ } catch (error) {
542
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
543
+ throw chunkELULXDSB_cjs.EntityErrors.keyGenerationFailed(
544
+ config.name,
545
+ "create",
546
+ dataForKeyGeneration,
547
+ extractRequiredAttributes(error),
548
+ error instanceof Error ? error : void 0
549
+ );
550
+ }
378
551
  const indexes = buildIndexes(dataForKeyGeneration, table, config.indexes, false);
379
552
  const validatedItem = {
380
553
  ...dataForKeyGeneration,
@@ -410,13 +583,28 @@ function defineEntity(config) {
410
583
  const prepareValidatedItemAsync = async () => {
411
584
  const validatedData = await config.schema["~standard"].validate(data);
412
585
  if ("issues" in validatedData && validatedData.issues) {
413
- throw new Error(`Validation failed: ${validatedData.issues.map((i) => i.message).join(", ")}`);
586
+ throw chunkELULXDSB_cjs.EntityErrors.validationFailed(config.name, "upsert", validatedData.issues, data);
414
587
  }
415
588
  const dataForKeyGeneration = {
416
589
  ...validatedData.value,
417
590
  ...generateTimestamps(["createdAt", "updatedAt"], validatedData.value)
418
591
  };
419
- const primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
592
+ let primaryKey;
593
+ try {
594
+ primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
595
+ if (primaryKey.pk === void 0 || primaryKey.pk === null) {
596
+ throw chunkELULXDSB_cjs.EntityErrors.keyInvalidFormat(config.name, "upsert", dataForKeyGeneration, primaryKey);
597
+ }
598
+ } catch (error) {
599
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
600
+ throw chunkELULXDSB_cjs.EntityErrors.keyGenerationFailed(
601
+ config.name,
602
+ "upsert",
603
+ dataForKeyGeneration,
604
+ extractRequiredAttributes(error),
605
+ error instanceof Error ? error : void 0
606
+ );
607
+ }
420
608
  const indexes = buildIndexes2(dataForKeyGeneration, table, false);
421
609
  const validatedItem = {
422
610
  [table.partitionKey]: primaryKey.pk,
@@ -431,18 +619,31 @@ function defineEntity(config) {
431
619
  const prepareValidatedItemSync = () => {
432
620
  const validationResult = config.schema["~standard"].validate(data);
433
621
  if (validationResult instanceof Promise) {
434
- throw new Error(
435
- "Async validation is not supported in withTransaction or withBatch. Use execute() instead."
436
- );
622
+ throw chunkELULXDSB_cjs.EntityErrors.asyncValidationNotSupported(config.name, "upsert");
437
623
  }
438
624
  if ("issues" in validationResult && validationResult.issues) {
439
- throw new Error(`Validation failed: ${validationResult.issues.map((i) => i.message).join(", ")}`);
625
+ throw chunkELULXDSB_cjs.EntityErrors.validationFailed(config.name, "upsert", validationResult.issues, data);
440
626
  }
441
627
  const dataForKeyGeneration = {
442
628
  ...validationResult.value,
443
629
  ...generateTimestamps(["createdAt", "updatedAt"], validationResult.value)
444
630
  };
445
- const primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
631
+ let primaryKey;
632
+ try {
633
+ primaryKey = config.primaryKey.generateKey(dataForKeyGeneration);
634
+ if (primaryKey.pk === void 0 || primaryKey.pk === null) {
635
+ throw chunkELULXDSB_cjs.EntityErrors.keyInvalidFormat(config.name, "upsert", dataForKeyGeneration, primaryKey);
636
+ }
637
+ } catch (error) {
638
+ if (error instanceof chunkELULXDSB_cjs.DynoTableError) throw error;
639
+ throw chunkELULXDSB_cjs.EntityErrors.keyGenerationFailed(
640
+ config.name,
641
+ "upsert",
642
+ dataForKeyGeneration,
643
+ extractRequiredAttributes(error),
644
+ error instanceof Error ? error : void 0
645
+ );
646
+ }
446
647
  const indexes = buildIndexes(dataForKeyGeneration, table, config.indexes, false);
447
648
  const validatedItem = {
448
649
  [table.partitionKey]: primaryKey.pk,
@@ -459,7 +660,7 @@ function defineEntity(config) {
459
660
  await prepareValidatedItemAsync();
460
661
  const result = await originalExecute.call(builder);
461
662
  if (!result) {
462
- throw new Error("Failed to upsert item");
663
+ throw chunkELULXDSB_cjs.OperationErrors.putFailed(config.name, {}, void 0);
463
664
  }
464
665
  return result;
465
666
  };
@@ -478,7 +679,8 @@ function defineEntity(config) {
478
679
  return createEntityAwarePutBuilder(builder, config.name);
479
680
  },
480
681
  get: (key) => {
481
- return createEntityAwareGetBuilder(table.get(config.primaryKey.generateKey(key)), config.name);
682
+ const builder = table.get(config.primaryKey.generateKey(key));
683
+ return createEntityAwareGetBuilder(builder, config.name);
482
684
  },
483
685
  update: (key, data) => {
484
686
  const primaryKeyObj = config.primaryKey.generateKey(key);
@@ -500,46 +702,47 @@ function defineEntity(config) {
500
702
  builder.condition(chunk7UJJ7JXM_cjs.eq(entityTypeAttributeName, config.name));
501
703
  return createEntityAwareDeleteBuilder(builder, config.name);
502
704
  },
503
- query: Object.entries(config.queries || {}).reduce((acc, [key, inputCallback]) => {
504
- acc[key] = (input) => {
505
- const queryEntity = {
506
- scan: repository.scan,
507
- get: (key2) => createEntityAwareGetBuilder(table.get(key2), config.name),
508
- query: (keyCondition) => {
509
- return table.query(keyCondition);
705
+ query: Object.entries(config.queries || {}).reduce(
706
+ (acc, [key, inputCallback]) => {
707
+ acc[key] = (input) => {
708
+ const queryEntity = {
709
+ scan: repository.scan,
710
+ get: (key2) => createEntityAwareGetBuilder(table.get(key2), config.name),
711
+ query: (keyCondition) => {
712
+ return table.query(keyCondition);
713
+ }
714
+ };
715
+ const queryBuilderCallback = inputCallback(input);
716
+ const builder = queryBuilderCallback(queryEntity);
717
+ if (builder && typeof builder === "object" && "filter" in builder && typeof builder.filter === "function") {
718
+ builder.filter(chunk7UJJ7JXM_cjs.eq(entityTypeAttributeName, config.name));
510
719
  }
511
- };
512
- const queryBuilderCallback = inputCallback(input);
513
- const builder = queryBuilderCallback(queryEntity);
514
- if (builder && typeof builder === "object" && "filter" in builder && typeof builder.filter === "function") {
515
- builder.filter(chunk7UJJ7JXM_cjs.eq(entityTypeAttributeName, config.name));
516
- }
517
- if (builder && typeof builder === "object" && "execute" in builder) {
518
- const originalExecute = builder.execute;
519
- builder.execute = async () => {
520
- const queryFn = config.queries[key];
521
- if (queryFn && typeof queryFn === "function") {
522
- const schema = queryFn.schema;
523
- if (schema?.["~standard"]?.validate && typeof schema["~standard"].validate === "function") {
524
- const validationResult = schema["~standard"].validate(input);
525
- if ("issues" in validationResult && validationResult.issues) {
526
- throw new Error(
527
- `Validation failed: ${validationResult.issues.map((issue) => issue.message).join(", ")}`
528
- );
720
+ if (builder && typeof builder === "object" && "execute" in builder) {
721
+ const originalExecute = builder.execute;
722
+ builder.execute = async () => {
723
+ const queryFn = config.queries[key];
724
+ if (queryFn && typeof queryFn === "function") {
725
+ const schema = queryFn.schema;
726
+ if (schema?.["~standard"]?.validate && typeof schema["~standard"].validate === "function") {
727
+ const validationResult = schema["~standard"].validate(input);
728
+ if ("issues" in validationResult && validationResult.issues) {
729
+ throw chunkELULXDSB_cjs.EntityErrors.queryInputValidationFailed(config.name, key, validationResult.issues, input);
730
+ }
529
731
  }
530
732
  }
531
- }
532
- const result = await originalExecute.call(builder);
533
- if (!result) {
534
- throw new Error("Failed to execute query");
535
- }
536
- return result;
537
- };
538
- }
539
- return builder;
540
- };
541
- return acc;
542
- }, {}),
733
+ const result = await originalExecute.call(builder);
734
+ if (!result) {
735
+ throw chunkELULXDSB_cjs.OperationErrors.queryFailed(config.name, { queryName: key }, void 0);
736
+ }
737
+ return result;
738
+ };
739
+ }
740
+ return builder;
741
+ };
742
+ return acc;
743
+ },
744
+ {}
745
+ ),
543
746
  scan: () => {
544
747
  const builder = table.scan();
545
748
  builder.filter(chunk7UJJ7JXM_cjs.eq(entityTypeAttributeName, config.name));
@@ -575,7 +778,7 @@ function createIndex() {
575
778
  generateKey: (item) => {
576
779
  const data = schema["~standard"].validate(item);
577
780
  if ("issues" in data && data.issues) {
578
- throw new Error(`Index validation failed: ${data.issues.map((i) => i.message).join(", ")}`);
781
+ throw chunkELULXDSB_cjs.ValidationErrors.indexSchemaValidationFailed(data.issues, "both");
579
782
  }
580
783
  const validData = "value" in data ? data.value : item;
581
784
  return { pk: pkFn(validData), sk: skFn(validData) };
@@ -596,7 +799,7 @@ function createIndex() {
596
799
  generateKey: (item) => {
597
800
  const data = schema["~standard"].validate(item);
598
801
  if ("issues" in data && data.issues) {
599
- throw new Error(`Index validation failed: ${data.issues.map((i) => i.message).join(", ")}`);
802
+ throw chunkELULXDSB_cjs.ValidationErrors.indexSchemaValidationFailed(data.issues, "partition");
600
803
  }
601
804
  const validData = "value" in data ? data.value : item;
602
805
  return { pk: pkFn(validData) };
@@ -620,3 +823,24 @@ function createIndex() {
620
823
  exports.createIndex = createIndex;
621
824
  exports.createQueries = createQueries;
622
825
  exports.defineEntity = defineEntity;
826
+ exports.extractRequiredAttributes = extractRequiredAttributes;
827
+ exports.formatErrorContext = formatErrorContext;
828
+ exports.getAwsErrorCode = getAwsErrorCode;
829
+ exports.getAwsErrorMessage = getAwsErrorMessage;
830
+ exports.getErrorSummary = getErrorSummary;
831
+ exports.isBatchError = isBatchError;
832
+ exports.isConditionalCheckFailed = isConditionalCheckFailed;
833
+ exports.isConfigurationError = isConfigurationError;
834
+ exports.isDynoTableError = isDynoTableError;
835
+ exports.isEntityError = isEntityError;
836
+ exports.isEntityValidationError = isEntityValidationError;
837
+ exports.isExpressionError = isExpressionError;
838
+ exports.isIndexGenerationError = isIndexGenerationError;
839
+ exports.isKeyGenerationError = isKeyGenerationError;
840
+ exports.isOperationError = isOperationError;
841
+ exports.isProvisionedThroughputExceeded = isProvisionedThroughputExceeded;
842
+ exports.isRetryableError = isRetryableError;
843
+ exports.isTransactionCanceled = isTransactionCanceled;
844
+ exports.isTransactionError = isTransactionError;
845
+ exports.isValidationError = isValidationError;
846
+ exports.isValidationException = isValidationException;
@@ -728,4 +728,4 @@ type PrimaryKeyWithoutExpression = {
728
728
  sk?: string;
729
729
  };
730
730
 
731
- export { type ComparisonOperator as C, type ExpressionParams as E, type KeyConditionOperator as K, type LogicalOperator as L, type PrimaryKey as P, type Condition as a, type ConditionOperator as b, type PrimaryKeyWithoutExpression as c, and as d, attributeExists as e, attributeNotExists as f, beginsWith as g, between as h, contains as i, eq as j, gt as k, gte as l, inArray as m, lt as n, lte as o, ne as p, not as q, or as r, type Path as s, type PathType as t, createComparisonCondition as u };
731
+ export { type ComparisonOperator as C, type ExpressionParams as E, type KeyConditionOperator as K, type LogicalOperator as L, type PrimaryKeyWithoutExpression as P, type PrimaryKey as a, type Condition as b, type ConditionOperator as c, and as d, attributeExists as e, attributeNotExists as f, beginsWith as g, between as h, contains as i, eq as j, gt as k, gte as l, inArray as m, lt as n, lte as o, ne as p, not as q, or as r, type Path as s, type PathType as t, createComparisonCondition as u };
@@ -728,4 +728,4 @@ type PrimaryKeyWithoutExpression = {
728
728
  sk?: string;
729
729
  };
730
730
 
731
- export { type ComparisonOperator as C, type ExpressionParams as E, type KeyConditionOperator as K, type LogicalOperator as L, type PrimaryKey as P, type Condition as a, type ConditionOperator as b, type PrimaryKeyWithoutExpression as c, and as d, attributeExists as e, attributeNotExists as f, beginsWith as g, between as h, contains as i, eq as j, gt as k, gte as l, inArray as m, lt as n, lte as o, ne as p, not as q, or as r, type Path as s, type PathType as t, createComparisonCondition as u };
731
+ export { type ComparisonOperator as C, type ExpressionParams as E, type KeyConditionOperator as K, type LogicalOperator as L, type PrimaryKeyWithoutExpression as P, type PrimaryKey as a, type Condition as b, type ConditionOperator as c, and as d, attributeExists as e, attributeNotExists as f, beginsWith as g, between as h, contains as i, eq as j, gt as k, gte as l, inArray as m, lt as n, lte as o, ne as p, not as q, or as r, type Path as s, type PathType as t, createComparisonCondition as u };
@@ -1,3 +1,3 @@
1
- export { C as ComparisonOperator, a as Condition, b as ConditionOperator, E as ExpressionParams, K as KeyConditionOperator, L as LogicalOperator, P as PrimaryKey, c as PrimaryKeyWithoutExpression, d as and, e as attributeExists, f as attributeNotExists, g as beginsWith, h as between, i as contains, u as createComparisonCondition, j as eq, k as gt, l as gte, m as inArray, n as lt, o as lte, p as ne, q as not, r as or } from './conditions-CcZL0sR2.cjs';
1
+ export { C as ComparisonOperator, b as Condition, c as ConditionOperator, E as ExpressionParams, K as KeyConditionOperator, L as LogicalOperator, a as PrimaryKey, P as PrimaryKeyWithoutExpression, d as and, e as attributeExists, f as attributeNotExists, g as beginsWith, h as between, i as contains, u as createComparisonCondition, j as eq, k as gt, l as gte, m as inArray, n as lt, o as lte, p as ne, q as not, r as or } from './conditions-C8bM__Pn.cjs';
2
2
  import './types.cjs';
3
3
  import '@aws-sdk/lib-dynamodb';
@@ -1,3 +1,3 @@
1
- export { C as ComparisonOperator, a as Condition, b as ConditionOperator, E as ExpressionParams, K as KeyConditionOperator, L as LogicalOperator, P as PrimaryKey, c as PrimaryKeyWithoutExpression, d as and, e as attributeExists, f as attributeNotExists, g as beginsWith, h as between, i as contains, u as createComparisonCondition, j as eq, k as gt, l as gte, m as inArray, n as lt, o as lte, p as ne, q as not, r as or } from './conditions-D_w7vVYG.js';
1
+ export { C as ComparisonOperator, b as Condition, c as ConditionOperator, E as ExpressionParams, K as KeyConditionOperator, L as LogicalOperator, a as PrimaryKey, P as PrimaryKeyWithoutExpression, d as and, e as attributeExists, f as attributeNotExists, g as beginsWith, h as between, i as contains, u as createComparisonCondition, j as eq, k as gt, l as gte, m as inArray, n as lt, o as lte, p as ne, q as not, r as or } from './conditions-BSAcZswY.js';
2
2
  import './types.js';
3
3
  import '@aws-sdk/lib-dynamodb';
package/dist/entity.cjs CHANGED
@@ -1,19 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkNTA6GDPP_cjs = require('./chunk-NTA6GDPP.cjs');
3
+ var chunkZXM6LPRV_cjs = require('./chunk-ZXM6LPRV.cjs');
4
+ require('./chunk-ELULXDSB.cjs');
4
5
  require('./chunk-7UJJ7JXM.cjs');
5
6
 
6
7
 
7
8
 
8
9
  Object.defineProperty(exports, "createIndex", {
9
10
  enumerable: true,
10
- get: function () { return chunkNTA6GDPP_cjs.createIndex; }
11
+ get: function () { return chunkZXM6LPRV_cjs.createIndex; }
11
12
  });
12
13
  Object.defineProperty(exports, "createQueries", {
13
14
  enumerable: true,
14
- get: function () { return chunkNTA6GDPP_cjs.createQueries; }
15
+ get: function () { return chunkZXM6LPRV_cjs.createQueries; }
15
16
  });
16
17
  Object.defineProperty(exports, "defineEntity", {
17
18
  enumerable: true,
18
- get: function () { return chunkNTA6GDPP_cjs.defineEntity; }
19
+ get: function () { return chunkZXM6LPRV_cjs.defineEntity; }
19
20
  });
package/dist/entity.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { s as Path, t as PathType, a as Condition, b as ConditionOperator, c as PrimaryKeyWithoutExpression, P as PrimaryKey } from './conditions-CcZL0sR2.cjs';
2
- import { P as PutBuilder, G as GetBuilder, U as UpdateBuilder, i as UpdateCommandParams, T as TransactionBuilder, D as DeleteBuilder, S as ScanBuilder, Q as QueryBuilder } from './index-DlN8G9hd.cjs';
1
+ import { s as Path, t as PathType, b as Condition, c as ConditionOperator, P as PrimaryKeyWithoutExpression, a as PrimaryKey } from './conditions-C8bM__Pn.cjs';
2
+ import { P as PutBuilder, G as GetBuilder, U as UpdateBuilder, p as UpdateCommandParams, T as TransactionBuilder, D as DeleteBuilder, S as ScanBuilder, Q as QueryBuilder } from './index-BX-MSZHj.cjs';
3
3
  import { StandardSchemaV1 } from './standard-schema.cjs';
4
4
  import { Table } from './table.cjs';
5
5
  import { DynamoItem, Index, TableConfig } from './types.cjs';
@@ -112,6 +112,9 @@ type QueryFunctionWithSchema<T extends DynamoItem, I, R> = QueryFunction<T, I, R
112
112
  type QueryRecord<T extends DynamoItem> = {
113
113
  [K: string]: QueryFunctionWithSchema<T, any, any>;
114
114
  };
115
+ type MappedQueries<T extends DynamoItem, Q extends QueryRecord<T>> = {
116
+ [K in keyof Q]: Q[K] extends QueryFunctionWithSchema<T, infer I, infer R> ? (input: I) => R : never;
117
+ };
115
118
  type QueryEntity<T extends DynamoItem> = {
116
119
  scan: () => ScanBuilder<T>;
117
120
  get: (key: PrimaryKeyWithoutExpression) => EntityAwareGetBuilder<T>;
@@ -195,7 +198,7 @@ Q extends QueryRecord<T> = QueryRecord<T>> {
195
198
  get: (key: I) => EntityAwareGetBuilder<T>;
196
199
  update: (key: I, data: Partial<T>) => EntityAwareUpdateBuilder<T>;
197
200
  delete: (key: I) => EntityAwareDeleteBuilder;
198
- query: Q;
201
+ query: MappedQueries<T, Q>;
199
202
  scan: () => ScanBuilder<T>;
200
203
  }
201
204
  /**
@@ -255,4 +258,4 @@ declare function createIndex(): {
255
258
  };
256
259
  };
257
260
 
258
- export { type EntityConfig, type EntityRepository, type IndexDefinition, type QueryEntity, type QueryFunction, type QueryFunctionWithSchema, type QueryRecord, createIndex, createQueries, defineEntity };
261
+ export { type EntityConfig, type EntityRepository, type IndexDefinition, type MappedQueries, type QueryEntity, type QueryFunction, type QueryFunctionWithSchema, type QueryRecord, createIndex, createQueries, defineEntity };
package/dist/entity.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { s as Path, t as PathType, a as Condition, b as ConditionOperator, c as PrimaryKeyWithoutExpression, P as PrimaryKey } from './conditions-D_w7vVYG.js';
2
- import { P as PutBuilder, G as GetBuilder, U as UpdateBuilder, i as UpdateCommandParams, T as TransactionBuilder, D as DeleteBuilder, S as ScanBuilder, Q as QueryBuilder } from './index-2cbm07Bi.js';
1
+ import { s as Path, t as PathType, b as Condition, c as ConditionOperator, P as PrimaryKeyWithoutExpression, a as PrimaryKey } from './conditions-BSAcZswY.js';
2
+ import { P as PutBuilder, G as GetBuilder, U as UpdateBuilder, p as UpdateCommandParams, T as TransactionBuilder, D as DeleteBuilder, S as ScanBuilder, Q as QueryBuilder } from './index-DdTolMJW.js';
3
3
  import { StandardSchemaV1 } from './standard-schema.js';
4
4
  import { Table } from './table.js';
5
5
  import { DynamoItem, Index, TableConfig } from './types.js';
@@ -112,6 +112,9 @@ type QueryFunctionWithSchema<T extends DynamoItem, I, R> = QueryFunction<T, I, R
112
112
  type QueryRecord<T extends DynamoItem> = {
113
113
  [K: string]: QueryFunctionWithSchema<T, any, any>;
114
114
  };
115
+ type MappedQueries<T extends DynamoItem, Q extends QueryRecord<T>> = {
116
+ [K in keyof Q]: Q[K] extends QueryFunctionWithSchema<T, infer I, infer R> ? (input: I) => R : never;
117
+ };
115
118
  type QueryEntity<T extends DynamoItem> = {
116
119
  scan: () => ScanBuilder<T>;
117
120
  get: (key: PrimaryKeyWithoutExpression) => EntityAwareGetBuilder<T>;
@@ -195,7 +198,7 @@ Q extends QueryRecord<T> = QueryRecord<T>> {
195
198
  get: (key: I) => EntityAwareGetBuilder<T>;
196
199
  update: (key: I, data: Partial<T>) => EntityAwareUpdateBuilder<T>;
197
200
  delete: (key: I) => EntityAwareDeleteBuilder;
198
- query: Q;
201
+ query: MappedQueries<T, Q>;
199
202
  scan: () => ScanBuilder<T>;
200
203
  }
201
204
  /**
@@ -255,4 +258,4 @@ declare function createIndex(): {
255
258
  };
256
259
  };
257
260
 
258
- export { type EntityConfig, type EntityRepository, type IndexDefinition, type QueryEntity, type QueryFunction, type QueryFunctionWithSchema, type QueryRecord, createIndex, createQueries, defineEntity };
261
+ export { type EntityConfig, type EntityRepository, type IndexDefinition, type MappedQueries, type QueryEntity, type QueryFunction, type QueryFunctionWithSchema, type QueryRecord, createIndex, createQueries, defineEntity };
package/dist/entity.js CHANGED
@@ -1,2 +1,3 @@
1
- export { createIndex, createQueries, defineEntity } from './chunk-2EWNZOUK.js';
1
+ export { createIndex, createQueries, defineEntity } from './chunk-U6MQGB6Y.js';
2
+ import './chunk-FF7FYGDH.js';
2
3
  import './chunk-2WIBY7PZ.js';