@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;
@@ -58678,7 +58678,14 @@ async function executeInQuery(resource, targetIds, sort, requestId) {
58678
58678
  }
58679
58679
  async function executeAllRecordsQuery(resource, sort, perPage, nextToken, parsedFilters, requestId) {
58680
58680
  if (parsedFilters.length > 0) {
58681
- return executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken, parsedFilters, requestId);
58681
+ return executeAllRecordsQueryFullScan(
58682
+ resource,
58683
+ sort,
58684
+ perPage,
58685
+ nextToken,
58686
+ parsedFilters,
58687
+ requestId
58688
+ );
58682
58689
  }
58683
58690
  const dbClient2 = getDBClient();
58684
58691
  const tableName = getTableName();
@@ -58750,19 +58757,20 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
58750
58757
  const dbClient2 = getDBClient();
58751
58758
  const tableName = getTableName();
58752
58759
  const costTracker = new CostTracker();
58753
- const offset = nextToken ? decodeOffsetToken(nextToken) ?? 0 : 0;
58754
- logger4.debug("Executing full scan query (ID sort)", {
58755
- requestId,
58756
- resource,
58757
- offset
58758
- });
58759
- const allRecords = [];
58760
58760
  let exclusiveStartKey;
58761
- let previousKeySignature;
58762
- const MAX_ITERATIONS = 1e4;
58761
+ if (nextToken) {
58762
+ const decoded = decodeNextToken(nextToken);
58763
+ exclusiveStartKey = { PK: decoded.PK, SK: decoded.SK };
58764
+ }
58765
+ const page = [];
58766
+ let lastReturned;
58767
+ let hasNextPage = false;
58768
+ let scanned = 0;
58763
58769
  let iterations = 0;
58764
- do {
58765
- if (++iterations > MAX_ITERATIONS) {
58770
+ let previousKeySignature;
58771
+ let chunkSize = SCAN_CHUNK_INITIAL;
58772
+ scan: while (true) {
58773
+ if (++iterations > SCAN_MAX_ITERATIONS) {
58766
58774
  logger4.error("executeAllRecordsQueryFullScan: \u6700\u5927\u53CD\u5FA9\u56DE\u6570\u3092\u8D85\u904E\u3057\u305F\u305F\u3081\u4E2D\u65AD", {
58767
58775
  requestId,
58768
58776
  resource,
@@ -58780,8 +58788,7 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
58780
58788
  ":skPrefix": "id#"
58781
58789
  },
58782
58790
  ScanIndexForward: sort.order === "ASC",
58783
- Limit: 1e3,
58784
- // 大きめの Limit でループ回数を最小化
58791
+ Limit: chunkSize,
58785
58792
  ExclusiveStartKey: exclusiveStartKey,
58786
58793
  ConsistentRead: true,
58787
58794
  ReturnConsumedCapacity: "TOTAL"
@@ -58790,10 +58797,24 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
58790
58797
  "Query"
58791
58798
  );
58792
58799
  costTracker.add(queryResult.ConsumedCapacity);
58793
- allRecords.push(...queryResult.Items || []);
58800
+ for (const row of queryResult.Items || []) {
58801
+ scanned++;
58802
+ if (!matchesAllFilters(extractCleanRecord(row), parsedFilters)) {
58803
+ continue;
58804
+ }
58805
+ if (page.length >= perPage) {
58806
+ hasNextPage = true;
58807
+ break scan;
58808
+ }
58809
+ page.push(extractCleanRecord(row));
58810
+ lastReturned = { PK: row.PK, SK: row.SK };
58811
+ }
58794
58812
  const nextKey = queryResult.LastEvaluatedKey;
58795
- const nextKeySignature = nextKey ? `${nextKey.PK}#${nextKey.SK}` : void 0;
58796
- if (nextKeySignature && nextKeySignature === previousKeySignature) {
58813
+ if (!nextKey) {
58814
+ break;
58815
+ }
58816
+ const nextKeySignature = `${nextKey.PK}#${nextKey.SK}`;
58817
+ if (nextKeySignature === previousKeySignature) {
58797
58818
  logger4.error("executeAllRecordsQueryFullScan: \u540C\u4E00\u306ELastEvaluatedKey\u304C\u8FD4\u5374\u3055\u308C\u305F\u305F\u3081\u4E2D\u65AD", {
58798
58819
  requestId,
58799
58820
  resource,
@@ -58803,28 +58824,24 @@ async function executeAllRecordsQueryFullScan(resource, sort, perPage, nextToken
58803
58824
  }
58804
58825
  previousKeySignature = nextKeySignature;
58805
58826
  exclusiveStartKey = nextKey;
58806
- } while (exclusiveStartKey);
58807
- let items = allRecords.map((item) => extractCleanRecord(item));
58808
- items = items.filter((record) => matchesAllFilters(record, parsedFilters));
58809
- const page = items.slice(offset, offset + perPage);
58810
- const hasNextPage = offset + perPage < items.length;
58811
- const nextTokenValue = hasNextPage ? encodeOffsetToken(offset + perPage) : void 0;
58812
- logger4.info("ID full scan query succeeded", {
58827
+ chunkSize = Math.min(chunkSize * 2, SCAN_CHUNK_MAX);
58828
+ }
58829
+ const nextTokenValue = hasNextPage && lastReturned ? encodeNextToken(lastReturned.PK, lastReturned.SK) : void 0;
58830
+ logger4.info("ID filtered scan query succeeded", {
58813
58831
  requestId,
58814
58832
  resource,
58815
- totalMatched: items.length,
58816
- offset,
58833
+ scanned,
58817
58834
  returned: page.length,
58818
58835
  hasNextPage
58819
58836
  });
58820
58837
  return {
58821
58838
  items: page,
58822
- pageInfo: { hasNextPage, hasPreviousPage: offset > 0 },
58839
+ pageInfo: { hasNextPage, hasPreviousPage: !!nextToken },
58823
58840
  ...nextTokenValue && { nextToken: nextTokenValue },
58824
58841
  consumedCapacity: costTracker.getAggregated()
58825
58842
  };
58826
58843
  }
58827
- var import_lib_dynamodb2, logger4;
58844
+ var import_lib_dynamodb2, logger4, SCAN_CHUNK_INITIAL, SCAN_CHUNK_MAX, SCAN_MAX_ITERATIONS;
58828
58845
  var init_idQuery = __esm({
58829
58846
  "src/server/operations/find/idQuery.ts"() {
58830
58847
  "use strict";
@@ -58842,6 +58859,9 @@ var init_idQuery = __esm({
58842
58859
  __name(executeSpecificIdQuery, "executeSpecificIdQuery");
58843
58860
  __name(executeInQuery, "executeInQuery");
58844
58861
  __name(executeAllRecordsQuery, "executeAllRecordsQuery");
58862
+ SCAN_CHUNK_INITIAL = 100;
58863
+ SCAN_CHUNK_MAX = 1e3;
58864
+ SCAN_MAX_ITERATIONS = 1e4;
58845
58865
  __name(executeAllRecordsQueryFullScan, "executeAllRecordsQueryFullScan");
58846
58866
  }
58847
58867
  });