@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
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* フィルタ演算子($プレフィックスなし)
|
|
3
|
+
*
|
|
4
|
+
* MongoDB風のクエリ演算子を提供します。
|
|
5
|
+
* すべての演算子は$プレフィックスなしで使用します。
|
|
6
|
+
*/
|
|
7
|
+
export interface FilterOperators<T> {
|
|
8
|
+
/** 等しい */
|
|
9
|
+
eq?: T;
|
|
10
|
+
/** 等しくない */
|
|
11
|
+
ne?: T;
|
|
12
|
+
/** より大きい */
|
|
13
|
+
gt?: T;
|
|
14
|
+
/** 以上 */
|
|
15
|
+
gte?: T;
|
|
16
|
+
/** より小さい */
|
|
17
|
+
lt?: T;
|
|
18
|
+
/** 以下 */
|
|
19
|
+
lte?: T;
|
|
20
|
+
/** いずれかに一致 */
|
|
21
|
+
in?: T[];
|
|
22
|
+
/** いずれにも一致しない */
|
|
23
|
+
nin?: T[];
|
|
24
|
+
/** フィールドの存在チェック */
|
|
25
|
+
exists?: boolean;
|
|
26
|
+
/** 正規表現マッチ */
|
|
27
|
+
regex?: string | RegExp;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* フィルタ定義
|
|
31
|
+
*
|
|
32
|
+
* 型安全なフィルタ条件を定義します。
|
|
33
|
+
* 各フィールドに対して直接値を指定するか、FilterOperatorsを使用できます。
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // 直接値を指定
|
|
38
|
+
* const filter: Filter<Product> = { status: 'active' };
|
|
39
|
+
*
|
|
40
|
+
* // 演算子を使用
|
|
41
|
+
* const filter: Filter<Product> = {
|
|
42
|
+
* price: { gte: 1000, lte: 5000 },
|
|
43
|
+
* status: { in: ['active', 'pending'] }
|
|
44
|
+
* };
|
|
45
|
+
*
|
|
46
|
+
* // 論理演算子を使用
|
|
47
|
+
* const filter: Filter<Product> = {
|
|
48
|
+
* or: [
|
|
49
|
+
* { status: 'active' },
|
|
50
|
+
* { priority: { gte: 5 } }
|
|
51
|
+
* ]
|
|
52
|
+
* };
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export type Filter<T> = {
|
|
56
|
+
[P in keyof T]?: T[P] | FilterOperators<T[P]>;
|
|
57
|
+
} & {
|
|
58
|
+
/** AND条件(すべての条件を満たす) */
|
|
59
|
+
and?: Filter<T>[];
|
|
60
|
+
/** OR条件(いずれかの条件を満たす) */
|
|
61
|
+
or?: Filter<T>[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* 更新演算子($プレフィックスなし)
|
|
65
|
+
*
|
|
66
|
+
* MongoDB風の更新演算子を提供します。
|
|
67
|
+
* すべての演算子は$プレフィックスなしで使用します。
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // フィールドを設定
|
|
72
|
+
* const update: UpdateOperators<Product> = {
|
|
73
|
+
* set: { status: 'published', updatedAt: new Date().toISOString() }
|
|
74
|
+
* };
|
|
75
|
+
*
|
|
76
|
+
* // フィールドを削除
|
|
77
|
+
* const update: UpdateOperators<Product> = {
|
|
78
|
+
* unset: ['description', 'tags']
|
|
79
|
+
* };
|
|
80
|
+
*
|
|
81
|
+
* // 数値をインクリメント
|
|
82
|
+
* const update: UpdateOperators<Product> = {
|
|
83
|
+
* inc: { stock: -1, viewCount: 1 }
|
|
84
|
+
* };
|
|
85
|
+
*
|
|
86
|
+
* // 複数の演算子を組み合わせ
|
|
87
|
+
* const update: UpdateOperators<Product> = {
|
|
88
|
+
* set: { status: 'published' },
|
|
89
|
+
* inc: { viewCount: 1 },
|
|
90
|
+
* unset: ['draft']
|
|
91
|
+
* };
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export interface UpdateOperators<T> {
|
|
95
|
+
/** フィールドを設定 */
|
|
96
|
+
set?: Partial<T>;
|
|
97
|
+
/** フィールドを削除 */
|
|
98
|
+
unset?: (keyof T)[];
|
|
99
|
+
/** 数値をインクリメント(負の値でデクリメント) */
|
|
100
|
+
inc?: Partial<Record<keyof T, number>>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 検索オプション
|
|
104
|
+
*/
|
|
105
|
+
export interface FindOptions {
|
|
106
|
+
/** ソート条件 */
|
|
107
|
+
sort?: Record<string, 1 | -1 | 'asc' | 'desc'>;
|
|
108
|
+
/** 取得件数の制限 */
|
|
109
|
+
limit?: number;
|
|
110
|
+
/** スキップする件数 */
|
|
111
|
+
skip?: number;
|
|
112
|
+
/** ページネーショントークン(カーソルベースのページネーション用) */
|
|
113
|
+
nextToken?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 挿入結果
|
|
117
|
+
*/
|
|
118
|
+
export interface InsertOneResult {
|
|
119
|
+
/** 操作が確認されたか */
|
|
120
|
+
acknowledged: boolean;
|
|
121
|
+
/** 挿入されたドキュメントのID */
|
|
122
|
+
insertedId: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 複数挿入結果
|
|
126
|
+
*/
|
|
127
|
+
export interface InsertManyResult {
|
|
128
|
+
/** 操作が確認されたか */
|
|
129
|
+
acknowledged: boolean;
|
|
130
|
+
/** 挿入されたドキュメントの数 */
|
|
131
|
+
insertedCount: number;
|
|
132
|
+
/** 挿入されたドキュメントのIDマップ */
|
|
133
|
+
insertedIds: Record<number, string>;
|
|
134
|
+
/** 失敗したドキュメントのIDリスト */
|
|
135
|
+
failedIds?: string[];
|
|
136
|
+
/** エラー情報 */
|
|
137
|
+
errors?: Array<{
|
|
138
|
+
id: string;
|
|
139
|
+
code: string;
|
|
140
|
+
message: string;
|
|
141
|
+
}>;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 更新結果
|
|
145
|
+
*/
|
|
146
|
+
export interface UpdateResult {
|
|
147
|
+
/** 操作が確認されたか */
|
|
148
|
+
acknowledged: boolean;
|
|
149
|
+
/** マッチしたドキュメントの数 */
|
|
150
|
+
matchedCount: number;
|
|
151
|
+
/** 変更されたドキュメントの数 */
|
|
152
|
+
modifiedCount: number;
|
|
153
|
+
/** アップサートされたドキュメントのID(存在する場合) */
|
|
154
|
+
upsertedId?: string;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 削除結果
|
|
158
|
+
*/
|
|
159
|
+
export interface DeleteResult {
|
|
160
|
+
/** 操作が確認されたか */
|
|
161
|
+
acknowledged: boolean;
|
|
162
|
+
/** 削除されたドキュメントの数 */
|
|
163
|
+
deletedCount: number;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/ulid.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ULID(Universally Unique Lexicographically Sortable Identifier)を生成する
|
|
3
|
+
*
|
|
4
|
+
* ULIDは以下の特徴を持つ:
|
|
5
|
+
* - 26文字の大文字英数字(Crockford's Base32)
|
|
6
|
+
* - タイムスタンプベースで辞書順ソート可能
|
|
7
|
+
* - UUIDと互換性のある128ビット
|
|
8
|
+
* - 単調増加(同一ミリ秒内でもランダム部分が増加)
|
|
9
|
+
*
|
|
10
|
+
* @returns 新しいULID文字列(例: "01HZXY123456789ABCDEFGHIJK")
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const id = ulid();
|
|
15
|
+
* console.log(id); // "01HZXY123456789ABCDEFGHIJK"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function ulid(): string;
|
|
19
|
+
/**
|
|
20
|
+
* 指定されたタイムスタンプでULIDを生成する
|
|
21
|
+
*
|
|
22
|
+
* @param seedTime - Unix タイムスタンプ(ミリ秒)
|
|
23
|
+
* @returns 指定されたタイムスタンプを持つULID文字列
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const timestamp = Date.now();
|
|
28
|
+
* const id = ulidWithTime(timestamp);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function ulidWithTime(seedTime: number): string;
|
|
32
|
+
/**
|
|
33
|
+
* ULIDからタイムスタンプを抽出する
|
|
34
|
+
*
|
|
35
|
+
* @param id - ULID文字列
|
|
36
|
+
* @returns Unix タイムスタンプ(ミリ秒)
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const id = ulid();
|
|
41
|
+
* const timestamp = decodeTime(id);
|
|
42
|
+
* console.log(new Date(timestamp));
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function decodeTime(id: string): number;
|
|
46
|
+
//# sourceMappingURL=ulid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAkB7C"}
|
package/dist/ulid.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ulid as generateUlid } from 'ulid';
|
|
2
|
+
/**
|
|
3
|
+
* ULID(Universally Unique Lexicographically Sortable Identifier)を生成する
|
|
4
|
+
*
|
|
5
|
+
* ULIDは以下の特徴を持つ:
|
|
6
|
+
* - 26文字の大文字英数字(Crockford's Base32)
|
|
7
|
+
* - タイムスタンプベースで辞書順ソート可能
|
|
8
|
+
* - UUIDと互換性のある128ビット
|
|
9
|
+
* - 単調増加(同一ミリ秒内でもランダム部分が増加)
|
|
10
|
+
*
|
|
11
|
+
* @returns 新しいULID文字列(例: "01HZXY123456789ABCDEFGHIJK")
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const id = ulid();
|
|
16
|
+
* console.log(id); // "01HZXY123456789ABCDEFGHIJK"
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function ulid() {
|
|
20
|
+
return generateUlid();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 指定されたタイムスタンプでULIDを生成する
|
|
24
|
+
*
|
|
25
|
+
* @param seedTime - Unix タイムスタンプ(ミリ秒)
|
|
26
|
+
* @returns 指定されたタイムスタンプを持つULID文字列
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const timestamp = Date.now();
|
|
31
|
+
* const id = ulidWithTime(timestamp);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function ulidWithTime(seedTime) {
|
|
35
|
+
return generateUlid(seedTime);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* ULIDからタイムスタンプを抽出する
|
|
39
|
+
*
|
|
40
|
+
* @param id - ULID文字列
|
|
41
|
+
* @returns Unix タイムスタンプ(ミリ秒)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const id = ulid();
|
|
46
|
+
* const timestamp = decodeTime(id);
|
|
47
|
+
* console.log(new Date(timestamp));
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function decodeTime(id) {
|
|
51
|
+
// ULIDの最初の10文字がタイムスタンプ部分(48ビット)
|
|
52
|
+
const timeChars = id.substring(0, 10);
|
|
53
|
+
// Crockford's Base32デコード
|
|
54
|
+
const ENCODING = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
|
|
55
|
+
let time = 0;
|
|
56
|
+
for (let i = 0; i < timeChars.length; i++) {
|
|
57
|
+
const char = timeChars[i];
|
|
58
|
+
const value = ENCODING.indexOf(char);
|
|
59
|
+
if (value === -1) {
|
|
60
|
+
throw new Error(`Invalid ULID character: ${char}`);
|
|
61
|
+
}
|
|
62
|
+
time = time * 32 + value;
|
|
63
|
+
}
|
|
64
|
+
return time;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ulid.js.map
|
package/dist/ulid.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ulid.js","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,MAAM,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,YAAY,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,gCAAgC;IAChC,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtC,yBAAyB;IACzB,MAAM,QAAQ,GAAG,kCAAkC,CAAC;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@exabugs/dynamodb-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DynamoDB Single-Table Client SDK with MongoDB-like API, Shadow Records, and Lambda implementation for serverless applications",
|
|
5
|
+
"author": "exabugs",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"dynamodb",
|
|
12
|
+
"single-table",
|
|
13
|
+
"mongodb",
|
|
14
|
+
"lambda",
|
|
15
|
+
"aws",
|
|
16
|
+
"client",
|
|
17
|
+
"sdk",
|
|
18
|
+
"react-admin",
|
|
19
|
+
"shadow-records",
|
|
20
|
+
"serverless",
|
|
21
|
+
"typescript"
|
|
22
|
+
],
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/exabugs/dynamodb-client.git"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/exabugs/dynamodb-client/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/exabugs/dynamodb-client#readme",
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"terraform",
|
|
37
|
+
"README.md",
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"CHANGELOG.md"
|
|
40
|
+
],
|
|
41
|
+
"exports": {
|
|
42
|
+
".": {
|
|
43
|
+
"import": "./dist/index.js",
|
|
44
|
+
"types": "./dist/index.d.ts"
|
|
45
|
+
},
|
|
46
|
+
"./client": {
|
|
47
|
+
"import": "./dist/client/index.js",
|
|
48
|
+
"types": "./dist/client/index.d.ts"
|
|
49
|
+
},
|
|
50
|
+
"./client/iam": {
|
|
51
|
+
"import": "./dist/client/index.iam.js",
|
|
52
|
+
"types": "./dist/client/index.iam.d.ts"
|
|
53
|
+
},
|
|
54
|
+
"./client/cognito": {
|
|
55
|
+
"import": "./dist/client/index.cognito.js",
|
|
56
|
+
"types": "./dist/client/index.cognito.d.ts"
|
|
57
|
+
},
|
|
58
|
+
"./client/token": {
|
|
59
|
+
"import": "./dist/client/index.token.js",
|
|
60
|
+
"types": "./dist/client/index.token.d.ts"
|
|
61
|
+
},
|
|
62
|
+
"./server": {
|
|
63
|
+
"import": "./dist/index.js",
|
|
64
|
+
"types": "./dist/index.d.ts"
|
|
65
|
+
},
|
|
66
|
+
"./server/handler": {
|
|
67
|
+
"import": "./dist/server/handler.cjs",
|
|
68
|
+
"types": "./dist/server/handler.d.ts"
|
|
69
|
+
},
|
|
70
|
+
"./types": {
|
|
71
|
+
"import": "./dist/server/types.js",
|
|
72
|
+
"types": "./dist/server/types.d.ts"
|
|
73
|
+
},
|
|
74
|
+
"./shadows": {
|
|
75
|
+
"import": "./dist/shadows/index.js",
|
|
76
|
+
"types": "./dist/shadows/index.d.ts"
|
|
77
|
+
},
|
|
78
|
+
"./integrations/react-admin": {
|
|
79
|
+
"import": "./dist/integrations/react-admin/index.js",
|
|
80
|
+
"types": "./dist/integrations/react-admin/index.d.ts"
|
|
81
|
+
},
|
|
82
|
+
"./terraform": "./terraform/main.tf"
|
|
83
|
+
},
|
|
84
|
+
"peerDependencies": {
|
|
85
|
+
"react-admin": "^5.0.0"
|
|
86
|
+
},
|
|
87
|
+
"peerDependenciesMeta": {
|
|
88
|
+
"react-admin": {
|
|
89
|
+
"optional": true
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"scripts": {
|
|
93
|
+
"build": "tsc && node esbuild.config.js",
|
|
94
|
+
"build:client": "tsc",
|
|
95
|
+
"build:lambda": "node esbuild.config.js",
|
|
96
|
+
"clean": "rm -rf dist",
|
|
97
|
+
"lint": "eslint src --ext ts --max-warnings 10",
|
|
98
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
99
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
100
|
+
"test": "vitest run",
|
|
101
|
+
"test:coverage": "vitest run --coverage",
|
|
102
|
+
"test:watch": "vitest",
|
|
103
|
+
"test:unit": "vitest run --exclude='**/*integration*.test.ts'",
|
|
104
|
+
"prepublishOnly": "npm run build && npm run test:unit"
|
|
105
|
+
},
|
|
106
|
+
"dependencies": {
|
|
107
|
+
"@aws-crypto/sha256-js": "5.2.0",
|
|
108
|
+
"@aws-sdk/client-dynamodb": "3.929.0",
|
|
109
|
+
"@aws-sdk/credential-provider-node": "3.929.0",
|
|
110
|
+
"@aws-sdk/lib-dynamodb": "3.929.0",
|
|
111
|
+
"@smithy/protocol-http": "5.3.5",
|
|
112
|
+
"@smithy/signature-v4": "5.3.5",
|
|
113
|
+
"@smithy/util-utf8": "4.2.0",
|
|
114
|
+
"aws-jwt-verify": "5.1.1",
|
|
115
|
+
"ulid": "3.0.1"
|
|
116
|
+
},
|
|
117
|
+
"devDependencies": {
|
|
118
|
+
"@eslint/js": "^9.0.0",
|
|
119
|
+
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
|
120
|
+
"@types/aws-lambda": "^8.10.0",
|
|
121
|
+
"@types/node": "^22.0.0",
|
|
122
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
123
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
124
|
+
"@vitest/coverage-v8": "^2.0.0",
|
|
125
|
+
"esbuild": "^0.20.0",
|
|
126
|
+
"eslint": "^9.0.0",
|
|
127
|
+
"globals": "^15.0.0",
|
|
128
|
+
"prettier": "^3.0.0",
|
|
129
|
+
"react-admin": "^5.0.0",
|
|
130
|
+
"typescript": "^5.3.0",
|
|
131
|
+
"vitest": "^2.0.0"
|
|
132
|
+
},
|
|
133
|
+
"engines": {
|
|
134
|
+
"node": ">=18.0.0"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Records Lambda Terraformモジュール
|
|
2
|
+
|
|
3
|
+
DynamoDB Single-Table設計向けのRecords Lambda関数をデプロイするTerraformモジュールです。
|
|
4
|
+
|
|
5
|
+
## 概要
|
|
6
|
+
|
|
7
|
+
このモジュールは、以下のリソースをデプロイします:
|
|
8
|
+
|
|
9
|
+
- AWS Lambda関数(Records Lambda)
|
|
10
|
+
- Lambda Function URL(認証付き)
|
|
11
|
+
- IAMロールとポリシー
|
|
12
|
+
- CloudWatch Logsロググループ
|
|
13
|
+
|
|
14
|
+
## 使用方法
|
|
15
|
+
|
|
16
|
+
### 基本的な使用例
|
|
17
|
+
|
|
18
|
+
```hcl
|
|
19
|
+
module "lambda_records" {
|
|
20
|
+
source = "github.com/exabugs/dynamodb-client//terraform"
|
|
21
|
+
|
|
22
|
+
project_name = "my-project"
|
|
23
|
+
environment = "dev"
|
|
24
|
+
region = "us-east-1"
|
|
25
|
+
|
|
26
|
+
# DynamoDB設定
|
|
27
|
+
dynamodb_table_name = module.dynamodb.table_name
|
|
28
|
+
dynamodb_table_arn = module.dynamodb.table_arn
|
|
29
|
+
|
|
30
|
+
# Cognito設定
|
|
31
|
+
cognito_user_pool_id = module.cognito.user_pool_id
|
|
32
|
+
|
|
33
|
+
# シャドウ設定(base64エンコード)
|
|
34
|
+
shadow_config = base64encode(file("${path.root}/../config/shadow.config.json"))
|
|
35
|
+
|
|
36
|
+
# ログ設定
|
|
37
|
+
log_retention_days = 7
|
|
38
|
+
log_level = "info"
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### ローカル開発時
|
|
43
|
+
|
|
44
|
+
```hcl
|
|
45
|
+
module "lambda_records" {
|
|
46
|
+
source = "./terraform" # 相対パス
|
|
47
|
+
|
|
48
|
+
project_name = "my-project"
|
|
49
|
+
environment = "dev"
|
|
50
|
+
region = "us-east-1"
|
|
51
|
+
|
|
52
|
+
# DynamoDB設定
|
|
53
|
+
dynamodb_table_name = module.dynamodb.table_name
|
|
54
|
+
dynamodb_table_arn = module.dynamodb.table_arn
|
|
55
|
+
|
|
56
|
+
# Cognito設定
|
|
57
|
+
cognito_user_pool_id = module.cognito.user_pool_id
|
|
58
|
+
|
|
59
|
+
# シャドウ設定(base64エンコード)
|
|
60
|
+
shadow_config = base64encode(file("${path.root}/../config/shadow.config.json"))
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 入力変数
|
|
65
|
+
|
|
66
|
+
### 必須変数
|
|
67
|
+
|
|
68
|
+
| 変数名 | 型 | 説明 |
|
|
69
|
+
| ---------------------- | ------ | -------------------------------- |
|
|
70
|
+
| `project_name` | string | プロジェクト名 |
|
|
71
|
+
| `environment` | string | 環境(dev/stg/prd) |
|
|
72
|
+
| `region` | string | AWSリージョン |
|
|
73
|
+
| `dynamodb_table_name` | string | DynamoDBテーブル名 |
|
|
74
|
+
| `dynamodb_table_arn` | string | DynamoDBテーブルARN |
|
|
75
|
+
| `cognito_user_pool_id` | string | Cognito User Pool ID(認証用) |
|
|
76
|
+
| `shadow_config` | string | シャドウ設定(base64エンコード) |
|
|
77
|
+
|
|
78
|
+
### オプション変数
|
|
79
|
+
|
|
80
|
+
| 変数名 | 型 | デフォルト値 | 説明 |
|
|
81
|
+
| -------------------- | ------ | ------------ | ----------------------------------- |
|
|
82
|
+
| `log_retention_days` | number | 7 | CloudWatch Logsの保持期間(日) |
|
|
83
|
+
| `log_level` | string | "info" | ログレベル(debug/info/warn/error) |
|
|
84
|
+
| `lambda_timeout` | number | 900 | Lambda関数のタイムアウト(秒) |
|
|
85
|
+
| `lambda_memory` | number | 512 | Lambda関数のメモリサイズ(MB) |
|
|
86
|
+
|
|
87
|
+
## 出力
|
|
88
|
+
|
|
89
|
+
| 出力名 | 説明 |
|
|
90
|
+
| ---------------- | -------------------------------- |
|
|
91
|
+
| `function_name` | Lambda関数名 |
|
|
92
|
+
| `function_arn` | Lambda関数ARN |
|
|
93
|
+
| `function_url` | Lambda Function URL |
|
|
94
|
+
| `log_group_name` | CloudWatch Logsロググループ名 |
|
|
95
|
+
| `role_arn` | Lambda実行ロールARN |
|
|
96
|
+
| `shadow_config` | シャドウ設定(base64エンコード) |
|
|
97
|
+
|
|
98
|
+
## 要件
|
|
99
|
+
|
|
100
|
+
- **Terraform**: >= 1.5.0
|
|
101
|
+
- **AWS Provider**: >= 5.0.0
|
|
102
|
+
- **DynamoDBテーブル**: Single-Table設計のテーブルが必要
|
|
103
|
+
- **Cognito User Pool**: 認証用のUser Poolが必要
|
|
104
|
+
|
|
105
|
+
## シャドウ設定
|
|
106
|
+
|
|
107
|
+
シャドウ設定は、DynamoDBのソート可能フィールドを定義するJSON設定ファイルです。
|
|
108
|
+
|
|
109
|
+
### 設定例
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"$schemaVersion": "1.0",
|
|
114
|
+
"resources": {
|
|
115
|
+
"articles": {
|
|
116
|
+
"sortDefaults": {
|
|
117
|
+
"field": "updatedAt",
|
|
118
|
+
"order": "DESC"
|
|
119
|
+
},
|
|
120
|
+
"shadows": {
|
|
121
|
+
"name": { "type": "string" },
|
|
122
|
+
"status": { "type": "string" },
|
|
123
|
+
"createdAt": { "type": "datetime" },
|
|
124
|
+
"updatedAt": { "type": "datetime" }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Base64エンコード
|
|
132
|
+
|
|
133
|
+
Terraformでは、シャドウ設定をbase64エンコードして渡します:
|
|
134
|
+
|
|
135
|
+
```hcl
|
|
136
|
+
shadow_config = base64encode(file("${path.root}/../config/shadow.config.json"))
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## IAMポリシー
|
|
140
|
+
|
|
141
|
+
このモジュールは、最小権限の原則に従ったIAMポリシーを作成します:
|
|
142
|
+
|
|
143
|
+
### Records Lambda IAMロール
|
|
144
|
+
|
|
145
|
+
- **DynamoDB**: 特定テーブルへの読み書き
|
|
146
|
+
- GetItem, PutItem, UpdateItem, DeleteItem, Query, Scan, BatchGetItem, TransactWriteItems
|
|
147
|
+
- **CloudWatch Logs**: ログ出力(AWSマネージドポリシー)
|
|
148
|
+
- **X-Ray**: トレーシング(AWSマネージドポリシー)
|
|
149
|
+
|
|
150
|
+
## デプロイ
|
|
151
|
+
|
|
152
|
+
### 初回デプロイ
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
cd infra
|
|
156
|
+
terraform init
|
|
157
|
+
terraform plan -var-file=envs/dev.tfvars
|
|
158
|
+
terraform apply -var-file=envs/dev.tfvars
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 更新デプロイ
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
cd infra
|
|
165
|
+
terraform plan -var-file=envs/dev.tfvars
|
|
166
|
+
terraform apply -var-file=envs/dev.tfvars
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Makefileを使用(推奨)
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
cd infra
|
|
173
|
+
make plan ENV=dev
|
|
174
|
+
make apply ENV=dev
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## トラブルシューティング
|
|
178
|
+
|
|
179
|
+
### Lambda関数が更新されない
|
|
180
|
+
|
|
181
|
+
Lambda関数のソースコードを変更した場合、ビルドしてからデプロイしてください:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# ビルド
|
|
185
|
+
make build
|
|
186
|
+
|
|
187
|
+
# デプロイ
|
|
188
|
+
cd infra
|
|
189
|
+
make apply ENV=dev
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### シャドウ設定が反映されない
|
|
193
|
+
|
|
194
|
+
シャドウ設定を変更した場合、Lambda関数が自動的に再デプロイされます:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
cd infra
|
|
198
|
+
make plan ENV=dev # 差分を確認
|
|
199
|
+
make apply ENV=dev # 適用
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### ログが表示されない
|
|
203
|
+
|
|
204
|
+
CloudWatch Logsを確認してください:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# ログを表示
|
|
208
|
+
make logs-records ENV=dev
|
|
209
|
+
|
|
210
|
+
# または直接AWS CLIで
|
|
211
|
+
aws logs tail /aws/lambda/my-project-dev-records --follow
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## 関連ドキュメント
|
|
215
|
+
|
|
216
|
+
- [パッケージREADME](../README.md) - クライアントライブラリの使用方法
|
|
217
|
+
- [使用ガイド](../CLIENT_USAGE.md) - 認証方式別の詳細な使用方法
|
|
218
|
+
- [アーキテクチャ](../ARCHITECTURE.md) - 内部設計とコンポーネント構成
|
|
219
|
+
|
|
220
|
+
## ライセンス
|
|
221
|
+
|
|
222
|
+
MIT
|