dinah 0.14.0 → 0.15.1

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/dist/cdk.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_util = require("./util-DT6vwquI.cjs");
2
+ const require_util = require("./util-CYPpI7J0.cjs");
3
3
  let aws_cdk_lib_aws_dynamodb = require("aws-cdk-lib/aws-dynamodb");
4
4
  aws_cdk_lib_aws_dynamodb = require_util.__toESM(aws_cdk_lib_aws_dynamodb, 1);
5
5
  //#region src/cdk.ts
package/dist/cdk.cjs.map CHANGED
@@ -1 +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"}
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,CAAS;CAC3D,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAA;CAC1B,OAAO,MAAM,KAAK,UAAU;EAC1B;EACA,MACEA,aAAAA,gBAAgB,QAAQ,IAAI,MAAM,MAAMC,yBAAI,cAAc,SAASA,yBAAI,cAAc;CACzF,EAAE;AACJ;AAEA,MAAa,yBACX,UAIG;CACH,MAAM,EAAE,QAAQ,QAAQ;CAExB,MAAM,yBAAyB,IAAI,OAC/B,OAAO,QAAQ,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,UAAU;EAClD;EACA,eAAe,aAAa,QAAQ,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC;EAC7D,UAAU,aAAa,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC;CACrD,EAAE,IACF,KAAA;CAEJ,OAAO;EACL,WAAW,IAAI;EACf,cAAc,aAAa,QAAQ,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;EAC5D,SAAS,aAAa,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;EAClD,qBAAqB,IAAI;EAGzB;CACF;AACF"}
package/dist/cdk.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { t as Table } from "./table-GSI2RvTa.cjs";
1
+ import { t as Table } from "./table-CcZ5Kv5z.cjs";
2
2
  import { TSchema } from "typebox";
3
3
  import * as cdk from "aws-cdk-lib/aws-dynamodb";
4
4
 
@@ -1 +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"}
1
+ {"version":3,"file":"cdk.d.cts","names":[],"sources":["../src/cdk.ts"],"mappings":";;;;;cAKa,YAAA,GAAY,MAAA,EACf,OAAA,EAAO,SAAA,6BAEd,GAAA,CAAI,SAAS;AAAA,cAUH,qBAAA,GAAqB,KAAA,EACzB,KAAA,KACN,IAAA,CACD,GAAA,CAAI,YAAA"}
package/dist/cdk.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { t as Table } from "./table-O4EneQbj.mjs";
1
+ import { t as Table } from "./table-CcZ5Kv5z.mjs";
2
2
  import { TSchema } from "typebox";
3
3
  import * as cdk from "aws-cdk-lib/aws-dynamodb";
4
4
 
@@ -1 +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"}
1
+ {"version":3,"file":"cdk.d.mts","names":[],"sources":["../src/cdk.ts"],"mappings":";;;;;cAKa,YAAA,GAAY,MAAA,EACf,OAAA,EAAO,SAAA,6BAEd,GAAA,CAAI,SAAS;AAAA,cAUH,qBAAA,GAAqB,KAAA,EACzB,KAAA,KACN,IAAA,CACD,GAAA,CAAI,YAAA"}
package/dist/cdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { a as resolveAttrType } from "./util-0kc6E2VD.mjs";
1
+ import { a as resolveAttrType } from "./util-q3_Y61hN.mjs";
2
2
  import * as cdk from "aws-cdk-lib/aws-dynamodb";
3
3
  //#region src/cdk.ts
