@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,30 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(Cognito認証用)
3
+ *
4
+ * Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
5
+ * Cognito認証(動的トークン取得)を使用します。
6
+ */
7
+ import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
8
+ export { Database } from './Database.js';
9
+ export { Collection } from './Collection.js';
10
+ export { FindCursor } from './FindCursor.js';
11
+ /**
12
+ * DynamoDBクライアント(Cognito認証用)
13
+ *
14
+ * Cognito認証を使用してLambda Function URLにアクセスします。
15
+ * トークンは動的に取得されます。
16
+ */
17
+ export class DynamoClient extends BaseDynamoClient {
18
+ constructor(endpoint, options) {
19
+ super(endpoint, options, async (_url, _body, auth) => {
20
+ if (!auth) {
21
+ throw new Error('Cognito auth options are required');
22
+ }
23
+ const token = await auth.getToken();
24
+ return {
25
+ Authorization: `Bearer ${token}`,
26
+ };
27
+ });
28
+ }
29
+ }
30
+ //# sourceMappingURL=index.cognito.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cognito.js","sourceRoot":"","sources":["../../src/client/index.cognito.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAoC;IACpE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,IAAyB,EAAE,EAAE;YACxF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO;gBACL,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(共通エクスポート)
3
+ *
4
+ * 認証方式ごとの専用クライアントを使用してください:
5
+ * - IAM認証: '@exabugs/dynamodb-client/client/iam'
6
+ * - Cognito認証: '@exabugs/dynamodb-client/client/cognito'
7
+ * - Token認証: '@exabugs/dynamodb-client/client/token'
8
+ */
9
+ export { Database } from './Database.js';
10
+ export { Collection } from './Collection.js';
11
+ export { FindCursor } from './FindCursor.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(IAM認証用)
3
+ *
4
+ * Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
5
+ * IAM認証(AWS SigV4)を使用します。Node.js環境専用です。
6
+ */
7
+ import { type ClientOptions as BaseClientOptions, DynamoClient as BaseDynamoClient } from './DynamoClient.js';
8
+ export { Database } from './Database.js';
9
+ export { Collection } from './Collection.js';
10
+ export { FindCursor } from './FindCursor.js';
11
+ /**
12
+ * IAM認証オプション
13
+ */
14
+ export interface IAMAuthOptions {
15
+ /** AWSリージョン(必須) */
16
+ region: string;
17
+ }
18
+ /**
19
+ * クライアントオプション(IAM認証用)
20
+ */
21
+ export interface ClientOptions extends Omit<BaseClientOptions<IAMAuthOptions>, 'auth'> {
22
+ /** IAM認証設定(必須) */
23
+ auth: IAMAuthOptions;
24
+ }
25
+ /**
26
+ * DynamoDBクライアント(IAM認証用)
27
+ *
28
+ * IAM認証(AWS SigV4)を使用してLambda Function URLにアクセスします。
29
+ * Node.js環境専用です。
30
+ */
31
+ export declare class DynamoClient extends BaseDynamoClient<IAMAuthOptions> {
32
+ constructor(endpoint: string, options: ClientOptions);
33
+ }
34
+ //# sourceMappingURL=index.iam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.iam.d.ts","sourceRoot":"","sources":["../../src/client/index.iam.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,KAAK,aAAa,IAAI,iBAAiB,EACvC,YAAY,IAAI,gBAAgB,EACjC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACpF,kBAAkB;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,cAAc,CAAC;gBACpD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAQrD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(IAM認証用)
3
+ *
4
+ * Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
5
+ * IAM認証(AWS SigV4)を使用します。Node.js環境専用です。
6
+ */
7
+ import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
8
+ import { signRequest } from './aws-sigv4.js';
9
+ export { Database } from './Database.js';
10
+ export { Collection } from './Collection.js';
11
+ export { FindCursor } from './FindCursor.js';
12
+ /**
13
+ * DynamoDBクライアント(IAM認証用)
14
+ *
15
+ * IAM認証(AWS SigV4)を使用してLambda Function URLにアクセスします。
16
+ * Node.js環境専用です。
17
+ */
18
+ export class DynamoClient extends BaseDynamoClient {
19
+ constructor(endpoint, options) {
20
+ super(endpoint, options, async (url, body, auth) => {
21
+ if (!auth) {
22
+ throw new Error('IAM auth options are required');
23
+ }
24
+ return await signRequest(url, body, auth.region);
25
+ });
26
+ }
27
+ }
28
+ //# sourceMappingURL=index.iam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.iam.js","sourceRoot":"","sources":["../../src/client/index.iam.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAgC;IAChE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;YAClF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(共通エクスポート)
3
+ *
4
+ * 認証方式ごとの専用クライアントを使用してください:
5
+ * - IAM認証: '@exabugs/dynamodb-client/client/iam'
6
+ * - Cognito認証: '@exabugs/dynamodb-client/client/cognito'
7
+ * - Token認証: '@exabugs/dynamodb-client/client/token'
8
+ */
9
+ export { Database } from './Database.js';
10
+ export { Collection } from './Collection.js';
11
+ export { FindCursor } from './FindCursor.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(Token認証用)
3
+ *
4
+ * Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
5
+ * 固定トークン認証を使用します。
6
+ */
7
+ import { type ClientOptions as BaseClientOptions, DynamoClient as BaseDynamoClient } from './DynamoClient.js';
8
+ export { Database } from './Database.js';
9
+ export { Collection } from './Collection.js';
10
+ export { FindCursor } from './FindCursor.js';
11
+ /**
12
+ * Token認証オプション
13
+ */
14
+ export interface TokenAuthOptions {
15
+ /** 認証トークン(必須) */
16
+ token: string;
17
+ }
18
+ /**
19
+ * クライアントオプション(Token認証用)
20
+ */
21
+ export interface ClientOptions extends Omit<BaseClientOptions<TokenAuthOptions>, 'auth'> {
22
+ /** Token認証設定(必須) */
23
+ auth: TokenAuthOptions;
24
+ }
25
+ /**
26
+ * DynamoDBクライアント(Token認証用)
27
+ *
28
+ * 固定トークン認証を使用してLambda Function URLにアクセスします。
29
+ */
30
+ export declare class DynamoClient extends BaseDynamoClient<TokenAuthOptions> {
31
+ constructor(endpoint: string, options: ClientOptions);
32
+ }
33
+ //# sourceMappingURL=index.token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.token.d.ts","sourceRoot":"","sources":["../../src/client/index.token.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,KAAK,aAAa,IAAI,iBAAiB,EACvC,YAAY,IAAI,gBAAgB,EACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACtF,oBAAoB;IACpB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,gBAAgB,CAAC;gBACtD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAUrD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DynamoDBクライアントSDK(Token認証用)
3
+ *
4
+ * Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
5
+ * 固定トークン認証を使用します。
6
+ */
7
+ import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
8
+ export { Database } from './Database.js';
9
+ export { Collection } from './Collection.js';
10
+ export { FindCursor } from './FindCursor.js';
11
+ /**
12
+ * DynamoDBクライアント(Token認証用)
13
+ *
14
+ * 固定トークン認証を使用してLambda Function URLにアクセスします。
15
+ */
16
+ export class DynamoClient extends BaseDynamoClient {
17
+ constructor(endpoint, options) {
18
+ super(endpoint, options, async (_url, _body, auth) => {
19
+ if (!auth) {
20
+ throw new Error('Token auth options are required');
21
+ }
22
+ return {
23
+ Authorization: `Bearer ${auth.token}`,
24
+ };
25
+ });
26
+ }
27
+ }
28
+ //# sourceMappingURL=index.token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.token.js","sourceRoot":"","sources":["../../src/client/index.token.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAkC;IAClE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,IAAuB,EAAE,EAAE;YACtF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO;gBACL,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;aACtC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
2
+ /**
3
+ * DynamoDBクライアントの設定オプション
4
+ */
5
+ export interface DynamoDBClientConfig {
6
+ region?: string;
7
+ endpoint?: string;
8
+ }
9
+ /**
10
+ * ConsistentRead=trueをデフォルトとするDynamoDB Document Clientを作成する
11
+ *
12
+ * このクライアントは、要件4.3に従い、すべての読み取り操作に強整合性を強制するように設定されている:
13
+ * "THE Records Lambda SHALL ConsistentRead=trueを設定することで、
14
+ * すべての読み取り操作に強整合性を強制する"
15
+ *
16
+ * @param config - リージョンとエンドポイントのオプション設定
17
+ * @returns ConsistentRead=trueで設定されたDynamoDBDocumentClient
18
+ */
19
+ export declare function createDynamoDBClient(config?: DynamoDBClientConfig): DynamoDBDocumentClient;
20
+ //# sourceMappingURL=dynamodb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.d.ts","sourceRoot":"","sources":["../src/dynamodb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,oBAAyB,GAAG,sBAAsB,CAoB9F"}
@@ -0,0 +1,31 @@
1
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
2
+ import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
3
+ /**
4
+ * ConsistentRead=trueをデフォルトとするDynamoDB Document Clientを作成する
5
+ *
6
+ * このクライアントは、要件4.3に従い、すべての読み取り操作に強整合性を強制するように設定されている:
7
+ * "THE Records Lambda SHALL ConsistentRead=trueを設定することで、
8
+ * すべての読み取り操作に強整合性を強制する"
9
+ *
10
+ * @param config - リージョンとエンドポイントのオプション設定
11
+ * @returns ConsistentRead=trueで設定されたDynamoDBDocumentClient
12
+ */
13
+ export function createDynamoDBClient(config = {}) {
14
+ const { region = process.env.AWS_REGION || 'us-east-1', endpoint } = config;
15
+ const client = new DynamoDBClient({
16
+ region,
17
+ ...(endpoint && { endpoint }),
18
+ });
19
+ // ConsistentRead=trueをデフォルトとしてDocument Clientを設定
20
+ const docClient = DynamoDBDocumentClient.from(client, {
21
+ marshallOptions: {
22
+ removeUndefinedValues: true,
23
+ convertEmptyValues: false,
24
+ },
25
+ unmarshallOptions: {
26
+ wrapNumbers: false,
27
+ },
28
+ });
29
+ return docClient;
30
+ }
31
+ //# sourceMappingURL=dynamodb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamodb.js","sourceRoot":"","sources":["../src/dynamodb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAU/D;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAA+B,EAAE;IACpE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5E,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,MAAM;QACN,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC9B,CAAC,CAAC;IAEH,iDAAiD;IACjD,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE;QACpD,eAAe,EAAE;YACf,qBAAqB,EAAE,IAAI;YAC3B,kBAAkB,EAAE,KAAK;SAC1B;QACD,iBAAiB,EAAE;YACjB,WAAW,EAAE,KAAK;SACnB;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * エラーコード定義
3
+ */
4
+ export declare enum ErrorCode {
5
+ /** 認証エラー(JWT検証失敗、署名不正、期限切れなど) */
6
+ AUTH_ERROR = "AUTH_ERROR",
7
+ /** 設定エラー(環境変数未設定、shadow.config読み込み失敗など) */
8
+ CONFIG_ERROR = "CONFIG_ERROR",
9
+ /** 無効なフィルター(sort.fieldが無効なシャドー名) */
10
+ INVALID_FILTER = "INVALID_FILTER",
11
+ /** 無効なトークン(nextTokenデコード失敗) */
12
+ INVALID_TOKEN = "INVALID_TOKEN",
13
+ /** アイテムが見つからない(指定IDのレコードが存在しない) */
14
+ ITEM_NOT_FOUND = "ITEM_NOT_FOUND",
15
+ /** 部分失敗(TransactWriteItemsの一部が失敗) */
16
+ PARTIAL_FAILURE = "PARTIAL_FAILURE",
17
+ /** バージョン競合(楽観ロック競合) */
18
+ VERSION_CONFLICT = "VERSION_CONFLICT"
19
+ }
20
+ /**
21
+ * アプリケーションエラーの基底クラス
22
+ */
23
+ export declare class AppError extends Error {
24
+ readonly code: ErrorCode;
25
+ readonly statusCode: number;
26
+ readonly details?: Record<string, unknown> | undefined;
27
+ constructor(code: ErrorCode, message: string, statusCode?: number, details?: Record<string, unknown> | undefined);
28
+ /**
29
+ * エラーをJSON形式に変換
30
+ */
31
+ toJSON(): Record<string, unknown>;
32
+ }
33
+ /**
34
+ * 認証エラー
35
+ * JWT検証失敗、署名不正、期限切れなどで発生
36
+ */
37
+ export declare class AuthError extends AppError {
38
+ constructor(message: string, details?: Record<string, unknown>);
39
+ }
40
+ /**
41
+ * 設定エラー
42
+ * 環境変数未設定、shadow.config読み込み失敗などで発生
43
+ */
44
+ export declare class ConfigError extends AppError {
45
+ constructor(message: string, details?: Record<string, unknown>);
46
+ }
47
+ /**
48
+ * 無効なフィルターエラー
49
+ * sort.fieldが無効なシャドー名の場合に発生
50
+ */
51
+ export declare class InvalidFilterError extends AppError {
52
+ constructor(message: string, details?: Record<string, unknown>);
53
+ }
54
+ /**
55
+ * 無効なトークンエラー
56
+ * nextTokenのデコードに失敗した場合に発生
57
+ */
58
+ export declare class InvalidTokenError extends AppError {
59
+ constructor(message: string, details?: Record<string, unknown>);
60
+ }
61
+ /**
62
+ * アイテムが見つからないエラー
63
+ * 指定IDのレコードが存在しない場合に発生
64
+ */
65
+ export declare class ItemNotFoundError extends AppError {
66
+ constructor(message: string, details?: Record<string, unknown>);
67
+ }
68
+ /**
69
+ * 部分失敗エラー
70
+ * TransactWriteItemsの一部が失敗した場合に発生
71
+ */
72
+ export declare class PartialFailureError extends AppError {
73
+ readonly failedIds: string[];
74
+ readonly errors: Array<{
75
+ id: string;
76
+ code: string;
77
+ message: string;
78
+ }>;
79
+ constructor(message: string, failedIds: string[], errors: Array<{
80
+ id: string;
81
+ code: string;
82
+ message: string;
83
+ }>, details?: Record<string, unknown>);
84
+ }
85
+ /**
86
+ * バージョン競合エラー
87
+ * 楽観ロック競合が発生した場合に発生
88
+ */
89
+ export declare class VersionConflictError extends AppError {
90
+ constructor(message: string, details?: Record<string, unknown>);
91
+ }
92
+ /**
93
+ * エラーがAppErrorのインスタンスかどうかを判定
94
+ */
95
+ export declare function isAppError(error: unknown): error is AppError;
96
+ /**
97
+ * エラーコードからエラークラスを取得
98
+ */
99
+ export declare function getErrorClass(code: ErrorCode): new (message: string, details?: Record<string, unknown>) => AppError;
100
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IACnB,iCAAiC;IACjC,UAAU,eAAe;IACzB,2CAA2C;IAC3C,YAAY,iBAAiB;IAC7B,oCAAoC;IACpC,cAAc,mBAAmB;IACjC,+BAA+B;IAC/B,aAAa,kBAAkB;IAC/B,mCAAmC;IACnC,cAAc,mBAAmB;IACjC,qCAAqC;IACrC,eAAe,oBAAoB;IACnC,uBAAuB;IACvB,gBAAgB,qBAAqB;CACtC;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,SAAS;aAEf,UAAU,EAAE,MAAM;aAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,SAAS,EAC/B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAOnD;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlC;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;aAG7B,SAAS,EAAE,MAAM,EAAE;aACnB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;gBAF5E,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQpC;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,GACd,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,CAiBtE"}
package/dist/errors.js ADDED
@@ -0,0 +1,146 @@
1
+ /**
2
+ * エラーコード定義
3
+ */
4
+ export var ErrorCode;
5
+ (function (ErrorCode) {
6
+ /** 認証エラー(JWT検証失敗、署名不正、期限切れなど) */
7
+ ErrorCode["AUTH_ERROR"] = "AUTH_ERROR";
8
+ /** 設定エラー(環境変数未設定、shadow.config読み込み失敗など) */
9
+ ErrorCode["CONFIG_ERROR"] = "CONFIG_ERROR";
10
+ /** 無効なフィルター(sort.fieldが無効なシャドー名) */
11
+ ErrorCode["INVALID_FILTER"] = "INVALID_FILTER";
12
+ /** 無効なトークン(nextTokenデコード失敗) */
13
+ ErrorCode["INVALID_TOKEN"] = "INVALID_TOKEN";
14
+ /** アイテムが見つからない(指定IDのレコードが存在しない) */
15
+ ErrorCode["ITEM_NOT_FOUND"] = "ITEM_NOT_FOUND";
16
+ /** 部分失敗(TransactWriteItemsの一部が失敗) */
17
+ ErrorCode["PARTIAL_FAILURE"] = "PARTIAL_FAILURE";
18
+ /** バージョン競合(楽観ロック競合) */
19
+ ErrorCode["VERSION_CONFLICT"] = "VERSION_CONFLICT";
20
+ })(ErrorCode || (ErrorCode = {}));
21
+ /**
22
+ * アプリケーションエラーの基底クラス
23
+ */
24
+ export class AppError extends Error {
25
+ code;
26
+ statusCode;
27
+ details;
28
+ constructor(code, message, statusCode = 500, details) {
29
+ super(message);
30
+ this.code = code;
31
+ this.statusCode = statusCode;
32
+ this.details = details;
33
+ this.name = this.constructor.name;
34
+ Error.captureStackTrace(this, this.constructor);
35
+ }
36
+ /**
37
+ * エラーをJSON形式に変換
38
+ */
39
+ toJSON() {
40
+ return {
41
+ code: this.code,
42
+ message: this.message,
43
+ statusCode: this.statusCode,
44
+ ...(this.details && { details: this.details }),
45
+ };
46
+ }
47
+ }
48
+ /**
49
+ * 認証エラー
50
+ * JWT検証失敗、署名不正、期限切れなどで発生
51
+ */
52
+ export class AuthError extends AppError {
53
+ constructor(message, details) {
54
+ super(ErrorCode.AUTH_ERROR, message, 401, details);
55
+ }
56
+ }
57
+ /**
58
+ * 設定エラー
59
+ * 環境変数未設定、shadow.config読み込み失敗などで発生
60
+ */
61
+ export class ConfigError extends AppError {
62
+ constructor(message, details) {
63
+ super(ErrorCode.CONFIG_ERROR, message, 500, details);
64
+ }
65
+ }
66
+ /**
67
+ * 無効なフィルターエラー
68
+ * sort.fieldが無効なシャドー名の場合に発生
69
+ */
70
+ export class InvalidFilterError extends AppError {
71
+ constructor(message, details) {
72
+ super(ErrorCode.INVALID_FILTER, message, 400, details);
73
+ }
74
+ }
75
+ /**
76
+ * 無効なトークンエラー
77
+ * nextTokenのデコードに失敗した場合に発生
78
+ */
79
+ export class InvalidTokenError extends AppError {
80
+ constructor(message, details) {
81
+ super(ErrorCode.INVALID_TOKEN, message, 400, details);
82
+ }
83
+ }
84
+ /**
85
+ * アイテムが見つからないエラー
86
+ * 指定IDのレコードが存在しない場合に発生
87
+ */
88
+ export class ItemNotFoundError extends AppError {
89
+ constructor(message, details) {
90
+ super(ErrorCode.ITEM_NOT_FOUND, message, 404, details);
91
+ }
92
+ }
93
+ /**
94
+ * 部分失敗エラー
95
+ * TransactWriteItemsの一部が失敗した場合に発生
96
+ */
97
+ export class PartialFailureError extends AppError {
98
+ failedIds;
99
+ errors;
100
+ constructor(message, failedIds, errors, details) {
101
+ super(ErrorCode.PARTIAL_FAILURE, message, 207, {
102
+ ...details,
103
+ failedIds,
104
+ errors,
105
+ });
106
+ this.failedIds = failedIds;
107
+ this.errors = errors;
108
+ }
109
+ }
110
+ /**
111
+ * バージョン競合エラー
112
+ * 楽観ロック競合が発生した場合に発生
113
+ */
114
+ export class VersionConflictError extends AppError {
115
+ constructor(message, details) {
116
+ super(ErrorCode.VERSION_CONFLICT, message, 409, details);
117
+ }
118
+ }
119
+ /**
120
+ * エラーがAppErrorのインスタンスかどうかを判定
121
+ */
122
+ export function isAppError(error) {
123
+ return error instanceof AppError;
124
+ }
125
+ /**
126
+ * エラーコードからエラークラスを取得
127
+ */
128
+ export function getErrorClass(code) {
129
+ switch (code) {
130
+ case ErrorCode.AUTH_ERROR:
131
+ return AuthError;
132
+ case ErrorCode.CONFIG_ERROR:
133
+ return ConfigError;
134
+ case ErrorCode.INVALID_FILTER:
135
+ return InvalidFilterError;
136
+ case ErrorCode.INVALID_TOKEN:
137
+ return InvalidTokenError;
138
+ case ErrorCode.ITEM_NOT_FOUND:
139
+ return ItemNotFoundError;
140
+ case ErrorCode.VERSION_CONFLICT:
141
+ return VersionConflictError;
142
+ default:
143
+ return AppError;
144
+ }
145
+ }
146
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { createDynamoDBClient } from './dynamodb.js';
2
+ export type { DynamoDBClientConfig } from './dynamodb.js';
3
+ export { ulid, ulidWithTime, decodeTime } from './ulid.js';
4
+ export { createLogger } from './logger.js';
5
+ export type { Logger, LoggerConfig, LogLevel, LogMetadata } from './logger.js';
6
+ export { ErrorCode, AppError, AuthError, ConfigError, InvalidFilterError, InvalidTokenError, ItemNotFoundError, PartialFailureError, VersionConflictError, isAppError, getErrorClass, } from './errors.js';
7
+ export type { FilterOperators, Filter, UpdateOperators, FindOptions, InsertOneResult, InsertManyResult, UpdateResult, DeleteResult, } from './types.js';
8
+ export { Database, Collection } from './client/index.js';
9
+ export { convertFilterToDynamo, type DynamoComparisonOperator, type DynamoCondition, type DynamoQuery, generateShadowRecords, type ShadowRecord, type ShadowSchema, getShadowConfig, getResourceSchema, clearShadowConfigCache, type ShadowConfig, } from './server/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { createDynamoDBClient } from './dynamodb.js';
2
+ export { ulid, ulidWithTime, decodeTime } from './ulid.js';
3
+ export { createLogger } from './logger.js';
4
+ export { ErrorCode, AppError, AuthError, ConfigError, InvalidFilterError, InvalidTokenError, ItemNotFoundError, PartialFailureError, VersionConflictError, isAppError, getErrorClass, } from './errors.js';
5
+ export { Database, Collection } from './client/index.js';
6
+ export { convertFilterToDynamo, generateShadowRecords, getShadowConfig, getResourceSchema, clearShadowConfigCache, } from './server/index.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,qBAAqB,EAIrB,qBAAqB,EAGrB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * react-admin データプロバイダー
3
+ * DynamoDB Client SDK を使用して Records Lambda Function URL と通信
4
+ * react-admin 完全準拠の10操作を実装
5
+ *
6
+ * MongoDB風のシンプルなAPIでDynamoDBを操作:
7
+ * - collection.find().sort().limit().toArray() でレコード取得
8
+ * - collection.insertOne() / insertMany() でレコード作成
9
+ * - collection.updateOne() / updateMany() でレコード更新
10
+ * - collection.deleteOne() / deleteMany() でレコード削除
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { createDataProvider } from '@exabugs/dynamodb-client/integrations/react-admin';
15
+ * import type { TokenProvider } from '@exabugs/dynamodb-client/integrations/react-admin';
16
+ *
17
+ * const tokenProvider: TokenProvider = {
18
+ * getToken: async () => {
19
+ * // 認証トークンを取得するロジック
20
+ * return 'your-auth-token';
21
+ * },
22
+ * };
23
+ *
24
+ * const dataProvider = createDataProvider({
25
+ * apiUrl: 'https://your-lambda-url.amazonaws.com',
26
+ * databaseName: 'your-database',
27
+ * tokenProvider,
28
+ * defaultPerPage: 25,
29
+ * defaultSortField: 'updatedAt',
30
+ * defaultSortOrder: 'DESC',
31
+ * });
32
+ * ```
33
+ */
34
+ /**
35
+ * NOTE: react-admin の型定義による any の使用
36
+ *
37
+ * react-adminのDataProviderインターフェースは、ジェネリック型パラメータとして
38
+ * `any` を使用することを前提としています。これは、react-adminが様々な型のレコードを
39
+ * 扱うための設計上の制約です。
40
+ *
41
+ * 実行時の型安全性は、以下により確保されています:
42
+ * 1. DynamoDB Client SDK の型チェック
43
+ * 2. TypeScript の型推論(呼び出し側で具体的な型を指定)
44
+ * 3. 実際のレコード型はアプリケーション側で定義
45
+ *
46
+ * 根本的な解決策(TODO):
47
+ * 1. react-admin v5 の型定義を調査し、より厳密な型付けが可能か確認
48
+ * 2. カスタム型定義を作成して、プロジェクト固有のリソース型を使用
49
+ */
50
+ import { DataProvider } from 'react-admin';
51
+ import type { DataProviderOptions } from './types.js';
52
+ /**
53
+ * DynamoDB Client ベースの DataProvider を作成
54
+ *
55
+ * @param options - DataProviderオプション
56
+ * @returns react-admin DataProvider
57
+ */
58
+ export declare function createDataProvider(options: DataProviderOptions): DataProvider;
59
+ //# sourceMappingURL=dataProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataProvider.d.ts","sourceRoot":"","sources":["../../../src/integrations/react-admin/dataProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA6EtD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAiV7E"}