@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.
Files changed (230) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.md +283 -0
  4. package/dist/client/Collection.d.ts +57 -0
  5. package/dist/client/Collection.d.ts.map +1 -0
  6. package/dist/client/Collection.js +174 -0
  7. package/dist/client/Collection.js.map +1 -0
  8. package/dist/client/Database.d.ts +35 -0
  9. package/dist/client/Database.d.ts.map +1 -0
  10. package/dist/client/Database.js +48 -0
  11. package/dist/client/Database.js.map +1 -0
  12. package/dist/client/DynamoClient.d.ts +43 -0
  13. package/dist/client/DynamoClient.d.ts.map +1 -0
  14. package/dist/client/DynamoClient.js +62 -0
  15. package/dist/client/DynamoClient.js.map +1 -0
  16. package/dist/client/FindCursor.d.ts +174 -0
  17. package/dist/client/FindCursor.d.ts.map +1 -0
  18. package/dist/client/FindCursor.js +256 -0
  19. package/dist/client/FindCursor.js.map +1 -0
  20. package/dist/client/aws-sigv4.d.ts +10 -0
  21. package/dist/client/aws-sigv4.d.ts.map +1 -0
  22. package/dist/client/aws-sigv4.js +54 -0
  23. package/dist/client/aws-sigv4.js.map +1 -0
  24. package/dist/client/index.cognito.d.ts +34 -0
  25. package/dist/client/index.cognito.d.ts.map +1 -0
  26. package/dist/client/index.cognito.js +30 -0
  27. package/dist/client/index.cognito.js.map +1 -0
  28. package/dist/client/index.d.ts +12 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/dist/client/index.iam.d.ts +34 -0
  31. package/dist/client/index.iam.d.ts.map +1 -0
  32. package/dist/client/index.iam.js +28 -0
  33. package/dist/client/index.iam.js.map +1 -0
  34. package/dist/client/index.js +12 -0
  35. package/dist/client/index.js.map +1 -0
  36. package/dist/client/index.token.d.ts +33 -0
  37. package/dist/client/index.token.d.ts.map +1 -0
  38. package/dist/client/index.token.js +28 -0
  39. package/dist/client/index.token.js.map +1 -0
  40. package/dist/dynamodb.d.ts +20 -0
  41. package/dist/dynamodb.d.ts.map +1 -0
  42. package/dist/dynamodb.js +31 -0
  43. package/dist/dynamodb.js.map +1 -0
  44. package/dist/errors.d.ts +100 -0
  45. package/dist/errors.d.ts.map +1 -0
  46. package/dist/errors.js +146 -0
  47. package/dist/errors.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +7 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/integrations/react-admin/dataProvider.d.ts +59 -0
  53. package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -0
  54. package/dist/integrations/react-admin/dataProvider.js +364 -0
  55. package/dist/integrations/react-admin/dataProvider.js.map +1 -0
  56. package/dist/integrations/react-admin/index.d.ts +24 -0
  57. package/dist/integrations/react-admin/index.d.ts.map +1 -0
  58. package/dist/integrations/react-admin/index.js +23 -0
  59. package/dist/integrations/react-admin/index.js.map +1 -0
  60. package/dist/integrations/react-admin/types.d.ts +47 -0
  61. package/dist/integrations/react-admin/types.d.ts.map +1 -0
  62. package/dist/integrations/react-admin/types.js +5 -0
  63. package/dist/integrations/react-admin/types.js.map +1 -0
  64. package/dist/logger.d.ts +61 -0
  65. package/dist/logger.d.ts.map +1 -0
  66. package/dist/logger.js +87 -0
  67. package/dist/logger.js.map +1 -0
  68. package/dist/scripts/repair-shadows.d.ts +3 -0
  69. package/dist/scripts/repair-shadows.d.ts.map +1 -0
  70. package/dist/scripts/repair-shadows.js +190 -0
  71. package/dist/scripts/repair-shadows.js.map +1 -0
  72. package/dist/server/handler.cjs +31378 -0
  73. package/dist/server/handler.cjs.map +7 -0
  74. package/dist/server/handler.d.ts +18 -0
  75. package/dist/server/handler.d.ts.map +1 -0
  76. package/dist/server/handler.js +435 -0
  77. package/dist/server/handler.js.map +1 -0
  78. package/dist/server/handler.zip +0 -0
  79. package/dist/server/index.d.ts +8 -0
  80. package/dist/server/index.d.ts.map +1 -0
  81. package/dist/server/index.js +8 -0
  82. package/dist/server/index.js.map +1 -0
  83. package/dist/server/operations/deleteMany.d.ts +18 -0
  84. package/dist/server/operations/deleteMany.d.ts.map +1 -0
  85. package/dist/server/operations/deleteMany.js +222 -0
  86. package/dist/server/operations/deleteMany.js.map +1 -0
  87. package/dist/server/operations/deleteOne.d.ts +17 -0
  88. package/dist/server/operations/deleteOne.d.ts.map +1 -0
  89. package/dist/server/operations/deleteOne.js +87 -0
  90. package/dist/server/operations/deleteOne.js.map +1 -0
  91. package/dist/server/operations/find.d.ts +18 -0
  92. package/dist/server/operations/find.d.ts.map +1 -0
  93. package/dist/server/operations/find.js +382 -0
  94. package/dist/server/operations/find.js.map +1 -0
  95. package/dist/server/operations/findMany.d.ts +13 -0
  96. package/dist/server/operations/findMany.d.ts.map +1 -0
  97. package/dist/server/operations/findMany.js +61 -0
  98. package/dist/server/operations/findMany.js.map +1 -0
  99. package/dist/server/operations/findManyReference.d.ts +18 -0
  100. package/dist/server/operations/findManyReference.d.ts.map +1 -0
  101. package/dist/server/operations/findManyReference.js +150 -0
  102. package/dist/server/operations/findManyReference.js.map +1 -0
  103. package/dist/server/operations/findOne.d.ts +14 -0
  104. package/dist/server/operations/findOne.d.ts.map +1 -0
  105. package/dist/server/operations/findOne.js +56 -0
  106. package/dist/server/operations/findOne.js.map +1 -0
  107. package/dist/server/operations/insertMany.d.ts +19 -0
  108. package/dist/server/operations/insertMany.d.ts.map +1 -0
  109. package/dist/server/operations/insertMany.js +243 -0
  110. package/dist/server/operations/insertMany.js.map +1 -0
  111. package/dist/server/operations/insertOne.d.ts +18 -0
  112. package/dist/server/operations/insertOne.d.ts.map +1 -0
  113. package/dist/server/operations/insertOne.js +85 -0
  114. package/dist/server/operations/insertOne.js.map +1 -0
  115. package/dist/server/operations/updateMany.d.ts +20 -0
  116. package/dist/server/operations/updateMany.d.ts.map +1 -0
  117. package/dist/server/operations/updateMany.js +316 -0
  118. package/dist/server/operations/updateMany.js.map +1 -0
  119. package/dist/server/operations/updateOne.d.ts +20 -0
  120. package/dist/server/operations/updateOne.d.ts.map +1 -0
  121. package/dist/server/operations/updateOne.js +159 -0
  122. package/dist/server/operations/updateOne.js.map +1 -0
  123. package/dist/server/query/converter.d.ts +85 -0
  124. package/dist/server/query/converter.d.ts.map +1 -0
  125. package/dist/server/query/converter.js +161 -0
  126. package/dist/server/query/converter.js.map +1 -0
  127. package/dist/server/query/index.d.ts +5 -0
  128. package/dist/server/query/index.d.ts.map +1 -0
  129. package/dist/server/query/index.js +5 -0
  130. package/dist/server/query/index.js.map +1 -0
  131. package/dist/server/shadow/config.d.ts +147 -0
  132. package/dist/server/shadow/config.d.ts.map +1 -0
  133. package/dist/server/shadow/config.js +162 -0
  134. package/dist/server/shadow/config.js.map +1 -0
  135. package/dist/server/shadow/differ.d.ts +42 -0
  136. package/dist/server/shadow/differ.d.ts.map +1 -0
  137. package/dist/server/shadow/differ.js +66 -0
  138. package/dist/server/shadow/differ.js.map +1 -0
  139. package/dist/server/shadow/generator.d.ts +104 -0
  140. package/dist/server/shadow/generator.d.ts.map +1 -0
  141. package/dist/server/shadow/generator.js +148 -0
  142. package/dist/server/shadow/generator.js.map +1 -0
  143. package/dist/server/shadow/index.d.ts +11 -0
  144. package/dist/server/shadow/index.d.ts.map +1 -0
  145. package/dist/server/shadow/index.js +11 -0
  146. package/dist/server/shadow/index.js.map +1 -0
  147. package/dist/server/shadow/types.d.ts +44 -0
  148. package/dist/server/shadow/types.d.ts.map +1 -0
  149. package/dist/server/shadow/types.js +2 -0
  150. package/dist/server/shadow/types.js.map +1 -0
  151. package/dist/server/types.d.ts +295 -0
  152. package/dist/server/types.d.ts.map +1 -0
  153. package/dist/server/types.js +7 -0
  154. package/dist/server/types.js.map +1 -0
  155. package/dist/server/utils/auth.d.ts +43 -0
  156. package/dist/server/utils/auth.d.ts.map +1 -0
  157. package/dist/server/utils/auth.js +123 -0
  158. package/dist/server/utils/auth.js.map +1 -0
  159. package/dist/server/utils/bulkOperations.d.ts +81 -0
  160. package/dist/server/utils/bulkOperations.d.ts.map +1 -0
  161. package/dist/server/utils/bulkOperations.js +147 -0
  162. package/dist/server/utils/bulkOperations.js.map +1 -0
  163. package/dist/server/utils/chunking.d.ts +96 -0
  164. package/dist/server/utils/chunking.d.ts.map +1 -0
  165. package/dist/server/utils/chunking.js +225 -0
  166. package/dist/server/utils/chunking.js.map +1 -0
  167. package/dist/server/utils/dynamodb.d.ts +41 -0
  168. package/dist/server/utils/dynamodb.d.ts.map +1 -0
  169. package/dist/server/utils/dynamodb.js +83 -0
  170. package/dist/server/utils/dynamodb.js.map +1 -0
  171. package/dist/server/utils/filter.d.ts +152 -0
  172. package/dist/server/utils/filter.d.ts.map +1 -0
  173. package/dist/server/utils/filter.js +270 -0
  174. package/dist/server/utils/filter.js.map +1 -0
  175. package/dist/server/utils/pagination.d.ts +27 -0
  176. package/dist/server/utils/pagination.d.ts.map +1 -0
  177. package/dist/server/utils/pagination.js +56 -0
  178. package/dist/server/utils/pagination.js.map +1 -0
  179. package/dist/server/utils/timestamps.d.ts +31 -0
  180. package/dist/server/utils/timestamps.d.ts.map +1 -0
  181. package/dist/server/utils/timestamps.js +84 -0
  182. package/dist/server/utils/timestamps.js.map +1 -0
  183. package/dist/server/utils/ttl.d.ts +17 -0
  184. package/dist/server/utils/ttl.d.ts.map +1 -0
  185. package/dist/server/utils/ttl.js +62 -0
  186. package/dist/server/utils/ttl.js.map +1 -0
  187. package/dist/server/utils/validation.d.ts +40 -0
  188. package/dist/server/utils/validation.d.ts.map +1 -0
  189. package/dist/server/utils/validation.js +54 -0
  190. package/dist/server/utils/validation.js.map +1 -0
  191. package/dist/shadows/config.d.ts +54 -0
  192. package/dist/shadows/config.d.ts.map +1 -0
  193. package/dist/shadows/config.js +95 -0
  194. package/dist/shadows/config.js.map +1 -0
  195. package/dist/shadows/differ.d.ts +42 -0
  196. package/dist/shadows/differ.d.ts.map +1 -0
  197. package/dist/shadows/differ.js +66 -0
  198. package/dist/shadows/differ.js.map +1 -0
  199. package/dist/shadows/generator.d.ts +63 -0
  200. package/dist/shadows/generator.d.ts.map +1 -0
  201. package/dist/shadows/generator.js +107 -0
  202. package/dist/shadows/generator.js.map +1 -0
  203. package/dist/shadows/index.d.ts +15 -0
  204. package/dist/shadows/index.d.ts.map +1 -0
  205. package/dist/shadows/index.js +17 -0
  206. package/dist/shadows/index.js.map +1 -0
  207. package/dist/shadows/types.d.ts +44 -0
  208. package/dist/shadows/types.d.ts.map +1 -0
  209. package/dist/shadows/types.js +2 -0
  210. package/dist/shadows/types.js.map +1 -0
  211. package/dist/types.d.ts +165 -0
  212. package/dist/types.d.ts.map +1 -0
  213. package/dist/types.js +2 -0
  214. package/dist/types.js.map +1 -0
  215. package/dist/ulid.d.ts +46 -0
  216. package/dist/ulid.d.ts.map +1 -0
  217. package/dist/ulid.js +66 -0
  218. package/dist/ulid.js.map +1 -0
  219. package/package.json +136 -0
  220. package/terraform/README.md +222 -0
  221. package/terraform/examples/advanced/README.md +129 -0
  222. package/terraform/examples/advanced/main.tf +158 -0
  223. package/terraform/examples/advanced/shadow.config.json +35 -0
  224. package/terraform/examples/advanced/variables.tf +28 -0
  225. package/terraform/examples/basic/README.md +53 -0
  226. package/terraform/examples/basic/main.tf +99 -0
  227. package/terraform/examples/basic/variables.tf +17 -0
  228. package/terraform/main.tf +159 -0
  229. package/terraform/outputs.tf +56 -0
  230. package/terraform/variables.tf +59 -0
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
@@ -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