@exabugs/dynamodb-client 1.7.0 → 1.8.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,5 @@
1
- // @exabugs/dynamodb-client v1.7.0
2
- // Built: 2026-10-11T16:38:03.698Z
1
+ // @exabugs/dynamodb-client v1.8.0
2
+ // Built: 2026-10-11T23:03:45.636Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.7.0
2
- // Built: 2026-10-11T16:38:03.698Z
1
+ // @exabugs/dynamodb-client v1.8.0
2
+ // Built: 2026-10-11T23:03:45.636Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -46287,7 +46287,14 @@ async function executeInQuery(resource, targetIds, sort, requestId) {
46287
46287
  }
46288
46288
  async function executeAllRecordsQuery(resource, sort, perPage, nextToken, parsedFilters, requestId) {
46289
46289
  if (parsedFilters.length > 0) {
46290
- return executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken, parsedFilters, requestId);
46290
+ return executeAllRecordsQueryFullScan(
46291
+ resource,
46292
+ sort,
46293
+ perPage,
46294
+ nextToken,
46295
+ parsedFilters,
46296
+ requestId
46297
+ );
46291
46298
  }
46292
46299
  const dbClient2 = getDBClient();
46293
46300
  const tableName = getTableName();
@@ -46359,19 +46366,20 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
46359
46366
  const dbClient2 = getDBClient();
46360
46367
  const tableName = getTableName();
46361
46368
  const costTracker = new CostTracker();
46362
- const offset = nextToken ? decodeOffsetToken(nextToken) ?? 0 : 0;
46363
- logger4.debug("Executing full scan query (ID sort)", {
46364
- requestId,
46365
- resource,
46366
- offset
46367
- });
46368
- const allRecords = [];
46369
46369
  let exclusiveStartKey;
46370
- let previousKeySignature;
46371
- const MAX_ITERATIONS = 1e4;
46370
+ if (nextToken) {
46371
+ const decoded = decodeNextToken(nextToken);
46372
+ exclusiveStartKey = { PK: decoded.PK, SK: decoded.SK };
46373
+ }
46374
+ const page = [];
46375
+ let lastReturned;
46376
+ let hasNextPage = false;
46377
+ let scanned = 0;
46372
46378
  let iterations = 0;
46373
- do {
46374
- if (++iterations > MAX_ITERATIONS) {
46379
+ let previousKeySignature;
46380
+ let chunkSize = SCAN_CHUNK_INITIAL;
46381
+ scan: while (true) {
46382
+ if (++iterations > SCAN_MAX_ITERATIONS) {
46375
46383
  logger4.error("executeAllRecordsQueryFullScan: \u6700\u5927\u53CD\u5FA9\u56DE\u6570\u3092\u8D85\u904E\u3057\u305F\u305F\u3081\u4E2D\u65AD", {
46376
46384
  requestId,
46377
46385
  resource,
@@ -46389,8 +46397,7 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
46389
46397
  ":skPrefix": "id#"
46390
46398
  },
46391
46399
  ScanIndexForward: sort.order === "ASC",
46392
- Limit: 1e3,
46393
- // 大きめの Limit でループ回数を最小化
46400
+ Limit: chunkSize,
46394
46401
  ExclusiveStartKey: exclusiveStartKey,
46395
46402
  ConsistentRead: true,
46396
46403
  ReturnConsumedCapacity: "TOTAL"
@@ -46399,10 +46406,24 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
46399
46406
  "Query"
46400
46407
  );
46401
46408
  costTracker.add(queryResult.ConsumedCapacity);
46402
- allRecords.push(...queryResult.Items || []);
46409
+ for (const row of queryResult.Items || []) {
46410
+ scanned++;
46411
+ if (!matchesAllFilters(extractCleanRecord(row), parsedFilters)) {
46412
+ continue;
46413
+ }
46414
+ if (page.length >= perPage) {
46415
+ hasNextPage = true;
46416
+ break scan;
46417
+ }
46418
+ page.push(extractCleanRecord(row));
46419
+ lastReturned = { PK: row.PK, SK: row.SK };
46420
+ }
46403
46421
  const nextKey = queryResult.LastEvaluatedKey;
46404
- const nextKeySignature = nextKey ? `${nextKey.PK}#${nextKey.SK}` : void 0;
46405
- if (nextKeySignature && nextKeySignature === previousKeySignature) {
46422
+ if (!nextKey) {
46423
+ break;
46424
+ }
46425
+ const nextKeySignature = `${nextKey.PK}#${nextKey.SK}`;
46426
+ if (nextKeySignature === previousKeySignature) {
46406
46427
  logger4.error("executeAllRecordsQueryFullScan: \u540C\u4E00\u306ELastEvaluatedKey\u304C\u8FD4\u5374\u3055\u308C\u305F\u305F\u3081\u4E2D\u65AD", {
46407
46428
  requestId,
46408
46429
  resource,
@@ -46412,28 +46433,24 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
46412
46433
  }
46413
46434
  previousKeySignature = nextKeySignature;
46414
46435
  exclusiveStartKey = nextKey;
46415
- } while (exclusiveStartKey);
46416
- let items = allRecords.map((item) => extractCleanRecord(item));
46417
- items = items.filter((record) => matchesAllFilters(record, parsedFilters));
46418
- const page = items.slice(offset, offset + perPage);
46419
- const hasNextPage = offset + perPage < items.length;
46420
- const nextTokenValue = hasNextPage ? encodeOffsetToken(offset + perPage) : void 0;
46421
- logger4.info("ID full scan query succeeded", {
46436
+ chunkSize = Math.min(chunkSize * 2, SCAN_CHUNK_MAX);
46437
+ }
46438
+ const nextTokenValue = hasNextPage && lastReturned ? encodeNextToken(lastReturned.PK, lastReturned.SK) : void 0;
46439
+ logger4.info("ID filtered scan query succeeded", {
46422
46440
  requestId,
46423
46441
  resource,
46424
- totalMatched: items.length,
46425
- offset,
46442
+ scanned,
46426
46443
  returned: page.length,
46427
46444
  hasNextPage
46428
46445
  });
46429
46446
  return {
46430
46447
  items: page,
46431
- pageInfo: { hasNextPage, hasPreviousPage: offset > 0 },
46448
+ pageInfo: { hasNextPage, hasPreviousPage: !!nextToken },
46432
46449
  ...nextTokenValue && { nextToken: nextTokenValue },
46433
46450
  consumedCapacity: costTracker.getAggregated()
46434
46451
  };
46435
46452
  }
46436
- var import_lib_dynamodb2, logger4;
46453
+ var import_lib_dynamodb2, logger4, SCAN_CHUNK_INITIAL, SCAN_CHUNK_MAX, SCAN_MAX_ITERATIONS;
46437
46454
  var init_idQuery = __esm({
46438
46455
  "src/server/operations/find/idQuery.ts"() {
46439
46456
  "use strict";
@@ -46451,6 +46468,9 @@ var init_idQuery = __esm({
46451
46468
  __name(executeSpecificIdQuery, "executeSpecificIdQuery");
46452
46469
  __name(executeInQuery, "executeInQuery");
46453
46470
  __name(executeAllRecordsQuery, "executeAllRecordsQuery");
46471
+ SCAN_CHUNK_INITIAL = 100;
46472
+ SCAN_CHUNK_MAX = 1e3;
46473
+ SCAN_MAX_ITERATIONS = 1e4;
46454
46474
  __name(executeAllRecordsQueryFullScan, "executeAllRecordsQueryFullScan");
46455
46475
  }
46456
46476
  });