@exabugs/dynamodb-client 1.0.1 → 1.0.3
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 +34 -41
- package/dist/server/handler.cjs.map +2 -2
- package/dist/server/operations/find/idQuery.d.ts +0 -5
- package/dist/server/operations/find/idQuery.d.ts.map +1 -1
- package/dist/server/operations/find/idQuery.js +3 -3
- package/dist/server/operations/find/idQuery.js.map +1 -1
- package/dist/server/operations/find/shadowQuery.d.ts +0 -5
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
- package/dist/server/operations/find/shadowQuery.js +9 -9
- package/dist/server/operations/find/shadowQuery.js.map +1 -1
- package/dist/server/operations/find/types.d.ts +1 -8
- package/dist/server/operations/find/types.d.ts.map +1 -1
- package/dist/server/operations/find/types.js +0 -3
- package/dist/server/operations/find/types.js.map +1 -1
- package/dist/server/operations/find/utils.js +16 -16
- package/dist/server/operations/find/utils.js.map +1 -1
- package/dist/server/utils/filter.d.ts +6 -6
- package/dist/server/utils/filter.d.ts.map +1 -1
- package/dist/server/utils/filter.js +28 -28
- package/dist/server/utils/filter.js.map +1 -1
- 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.0.3] - 2025-12-31
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **型安全性の向上**: `ParsedFilterField`の型定義を修正
|
|
15
|
+
- `find/types.ts`の重複した型定義を削除し、`filter.ts`からインポート
|
|
16
|
+
- `operator`フィールドを`string`型から`FilterOperator`型に変更
|
|
17
|
+
- TypeScriptコンパイラが`$`プレフィックスなしの演算子を検出できるように修正
|
|
18
|
+
|
|
19
|
+
- **ID最適化クエリ**: `$eq`演算子の比較を修正
|
|
20
|
+
- `idQuery.ts`で演算子比較が`'eq'`(`$`なし)になっていた問題を修正
|
|
21
|
+
- `getOne`操作で単一レコードが正しく取得できるように修正
|
|
22
|
+
- react-admin詳細画面が正常に動作するように修正
|
|
23
|
+
|
|
24
|
+
- **シャドウクエリ**: `$`プレフィックス付き演算子に統一
|
|
25
|
+
- `shadowQuery.ts`のswitch文で`'eq'`, `'gt'`, `'gte'`, `'lt'`, `'lte'`を`'$eq'`, `'$gt'`, `'$gte'`, `'$lt'`, `'$lte'`に修正
|
|
26
|
+
- すべてのクエリ最適化で一貫して`$`プレフィックス付き演算子を使用
|
|
27
|
+
|
|
28
|
+
## [1.0.2] - 2025-12-31
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **BREAKING**: フィルター演算子を `$` プレフィックス必須に統一
|
|
33
|
+
- `FilterOperator` 型を `$eq`, `$ne`, `$lt`, `$lte`, `$gt`, `$gte`, `$in`, `$nin`, `$starts`, `$ends`, `$contains`, `$exists` に変更
|
|
34
|
+
- すべてのサーバー側フィルター処理で `$` プレフィックスを標準とする
|
|
35
|
+
- `$` なしの演算子はエラーとして扱う(明確なエラーメッセージ)
|
|
36
|
+
- MongoDB互換性を完全に保証
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **サーバーサイドフィルター処理**: `$` プレフィックス付き演算子を正しく処理
|
|
41
|
+
- `find` 操作で `{ id: { $in: [...] } }` 形式のフィルターが正常に動作
|
|
42
|
+
- react-admin統合からのフィルターが正常に動作
|
|
43
|
+
- 一貫性のある演算子処理(モンキーパッチなし)
|
|
44
|
+
|
|
10
45
|
## [1.0.1] - 2025-12-31
|
|
11
46
|
|
|
12
47
|
### Fixed
|
package/dist/server/handler.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// @exabugs/dynamodb-client v1.0.
|
|
2
|
-
// Built: 2025-12-
|
|
1
|
+
// @exabugs/dynamodb-client v1.0.3
|
|
2
|
+
// Built: 2025-12-31T01:03:53.388Z
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -29683,7 +29683,7 @@ __name(normalizeSort, "normalizeSort");
|
|
|
29683
29683
|
function parseFilterField(fieldKey) {
|
|
29684
29684
|
const parts = fieldKey.split(":");
|
|
29685
29685
|
if (parts.length === 1) {
|
|
29686
|
-
return { field: parts[0], operator: "eq", type: "string" };
|
|
29686
|
+
return { field: parts[0], operator: "$eq", type: "string" };
|
|
29687
29687
|
}
|
|
29688
29688
|
if (parts.length === 2) {
|
|
29689
29689
|
const operator = parts[1];
|
|
@@ -29708,18 +29708,18 @@ function parseFilterField(fieldKey) {
|
|
|
29708
29708
|
__name(parseFilterField, "parseFilterField");
|
|
29709
29709
|
function isValidOperator(operator) {
|
|
29710
29710
|
return [
|
|
29711
|
-
"eq",
|
|
29712
|
-
"ne",
|
|
29713
|
-
"lt",
|
|
29714
|
-
"lte",
|
|
29715
|
-
"gt",
|
|
29716
|
-
"gte",
|
|
29717
|
-
"in",
|
|
29718
|
-
"nin",
|
|
29719
|
-
"starts",
|
|
29720
|
-
"ends",
|
|
29721
|
-
"contains",
|
|
29722
|
-
"exists"
|
|
29711
|
+
"$eq",
|
|
29712
|
+
"$ne",
|
|
29713
|
+
"$lt",
|
|
29714
|
+
"$lte",
|
|
29715
|
+
"$gt",
|
|
29716
|
+
"$gte",
|
|
29717
|
+
"$in",
|
|
29718
|
+
"$nin",
|
|
29719
|
+
"$starts",
|
|
29720
|
+
"$ends",
|
|
29721
|
+
"$contains",
|
|
29722
|
+
"$exists"
|
|
29723
29723
|
].includes(operator);
|
|
29724
29724
|
}
|
|
29725
29725
|
__name(isValidOperator, "isValidOperator");
|
|
@@ -29788,29 +29788,29 @@ function matchesAllFilters(record, parsedFilters) {
|
|
|
29788
29788
|
const recordValue = record[field];
|
|
29789
29789
|
const filterValue = filter.value;
|
|
29790
29790
|
switch (operator) {
|
|
29791
|
-
case "eq":
|
|
29791
|
+
case "$eq":
|
|
29792
29792
|
return recordValue === filterValue;
|
|
29793
|
-
case "ne":
|
|
29793
|
+
case "$ne":
|
|
29794
29794
|
return recordValue !== filterValue;
|
|
29795
|
-
case "gt":
|
|
29795
|
+
case "$gt":
|
|
29796
29796
|
return recordValue != null && recordValue > filterValue;
|
|
29797
|
-
case "gte":
|
|
29797
|
+
case "$gte":
|
|
29798
29798
|
return recordValue != null && recordValue >= filterValue;
|
|
29799
|
-
case "lt":
|
|
29799
|
+
case "$lt":
|
|
29800
29800
|
return recordValue != null && recordValue < filterValue;
|
|
29801
|
-
case "lte":
|
|
29801
|
+
case "$lte":
|
|
29802
29802
|
return recordValue != null && recordValue <= filterValue;
|
|
29803
|
-
case "in":
|
|
29803
|
+
case "$in":
|
|
29804
29804
|
return Array.isArray(filterValue) && filterValue.includes(recordValue);
|
|
29805
|
-
case "nin":
|
|
29805
|
+
case "$nin":
|
|
29806
29806
|
return Array.isArray(filterValue) && !filterValue.includes(recordValue);
|
|
29807
|
-
case "starts":
|
|
29807
|
+
case "$starts":
|
|
29808
29808
|
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.startsWith(filterValue);
|
|
29809
|
-
case "ends":
|
|
29809
|
+
case "$ends":
|
|
29810
29810
|
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.endsWith(filterValue);
|
|
29811
|
-
case "contains":
|
|
29811
|
+
case "$contains":
|
|
29812
29812
|
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.includes(filterValue);
|
|
29813
|
-
case "exists":
|
|
29813
|
+
case "$exists":
|
|
29814
29814
|
return filterValue ? recordValue !== void 0 && recordValue !== null : recordValue === void 0 || recordValue === null;
|
|
29815
29815
|
default:
|
|
29816
29816
|
return true;
|
|
@@ -29885,17 +29885,10 @@ async function executeIdQuery(resource, normalizedParams, requestId) {
|
|
|
29885
29885
|
hasFilters: parsedFilters.length > 0
|
|
29886
29886
|
});
|
|
29887
29887
|
const idFilter = parsedFilters.find((f4) => f4.parsed.field === "id");
|
|
29888
|
-
if (idFilter && idFilter.parsed.operator === "eq") {
|
|
29888
|
+
if (idFilter && idFilter.parsed.operator === "$eq") {
|
|
29889
29889
|
return await executeSpecificIdQuery(resource, String(idFilter.value), requestId);
|
|
29890
29890
|
}
|
|
29891
|
-
return await executeAllRecordsQuery(
|
|
29892
|
-
resource,
|
|
29893
|
-
sort,
|
|
29894
|
-
perPage,
|
|
29895
|
-
nextToken,
|
|
29896
|
-
parsedFilters,
|
|
29897
|
-
requestId
|
|
29898
|
-
);
|
|
29891
|
+
return await executeAllRecordsQuery(resource, sort, perPage, nextToken, parsedFilters, requestId);
|
|
29899
29892
|
}
|
|
29900
29893
|
__name(executeIdQuery, "executeIdQuery");
|
|
29901
29894
|
async function executeSpecificIdQuery(resource, targetId, requestId) {
|
|
@@ -30121,7 +30114,7 @@ function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
|
30121
30114
|
const encodedValue = encodeValueForShadowSK(value, type);
|
|
30122
30115
|
const skValue = `${sortField}#${encodedValue}`;
|
|
30123
30116
|
switch (operator) {
|
|
30124
|
-
case "eq":
|
|
30117
|
+
case "$eq":
|
|
30125
30118
|
return {
|
|
30126
30119
|
keyConditionExpression: "PK = :pk AND begins_with(SK, :skValue)",
|
|
30127
30120
|
expressionAttributeValues: {
|
|
@@ -30129,7 +30122,7 @@ function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
|
30129
30122
|
":skValue": `${skValue}#id#`
|
|
30130
30123
|
}
|
|
30131
30124
|
};
|
|
30132
|
-
case "gt":
|
|
30125
|
+
case "$gt":
|
|
30133
30126
|
return {
|
|
30134
30127
|
keyConditionExpression: "PK = :pk AND SK > :skValue",
|
|
30135
30128
|
expressionAttributeValues: {
|
|
@@ -30137,7 +30130,7 @@ function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
|
30137
30130
|
":skValue": `${skValue}#id#~`
|
|
30138
30131
|
}
|
|
30139
30132
|
};
|
|
30140
|
-
case "gte":
|
|
30133
|
+
case "$gte":
|
|
30141
30134
|
return {
|
|
30142
30135
|
keyConditionExpression: "PK = :pk AND SK >= :skValue",
|
|
30143
30136
|
expressionAttributeValues: {
|
|
@@ -30145,7 +30138,7 @@ function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
|
30145
30138
|
":skValue": `${skValue}#id#`
|
|
30146
30139
|
}
|
|
30147
30140
|
};
|
|
30148
|
-
case "lt":
|
|
30141
|
+
case "$lt":
|
|
30149
30142
|
return {
|
|
30150
30143
|
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix) AND SK < :skValue",
|
|
30151
30144
|
expressionAttributeValues: {
|
|
@@ -30154,7 +30147,7 @@ function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
|
30154
30147
|
":skValue": `${skValue}#id#`
|
|
30155
30148
|
}
|
|
30156
30149
|
};
|
|
30157
|
-
case "lte":
|
|
30150
|
+
case "$lte":
|
|
30158
30151
|
return {
|
|
30159
30152
|
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix) AND SK <= :skValue",
|
|
30160
30153
|
expressionAttributeValues: {
|