@exabugs/dynamodb-client 1.26.0 → 1.27.1

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 (146) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/__generated__/models/apiOperation.d.ts +1 -0
  3. package/dist/__generated__/models/apiOperation.d.ts.map +1 -1
  4. package/dist/__generated__/models/apiOperation.js +1 -0
  5. package/dist/__generated__/models/apiOperation.js.map +1 -1
  6. package/dist/__generated__/models/bulkOperationResult.d.ts +2 -0
  7. package/dist/__generated__/models/bulkOperationResult.d.ts.map +1 -1
  8. package/dist/__generated__/models/countParams.d.ts +31 -0
  9. package/dist/__generated__/models/countParams.d.ts.map +1 -0
  10. package/dist/__generated__/models/countParams.js +2 -0
  11. package/dist/__generated__/models/countParams.js.map +1 -0
  12. package/dist/__generated__/models/countResult.d.ts +37 -0
  13. package/dist/__generated__/models/countResult.d.ts.map +1 -0
  14. package/dist/__generated__/models/countResult.js +2 -0
  15. package/dist/__generated__/models/countResult.js.map +1 -0
  16. package/dist/__generated__/models/countResultConsumedCapacity.d.ts +35 -0
  17. package/dist/__generated__/models/countResultConsumedCapacity.d.ts.map +1 -0
  18. package/dist/__generated__/models/countResultConsumedCapacity.js +25 -0
  19. package/dist/__generated__/models/countResultConsumedCapacity.js.map +1 -0
  20. package/dist/__generated__/models/executeOperationBodyOp.d.ts +1 -0
  21. package/dist/__generated__/models/executeOperationBodyOp.d.ts.map +1 -1
  22. package/dist/__generated__/models/executeOperationBodyOp.js +1 -0
  23. package/dist/__generated__/models/executeOperationBodyOp.js.map +1 -1
  24. package/dist/__generated__/models/findResultPageInfo.d.ts +2 -0
  25. package/dist/__generated__/models/findResultPageInfo.d.ts.map +1 -1
  26. package/dist/__generated__/models/index.d.ts +3 -0
  27. package/dist/__generated__/models/index.d.ts.map +1 -1
  28. package/dist/__generated__/models/index.js +3 -0
  29. package/dist/__generated__/models/index.js.map +1 -1
  30. package/dist/client/Collection.d.ts +7 -0
  31. package/dist/client/Collection.d.ts.map +1 -1
  32. package/dist/client/Collection.js +20 -1
  33. package/dist/client/Collection.js.map +1 -1
  34. package/dist/scripts/repair-shadows.js +86 -42
  35. package/dist/scripts/repair-shadows.js.map +1 -1
  36. package/dist/scripts/utils/cliParser.d.ts +9 -22
  37. package/dist/scripts/utils/cliParser.d.ts.map +1 -1
  38. package/dist/scripts/utils/cliParser.js +14 -37
  39. package/dist/scripts/utils/cliParser.js.map +1 -1
  40. package/dist/scripts/utils/shadowAudit.d.ts +49 -0
  41. package/dist/scripts/utils/shadowAudit.d.ts.map +1 -0
  42. package/dist/scripts/utils/shadowAudit.js +84 -0
  43. package/dist/scripts/utils/shadowAudit.js.map +1 -0
  44. package/dist/scripts/utils/shadowRepair.d.ts +42 -0
  45. package/dist/scripts/utils/shadowRepair.d.ts.map +1 -0
  46. package/dist/scripts/utils/shadowRepair.js +110 -0
  47. package/dist/scripts/utils/shadowRepair.js.map +1 -0
  48. package/dist/server/handler.cjs +1237 -1122
  49. package/dist/server/handler.cjs.map +4 -4
  50. package/dist/server/handler.js +2 -2
  51. package/dist/server/handler.js.map +1 -1
  52. package/dist/server/media-handler.cjs +2 -2
  53. package/dist/server/media-process-handler-dlq.cjs +19 -3
  54. package/dist/server/media-process-handler-dlq.cjs.map +2 -2
  55. package/dist/server/media-process-handler.cjs +19 -3
  56. package/dist/server/media-process-handler.cjs.map +2 -2
  57. package/dist/server/operations/count.d.ts +3 -0
  58. package/dist/server/operations/count.d.ts.map +1 -0
  59. package/dist/server/operations/count.js +81 -0
  60. package/dist/server/operations/count.js.map +1 -0
  61. package/dist/server/operations/deleteMany.d.ts.map +1 -1
  62. package/dist/server/operations/deleteMany.js +2 -1
  63. package/dist/server/operations/deleteMany.js.map +1 -1
  64. package/dist/server/operations/deleteOne.d.ts.map +1 -1
  65. package/dist/server/operations/deleteOne.js +3 -12
  66. package/dist/server/operations/deleteOne.js.map +1 -1
  67. package/dist/server/operations/find/handler.d.ts.map +1 -1
  68. package/dist/server/operations/find/handler.js +4 -1
  69. package/dist/server/operations/find/handler.js.map +1 -1
  70. package/dist/server/operations/find/keyCondition.d.ts +38 -0
  71. package/dist/server/operations/find/keyCondition.d.ts.map +1 -0
  72. package/dist/server/operations/find/keyCondition.js +184 -0
  73. package/dist/server/operations/find/keyCondition.js.map +1 -0
  74. package/dist/server/operations/find/nearQuery.d.ts +4 -1
  75. package/dist/server/operations/find/nearQuery.d.ts.map +1 -1
  76. package/dist/server/operations/find/nearQuery.js +30 -42
  77. package/dist/server/operations/find/nearQuery.js.map +1 -1
  78. package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
  79. package/dist/server/operations/find/shadowQuery.js +16 -143
  80. package/dist/server/operations/find/shadowQuery.js.map +1 -1
  81. package/dist/server/operations/find/utils.d.ts.map +1 -1
  82. package/dist/server/operations/find/utils.js +0 -5
  83. package/dist/server/operations/find/utils.js.map +1 -1
  84. package/dist/server/operations/insertMany.d.ts.map +1 -1
  85. package/dist/server/operations/insertMany.js +1 -4
  86. package/dist/server/operations/insertMany.js.map +1 -1
  87. package/dist/server/operations/insertOne.d.ts.map +1 -1
  88. package/dist/server/operations/insertOne.js +2 -6
  89. package/dist/server/operations/insertOne.js.map +1 -1
  90. package/dist/server/operations/operationDispatcher.d.ts.map +1 -1
  91. package/dist/server/operations/operationDispatcher.js +3 -0
  92. package/dist/server/operations/operationDispatcher.js.map +1 -1
  93. package/dist/server/operations/updateMany.d.ts.map +1 -1
  94. package/dist/server/operations/updateMany.js +23 -17
  95. package/dist/server/operations/updateMany.js.map +1 -1
  96. package/dist/server/operations/updateOne.d.ts.map +1 -1
  97. package/dist/server/operations/updateOne.js +10 -21
  98. package/dist/server/operations/updateOne.js.map +1 -1
  99. package/dist/server/query/nearSearch.d.ts +37 -25
  100. package/dist/server/query/nearSearch.d.ts.map +1 -1
  101. package/dist/server/query/nearSearch.js +87 -125
  102. package/dist/server/query/nearSearch.js.map +1 -1
  103. package/dist/server/types.d.ts +7 -1
  104. package/dist/server/types.d.ts.map +1 -1
  105. package/dist/server/utils/bulkError.d.ts +12 -0
  106. package/dist/server/utils/bulkError.d.ts.map +1 -0
  107. package/dist/server/utils/bulkError.js +21 -0
  108. package/dist/server/utils/bulkError.js.map +1 -0
  109. package/dist/server/utils/chunking.d.ts +9 -1
  110. package/dist/server/utils/chunking.d.ts.map +1 -1
  111. package/dist/server/utils/chunking.js +20 -3
  112. package/dist/server/utils/chunking.js.map +1 -1
  113. package/dist/server/utils/filter.d.ts +3 -105
  114. package/dist/server/utils/filter.d.ts.map +1 -1
  115. package/dist/server/utils/filter.js +14 -218
  116. package/dist/server/utils/filter.js.map +1 -1
  117. package/dist/server/utils/updateOperators.d.ts +12 -1
  118. package/dist/server/utils/updateOperators.d.ts.map +1 -1
  119. package/dist/server/utils/updateOperators.js +53 -6
  120. package/dist/server/utils/updateOperators.js.map +1 -1
  121. package/docs/README.md +9 -12
  122. package/package.json +1 -1
  123. package/dist/scripts/operations/bulkRecordRepair.d.ts +0 -17
  124. package/dist/scripts/operations/bulkRecordRepair.d.ts.map +0 -1
  125. package/dist/scripts/operations/bulkRecordRepair.js +0 -76
  126. package/dist/scripts/operations/bulkRecordRepair.js.map +0 -1
  127. package/dist/scripts/operations/singleRecordRepair.d.ts +0 -18
  128. package/dist/scripts/operations/singleRecordRepair.d.ts.map +0 -1
  129. package/dist/scripts/operations/singleRecordRepair.js +0 -46
  130. package/dist/scripts/operations/singleRecordRepair.js.map +0 -1
  131. package/dist/scripts/utils/awsUtils.d.ts +0 -15
  132. package/dist/scripts/utils/awsUtils.d.ts.map +0 -1
  133. package/dist/scripts/utils/awsUtils.js +0 -31
  134. package/dist/scripts/utils/awsUtils.js.map +0 -1
  135. package/dist/scripts/utils/clientFactory.d.ts +0 -22
  136. package/dist/scripts/utils/clientFactory.d.ts.map +0 -1
  137. package/dist/scripts/utils/clientFactory.js +0 -36
  138. package/dist/scripts/utils/clientFactory.js.map +0 -1
  139. package/dist/scripts/utils/repairUtils.d.ts +0 -58
  140. package/dist/scripts/utils/repairUtils.d.ts.map +0 -1
  141. package/dist/scripts/utils/repairUtils.js +0 -52
  142. package/dist/scripts/utils/repairUtils.js.map +0 -1
  143. package/dist/server/utils/ttl.d.ts +0 -17
  144. package/dist/server/utils/ttl.d.ts.map +0 -1
  145. package/dist/server/utils/ttl.js +0 -64
  146. package/dist/server/utils/ttl.js.map +0 -1
