@exabugs/dynamodb-client 1.24.1 → 1.25.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.
- package/CHANGELOG.md +35 -0
- package/dist/server/handler.cjs +400 -188
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/media-handler.cjs +17 -12
- package/dist/server/media-handler.cjs.map +3 -3
- package/dist/server/media-process-handler-dlq.cjs +17 -12
- package/dist/server/media-process-handler-dlq.cjs.map +3 -3
- package/dist/server/media-process-handler.cjs +17 -12
- package/dist/server/media-process-handler.cjs.map +3 -3
- package/dist/server/operations/deleteMany.d.ts.map +1 -1
- package/dist/server/operations/deleteMany.js +26 -2
- package/dist/server/operations/deleteMany.js.map +1 -1
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
- package/dist/server/operations/find/shadowQuery.js +59 -50
- package/dist/server/operations/find/shadowQuery.js.map +1 -1
- package/dist/server/operations/find/utils.d.ts.map +1 -1
- package/dist/server/operations/find/utils.js +19 -2
- package/dist/server/operations/find/utils.js.map +1 -1
- package/dist/server/operations/insertMany.d.ts.map +1 -1
- package/dist/server/operations/insertMany.js +36 -2
- package/dist/server/operations/insertMany.js.map +1 -1
- package/dist/server/operations/updateMany.d.ts.map +1 -1
- package/dist/server/operations/updateMany.js +134 -133
- package/dist/server/operations/updateMany.js.map +1 -1
- package/dist/server/utils/revision.d.ts +49 -0
- package/dist/server/utils/revision.d.ts.map +1 -0
- package/dist/server/utils/revision.js +92 -0
- package/dist/server/utils/revision.js.map +1 -0
- package/dist/server/utils/updateOperators.d.ts +25 -0
- package/dist/server/utils/updateOperators.d.ts.map +1 -0
- package/dist/server/utils/updateOperators.js +76 -0
- package/dist/server/utils/updateOperators.js.map +1 -0
- package/dist/sharp-layer.zip +0 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.25.0] - 2026-11-13
|
|
11
|
+
|
|
12
|
+
**挙動が変わる変更**(詳細は下の各項目):
|
|
13
|
+
|
|
14
|
+
- 同時の更新が、後勝ちの上書きから、両方が効く形になる(楽観ロック。ADR 0011)。本体レコードの最上位に `__rev` が増える(クライアントには返らない。移行は不要)
|
|
15
|
+
- `$unset` が効くようになる(これまでは黙って無視)。`$inc` など未実装の更新演算子は 400 になる
|
|
16
|
+
- 数値のフィルタを数値として比べる。並べ替えと同じ項目への範囲検索・数値・長い文字列の `$eq` が、正しい結果を返す
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **同時の書き込みで、更新を失い、シャドーが食い違っていた**(ADR 0011)。本体レコードに版(`__rev`)を持たせ、更新・削除・挿入の書き込みに条件を付ける(楽観ロック)。条件に外れたら、読み直してやり直す(最大 5 回)。競合しない限り、読み書きの容量は増えない
|
|
21
|
+
- 既存の id への `insertOne` / `insertMany`(上書き)で、古いレコードのシャドーが残っていた。上書きのまま、古いシャドーを一緒に消す
|
|
22
|
+
- 後方互換: 既存のレコード(版なし)はそのまま読め、最初の書き込みで版が付く(移行は不要)。`__rev` は `data` の外で、クライアントには返らない。同時の更新は、後勝ちの上書きから、両方が効く形になる
|
|
23
|
+
|
|
24
|
+
- **`$unset` を黙って無視していた**(`updateOne` / `updateMany`)。型と docs にはあるが、サーバーは `$set` しか見ておらず、項目を消す更新が保存されなかった(`$unset` だけを渡すと、`$unset` という名前の項目が保存されていた)。`$unset` を実装した(項目名の配列と MongoDB の形の両方。ネストは `'a.b'`。その項目のシャドーも消える)
|
|
25
|
+
- **対応していない更新演算子(`$inc` など)は 400 にする**(黙って無視しない)。`$inc` は docs にあるが未実装
|
|
26
|
+
- **upsert の新規作成で `'a.b'` が、ネストではなく `a.b` という名前の項目になっていた**。既存レコードの更新と同じ JSON Merge Patch を使う(新規作成では `null` の項目を保存しない)
|
|
27
|
+
- **filter つきの upsert**: 演算子つきの条件(`{ date: { $gte: … } }`)を値として保存していた。演算子なしのパッチでは `$setOnInsert` という名前の項目が保存されていた。等値の条件だけを新規レコードに入れる
|
|
28
|
+
- 後方互換: `$set` / `$setOnInsert` だけの更新、演算子なしのパッチ(JSON Merge Patch)の更新は変わらない。変わるのは、これまで無視されていた `$unset`(効くようになる)と、未対応の演算子(400 になる)
|
|
29
|
+
- **範囲検索(`$gt` / `$gte` / `$lt` / `$lte`)を、並べ替えと同じ項目にかけたときの不具合**(`find/shadowQuery.ts` の `buildKeyCondition`)。`SK BETWEEN` の 1 条件にした
|
|
30
|
+
- `$lt` / `$lte`: `begins_with` と比較を並べていて、DynamoDB が必ず `ValidationException`(500)を返していた
|
|
31
|
+
- `$gt` / `$gte`: 上限が無く、他の項目のシャドーと本体(`id#…`)まで読んでいた(結果はメモリの絞り込みと重複の除去で正しいが、読み取りが無駄になり、ページの区切りがずれる)
|
|
32
|
+
- 後方互換: `$lt` / `$lte` はこれまで必ず失敗していたので、動いていた呼び出しへの影響はない。`$gt` / `$gte` は、返すレコードの集合は同じで、読む範囲だけが狭くなる
|
|
33
|
+
- **検索の値の符号化が、書き込み側(シャドーの生成)と食い違っていた**。検索側も書き込み側と同じ関数(`formatFieldValue`)で符号化する
|
|
34
|
+
- 数値: 書き込みはオフセットつき 16 桁、検索は 20 桁のゼロ埋めで、並べ替えと同じ数値の項目への `$eq` が必ず空になっていた
|
|
35
|
+
- 100 バイトを超える文字列(日本語は 34 文字以上): 書き込みは切り詰め、検索は切り詰めず、`$eq` が必ず空になっていた
|
|
36
|
+
- 小数・切り詰めで符号が重なる値は、広めに読んでメモリの絞り込みで判定する
|
|
37
|
+
- **数値のフィルタを文字列として比べていた**(`{ count: { $gte: 3 } }` で 10 が外れる)。型の指定(`count:$gte:number`)が無いとき、値の型(number / boolean)から比較の型を決める
|
|
38
|
+
- 後方互換: 数値の比較が数値どうしになる(正しくなる方向)。文字列・日時の値は変わらない
|
|
39
|
+
- 統合テスト(DynamoDB Local): `__tests__/server/operations/find/shadowQuery.range.integration.test.ts`
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- **CI を速くした**(ライブラリのコードの変更なし・公開しない): Build を Test と並列に動かす(`needs` から test を外す。公開は両方の成功を要るので安全)。公開のステップは `--ignore-scripts` にして、`prepublishOnly` の build と test:unit の二重実行をやめる(同じコミットで Test・Build が成功済み)。公開までのパイプラインが約 6.5 分から約 4 分、PR が約 3 分から約 2.3 分になる見積もり(2026-11-01 の実測: Test 138 秒・Build 128 秒・Publish 137 秒が直列)
|
|
44
|
+
|
|
10
45
|
## [1.24.1] - 2026-11-01
|
|
11
46
|
|
|
12
47
|
### Fixed
|