dinah 0.1.3 → 0.3.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/README.md CHANGED
@@ -203,26 +203,30 @@ await userRepo.trxWrite(
203
203
  );
204
204
  ```
205
205
 
206
- ### Lifecycle Hooks
206
+ ### Default Values
207
207
 
208
- Tables support `beforePut` and `beforeUpdate` hooks for setting defaults like timestamps:
208
+ To attach defaults like timestamps to every write, subclass `AbstractRepo` and override `defaultPutData` and/or `defaultUpdateData`:
209
209
 
210
210
  ```typescript
211
- const UserTable = new Table(schema, {
212
- name: "users",
213
- partitionKey: "userId",
214
- beforePut: (item) => ({
215
- createdAt: Date.now(),
216
- ...item,
217
- updatedAt: Date.now(),
218
- }),
219
- beforeUpdate: (update) => ({
220
- ...update,
221
- updatedAt: Date.now(),
222
- }),
223
- });
211
+ import { AbstractRepo } from "dinah";
212
+
213
+ class UserRepo extends AbstractRepo<typeof UserTable> {
214
+ readonly table = UserTable;
215
+
216
+ override get defaultPutData() {
217
+ return { createdAt: Date.now() };
218
+ }
219
+
220
+ override get defaultUpdateData() {
221
+ return { updatedAt: Date.now() };
222
+ }
223
+ }
224
+
225
+ const userRepo = new UserRepo(db);
224
226
  ```
225
227
 
228
+ `defaultPutData` is merged under every `put` / `create` / `batchWrite` put / `trxPut` / `trxCreate`. `defaultUpdateData` is merged under every `update` / `trxUpdate`. Caller-provided values always win on conflict.
229
+
226
230
  ## License
227
231
 
228
232
  [MIT](LICENSE)
package/dist/cdk.cjs ADDED
@@ -0,0 +1,33 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_util = require("./util-zAG7brd9.cjs");
3
+ let aws_cdk_lib_aws_dynamodb = require("aws-cdk-lib/aws-dynamodb");
4
+ aws_cdk_lib_aws_dynamodb = require_util.__toESM(aws_cdk_lib_aws_dynamodb);
5
+ //#region src/cdk.ts
6
+ const resolveAttrs = (schema, attrNames) => {
7
+ const names = attrNames.filter((name) => name !== void 0);
8
+ if (!names.length) return void 0;
9
+ return names.map((name) => ({
10
+ name,
11
+ type: require_util.resolveAttrType(schema, name) === "S" ? aws_cdk_lib_aws_dynamodb.AttributeType.STRING : aws_cdk_lib_aws_dynamodb.AttributeType.NUMBER
12
+ }));
13
+ };
14
+ const extractTableCdkConfig = (table) => {
15
+ const { schema, def } = table;
16
+ const globalSecondaryIndexes = def.gsis ? Object.entries(def.gsis).map(([indexName, gsi]) => ({
17
+ indexName,
18
+ partitionKeys: resolveAttrs(schema, [gsi.partitionKey].flat()),
19
+ sortKeys: resolveAttrs(schema, [gsi.sortKey].flat())
20
+ })) : void 0;
21
+ return {
22
+ tableName: def.name,
23
+ partitionKey: resolveAttrs(schema, [def.partitionKey])?.at(0),
24
+ sortKey: resolveAttrs(schema, [def.sortKey])?.at(0),
25
+ timeToLiveAttribute: def.ttlAttribute,
26
+ globalSecondaryIndexes
27
+ };
28
+ };
29
+ //#endregion
30
+ exports.extractTableCdkConfig = extractTableCdkConfig;
31
+ exports.resolveAttrs = resolveAttrs;
32
+
33
+ //# sourceMappingURL=cdk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdk.cjs","names":["resolveAttrType","cdk"],"sources":["../src/cdk.ts"],"sourcesContent":["import type { Table } from \"./table\";\nimport * as cdk from \"aws-cdk-lib/aws-dynamodb\";\nimport { resolveAttrType } from \"./util\";\nimport type { TSchema } from \"typebox\";\n\nexport const resolveAttrs = (\n schema: TSchema,\n attrNames: (string | undefined)[],\n): cdk.Attribute[] | undefined => {\n const names = attrNames.filter((name) => name !== undefined);\n if (!names.length) return undefined;\n return names.map((name) => ({\n name,\n type:\n resolveAttrType(schema, name) === \"S\" ? cdk.AttributeType.STRING : cdk.AttributeType.NUMBER,\n }));\n};\n\nexport const extractTableCdkConfig = (\n table: Table,\n): Pick<\n cdk.TablePropsV2,\n \"tableName\" | \"partitionKey\" | \"sortKey\" | \"timeToLiveAttribute\" | \"globalSecondaryIndexes\"\n> => {\n const { schema, def } = table;\n\n const globalSecondaryIndexes = def.gsis\n ? Object.entries(def.gsis).map(([indexName, gsi]) => ({\n indexName,\n partitionKeys: resolveAttrs(schema, [gsi.partitionKey].flat()),\n sortKeys: resolveAttrs(schema, [gsi.sortKey].flat()),\n }))\n : undefined;\n\n return {\n tableName: def.name,\n partitionKey: resolveAttrs(schema, [def.partitionKey])?.at(0)!,\n sortKey: resolveAttrs(schema, [def.sortKey])?.at(0),\n timeToLiveAttribute: def.ttlAttribute,\n //billing: def.billingMode as cdk.BillingMode,\n // stream: def.stream as cdk.StreamViewType,\n globalSecondaryIndexes,\n };\n};\n"],"mappings":";;;;;AAKA,MAAa,gBACX,QACA,cACgC;CAChC,MAAM,QAAQ,UAAU,QAAQ,SAAS,SAAS,KAAA,EAAU;AAC5D,KAAI,CAAC,MAAM,OAAQ,QAAO,KAAA;AAC1B,QAAO,MAAM,KAAK,UAAU;EAC1B;EACA,MACEA,aAAAA,gBAAgB,QAAQ,KAAK,KAAK,MAAMC,yBAAI,cAAc,SAASA,yBAAI,cAAc;EACxF,EAAE;;AAGL,MAAa,yBACX,UAIG;CACH,MAAM,EAAE,QAAQ,QAAQ;CAExB,MAAM,yBAAyB,IAAI,OAC/B,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,UAAU;EAClD;EACA,eAAe,aAAa,QAAQ,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;EAC9D,UAAU,aAAa,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;EACrD,EAAE,GACH,KAAA;AAEJ,QAAO;EACL,WAAW,IAAI;EACf,cAAc,aAAa,QAAQ,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE;EAC7D,SAAS,aAAa,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE;EACnD,qBAAqB,IAAI;EAGzB;EACD"}
package/dist/cdk.d.cts ADDED
@@ -0,0 +1,10 @@
1
+ import { t as Table } from "./table-DBf8kWHl.cjs";
2
+ import { TSchema } from "typebox";
3
+ import * as cdk from "aws-cdk-lib/aws-dynamodb";
4
+
5
+ //#region src/cdk.d.ts
6
+ declare const resolveAttrs: (schema: TSchema, attrNames: (string | undefined)[]) => cdk.Attribute[] | undefined;
7
+ declare const extractTableCdkConfig: (table: Table) => Pick<cdk.TablePropsV2, "tableName" | "partitionKey" | "sortKey" | "timeToLiveAttribute" | "globalSecondaryIndexes">;
8
+ //#endregion
9
+ export { extractTableCdkConfig, resolveAttrs };
10
+ //# sourceMappingURL=cdk.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdk.d.cts","names":[],"sources":["../src/cdk.ts"],"mappings":";;;;;cAKa,YAAA,GAAY,MAAA,EACf,OAAA,EAAO,SAAA,6BAEd,GAAA,CAAI,SAAA;AAAA,cAUM,qBAAA,GAAqB,KAAA,EACzB,KAAA,KACN,IAAA,CACD,GAAA,CAAI,YAAA"}
package/dist/cdk.d.mts ADDED
@@ -0,0 +1,10 @@
1
+ import { t as Table } from "./table-DqJt-sXI.mjs";
2
+ import { TSchema } from "typebox";
3
+ import * as cdk from "aws-cdk-lib/aws-dynamodb";
4
+
5
+ //#region src/cdk.d.ts
6
+ declare const resolveAttrs: (schema: TSchema, attrNames: (string | undefined)[]) => cdk.Attribute[] | undefined;
7
+ declare const extractTableCdkConfig: (table: Table) => Pick<cdk.TablePropsV2, "tableName" | "partitionKey" | "sortKey" | "timeToLiveAttribute" | "globalSecondaryIndexes">;
8
+ //#endregion
9
+ export { extractTableCdkConfig, resolveAttrs };
10
+ //# sourceMappingURL=cdk.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdk.d.mts","names":[],"sources":["../src/cdk.ts"],"mappings":";;;;;cAKa,YAAA,GAAY,MAAA,EACf,OAAA,EAAO,SAAA,6BAEd,GAAA,CAAI,SAAA;AAAA,cAUM,qBAAA,GAAqB,KAAA,EACzB,KAAA,KACN,IAAA,CACD,GAAA,CAAI,YAAA"}
package/dist/cdk.mjs ADDED
@@ -0,0 +1,30 @@
1
+ import { i as resolveAttrType } from "./util-DDOj_NRD.mjs";
2
+ import * as cdk from "aws-cdk-lib/aws-dynamodb";
3
+ //#region src/cdk.ts
4
+ const resolveAttrs = (schema, attrNames) => {
5
+ const names = attrNames.filter((name) => name !== void 0);
6
+ if (!names.length) return void 0;
7
+ return names.map((name) => ({
8
+ name,
9
+ type: resolveAttrType(schema, name) === "S" ? cdk.AttributeType.STRING : cdk.AttributeType.NUMBER
10
+ }));
11
+ };
12
+ const extractTableCdkConfig = (table) => {
13
+ const { schema, def } = table;
14
+ const globalSecondaryIndexes = def.gsis ? Object.entries(def.gsis).map(([indexName, gsi]) => ({
15
+ indexName,
16
+ partitionKeys: resolveAttrs(schema, [gsi.partitionKey].flat()),
17
+ sortKeys: resolveAttrs(schema, [gsi.sortKey].flat())
18
+ })) : void 0;
19
+ return {
20
+ tableName: def.name,
21
+ partitionKey: resolveAttrs(schema, [def.partitionKey])?.at(0),
22
+ sortKey: resolveAttrs(schema, [def.sortKey])?.at(0),
23
+ timeToLiveAttribute: def.ttlAttribute,
24
+ globalSecondaryIndexes
25
+ };
26
+ };
27
+ //#endregion
28
+ export { extractTableCdkConfig, resolveAttrs };
29
+
30
+ //# sourceMappingURL=cdk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdk.mjs","names":[],"sources":["../src/cdk.ts"],"sourcesContent":["import type { Table } from \"./table\";\nimport * as cdk from \"aws-cdk-lib/aws-dynamodb\";\nimport { resolveAttrType } from \"./util\";\nimport type { TSchema } from \"typebox\";\n\nexport const resolveAttrs = (\n schema: TSchema,\n attrNames: (string | undefined)[],\n): cdk.Attribute[] | undefined => {\n const names = attrNames.filter((name) => name !== undefined);\n if (!names.length) return undefined;\n return names.map((name) => ({\n name,\n type:\n resolveAttrType(schema, name) === \"S\" ? cdk.AttributeType.STRING : cdk.AttributeType.NUMBER,\n }));\n};\n\nexport const extractTableCdkConfig = (\n table: Table,\n): Pick<\n cdk.TablePropsV2,\n \"tableName\" | \"partitionKey\" | \"sortKey\" | \"timeToLiveAttribute\" | \"globalSecondaryIndexes\"\n> => {\n const { schema, def } = table;\n\n const globalSecondaryIndexes = def.gsis\n ? Object.entries(def.gsis).map(([indexName, gsi]) => ({\n indexName,\n partitionKeys: resolveAttrs(schema, [gsi.partitionKey].flat()),\n sortKeys: resolveAttrs(schema, [gsi.sortKey].flat()),\n }))\n : undefined;\n\n return {\n tableName: def.name,\n partitionKey: resolveAttrs(schema, [def.partitionKey])?.at(0)!,\n sortKey: resolveAttrs(schema, [def.sortKey])?.at(0),\n timeToLiveAttribute: def.ttlAttribute,\n //billing: def.billingMode as cdk.BillingMode,\n // stream: def.stream as cdk.StreamViewType,\n globalSecondaryIndexes,\n };\n};\n"],"mappings":";;;AAKA,MAAa,gBACX,QACA,cACgC;CAChC,MAAM,QAAQ,UAAU,QAAQ,SAAS,SAAS,KAAA,EAAU;AAC5D,KAAI,CAAC,MAAM,OAAQ,QAAO,KAAA;AAC1B,QAAO,MAAM,KAAK,UAAU;EAC1B;EACA,MACE,gBAAgB,QAAQ,KAAK,KAAK,MAAM,IAAI,cAAc,SAAS,IAAI,cAAc;EACxF,EAAE;;AAGL,MAAa,yBACX,UAIG;CACH,MAAM,EAAE,QAAQ,QAAQ;CAExB,MAAM,yBAAyB,IAAI,OAC/B,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,UAAU;EAClD;EACA,eAAe,aAAa,QAAQ,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;EAC9D,UAAU,aAAa,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;EACrD,EAAE,GACH,KAAA;AAEJ,QAAO;EACL,WAAW,IAAI;EACf,cAAc,aAAa,QAAQ,CAAC,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE;EAC7D,SAAS,aAAa,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE;EACnD,qBAAqB,IAAI;EAGzB;EACD"}