@@ -1,163 +1,123 @@
1
1
  /**
2
2
  * GeoHash近隣検索ロジック
3
3
  *
4
- * Records Lambdaで検証済みの9ブロック検索アルゴリズムを移植
4
+ * 周囲 9 マス(中心 + 隣接 8 方向)のシャドーだけを読み、位置の近似から、確定できる範囲で打ち切る。
5
+ * 本体レコードは、最後に、結果になりうる候補だけを 1 回読む。
6
+ *
7
+ * 保証できる半径 r(p, 緯度) = 精度 p のマスの短い辺。検索点から r 以内の点は、必ず周囲 9 マスの中にある
8
+ * (検索点は中央のマスのどこにでもあるので、9 マスの縁までの最短距離は、マス 1 つぶんの短い辺)。
5
9
  */
6
- import { DEFAULT_GEOHASH_CONFIG, calculateDistance, encodeGeoHash, extractCoordinatesFromNearQuery, extractMaxDistanceFromNearQuery, extractMinDistanceFromNearQuery, getNeighborGeoHashes, } from '../../shared/geohash/index.js';
10
+ import { DEFAULT_GEOHASH_CONFIG, calculateDistance, decodeGeoHash, encodeGeoHash, extractCoordinatesFromNearQuery, extractMaxDistanceFromNearQuery, extractMinDistanceFromNearQuery, getNeighborGeoHashes, } from '../../shared/geohash/index.js';
11
+ /** 緯度 1 度の長さ(メートル)。経度 1 度の長さの上限(赤道)にも使う(実際は地球の半径から求めるより少し長い) */
12
+ const METERS_PER_DEGREE = 111320;
7
13
  /**
8
- * GeoHash精度ごとの誤差範囲(メートル)
9
- * 9ブロック検索(3×3)での実効カバー範囲を計算
14
+ * 精度 p のマスの(緯度方向の高さ, 経度方向の幅)。メートル。経度は `cosLat` を掛ける
15
+ *
16
+ * geohash は経度から先に 1 ビットずつ割る。精度 p は 5p ビットで、経度が ceil(5p/2)、緯度が floor(5p/2)
10
17
  */
