@exabugs/dynamodb-client 1.3.28 → 1.3.29
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 +10 -0
- package/dist/integrations/react-admin/components/ReferenceManyToManyField.d.ts +3 -0
- package/dist/integrations/react-admin/components/ReferenceManyToManyField.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/ReferenceManyToManyField.js +23 -3
- package/dist/integrations/react-admin/components/ReferenceManyToManyField.js.map +1 -1
- package/dist/server/handler.cjs +6 -3
- package/dist/server/handler.cjs.map +2 -2
- package/dist/server/operations/find/utils.d.ts.map +1 -1
- package/dist/server/operations/find/utils.js +5 -0
- package/dist/server/operations/find/utils.js.map +1 -1
- package/dist/server/utils/filter.d.ts +1 -1
- package/dist/server/utils/filter.d.ts.map +1 -1
- package/dist/server/utils/filter.js +1 -0
- package/dist/server/utils/filter.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.3.29] - 2026-01-08
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **React-Admin多対多関係コンポーネント**: `ReferenceManyToManyField`に`_through`フィールドを追加
|
|
15
|
+
- 各ターゲットレコードに中間テーブルのデータを`_through`フィールドとして追加
|
|
16
|
+
- 中間テーブルのフィールドに直接アクセス可能(例: `source="_through.status"`)
|
|
17
|
+
- N+1問題を解消し、パフォーマンスを向上
|
|
18
|
+
- 使用例: `<StatusField source="_through.status" label="管理者ステータス" />`
|
|
19
|
+
|
|
10
20
|
## [1.3.28] - 2026-01-07
|
|
11
21
|
|
|
12
22
|
### Added
|
|
@@ -5,6 +5,9 @@ import type { ReferenceManyToManyFieldProps } from '../types.js';
|
|
|
5
5
|
*
|
|
6
6
|
* 多対多関係を表示するためのフィールドコンポーネント。
|
|
7
7
|
* 中間テーブルを経由して関連レコードを取得し、子コンポーネントに渡します。
|
|
8
|
+
*
|
|
9
|
+
* 各ターゲットレコードには `_through` フィールドが追加され、
|
|
10
|
+
* 中間テーブルのデータにアクセスできます。
|
|
8
11
|
*/
|
|
9
12
|
export declare const ReferenceManyToManyField: (props: ReferenceManyToManyFieldProps) => ReactElement;
|
|
10
13
|
//# sourceMappingURL=ReferenceManyToManyField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferenceManyToManyField.d.ts","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReferenceManyToManyField.d.ts","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyField.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,6BAA6B,KAAG,YAuK/E,CAAC"}
|
|
@@ -15,6 +15,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
15
15
|
* >
|
|
16
16
|
* <Datagrid>
|
|
17
17
|
* <TextField source="nickname" />
|
|
18
|
+
* <StatusField source="_through.status" label="管理者ステータス" />
|
|
18
19
|
* </Datagrid>
|
|
19
20
|
* </ReferenceManyToManyField>
|
|
20
21
|
* ```
|
|
@@ -26,6 +27,9 @@ import { ListContextProvider, useDataProvider, useRecordContext } from 'react-ad
|
|
|
26
27
|
*
|
|
27
28
|
* 多対多関係を表示するためのフィールドコンポーネント。
|
|
28
29
|
* 中間テーブルを経由して関連レコードを取得し、子コンポーネントに渡します。
|
|
30
|
+
*
|
|
31
|
+
* 各ターゲットレコードには `_through` フィールドが追加され、
|
|
32
|
+
* 中間テーブルのデータにアクセスできます。
|
|
29
33
|
*/
|
|
30
34
|
export const ReferenceManyToManyField = (props) => {
|
|
31
35
|
const { reference, through, using, source = 'id', children, sort = { field: 'id', order: 'ASC' }, } = props;
|
|
@@ -74,8 +78,16 @@ export const ReferenceManyToManyField = (props) => {
|
|
|
74
78
|
setTotal(0);
|
|
75
79
|
return;
|
|
76
80
|
}
|
|
77
|
-
// 2. ターゲットID
|
|
81
|
+
// 2. ターゲットIDを抽出し、中間レコードとのマッピングを作成
|
|
78
82
|
const targetIds = junctionRecords.map((r) => r[targetKey]).filter(Boolean);
|
|
83
|
+
// 中間レコードをターゲットIDでマッピング
|
|
84
|
+
const junctionMap = new Map();
|
|
85
|
+
junctionRecords.forEach((junction) => {
|
|
86
|
+
const targetId = junction[targetKey];
|
|
87
|
+
if (targetId) {
|
|
88
|
+
junctionMap.set(String(targetId), junction);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
79
91
|
if (targetIds.length === 0) {
|
|
80
92
|
setData([]);
|
|
81
93
|
setTotal(0);
|
|
@@ -85,8 +97,16 @@ export const ReferenceManyToManyField = (props) => {
|
|
|
85
97
|
const { data: targetRecords } = await dataProvider.getMany(reference, {
|
|
86
98
|
ids: targetIds,
|
|
87
99
|
});
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
// 4. ターゲットレコードに中間テーブルのデータを追加
|
|
101
|
+
const enrichedRecords = targetRecords.map((targetRecord) => {
|
|
102
|
+
const junction = junctionMap.get(String(targetRecord.id));
|
|
103
|
+
return {
|
|
104
|
+
...targetRecord,
|
|
105
|
+
_through: junction || null, // 中間テーブルのデータを _through フィールドに追加
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
setData(enrichedRecords);
|
|
109
|
+
setTotal(enrichedRecords.length);
|
|
90
110
|
}
|
|
91
111
|
catch (err) {
|
|
92
112
|
// リクエストがキャンセルされた場合はエラーを無視
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferenceManyToManyField.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyField.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"ReferenceManyToManyField.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/components/ReferenceManyToManyField.tsx"],"names":[],"mappings":"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"}
|
package/dist/server/handler.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// @exabugs/dynamodb-client v1.3.
|
|
2
|
-
// Built: 2026-01-
|
|
1
|
+
// @exabugs/dynamodb-client v1.3.29
|
|
2
|
+
// Built: 2026-01-08T03:20:50.380Z
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -30260,6 +30260,7 @@ function isValidOperator(operator) {
|
|
|
30260
30260
|
"$starts",
|
|
30261
30261
|
"$ends",
|
|
30262
30262
|
"$contains",
|
|
30263
|
+
"$regex",
|
|
30263
30264
|
"$exists",
|
|
30264
30265
|
"$near"
|
|
30265
30266
|
].includes(operator);
|
|
@@ -30352,6 +30353,8 @@ function matchesAllFilters(record, parsedFilters) {
|
|
|
30352
30353
|
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.endsWith(filterValue);
|
|
30353
30354
|
case "$contains":
|
|
30354
30355
|
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.includes(filterValue);
|
|
30356
|
+
case "$regex":
|
|
30357
|
+
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.includes(filterValue);
|
|
30355
30358
|
case "$exists":
|
|
30356
30359
|
return filterValue ? recordValue !== void 0 && recordValue !== null : recordValue === void 0 || recordValue === null;
|
|
30357
30360
|
default:
|
|
@@ -33467,7 +33470,7 @@ async function handler(event) {
|
|
|
33467
33470
|
return createCorsResponse(HTTP_STATUS.OK);
|
|
33468
33471
|
}
|
|
33469
33472
|
if (event.requestContext.http.method === "GET" && event.requestContext.http.path === "/version") {
|
|
33470
|
-
const version = "1.3.
|
|
33473
|
+
const version = "1.3.29";
|
|
33471
33474
|
return createSuccessResponse({ version, timestamp: (/* @__PURE__ */ new Date()).toISOString() }, requestId);
|
|
33472
33475
|
}
|
|
33473
33476
|
if (event.requestContext.http.method !== "POST") {
|