@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 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
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.0.1
2
- // Built: 2025-12-31T00:03:34.539Z
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: {