11
- const GEOHASH_COVERAGE = {
12
- 8: 19 * 3, // ±19m × 3 = 約57m
13
- 7: 76 * 3, // ±76m × 3 = 約228m
14
- 6: 610 * 3, // ±610m × 3 = 約1,830m (1.8km)
15
- 5: 2400 * 3, // ±2.4km × 3 = 約7,200m (7.2km)
16
- 4: 20000 * 3, // ±20km × 3 = 約60,000m (60km)
17
- 3: 78000 * 3, // ±78km × 3 = 約234,000m (234km)
18
- 2: 630000 * 3, // ±630km × 3 = 約1,890,000m (1,890km)
19
- };
18
+ function cellSizeMeters(precision, cosLat) {
19
+ const latBits = Math.floor((5 * precision) / 2);
20
+ const lonBits = Math.ceil((5 * precision) / 2);
21
+ const heightDeg = 180 / 2 ** latBits;
22
+ return {
23
+ height: heightDeg * METERS_PER_DEGREE,
24
+ width: (360 / 2 ** lonBits) * METERS_PER_DEGREE * cosLat,
25
+ heightDeg,
26
+ };
27
+ }
20
28
  /**
21
- * 指定された精度での9ブロック検索がmaxDistanceをカバーしているか判定
29
+ * 精度 p で保証できる半径(メートル)= マスの短い辺
30
+ *
31
+ * 経度方向の幅は、周囲 9 マスのうち最も高緯度の縁の cos を使う(高緯度ほど狭い)。
22
32
  */
