@exabugs/dynamodb-client 0.1.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 +41 -0
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/dist/client/Collection.d.ts +57 -0
- package/dist/client/Collection.d.ts.map +1 -0
- package/dist/client/Collection.js +174 -0
- package/dist/client/Collection.js.map +1 -0
- package/dist/client/Database.d.ts +35 -0
- package/dist/client/Database.d.ts.map +1 -0
- package/dist/client/Database.js +48 -0
- package/dist/client/Database.js.map +1 -0
- package/dist/client/DynamoClient.d.ts +43 -0
- package/dist/client/DynamoClient.d.ts.map +1 -0
- package/dist/client/DynamoClient.js +62 -0
- package/dist/client/DynamoClient.js.map +1 -0
- package/dist/client/FindCursor.d.ts +174 -0
- package/dist/client/FindCursor.d.ts.map +1 -0
- package/dist/client/FindCursor.js +256 -0
- package/dist/client/FindCursor.js.map +1 -0
- package/dist/client/aws-sigv4.d.ts +10 -0
- package/dist/client/aws-sigv4.d.ts.map +1 -0
- package/dist/client/aws-sigv4.js +54 -0
- package/dist/client/aws-sigv4.js.map +1 -0
- package/dist/client/index.cognito.d.ts +34 -0
- package/dist/client/index.cognito.d.ts.map +1 -0
- package/dist/client/index.cognito.js +30 -0
- package/dist/client/index.cognito.js.map +1 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.iam.d.ts +34 -0
- package/dist/client/index.iam.d.ts.map +1 -0
- package/dist/client/index.iam.js +28 -0
- package/dist/client/index.iam.js.map +1 -0
- package/dist/client/index.js +12 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/index.token.d.ts +33 -0
- package/dist/client/index.token.d.ts.map +1 -0
- package/dist/client/index.token.js +28 -0
- package/dist/client/index.token.js.map +1 -0
- package/dist/dynamodb.d.ts +20 -0
- package/dist/dynamodb.d.ts.map +1 -0
- package/dist/dynamodb.js +31 -0
- package/dist/dynamodb.js.map +1 -0
- package/dist/errors.d.ts +100 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +146 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/react-admin/dataProvider.d.ts +59 -0
- package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -0
- package/dist/integrations/react-admin/dataProvider.js +364 -0
- package/dist/integrations/react-admin/dataProvider.js.map +1 -0
- package/dist/integrations/react-admin/index.d.ts +24 -0
- package/dist/integrations/react-admin/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/index.js +23 -0
- package/dist/integrations/react-admin/index.js.map +1 -0
- package/dist/integrations/react-admin/types.d.ts +47 -0
- package/dist/integrations/react-admin/types.d.ts.map +1 -0
- package/dist/integrations/react-admin/types.js +5 -0
- package/dist/integrations/react-admin/types.js.map +1 -0
- package/dist/logger.d.ts +61 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +87 -0
- package/dist/logger.js.map +1 -0
- package/dist/scripts/repair-shadows.d.ts +3 -0
- package/dist/scripts/repair-shadows.d.ts.map +1 -0
- package/dist/scripts/repair-shadows.js +190 -0
- package/dist/scripts/repair-shadows.js.map +1 -0
- package/dist/server/handler.cjs +31378 -0
- package/dist/server/handler.cjs.map +7 -0
- package/dist/server/handler.d.ts +18 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +435 -0
- package/dist/server/handler.js.map +1 -0
- package/dist/server/handler.zip +0 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/operations/deleteMany.d.ts +18 -0
- package/dist/server/operations/deleteMany.d.ts.map +1 -0
- package/dist/server/operations/deleteMany.js +222 -0
- package/dist/server/operations/deleteMany.js.map +1 -0
- package/dist/server/operations/deleteOne.d.ts +17 -0
- package/dist/server/operations/deleteOne.d.ts.map +1 -0
- package/dist/server/operations/deleteOne.js +87 -0
- package/dist/server/operations/deleteOne.js.map +1 -0
- package/dist/server/operations/find.d.ts +18 -0
- package/dist/server/operations/find.d.ts.map +1 -0
- package/dist/server/operations/find.js +382 -0
- package/dist/server/operations/find.js.map +1 -0
- package/dist/server/operations/findMany.d.ts +13 -0
- package/dist/server/operations/findMany.d.ts.map +1 -0
- package/dist/server/operations/findMany.js +61 -0
- package/dist/server/operations/findMany.js.map +1 -0
- package/dist/server/operations/findManyReference.d.ts +18 -0
- package/dist/server/operations/findManyReference.d.ts.map +1 -0
- package/dist/server/operations/findManyReference.js +150 -0
- package/dist/server/operations/findManyReference.js.map +1 -0
- package/dist/server/operations/findOne.d.ts +14 -0
- package/dist/server/operations/findOne.d.ts.map +1 -0
- package/dist/server/operations/findOne.js +56 -0
- package/dist/server/operations/findOne.js.map +1 -0
- package/dist/server/operations/insertMany.d.ts +19 -0
- package/dist/server/operations/insertMany.d.ts.map +1 -0
- package/dist/server/operations/insertMany.js +243 -0
- package/dist/server/operations/insertMany.js.map +1 -0
- package/dist/server/operations/insertOne.d.ts +18 -0
- package/dist/server/operations/insertOne.d.ts.map +1 -0
- package/dist/server/operations/insertOne.js +85 -0
- package/dist/server/operations/insertOne.js.map +1 -0
- package/dist/server/operations/updateMany.d.ts +20 -0
- package/dist/server/operations/updateMany.d.ts.map +1 -0
- package/dist/server/operations/updateMany.js +316 -0
- package/dist/server/operations/updateMany.js.map +1 -0
- package/dist/server/operations/updateOne.d.ts +20 -0
- package/dist/server/operations/updateOne.d.ts.map +1 -0
- package/dist/server/operations/updateOne.js +159 -0
- package/dist/server/operations/updateOne.js.map +1 -0
- package/dist/server/query/converter.d.ts +85 -0
- package/dist/server/query/converter.d.ts.map +1 -0
- package/dist/server/query/converter.js +161 -0
- package/dist/server/query/converter.js.map +1 -0
- package/dist/server/query/index.d.ts +5 -0
- package/dist/server/query/index.d.ts.map +1 -0
- package/dist/server/query/index.js +5 -0
- package/dist/server/query/index.js.map +1 -0
- package/dist/server/shadow/config.d.ts +147 -0
- package/dist/server/shadow/config.d.ts.map +1 -0
- package/dist/server/shadow/config.js +162 -0
- package/dist/server/shadow/config.js.map +1 -0
- package/dist/server/shadow/differ.d.ts +42 -0
- package/dist/server/shadow/differ.d.ts.map +1 -0
- package/dist/server/shadow/differ.js +66 -0
- package/dist/server/shadow/differ.js.map +1 -0
- package/dist/server/shadow/generator.d.ts +104 -0
- package/dist/server/shadow/generator.d.ts.map +1 -0
- package/dist/server/shadow/generator.js +148 -0
- package/dist/server/shadow/generator.js.map +1 -0
- package/dist/server/shadow/index.d.ts +11 -0
- package/dist/server/shadow/index.d.ts.map +1 -0
- package/dist/server/shadow/index.js +11 -0
- package/dist/server/shadow/index.js.map +1 -0
- package/dist/server/shadow/types.d.ts +44 -0
- package/dist/server/shadow/types.d.ts.map +1 -0
- package/dist/server/shadow/types.js +2 -0
- package/dist/server/shadow/types.js.map +1 -0
- package/dist/server/types.d.ts +295 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +7 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils/auth.d.ts +43 -0
- package/dist/server/utils/auth.d.ts.map +1 -0
- package/dist/server/utils/auth.js +123 -0
- package/dist/server/utils/auth.js.map +1 -0
- package/dist/server/utils/bulkOperations.d.ts +81 -0
- package/dist/server/utils/bulkOperations.d.ts.map +1 -0
- package/dist/server/utils/bulkOperations.js +147 -0
- package/dist/server/utils/bulkOperations.js.map +1 -0
- package/dist/server/utils/chunking.d.ts +96 -0
- package/dist/server/utils/chunking.d.ts.map +1 -0
- package/dist/server/utils/chunking.js +225 -0
- package/dist/server/utils/chunking.js.map +1 -0
- package/dist/server/utils/dynamodb.d.ts +41 -0
- package/dist/server/utils/dynamodb.d.ts.map +1 -0
- package/dist/server/utils/dynamodb.js +83 -0
- package/dist/server/utils/dynamodb.js.map +1 -0
- package/dist/server/utils/filter.d.ts +152 -0
- package/dist/server/utils/filter.d.ts.map +1 -0
- package/dist/server/utils/filter.js +270 -0
- package/dist/server/utils/filter.js.map +1 -0
- package/dist/server/utils/pagination.d.ts +27 -0
- package/dist/server/utils/pagination.d.ts.map +1 -0
- package/dist/server/utils/pagination.js +56 -0
- package/dist/server/utils/pagination.js.map +1 -0
- package/dist/server/utils/timestamps.d.ts +31 -0
- package/dist/server/utils/timestamps.d.ts.map +1 -0
- package/dist/server/utils/timestamps.js +84 -0
- package/dist/server/utils/timestamps.js.map +1 -0
- package/dist/server/utils/ttl.d.ts +17 -0
- package/dist/server/utils/ttl.d.ts.map +1 -0
- package/dist/server/utils/ttl.js +62 -0
- package/dist/server/utils/ttl.js.map +1 -0
- package/dist/server/utils/validation.d.ts +40 -0
- package/dist/server/utils/validation.d.ts.map +1 -0
- package/dist/server/utils/validation.js +54 -0
- package/dist/server/utils/validation.js.map +1 -0
- package/dist/shadows/config.d.ts +54 -0
- package/dist/shadows/config.d.ts.map +1 -0
- package/dist/shadows/config.js +95 -0
- package/dist/shadows/config.js.map +1 -0
- package/dist/shadows/differ.d.ts +42 -0
- package/dist/shadows/differ.d.ts.map +1 -0
- package/dist/shadows/differ.js +66 -0
- package/dist/shadows/differ.js.map +1 -0
- package/dist/shadows/generator.d.ts +63 -0
- package/dist/shadows/generator.d.ts.map +1 -0
- package/dist/shadows/generator.js +107 -0
- package/dist/shadows/generator.js.map +1 -0
- package/dist/shadows/index.d.ts +15 -0
- package/dist/shadows/index.d.ts.map +1 -0
- package/dist/shadows/index.js +17 -0
- package/dist/shadows/index.js.map +1 -0
- package/dist/shadows/types.d.ts +44 -0
- package/dist/shadows/types.d.ts.map +1 -0
- package/dist/shadows/types.js +2 -0
- package/dist/shadows/types.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ulid.d.ts +46 -0
- package/dist/ulid.d.ts.map +1 -0
- package/dist/ulid.js +66 -0
- package/dist/ulid.js.map +1 -0
- package/package.json +136 -0
- package/terraform/README.md +222 -0
- package/terraform/examples/advanced/README.md +129 -0
- package/terraform/examples/advanced/main.tf +158 -0
- package/terraform/examples/advanced/shadow.config.json +35 -0
- package/terraform/examples/advanced/variables.tf +28 -0
- package/terraform/examples/basic/README.md +53 -0
- package/terraform/examples/basic/main.tf +99 -0
- package/terraform/examples/basic/variables.tf +17 -0
- package/terraform/main.tf +159 -0
- package/terraform/outputs.tf +56 -0
- package/terraform/variables.tf +59 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { ShadowFieldConfig, ShadowFieldType } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* シャドースキーマ(簡易版)
|
|
4
|
+
*/
|
|
5
|
+
export interface ShadowSchema {
|
|
6
|
+
/** リソース名 */
|
|
7
|
+
resource: string;
|
|
8
|
+
/** ソート可能なフィールド定義 */
|
|
9
|
+
sortableFields: Record<string, ShadowFieldConfig>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* シャドウレコード
|
|
13
|
+
*/
|
|
14
|
+
export interface ShadowRecord {
|
|
15
|
+
/** パーティションキー(リソース名) */
|
|
16
|
+
PK: string;
|
|
17
|
+
/** ソートキー(シャドウキー) */
|
|
18
|
+
SK: string;
|
|
19
|
+
/** レコードデータ(最小限の情報) */
|
|
20
|
+
data: {
|
|
21
|
+
/** レコードID */
|
|
22
|
+
id: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 文字列値をエスケープする
|
|
27
|
+
* ルール: # → ##, スペース → #
|
|
28
|
+
*
|
|
29
|
+
* @param value - エスケープする文字列
|
|
30
|
+
* @returns エスケープされた文字列
|
|
31
|
+
*/
|
|
32
|
+
export declare function escapeString(value: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* 数値を20桁のゼロ埋め文字列に変換する
|
|
35
|
+
*
|
|
36
|
+
* @param value - 変換する数値(null/undefinedも許容)
|
|
37
|
+
* @returns 20桁のゼロ埋め文字列
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatNumber(value: number | null | undefined): string;
|
|
40
|
+
/**
|
|
41
|
+
* 日時をUTC ISO 8601形式にフォーマットする
|
|
42
|
+
*
|
|
43
|
+
* @param value - 日時文字列またはDateオブジェクト(null/undefinedも許容)
|
|
44
|
+
* @returns UTC ISO 8601形式の文字列
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatDatetime(value: string | Date | null | undefined): string;
|
|
47
|
+
/**
|
|
48
|
+
* 真偽値を"0"または"1"に変換する
|
|
49
|
+
*
|
|
50
|
+
* @param value - 真偽値(null/undefinedも許容)
|
|
51
|
+
* @returns "0"(false)、"1"(true)、または空文字(null/undefined)
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatBoolean(value: boolean | null | undefined): string;
|
|
54
|
+
/**
|
|
55
|
+
* フィールド値を型に応じてフォーマットする
|
|
56
|
+
*
|
|
57
|
+
* @param type - フィールドの型
|
|
58
|
+
* @param value - フォーマットする値(null/undefinedも許容)
|
|
59
|
+
* @returns フォーマットされた文字列
|
|
60
|
+
*/
|
|
61
|
+
export declare function formatFieldValue(type: ShadowFieldType, value: string | number | Date | boolean | null | undefined): string;
|
|
62
|
+
/**
|
|
63
|
+
* シャドーSKを生成する
|
|
64
|
+
* フォーマット: {fieldName}#{formattedValue}#id#{recordId}
|
|
65
|
+
*
|
|
66
|
+
* @param fieldName - フィールド名
|
|
67
|
+
* @param value - フィールド値
|
|
68
|
+
* @param recordId - レコードID(ULID)
|
|
69
|
+
* @param type - フィールドの型(デフォルト: 'string')
|
|
70
|
+
* @returns 生成されたシャドーSK
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* generateShadowSK('name', 'Tech News', '01HZXY123', 'string')
|
|
74
|
+
* // => 'name#Tech#News#id#01HZXY123'
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* generateShadowSK('priority', 123, '01HZXY123', 'number')
|
|
78
|
+
* // => 'priority#00000000000000000123#id#01HZXY123'
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* generateShadowSK('createdAt', '2025-11-12T10:00:00.000Z', '01HZXY123', 'datetime')
|
|
82
|
+
* // => 'createdAt#2025-11-12T10:00:00.000Z#id#01HZXY123'
|
|
83
|
+
*/
|
|
84
|
+
export declare function generateShadowSK(fieldName: string, value: string | number | Date, recordId: string, type?: ShadowFieldType): string;
|
|
85
|
+
/**
|
|
86
|
+
* レコードIDからメインレコードのSKを生成する
|
|
87
|
+
* フォーマット: id#{recordId}
|
|
88
|
+
*
|
|
89
|
+
* @param recordId - レコードID(ULID)
|
|
90
|
+
* @returns メインレコードのSK
|
|
91
|
+
*/
|
|
92
|
+
export declare function generateMainRecordSK(recordId: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* レコードからシャドウレコードを生成する
|
|
95
|
+
*
|
|
96
|
+
* sortableFieldsに定義されたフィールドのみを処理します。
|
|
97
|
+
* 値がundefined/nullの場合は空文字として扱い、シャドウレコードを生成します。
|
|
98
|
+
*
|
|
99
|
+
* @param record - レコードオブジェクト(idフィールドを含む)
|
|
100
|
+
* @param schema - シャドウスキーマ定義
|
|
101
|
+
* @returns 生成されたシャドウレコードの配列
|
|
102
|
+
*/
|
|
103
|
+
export declare function generateShadowRecords(record: Record<string, unknown>, schema: ShadowSchema): ShadowRecord[];
|
|
104
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/server/shadow/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE;QACJ,aAAa;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAcrE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAa9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAKvE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GACzD,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,eAA0B,GAC/B,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,YAAY,GACnB,YAAY,EAAE,CAqBhB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 文字列値をエスケープする
|
|
3
|
+
* ルール: # → ##, スペース → #
|
|
4
|
+
*
|
|
5
|
+
* @param value - エスケープする文字列
|
|
6
|
+
* @returns エスケープされた文字列
|
|
7
|
+
*/
|
|
8
|
+
export function escapeString(value) {
|
|
9
|
+
return value
|
|
10
|
+
.replace(/#/g, '##') // # を ## に置換
|
|
11
|
+
.replace(/ /g, '#'); // スペースを # に置換
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 数値を20桁のゼロ埋め文字列に変換する
|
|
15
|
+
*
|
|
16
|
+
* @param value - 変換する数値(null/undefinedも許容)
|
|
17
|
+
* @returns 20桁のゼロ埋め文字列
|
|
18
|
+
*/
|
|
19
|
+
export function formatNumber(value) {
|
|
20
|
+
// null/undefined は空文字を返す
|
|
21
|
+
if (value === null || value === undefined) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
if (!Number.isFinite(value)) {
|
|
25
|
+
throw new Error(`Invalid number value: ${value}`);
|
|
26
|
+
}
|
|
27
|
+
// 負の数値は0として扱う(または別のエラーハンドリング)
|
|
28
|
+
const normalized = Math.max(0, Math.floor(value));
|
|
29
|
+
return normalized.toString().padStart(20, '0');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 日時をUTC ISO 8601形式にフォーマットする
|
|
33
|
+
*
|
|
34
|
+
* @param value - 日時文字列またはDateオブジェクト(null/undefinedも許容)
|
|
35
|
+
* @returns UTC ISO 8601形式の文字列
|
|
36
|
+
*/
|
|
37
|
+
export function formatDatetime(value) {
|
|
38
|
+
// null/undefined は空文字を返す
|
|
39
|
+
if (value === null || value === undefined) {
|
|
40
|
+
return '';
|
|
41
|
+
}
|
|
42
|
+
const date = typeof value === 'string' ? new Date(value) : value;
|
|
43
|
+
if (isNaN(date.getTime())) {
|
|
44
|
+
throw new Error(`Invalid datetime value: ${value}`);
|
|
45
|
+
}
|
|
46
|
+
return date.toISOString();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 真偽値を"0"または"1"に変換する
|
|
50
|
+
*
|
|
51
|
+
* @param value - 真偽値(null/undefinedも許容)
|
|
52
|
+
* @returns "0"(false)、"1"(true)、または空文字(null/undefined)
|
|
53
|
+
*/
|
|
54
|
+
export function formatBoolean(value) {
|
|
55
|
+
if (value === null || value === undefined) {
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
return value ? '1' : '0';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* フィールド値を型に応じてフォーマットする
|
|
62
|
+
*
|
|
63
|
+
* @param type - フィールドの型
|
|
64
|
+
* @param value - フォーマットする値(null/undefinedも許容)
|
|
65
|
+
* @returns フォーマットされた文字列
|
|
66
|
+
*/
|
|
67
|
+
export function formatFieldValue(type, value) {
|
|
68
|
+
switch (type) {
|
|
69
|
+
case 'string':
|
|
70
|
+
// 文字列型の場合、null/undefinedは空文字として扱う
|
|
71
|
+
if (value === null || value === undefined) {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
return escapeString(String(value));
|
|
75
|
+
case 'number':
|
|
76
|
+
return formatNumber(value);
|
|
77
|
+
case 'datetime':
|
|
78
|
+
return formatDatetime(value);
|
|
79
|
+
case 'boolean':
|
|
80
|
+
return formatBoolean(value);
|
|
81
|
+
default:
|
|
82
|
+
throw new Error(`Unknown shadow field type: ${type}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* シャドーSKを生成する
|
|
87
|
+
* フォーマット: {fieldName}#{formattedValue}#id#{recordId}
|
|
88
|
+
*
|
|
89
|
+
* @param fieldName - フィールド名
|
|
90
|
+
* @param value - フィールド値
|
|
91
|
+
* @param recordId - レコードID(ULID)
|
|
92
|
+
* @param type - フィールドの型(デフォルト: 'string')
|
|
93
|
+
* @returns 生成されたシャドーSK
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* generateShadowSK('name', 'Tech News', '01HZXY123', 'string')
|
|
97
|
+
* // => 'name#Tech#News#id#01HZXY123'
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* generateShadowSK('priority', 123, '01HZXY123', 'number')
|
|
101
|
+
* // => 'priority#00000000000000000123#id#01HZXY123'
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* generateShadowSK('createdAt', '2025-11-12T10:00:00.000Z', '01HZXY123', 'datetime')
|
|
105
|
+
* // => 'createdAt#2025-11-12T10:00:00.000Z#id#01HZXY123'
|
|
106
|
+
*/
|
|
107
|
+
export function generateShadowSK(fieldName, value, recordId, type = 'string') {
|
|
108
|
+
const formattedValue = formatFieldValue(type, value);
|
|
109
|
+
return `${fieldName}#${formattedValue}#id#${recordId}`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* レコードIDからメインレコードのSKを生成する
|
|
113
|
+
* フォーマット: id#{recordId}
|
|
114
|
+
*
|
|
115
|
+
* @param recordId - レコードID(ULID)
|
|
116
|
+
* @returns メインレコードのSK
|
|
117
|
+
*/
|
|
118
|
+
export function generateMainRecordSK(recordId) {
|
|
119
|
+
return `id#${recordId}`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* レコードからシャドウレコードを生成する
|
|
123
|
+
*
|
|
124
|
+
* sortableFieldsに定義されたフィールドのみを処理します。
|
|
125
|
+
* 値がundefined/nullの場合は空文字として扱い、シャドウレコードを生成します。
|
|
126
|
+
*
|
|
127
|
+
* @param record - レコードオブジェクト(idフィールドを含む)
|
|
128
|
+
* @param schema - シャドウスキーマ定義
|
|
129
|
+
* @returns 生成されたシャドウレコードの配列
|
|
130
|
+
*/
|
|
131
|
+
export function generateShadowRecords(record, schema) {
|
|
132
|
+
const shadows = [];
|
|
133
|
+
// sortableFieldsに定義されたフィールドのみ処理
|
|
134
|
+
for (const [fieldName, fieldDef] of Object.entries(schema.sortableFields)) {
|
|
135
|
+
const value = record[fieldName];
|
|
136
|
+
// 値を型に応じて正規化(undefined/nullは空文字として扱う)
|
|
137
|
+
const normalizedValue = formatFieldValue(fieldDef.type, value);
|
|
138
|
+
// シャドウキーを生成
|
|
139
|
+
const sk = `${fieldName}#${normalizedValue}#id#${record.id}`;
|
|
140
|
+
shadows.push({
|
|
141
|
+
PK: schema.resource,
|
|
142
|
+
SK: sk,
|
|
143
|
+
data: { id: record.id },
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return shadows;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/server/shadow/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* シャドー管理モジュール
|
|
3
|
+
*
|
|
4
|
+
* DynamoDB Single-Table設計における動的シャドーレコード管理を提供します。
|
|
5
|
+
*/
|
|
6
|
+
export type { ShadowFieldType, ShadowFieldConfig, ResourceShadowConfig, ShadowConfig, ShadowDiff, } from './types.js';
|
|
7
|
+
export type { ShadowSchema, ShadowRecord } from './generator.js';
|
|
8
|
+
export { escapeString, formatNumber, formatDatetime, formatBoolean, formatFieldValue, generateShadowSK, generateMainRecordSK, generateShadowRecords, } from './generator.js';
|
|
9
|
+
export { calculateShadowDiff, isDiffEmpty, mergeShadowDiffs } from './differ.js';
|
|
10
|
+
export { getShadowConfig, getResourceSchema, getShadowConfigHash, getSchemaVersion, clearShadowConfigCache, getAllShadowFields, isValidShadowField, getDefaultSort, } from './config.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/shadow/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* シャドー管理モジュール
|
|
3
|
+
*
|
|
4
|
+
* DynamoDB Single-Table設計における動的シャドーレコード管理を提供します。
|
|
5
|
+
*/
|
|
6
|
+
export { escapeString, formatNumber, formatDatetime, formatBoolean, formatFieldValue, generateShadowSK, generateMainRecordSK, generateShadowRecords, } from './generator.js';
|
|
7
|
+
// 差分計算関数のエクスポート
|
|
8
|
+
export { calculateShadowDiff, isDiffEmpty, mergeShadowDiffs } from './differ.js';
|
|
9
|
+
// 設定管理関数のエクスポート
|
|
10
|
+
export { getShadowConfig, getResourceSchema, getShadowConfigHash, getSchemaVersion, clearShadowConfigCache, getAllShadowFields, isValidShadowField, getDefaultSort, } from './config.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/shadow/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjF,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* シャドーフィールドの型定義
|
|
3
|
+
*/
|
|
4
|
+
export type ShadowFieldType = 'string' | 'number' | 'datetime' | 'boolean';
|
|
5
|
+
/**
|
|
6
|
+
* シャドー設定のフィールド定義
|
|
7
|
+
*/
|
|
8
|
+
export interface ShadowFieldConfig {
|
|
9
|
+
type: ShadowFieldType;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* リソースごとのシャドー設定
|
|
13
|
+
*/
|
|
14
|
+
export interface ResourceShadowConfig {
|
|
15
|
+
sortDefaults: {
|
|
16
|
+
field: string;
|
|
17
|
+
order: 'ASC' | 'DESC';
|
|
18
|
+
};
|
|
19
|
+
shadows: {
|
|
20
|
+
[fieldName: string]: ShadowFieldConfig;
|
|
21
|
+
};
|
|
22
|
+
ttl?: {
|
|
23
|
+
days: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* shadow.config.jsonの全体構造
|
|
28
|
+
*/
|
|
29
|
+
export interface ShadowConfig {
|
|
30
|
+
$schemaVersion: string;
|
|
31
|
+
resources: {
|
|
32
|
+
[resourceName: string]: ResourceShadowConfig;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* シャドー差分計算の結果
|
|
37
|
+
*/
|
|
38
|
+
export interface ShadowDiff {
|
|
39
|
+
/** 削除すべきシャドーSKのリスト */
|
|
40
|
+
toDelete: string[];
|
|
41
|
+
/** 追加すべきシャドーSKのリスト */
|
|
42
|
+
toAdd: string[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/shadow/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CAAC;KACxC,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE;QACT,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAAC;KAC9C,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/shadow/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Records Lambda API型定義
|
|
3
|
+
* Lambda Function URL (RPC スタイル) で使用される型定義
|
|
4
|
+
* MongoDB 風の操作インターフェース
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* API操作タイプ(MongoDB 風)
|
|
8
|
+
*/
|
|
9
|
+
export type ApiOperation = 'find' | 'findOne' | 'findMany' | 'findManyReference' | 'insertOne' | 'updateOne' | 'updateMany' | 'deleteOne' | 'deleteMany' | 'insertMany';
|
|
10
|
+
/**
|
|
11
|
+
* API リクエスト(共通)
|
|
12
|
+
*/
|
|
13
|
+
export interface ApiRequest<T = unknown> {
|
|
14
|
+
/** 操作名 */
|
|
15
|
+
op: ApiOperation;
|
|
16
|
+
/** リソース名(例: "articles", "tasks") */
|
|
17
|
+
resource: string;
|
|
18
|
+
/** 操作パラメータ */
|
|
19
|
+
params: T;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* find パラメータ
|
|
23
|
+
*/
|
|
24
|
+
export interface FindParams {
|
|
25
|
+
/** フィルター条件 */
|
|
26
|
+
filter?: Record<string, unknown>;
|
|
27
|
+
/** ソート条件 */
|
|
28
|
+
sort?: {
|
|
29
|
+
/** ソート対象フィールド名(シャドー名) */
|
|
30
|
+
field: string;
|
|
31
|
+
/** ソート順序(ASC: 昇順, DESC: 降順) */
|
|
32
|
+
order: 'ASC' | 'DESC';
|
|
33
|
+
};
|
|
34
|
+
/** ページネーション条件 */
|
|
35
|
+
pagination?: {
|
|
36
|
+
/** ページ番号(1始まり) */
|
|
37
|
+
page?: number;
|
|
38
|
+
/** 1ページあたりの件数(最大50件) */
|
|
39
|
+
perPage?: number;
|
|
40
|
+
/** 次ページトークン(Base64URL エンコード) */
|
|
41
|
+
nextToken?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* findOne パラメータ
|
|
46
|
+
*/
|
|
47
|
+
export interface FindOneParams {
|
|
48
|
+
/** 取得するレコードのID */
|
|
49
|
+
id: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* findMany パラメータ
|
|
53
|
+
*/
|
|
54
|
+
export interface FindManyParams {
|
|
55
|
+
/** 取得するレコードのIDリスト */
|
|
56
|
+
ids: string[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* findManyReference パラメータ
|
|
60
|
+
*/
|
|
61
|
+
export interface FindManyReferenceParams {
|
|
62
|
+
/** 参照フィールド名(例: "userId") */
|
|
63
|
+
target: string;
|
|
64
|
+
/** 参照先ID */
|
|
65
|
+
id: string;
|
|
66
|
+
/** フィルター条件 */
|
|
67
|
+
filter?: Record<string, unknown>;
|
|
68
|
+
/** ソート条件 */
|
|
69
|
+
sort?: {
|
|
70
|
+
field: string;
|
|
71
|
+
order: 'ASC' | 'DESC';
|
|
72
|
+
};
|
|
73
|
+
/** ページネーション条件 */
|
|
74
|
+
pagination?: {
|
|
75
|
+
page?: number;
|
|
76
|
+
perPage?: number;
|
|
77
|
+
nextToken?: string;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* insertOne パラメータ
|
|
82
|
+
*/
|
|
83
|
+
export interface InsertOneParams {
|
|
84
|
+
/** 作成するレコードのデータ */
|
|
85
|
+
data: Record<string, unknown>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* updateOne パラメータ
|
|
89
|
+
*/
|
|
90
|
+
export interface UpdateOneParams {
|
|
91
|
+
/** 更新対象のレコードID */
|
|
92
|
+
id: string;
|
|
93
|
+
/** 更新データ(JSON Merge Patch形式) */
|
|
94
|
+
data: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* updateMany パラメータ
|
|
98
|
+
*/
|
|
99
|
+
export interface UpdateManyParams {
|
|
100
|
+
/** 更新対象のレコードIDリスト */
|
|
101
|
+
ids: string[];
|
|
102
|
+
/** 更新データ(JSON Merge Patch形式) */
|
|
103
|
+
data: Record<string, unknown>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* deleteOne パラメータ
|
|
107
|
+
*/
|
|
108
|
+
export interface DeleteOneParams {
|
|
109
|
+
/** 削除対象のレコードID */
|
|
110
|
+
id: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* deleteMany パラメータ
|
|
114
|
+
*/
|
|
115
|
+
export interface DeleteManyParams {
|
|
116
|
+
/** 削除対象のレコードIDリスト */
|
|
117
|
+
ids: string[];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* insertMany パラメータ
|
|
121
|
+
*/
|
|
122
|
+
export interface InsertManyParams {
|
|
123
|
+
/** 作成するレコードのデータ配列 */
|
|
124
|
+
data: Record<string, unknown>[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* API 成功レスポンス
|
|
128
|
+
*/
|
|
129
|
+
export interface ApiSuccessResponse<T> {
|
|
130
|
+
/** 成功フラグ */
|
|
131
|
+
success: true;
|
|
132
|
+
/** レスポンスデータ */
|
|
133
|
+
data: T;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* API エラーレスポンス
|
|
137
|
+
*/
|
|
138
|
+
export interface ApiErrorResponse {
|
|
139
|
+
/** 成功フラグ */
|
|
140
|
+
success: false;
|
|
141
|
+
/** エラー情報 */
|
|
142
|
+
error: {
|
|
143
|
+
/** エラーコード */
|
|
144
|
+
code: string;
|
|
145
|
+
/** エラーメッセージ */
|
|
146
|
+
message: string;
|
|
147
|
+
/** HTTPステータスコード */
|
|
148
|
+
statusCode: number;
|
|
149
|
+
/** 追加詳細情報(オプション) */
|
|
150
|
+
details?: unknown;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* API レスポンス(共通)
|
|
155
|
+
*/
|
|
156
|
+
export type ApiResponse<T> = ApiSuccessResponse<T> | ApiErrorResponse;
|
|
157
|
+
/**
|
|
158
|
+
* find レスポンスデータ
|
|
159
|
+
*/
|
|
160
|
+
export interface FindResult {
|
|
161
|
+
/** レコードリスト */
|
|
162
|
+
items: Record<string, unknown>[];
|
|
163
|
+
/** ページ情報 */
|
|
164
|
+
pageInfo: {
|
|
165
|
+
/** 次ページが存在するか */
|
|
166
|
+
hasNextPage: boolean;
|
|
167
|
+
/** 前ページが存在するか */
|
|
168
|
+
hasPreviousPage: boolean;
|
|
169
|
+
};
|
|
170
|
+
/** 次ページトークン(存在する場合) */
|
|
171
|
+
nextToken?: string;
|
|
172
|
+
/** 総件数(オプション、パフォーマンス影響あり) */
|
|
173
|
+
total?: number;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* findOne レスポンスデータ
|
|
177
|
+
*/
|
|
178
|
+
export type FindOneResult = Record<string, unknown>;
|
|
179
|
+
/**
|
|
180
|
+
* findMany レスポンスデータ
|
|
181
|
+
*/
|
|
182
|
+
export type FindManyResult = Record<string, unknown>[];
|
|
183
|
+
/**
|
|
184
|
+
* findManyReference レスポンスデータ
|
|
185
|
+
*/
|
|
186
|
+
export interface FindManyReferenceResult {
|
|
187
|
+
/** レコードリスト */
|
|
188
|
+
items: Record<string, unknown>[];
|
|
189
|
+
/** ページ情報 */
|
|
190
|
+
pageInfo: {
|
|
191
|
+
hasNextPage: boolean;
|
|
192
|
+
hasPreviousPage: boolean;
|
|
193
|
+
};
|
|
194
|
+
/** 次ページトークン(存在する場合) */
|
|
195
|
+
nextToken?: string;
|
|
196
|
+
/** 総件数(オプション) */
|
|
197
|
+
total?: number;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* insertOne レスポンスデータ
|
|
201
|
+
*/
|
|
202
|
+
export type InsertOneResult = Record<string, unknown>;
|
|
203
|
+
/**
|
|
204
|
+
* updateOne レスポンスデータ
|
|
205
|
+
*/
|
|
206
|
+
export type UpdateOneResult = Record<string, unknown>;
|
|
207
|
+
/**
|
|
208
|
+
* 操作エラー
|
|
209
|
+
* 部分失敗時の個別エラー情報
|
|
210
|
+
*/
|
|
211
|
+
export interface OperationError {
|
|
212
|
+
/** エラーが発生したレコードのID */
|
|
213
|
+
id: string;
|
|
214
|
+
/** エラーコード */
|
|
215
|
+
code: string;
|
|
216
|
+
/** エラーメッセージ */
|
|
217
|
+
message: string;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* バルク操作の統一レスポンス形式(Records Lambda内部形式)
|
|
221
|
+
*
|
|
222
|
+
* Records Lambdaは統一された内部形式でレスポンスを返却します。
|
|
223
|
+
* この形式は情報を保持し、Collection.tsでMongoDB互換形式に変換されます。
|
|
224
|
+
*/
|
|
225
|
+
export interface BulkOperationResult {
|
|
226
|
+
/** 成功件数 */
|
|
227
|
+
count: number;
|
|
228
|
+
/** 成功したレコードのインデックスとID({ 0: 'A', 2: 'C' }) */
|
|
229
|
+
successIds: Record<number, string>;
|
|
230
|
+
/** 失敗したレコードのインデックス({ 1: 'B' }) */
|
|
231
|
+
failedIds: Record<number, string>;
|
|
232
|
+
/** エラー情報(インデックスをキーとする)({ 1: { code: '...', message: '...' } }) */
|
|
233
|
+
errors: Record<number, OperationError>;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* updateMany レスポンスデータ(Records Lambda内部形式)
|
|
237
|
+
*/
|
|
238
|
+
export interface UpdateManyResult extends BulkOperationResult {
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* deleteOne レスポンスデータ
|
|
242
|
+
*/
|
|
243
|
+
export interface DeleteOneResult {
|
|
244
|
+
/** 削除されたレコードのID */
|
|
245
|
+
id: string;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* deleteMany レスポンスデータ(Records Lambda内部形式)
|
|
249
|
+
*/
|
|
250
|
+
export interface DeleteManyResult extends BulkOperationResult {
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* insertMany レスポンスデータ(Records Lambda内部形式)
|
|
254
|
+
*/
|
|
255
|
+
export interface InsertManyResult extends BulkOperationResult {
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* 操作ごとのパラメータ型マッピング
|
|
259
|
+
*/
|
|
260
|
+
export type ApiParamsMap = {
|
|
261
|
+
find: FindParams;
|
|
262
|
+
findOne: FindOneParams;
|
|
263
|
+
findMany: FindManyParams;
|
|
264
|
+
findManyReference: FindManyReferenceParams;
|
|
265
|
+
insertOne: InsertOneParams;
|
|
266
|
+
updateOne: UpdateOneParams;
|
|
267
|
+
updateMany: UpdateManyParams;
|
|
268
|
+
deleteOne: DeleteOneParams;
|
|
269
|
+
deleteMany: DeleteManyParams;
|
|
270
|
+
insertMany: InsertManyParams;
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
273
|
+
* 操作ごとのレスポンスデータ型マッピング
|
|
274
|
+
*/
|
|
275
|
+
export type ApiDataMap = {
|
|
276
|
+
find: FindResult;
|
|
277
|
+
findOne: FindOneResult;
|
|
278
|
+
findMany: FindManyResult;
|
|
279
|
+
findManyReference: FindManyReferenceResult;
|
|
280
|
+
insertOne: InsertOneResult;
|
|
281
|
+
updateOne: UpdateOneResult;
|
|
282
|
+
updateMany: UpdateManyResult;
|
|
283
|
+
deleteOne: DeleteOneResult;
|
|
284
|
+
deleteMany: DeleteManyResult;
|
|
285
|
+
insertMany: InsertManyResult;
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* 型安全な API リクエスト
|
|
289
|
+
*/
|
|
290
|
+
export type TypedApiRequest<T extends ApiOperation> = ApiRequest<ApiParamsMap[T]>;
|
|
291
|
+
/**
|
|
292
|
+
* 型安全な API レスポンス
|
|
293
|
+
*/
|
|
294
|
+
export type TypedApiResponse<T extends ApiOperation> = ApiResponse<ApiDataMap[T]>;
|
|
295
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|