4
4
  const resolveAttrs = (schema, attrNames) => {
package/dist/cdk.mjs.map CHANGED
@@ -1 +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"}
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,CAAS;CAC3D,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAA;CAC1B,OAAO,MAAM,KAAK,UAAU;EAC1B;EACA,MACE,gBAAgB,QAAQ,IAAI,MAAM,MAAM,IAAI,cAAc,SAAS,IAAI,cAAc;CACzF,EAAE;AACJ;AAEA,MAAa,yBACX,UAIG;CACH,MAAM,EAAE,QAAQ,QAAQ;CAExB,MAAM,yBAAyB,IAAI,OAC/B,OAAO,QAAQ,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,UAAU;EAClD;EACA,eAAe,aAAa,QAAQ,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC;EAC7D,UAAU,aAAa,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC;CACrD,EAAE,IACF,KAAA;CAEJ,OAAO;EACL,WAAW,IAAI;EACf,cAAc,aAAa,QAAQ,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;EAC5D,SAAS,aAAa,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;EAClD,qBAAqB,IAAI;EAGzB;CACF;AACF"}
package/dist/index.cjs CHANGED
@@ -1,13 +1,14 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_util = require("./util-DT6vwquI.cjs");
2
+ const require_util = require("./util-CYPpI7J0.cjs");
3
3
  let _aws_sdk_client_dynamodb = require("@aws-sdk/client-dynamodb");
4
4
  let _aws_sdk_lib_dynamodb = require("@aws-sdk/lib-dynamodb");
5
5
  _aws_sdk_lib_dynamodb = require_util.__toESM(_aws_sdk_lib_dynamodb, 1);
6
6
  //#region src/error.ts
7
7
  function dinahErrorMessage(details) {
8
8
  switch (details.type) {
9
- case "NOT_FOUND": return `${details.resource ?? "Item"} not found: ${JSON.stringify(details.key)}`;
10
- case "CONDITIONAL_CHECK_FAILED": return details.key ? `${details.resource ?? "Item"} condition check failed: ${JSON.stringify(details.key)}` : `${details.resource ?? "Item"} condition check failed`;
9
+ case "NOT_FOUND": return `${details.resource ?? "Item"} not found.`;
10
+ case "ALREADY_EXISTS": return `${details.resource ?? "Item"} already exists.`;
11
+ case "CONDITIONAL_CHECK_FAILED": return `${details.resource ?? "Item"} condition check failed.`;
11
12
  case "VALIDATION": return `Validation error: ${details.message}`;
12
13
  case "DATA_INTEGRITY": return `Data integrity error: ${details.message}`;
13
14
  case "TRANSACTION_CANCELED": return `Transaction canceled: ${details.reasons.map((r) => r.type).join(", ")}`;
@@ -317,18 +318,25 @@ var Repo = class {
317
318
  });
318
319
  return this.applyTransformIfNeeded(result);
319
320
  }
320
- async create(item, options) {
321
- const { condition: otherCondition, ...otherOptions } = options ?? {};
321
+ async create(item) {
322
322
  const condition = { $and: [{ [this.table.def.partitionKey]: { $exists: false } }] };
323
- if (otherCondition) condition.$and.push(otherCondition);
324
323
  const normalizedItem = this.applyCreateTransforms(item);
325
- const result = await this.db.put({
326
- table: this.tableName,
327
- item: normalizedItem,
328
- resource: this.resourceName,
329
- condition,
330
- ...otherOptions
331
- });
324
+ let result;
325
+ try {
326
+ result = await this.db.put({
327
+ table: this.tableName,
328
+ item: normalizedItem,
329
+ resource: this.resourceName,
330
+ condition
331
+ });
332
+ } catch (err) {
333
+ if (err instanceof DinahError && err.details.type === "CONDITIONAL_CHECK_FAILED") throw new DinahError({
334
+ type: "ALREADY_EXISTS",
335
+ key: this.extractKey(item),
336
+ resource: this.resourceName
337
+ }, { cause: err });
338
+ throw err;
339
+ }
332
340
  return this.applyTransformIfNeeded(result);
333
341
  }
334
342
  async delete(key, options) {
@@ -563,8 +571,8 @@ var Repo = class {
563
571
  async trxUpdate(keys, update, options) {
564
572
  return this.db.trxWrite(...keys.map((key) => this.trxUpdateRequest(key, update, options)));
565
573
  }
566
- async trxCreate(items, options) {
567
- return this.db.trxWrite(...items.map((item) => this.trxCreateRequest(item, options)));
574
+ async trxCreate(items) {
575
+ return this.db.trxWrite(...items.map((item) => this.trxCreateRequest(item)));
568
576
  }
569
577
  trxGetRequest(key, options) {
570
578
  return {
@@ -608,17 +616,14 @@ var Repo = class {
608
616
  condition: this.withDiscriminatorCondition(key, options?.condition)
609
617
  };
610
618
  }
611
- trxCreateRequest(item, options) {
612
- const { condition: otherCondition, ...otherOptions } = options ?? {};
619
+ trxCreateRequest(item) {
613
620
  const condition = { $and: [{ [this.table.def.partitionKey]: { $exists: false } }] };
614
- if (otherCondition) condition.$and.push(otherCondition);
615
621
  const normalizedItem = this.applyCreateTransforms(item);
616
622
  return {
617
623
  table: this.tableName,
618
624
  type: "PUT",
619
625
  item: normalizedItem,
620
- condition,
621
- ...otherOptions
626
+ condition
622
627
  };
623
628
  }
624
629
  applyCreateTransforms(item) {