23
- function coversMaxDistance(precision, maxDistance) {
24
- const coverage = GEOHASH_COVERAGE[precision];
25
- if (!coverage) {
26
- return false;
27
- }
28
- return coverage >= maxDistance;
33
+ export function guaranteedRadius(precision, latitude) {
34
+ const { heightDeg } = cellSizeMeters(precision, 1);
35
+ const worstLatitude = Math.min(89.9, Math.abs(latitude) + 2 * heightDeg);
36
+ const { height, width } = cellSizeMeters(precision, Math.cos((worstLatitude * Math.PI) / 180));
37
+ return Math.min(height, width);
38
+ }
39
+ /** シャドーの精度の位置の誤差 ε(メートル)= マスの対角線の半分(経度は赤道の長さで見て、上限にする) */
40
+ export function shadowPositionError(shadowPrecision) {
41
+ const { height, width } = cellSizeMeters(shadowPrecision, 1);
42
+ return Math.hypot(height, width) / 2;
43
+ }
44
+ /** 近似の距離の列から、k 番目に小さいもの(k 件に足りなければ undefined)。昇順に並べて渡すこと */
45
+ function kthOf(sortedAscending, k) {
46
+ return sortedAscending.length >= k ? sortedAscending[k - 1] : undefined;
29
47
  }
30
48
  /**
31
- * 9ブロック検索を実行
49
+ * 近隣検索を実行
32
50
  *
33
- * Records Lambdaの`findVenueCandidates`関数のロジックを移植。
34
- * 段階的に精度を緩和しながら、9ブロック(中心 + 隣接8方向)を検索します。
51
+ * 1. 周囲 9 マスのシャドーを読み、近似の距離 d̃ を求める(重複は id で消える)
52
+ * 2. 上位 limit 件が 9 マスの中で確定する(d̃ₖ + ε ≤ r)か、円の全体を 9 マスが覆う(maxDistance + ε ≤ r)
53
+ * まで、精度を 1 つずつ下げて 1 に戻る(`minPrecision` まで)
54
+ * 3. d̃ が d̃ₖ + 2ε 以内の候補(maxDistance・minDistance があればその範囲)だけの本体を、1 回読む
35
55
  *
36
56
  * @param nearQuery - $nearクエリ
37
57
  * @param fieldName - GeoHashフィールド名
38
58
  * @param limit - 取得件数
39
- * @param searchFunction - 実際の検索を実行する関数
59
+ * @param searchShadows - 1 マス(geohash の接頭辞)のシャドーを読む関数
60
+ * @param readBodies - id の本体を読む関数(ほかの条件で絞る場合は、ここで絞る)
40
61
  * @param config - GeoHash設定
41
- * @returns 距離付きドキュメントと検索メタデータ
42
- *
43
- * @example
44
- * ```typescript
45
- * const result = await executeNearSearch(
46
- * { latitude: 35.6812, longitude: 139.7671, maxDistance: 5000 },
47
- * 'location',
48
- * 10,
49
- * async (geohashPrefix) => {
50
- * // DynamoDBから検索
51
- * return await collection.find({ geohash: { $regex: `^${geohashPrefix}` } }).toArray();
52
- * }
53
- * );
54
- * ```
55
62
  */
56
- export async function executeNearSearch(nearQuery, fieldName, limit, searchFunction, config = DEFAULT_GEOHASH_CONFIG) {
57
- // クエリから緯度・経度を抽出
63
+ export async function executeNearSearch(nearQuery, fieldName, limit, searchShadows, readBodies, config = DEFAULT_GEOHASH_CONFIG) {
58
64
  const { latitude, longitude } = extractCoordinatesFromNearQuery(nearQuery);
59
65
  const maxDistance = extractMaxDistanceFromNearQuery(nearQuery);
60
66
  const minDistance = extractMinDistanceFromNearQuery(nearQuery);
67
+ const epsilon = shadowPositionError(config.shadowPrecision);
61
68
  let precision = config.searchPrecision;
62
- let allCandidates = [];
63
69
  let iterations = 0;
64
- // 段階的に精度を緩和しながら検索
65
- while (allCandidates.length < limit * config.candidateMultiplier &&
66
- precision >= config.minPrecision &&
67
- iterations < config.maxIterations) {
70
+ let exhaustive = false;
71
+ /** id → 近似の距離 d̃ */
72
+ let approx = new Map();
73
+ /** 上位 limit 件を確定できた d̃ₖ(確定できなければ undefined) */
74
+ let kth;
75
+ while (precision >= config.minPrecision && iterations < config.maxIterations) {
68
76
  iterations++;
69
- // 現在の精度でGeoHashを再計算
70
- const currentGeoHash = encodeGeoHash(latitude, longitude, precision);
71
- // 隣接する8方向のGeoHashを取得(合計9ブロック)
72
- const neighborGeoHashes = getNeighborGeoHashes(currentGeoHash);
73
- // 9ブロック分のGeoHashで並列検索
74
- const searchPromises = neighborGeoHashes.map((geohash) => searchFunction(geohash));
75
- const results = await Promise.all(searchPromises);
76
- const candidates = results.flat();
77
- // 重複を除外して追加
78
- for (const candidate of candidates) {
79
- if (!allCandidates.some((c) => c.id === candidate.id)) {
80
- allCandidates.push(candidate);
81
- }
77
+ const radius = guaranteedRadius(precision, latitude);
78
+ const neighbors = getNeighborGeoHashes(encodeGeoHash(latitude, longitude, precision));
79
+ const hits = (await Promise.all(neighbors.map((prefix) => searchShadows(prefix)))).flat();
80
+ // 精度を下げた回は、前の回の範囲を含むので、作り直す
81
+ approx = new Map();
82
+ for (const hit of hits) {
83
+ const center = decodeGeoHash(hit.geohash);
84
+ approx.set(hit.id, calculateDistance(latitude, longitude, center.latitude, center.longitude));
82
85
  }
83
- // maxDistanceが指定されている場合、距離内の候補数をチェック
84
- if (maxDistance !== undefined) {
85
- // 現在の候補から距離内のものをカウント
86
- let candidatesWithinDistance = 0;
87
- for (const candidate of allCandidates) {
88
- const location = candidate[fieldName];
89
- if (location &&
90
- typeof location.latitude === 'number' &&
91
- typeof location.longitude === 'number') {
92
- const distance = calculateDistance(latitude, longitude, location.latitude, location.longitude);
93
- if (distance <= maxDistance) {
94
- candidatesWithinDistance++;
95
- }
96
- }
97
- }
98
- // 距離内の候補が十分に見つかったら終了
99
- if (candidatesWithinDistance >= limit) {
100
- console.log('[nearSearch] Early termination: found enough candidates within maxDistance', {
101
- candidatesWithinDistance,
102
- limit,
103
- maxDistance,
104
- precision,
105
- iterations,
106
- });
107
- break;
108
- }
109
- // 現在の精度での検索範囲がmaxDistanceを完全にカバーしている場合、
110
- // これ以上精度を緩和しても意味がないので終了
111
- if (coversMaxDistance(precision, maxDistance)) {
112
- console.log('[nearSearch] Early termination: current precision covers maxDistance', {
113
- precision,
114
- maxDistance,
115
- coverage: GEOHASH_COVERAGE[precision],
116
- candidatesWithinDistance,
117
- iterations,
118
- });
119
- break;
120
- }
86
+ // 結果になることが確かな候補(真の距離が minDistance 以上・maxDistance 以下)の中で、k 番目に近いもの
87
+ const sure = [...approx.values()]
88
+ .filter((d) => (minDistance === undefined || d - epsilon >= minDistance) &&
89
+ (maxDistance === undefined || d + epsilon <= maxDistance))
90
+ .sort((a, b) => a - b);
91
+ kth = kthOf(sure, limit);
92
+ const topKConfirmed = kth !== undefined && kth + epsilon <= radius;
93
+ const circleCovered = maxDistance !== undefined && maxDistance + epsilon <= radius;
94
+ if (topKConfirmed || circleCovered) {
95
+ exhaustive = true;
96
+ break;
121
97
  }
122
- // 精度を1文字減らす(検索範囲を広げる)
123
98
  precision--;
124
99
  }
125
- // 距離計算・フィルタリング・ソート
126
- const documentsWithDistance = allCandidates
100
+ // 本体を読む候補: 近似の距離が d̃ₖ + 2ε 以内(確定した上位 limit 件の真の距離は、d̃ₖ + ε 以内)
101
+ const cutoff = kth !== undefined ? kth + 2 * epsilon : undefined;
102
+ const wanted = [...approx.entries()]
103
+ .filter(([, d]) => (cutoff === undefined || d <= cutoff) &&
104
+ (maxDistance === undefined || d <= maxDistance + epsilon) &&
105
+ (minDistance === undefined || d >= minDistance - epsilon))
106
+ .map(([id]) => id);
107
+ const bodies = wanted.length > 0 ? await readBodies(wanted) : [];
108
+ const documents = bodies
127
109
  .map((doc) => {
128
- // フィールドから地理座標を取得
129
110
  const location = doc[fieldName];
130
- // デバッグログ: locationフィールドの内容を確認
131
- if (!location) {
132
- console.log('[nearSearch] Location field not found:', {
133
- fieldName,
134
- docKeys: Object.keys(doc),
135
- doc: JSON.stringify(doc).substring(0, 200),
136
- });
137
- }
138
111
  if (!location ||
139
112
  typeof location.latitude !== 'number' ||
140
113
  typeof location.longitude !== 'number') {
141
114
  return null;
142
115
  }
143
- // 距離計算
144
116
  const distance = calculateDistance(latitude, longitude, location.latitude, location.longitude);
145
- // デバッグログ: 距離計算結果
146
- console.log('[nearSearch] Distance calculated:', {
147
- docId: doc.id,
148
- distance,
149
- maxDistance,
150
- minDistance,
151
- willBeFiltered: (maxDistance !== undefined && distance > maxDistance) ||
152
- (minDistance !== undefined && distance < minDistance),
153
- });
154
- // 距離フィルタリング
155
- if (maxDistance !== undefined && distance > maxDistance) {
117
+ if (maxDistance !== undefined && distance > maxDistance)
156
118
  return null;
157
- }
158
- if (minDistance !== undefined && distance < minDistance) {
119
+ if (minDistance !== undefined && distance < minDistance)
159
120
  return null;
160
- }
161
121
  return {
162
122
  ...doc,
163
123
  __distance: distance,
@@ -168,11 +128,13 @@ export async function executeNearSearch(nearQuery, fieldName, limit, searchFunct
168
128
  .sort((a, b) => (a.__distance ?? 0) - (b.__distance ?? 0))
169
129
  .slice(0, limit);
170
130
  return {
171
- documents: documentsWithDistance,
131
+ documents,
172
132
  metadata: {
173
133
  iterations,
174
- candidatesFound: allCandidates.length,
134
+ candidatesFound: approx.size,
135
+ bodiesRead: wanted.length,
175
136
  requestedLimit: limit,
137
+ exhaustive,
176
138
  },
177
139
  };
178
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nearSearch.js","sourceRoot":"","sources":["../../../src/server/query/nearSearch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nearSearch.js","sourceRoot":"","sources":["../../../src/server/query/nearSearch.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * NOTE: OpenAPI仕様から型を生成し、実装で使用しています。
7
7
  */
8
- import type { ApiErrorResponse, ApiOperation, BulkOperationResult, DeleteOneResult, FilterOperators, FindManyReferenceParams, FindManyReferenceResult, FindParams, FindResult, ApiRequest as GeneratedApiRequest, ApiSuccessResponse as GeneratedApiSuccessResponse, DeleteManyParams as GeneratedDeleteManyParams, DeleteOneParams as GeneratedDeleteOneParams, FindManyParams as GeneratedFindManyParams, FindOneParams as GeneratedFindOneParams, UpdateManyParams as GeneratedUpdateManyParams, UpdateOneParams as GeneratedUpdateOneParams, InsertManyParams, InsertOneParams, InsertOneResult, OperationError, UpdateOneResult } from '../__generated__/models/index.js';
8
+ import type { ApiErrorResponse, ApiOperation, BulkOperationResult, CountParams, CountResult, DeleteOneResult, FilterOperators, FindManyReferenceParams, FindManyReferenceResult, FindParams, FindResult, ApiRequest as GeneratedApiRequest, ApiSuccessResponse as GeneratedApiSuccessResponse, DeleteManyParams as GeneratedDeleteManyParams, DeleteOneParams as GeneratedDeleteOneParams, FindManyParams as GeneratedFindManyParams, FindOneParams as GeneratedFindOneParams, UpdateManyParams as GeneratedUpdateManyParams, UpdateOneParams as GeneratedUpdateOneParams, InsertManyParams, InsertOneParams, InsertOneResult, OperationError, UpdateOneResult } from '../__generated__/models/index.js';
9
9
  /**
10
10
  * サーバー内部の追加条件(id 以外の条件)
11
11
  *
@@ -33,6 +33,10 @@ export type ApiRequest<T = unknown> = Omit<GeneratedApiRequest, 'params'> & {
33
33
  * find パラメータ
34
34
  */
35
35
  export type { FindParams };
36
+ /**
37
+ * count パラメータ・レスポンスデータ
38
+ */
39
+ export type { CountParams, CountResult };
36
40
  /**
37
41
  * findOne パラメータ
38
42
  */
@@ -155,6 +159,7 @@ export type ApiParamsMap = {
155
159
  findOne: FindOneParams;
156
160
  findMany: FindManyParams;
157
161
  findManyReference: FindManyReferenceParams;
162
+ count: CountParams;
158
163
  insertOne: InsertOneParams;
159
164
  updateOne: UpdateOneParams;
160
165
  updateMany: UpdateManyParams;
@@ -170,6 +175,7 @@ export type ApiDataMap = {
170
175
  findOne: FindOneResult;
171
176
  findMany: FindManyResult;
172
177
  findManyReference: FindManyReferenceResult;
178
+ count: CountResult;
173
179
  insertOne: InsertOneResult;
174
180
  updateOne: UpdateOneResult;
175
181
  updateMany: UpdateManyResult;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * *Many 操作の失敗(errors の要素)を、単体操作(*One)の AppError に直す
3
+ *
4
+ * 「対象が無い」は 404、競合は 409、リクエストの誤りは 400 にする。
5
+ * それ以外は 500(障害)のまま。
6
+ */
7
+ import { AppError } from '../../shared/index.js';
8
+ export declare function toAppError(error: {
9
+ code?: string;
10
+ message?: string;
11
+ } | undefined, fallbackMessage: string): AppError;
12
+ //# sourceMappingURL=bulkError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkError.d.ts","sourceRoot":"","sources":["../../../src/server/utils/bulkError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAa,MAAM,uBAAuB,CAAC;AAE5D,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACtD,eAAe,EAAE,MAAM,GACtB,QAAQ,CAYV"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * *Many 操作の失敗(errors の要素)を、単体操作(*One)の AppError に直す
3
+ *
4
+ * 「対象が無い」は 404、競合は 409、リクエストの誤りは 400 にする。
5
+ * それ以外は 500(障害)のまま。
6
+ */
7
+ import { AppError, ErrorCode } from '../../shared/index.js';
8
+ export function toAppError(error, fallbackMessage) {
9
+ const message = error?.message ?? fallbackMessage;
10
+ switch (error?.code) {
11
+ case ErrorCode.VALIDATION_ERROR:
12
+ return new AppError(ErrorCode.VALIDATION_ERROR, message, 400);
13
+ case ErrorCode.ITEM_NOT_FOUND:
14
+ return new AppError(ErrorCode.ITEM_NOT_FOUND, message, 404);
15
+ case ErrorCode.VERSION_CONFLICT:
16
+ return new AppError(ErrorCode.VERSION_CONFLICT, message, 409);
17
+ default:
18
+ return new AppError(ErrorCode.INTERNAL_ERROR, message, 500);
19
+ }
20
+ }
21
+ //# sourceMappingURL=bulkError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkError.js","sourceRoot":"","sources":["../../../src/server/utils/bulkError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,UAAU,CACxB,KAAsD,EACtD,eAAuB;IAEvB,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;IAClD,QAAQ,KAAK,EAAE,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS,CAAC,gBAAgB;YAC7B,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAChE,KAAK,SAAS,CAAC,cAAc;YAC3B,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9D,KAAK,SAAS,CAAC,gBAAgB;YAC7B,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAChE;YACE,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * 1 チャンク(1 トランザクション)の推定サイズの上限(バイト)
3
+ *
4
+ * DynamoDB のトランザクションは合計 4MB までなので、シャドーなどの余白を見て 3.5MB で分ける。
5
+ */
6
+ export declare const CHUNK_MAX_BYTES: number;
1
7
  /**
2
8
  * チャンク分割結果
3
9
  */
@@ -15,6 +21,8 @@ export interface ChunkResult<T> {
15
21
  *
16
22
  * @param records - 処理対象のレコード配列
17
23
  * @param getItemCount - 各レコードのアイテム数を計算する関数
24
+ * @param getByteSize - 各レコードの推定サイズ(バイト)を返す関数(既定は JSON の長さ)。
25
+ * 合計が {@link CHUNK_MAX_BYTES} を超えるときもチャンクを分ける(4MB の上限対策)
18
26
  * @returns チャンク分割結果
19
27
  * @throws {Error} 単一レコードが100アイテムを超える場合
20
28
  *
@@ -34,7 +42,7 @@ export interface ChunkResult<T> {
34
42
  * });
35
43
  * ```
36
44
  */
37
- export declare function calculateChunks<T>(records: T[], getItemCount: (record: T) => number): ChunkResult<T>;
45
+ export declare function calculateChunks<T>(records: T[], getItemCount: (record: T) => number, getByteSize?: (record: T) => number): ChunkResult<T>;
38
46
  /**
39
47
  * チャンク実行結果
40
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../../src/server/utils/chunking.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACd,kBAAkB;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,EAAE,EACZ,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAClC,WAAW,CAAC,CAAC,CAAC,CAsDhB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,eAAe;IACf,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,kBAAkB;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,MAAM,EAAE,CAAC,EAAE,EAAE,EACb,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1C,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA8FlC"}
1
+ {"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../../src/server/utils/chunking.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAoB,CAAC;AAOjD;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACd,kBAAkB;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,EAAE,EACZ,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,EACnC,WAAW,GAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAA4B,GACvD,WAAW,CAAC,CAAC,CAAC,CA6DhB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,eAAe;IACf,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,kBAAkB;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY;IACZ,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,MAAM,EAAE,CAAC,EAAE,EAAE,EACb,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1C,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CA8FlC"}
@@ -9,6 +9,16 @@
9
9
  */
10
10
  import { DYNAMODB_TRANSACT_WRITE_MAX_ITEMS, createLogger } from '../../shared/index.js';
11
11
  const logger = createLogger({ service: 'records-lambda' });
12
+ /**
13
+ * 1 チャンク(1 トランザクション)の推定サイズの上限(バイト)
14
+ *
15
+ * DynamoDB のトランザクションは合計 4MB までなので、シャドーなどの余白を見て 3.5MB で分ける。
16
+ */
17
+ export const CHUNK_MAX_BYTES = 3.5 * 1024 * 1024;
18
+ /** レコードの推定サイズ(JSON の長さ。メインレコードの大きさが支配的なので近似として使う) */
19
+ function estimateRecordBytes(record) {
20
+ return Buffer.byteLength(JSON.stringify(record) ?? '', 'utf8');
21
+ }
12
22
  /**
13
23
  * バルク操作のチャンクサイズを動的に計算する
14
24
  *
@@ -17,6 +27,8 @@ const logger = createLogger({ service: 'records-lambda' });
17
27
  *
18
28
  * @param records - 処理対象のレコード配列
19
29
  * @param getItemCount - 各レコードのアイテム数を計算する関数
30
+ * @param getByteSize - 各レコードの推定サイズ(バイト)を返す関数(既定は JSON の長さ)。
31
+ * 合計が {@link CHUNK_MAX_BYTES} を超えるときもチャンクを分ける(4MB の上限対策)
20
32
  * @returns チャンク分割結果
21
33
  * @throws {Error} 単一レコードが100アイテムを超える場合
22
34
  *
@@ -36,13 +48,15 @@ const logger = createLogger({ service: 'records-lambda' });
36
48
  * });
37
49
  * ```
38
50
  */
39
- export function calculateChunks(records, getItemCount) {
51
+ export function calculateChunks(records, getItemCount, getByteSize = estimateRecordBytes) {
40
52
  const chunks = [];
41
53
  const itemCounts = [];
42
54
  let currentChunk = [];
43
55
  let currentItemCount = 0;
56
+ let currentBytes = 0;
44
57
  for (const record of records) {
45
58
  const itemCount = getItemCount(record);
59
+ const bytes = getByteSize(record);
46
60
  // 単一レコードがDynamoDB制限を超える場合はエラー
47
61
  if (itemCount > DYNAMODB_TRANSACT_WRITE_MAX_ITEMS) {
48
62
  const errorMsg = `Single record exceeds ${DYNAMODB_TRANSACT_WRITE_MAX_ITEMS} items limit: ${itemCount} items`;
@@ -52,18 +66,21 @@ export function calculateChunks(records, getItemCount) {
52
66
  });
53
67
  throw new Error(errorMsg);
54
68
  }
55
- // 現在のチャンクに追加するとDynamoDB制限を超える場合、新しいチャンクを開始
56
- if (currentItemCount + itemCount > DYNAMODB_TRANSACT_WRITE_MAX_ITEMS) {
69
+ // 現在のチャンクに追加するとDynamoDB制限(アイテム数・サイズ)を超える場合、新しいチャンクを開始
70
+ if (currentItemCount + itemCount > DYNAMODB_TRANSACT_WRITE_MAX_ITEMS ||
71
+ currentBytes + bytes > CHUNK_MAX_BYTES) {
57
72
  if (currentChunk.length > 0) {
58
73
  chunks.push(currentChunk);
59
74
  itemCounts.push(currentItemCount);
60
75
  }
61
76
  currentChunk = [record];
62
77
  currentItemCount = itemCount;
78
+ currentBytes = bytes;
63
79
  }
64
80
  else {
65
81
  currentChunk.push(record);
66
82
  currentItemCount += itemCount;
83
+ currentBytes += bytes;
67
84
  }
68
85
  }
69
86
  // 最後のチャンクを追加
@@ -1 +1 @@
1
- {"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../../src/server/utils/chunking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../../src/server/utils/chunking.ts"],"names":[],"mappings":"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"}