dinah 0.3.0 → 0.3.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-zAG7brd9.cjs");
2
+ const require_util = require("./util-BOJ7V5_l.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);
5
5
  //#region src/cdk.ts
package/dist/cdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { i as resolveAttrType } from "./util-DDOj_NRD.mjs";
1
+ import { i as resolveAttrType } from "./util-B4dDuxlC.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/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_util = require("./util-zAG7brd9.cjs");
2
+ const require_util = require("./util-BOJ7V5_l.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);
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { i as resolveAttrType, n as extractTableDesc, r as removeUndefined, t as chunk } from "./util-DDOj_NRD.mjs";
1
+ import { i as resolveAttrType, n as extractTableDesc, r as removeUndefined, t as chunk } from "./util-B4dDuxlC.mjs";
2
2
  import { CreateTableCommand, DeleteTableCommand, DynamoDB, DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
3
3
  import * as Lib from "@aws-sdk/lib-dynamodb";
4
4
  import sift from "sift";
package/dist/streams.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("./util-zAG7brd9.cjs");
2
+ require("./util-BOJ7V5_l.cjs");
3
3
  let _aws_sdk_client_dynamodb_streams = require("@aws-sdk/client-dynamodb-streams");
4
4
  //#region src/streams.ts
5
5
  var EventStreamer = class {
@@ -1,4 +1,5 @@
1
- import * as T from "typebox";
1
+ import "typebox";
2
+ import * as T from "typebox/type";
2
3
  //#region src/util.ts
3
4
  const resolveAttrType = (schema, attrName) => {
4
5
  if (T.IsString(schema) || T.IsLiteralString(schema)) return "S";
@@ -73,4 +74,4 @@ const removeUndefined = (obj) => {
73
74
  //#endregion
74
75
  export { resolveAttrType as i, extractTableDesc as n, removeUndefined as r, chunk as t };
75
76
 
76
- //# sourceMappingURL=util-DDOj_NRD.mjs.map
77
+ //# sourceMappingURL=util-B4dDuxlC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util-B4dDuxlC.mjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type {\n AttributeDefinition,\n CreateTableCommandInput,\n ProjectionType,\n} from \"@aws-sdk/client-dynamodb\";\nimport { type TSchema } from \"typebox\";\nimport * as T from \"typebox/type\";\nimport type { Obj } from \"./types\";\nimport type { Table } from \"./table\";\n\nexport const resolveAttrType = (schema: TSchema, attrName: string): \"S\" | \"N\" => {\n if (T.IsString(schema) || T.IsLiteralString(schema)) {\n return \"S\";\n }\n\n if (T.IsNumber(schema) || T.IsLiteralNumber(schema) || T.IsInteger(schema)) {\n return \"N\";\n }\n\n if (T.IsObject(schema)) {\n const attrSchema = schema.properties[attrName];\n if (!attrSchema) {\n throw new Error(`Attribute \"${attrName}\" not found.`);\n }\n return resolveAttrType(attrSchema, attrName);\n }\n\n if (T.IsIntersect(schema) || T.IsUnion(schema)) {\n const schemas = T.IsUnion(schema) ? schema.anyOf : schema.allOf;\n const [firstType, ...otherTypes] = schemas.flatMap((s) => resolveAttrType(s, attrName));\n if (!firstType || otherTypes.some((t) => t !== firstType)) {\n throw new Error(`Attribute \"${attrName}\" type not consistent.`);\n }\n\n return firstType;\n }\n\n throw new Error(`Unable to resolve type for attribute \"${attrName}\"`);\n};\n\nexport const extractTableDesc = (table: Table): CreateTableCommandInput => {\n const attributes = new Map<string, AttributeDefinition>();\n\n const setAttributes = (\n attrNames: (string | undefined)[],\n keyType: \"HASH\" | \"RANGE\",\n ): { AttributeName: string; KeyType: \"HASH\" | \"RANGE\" }[] => {\n return attrNames.flatMap((attrName) => {\n if (!attrName) return [];\n attributes.set(attrName, {\n AttributeName: attrName,\n AttributeType: resolveAttrType(table.schema, attrName),\n });\n return { AttributeName: attrName, KeyType: keyType };\n });\n };\n\n let gsis: CreateTableCommandInput[\"GlobalSecondaryIndexes\"];\n if (table.def.gsis) {\n gsis = Object.entries(table.def.gsis ?? {}).map(([indexName, gsi]) => {\n return {\n IndexName: indexName,\n KeySchema: [\n ...setAttributes([gsi.partitionKey].flat(), \"HASH\"),\n ...setAttributes([gsi.sortKey].flat(), \"RANGE\"),\n ],\n Projection: {\n ProjectionType: (Array.isArray(gsi.projection)\n ? \"INCLUDE\"\n : (gsi.projection ?? \"ALL\")) as ProjectionType,\n NonKeyAttributes: Array.isArray(gsi.projection) ? gsi.projection : undefined,\n },\n };\n });\n }\n\n // attribute definitions need to go AFTER key schemas since\n // are built while resolving the rest of the configuration\n return {\n TableName: table.def.name,\n KeySchema: [\n ...setAttributes([table.def.partitionKey], \"HASH\"),\n ...setAttributes([table.def.sortKey], \"RANGE\"),\n ],\n GlobalSecondaryIndexes: gsis,\n AttributeDefinitions: [...attributes.values()],\n BillingMode: table.def.billingMode,\n StreamSpecification: table.def.stream\n ? { StreamEnabled: true, StreamViewType: table.def.stream }\n : undefined,\n };\n};\n\nexport const chunk = <T = unknown>(arr: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) return [];\n\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n chunks.push(arr.slice(i, i + chunkSize));\n }\n\n return chunks;\n};\n\n// this currently creates sparse arrays if an undefined\n// value is found inside an array...not sure if thats valid?\nexport const removeUndefined = (obj: Obj) => {\n const stack = [obj];\n while (stack.length) {\n const currentObj = stack.pop();\n if (currentObj !== undefined) {\n Object.entries(currentObj).forEach(([k, v]) => {\n if (v && v instanceof Object) stack.push(v);\n else if (v === undefined) delete currentObj[k];\n });\n }\n }\n return obj;\n};\n"],"mappings":";;;AAUA,MAAa,mBAAmB,QAAiB,aAAgC;AAC/E,KAAI,EAAE,SAAS,OAAO,IAAI,EAAE,gBAAgB,OAAO,CACjD,QAAO;AAGT,KAAI,EAAE,SAAS,OAAO,IAAI,EAAE,gBAAgB,OAAO,IAAI,EAAE,UAAU,OAAO,CACxE,QAAO;AAGT,KAAI,EAAE,SAAS,OAAO,EAAE;EACtB,MAAM,aAAa,OAAO,WAAW;AACrC,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,cAAc,SAAS,cAAc;AAEvD,SAAO,gBAAgB,YAAY,SAAS;;AAG9C,KAAI,EAAE,YAAY,OAAO,IAAI,EAAE,QAAQ,OAAO,EAAE;EAE9C,MAAM,CAAC,WAAW,GAAG,eADL,EAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ,OAAO,OACf,SAAS,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACvF,MAAI,CAAC,aAAa,WAAW,MAAM,MAAM,MAAM,UAAU,CACvD,OAAM,IAAI,MAAM,cAAc,SAAS,wBAAwB;AAGjE,SAAO;;AAGT,OAAM,IAAI,MAAM,yCAAyC,SAAS,GAAG;;AAGvE,MAAa,oBAAoB,UAA0C;CACzE,MAAM,6BAAa,IAAI,KAAkC;CAEzD,MAAM,iBACJ,WACA,YAC2D;AAC3D,SAAO,UAAU,SAAS,aAAa;AACrC,OAAI,CAAC,SAAU,QAAO,EAAE;AACxB,cAAW,IAAI,UAAU;IACvB,eAAe;IACf,eAAe,gBAAgB,MAAM,QAAQ,SAAS;IACvD,CAAC;AACF,UAAO;IAAE,eAAe;IAAU,SAAS;IAAS;IACpD;;CAGJ,IAAI;AACJ,KAAI,MAAM,IAAI,KACZ,QAAO,OAAO,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,SAAS;AACpE,SAAO;GACL,WAAW;GACX,WAAW,CACT,GAAG,cAAc,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,EACnD,GAAG,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAChD;GACD,YAAY;IACV,gBAAiB,MAAM,QAAQ,IAAI,WAAW,GAC1C,YACC,IAAI,cAAc;IACvB,kBAAkB,MAAM,QAAQ,IAAI,WAAW,GAAG,IAAI,aAAa,KAAA;IACpE;GACF;GACD;AAKJ,QAAO;EACL,WAAW,MAAM,IAAI;EACrB,WAAW,CACT,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,EAClD,GAAG,cAAc,CAAC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAC/C;EACD,wBAAwB;EACxB,sBAAsB,CAAC,GAAG,WAAW,QAAQ,CAAC;EAC9C,aAAa,MAAM,IAAI;EACvB,qBAAqB,MAAM,IAAI,SAC3B;GAAE,eAAe;GAAM,gBAAgB,MAAM,IAAI;GAAQ,GACzD,KAAA;EACL;;AAGH,MAAa,SAAsB,KAAU,cAA6B;AACxE,KAAI,aAAa,EAAG,QAAO,EAAE;CAE7B,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,UACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAG1C,QAAO;;AAKT,MAAa,mBAAmB,QAAa;CAC3C,MAAM,QAAQ,CAAC,IAAI;AACnB,QAAO,MAAM,QAAQ;EACnB,MAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,eAAe,KAAA,EACjB,QAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO;AAC7C,OAAI,KAAK,aAAa,OAAQ,OAAM,KAAK,EAAE;YAClC,MAAM,KAAA,EAAW,QAAO,WAAW;IAC5C;;AAGN,QAAO"}
@@ -20,19 +20,20 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
20
20
  enumerable: true
21
21
  }) : target, mod));
22
22
  //#endregion
23
- let typebox = require("typebox");
24
- typebox = __toESM(typebox);
23
+ require("typebox");
24
+ let typebox_type = require("typebox/type");
25
+ typebox_type = __toESM(typebox_type);
25
26
  //#region src/util.ts
26
27
  const resolveAttrType = (schema, attrName) => {
27
- if (typebox.IsString(schema) || typebox.IsLiteralString(schema)) return "S";
28
- if (typebox.IsNumber(schema) || typebox.IsLiteralNumber(schema) || typebox.IsInteger(schema)) return "N";
29
- if (typebox.IsObject(schema)) {
28
+ if (typebox_type.IsString(schema) || typebox_type.IsLiteralString(schema)) return "S";
29
+ if (typebox_type.IsNumber(schema) || typebox_type.IsLiteralNumber(schema) || typebox_type.IsInteger(schema)) return "N";
30
+ if (typebox_type.IsObject(schema)) {
30
31
  const attrSchema = schema.properties[attrName];
31
32
  if (!attrSchema) throw new Error(`Attribute "${attrName}" not found.`);
32
33
  return resolveAttrType(attrSchema, attrName);
33
34
  }
34
- if (typebox.IsIntersect(schema) || typebox.IsUnion(schema)) {
35
- const [firstType, ...otherTypes] = (typebox.IsUnion(schema) ? schema.anyOf : schema.allOf).flatMap((s) => resolveAttrType(s, attrName));
35
+ if (typebox_type.IsIntersect(schema) || typebox_type.IsUnion(schema)) {
36
+ const [firstType, ...otherTypes] = (typebox_type.IsUnion(schema) ? schema.anyOf : schema.allOf).flatMap((s) => resolveAttrType(s, attrName));
36
37
  if (!firstType || otherTypes.some((t) => t !== firstType)) throw new Error(`Attribute "${attrName}" type not consistent.`);
37
38
  return firstType;
38
39
  }
@@ -125,4 +126,4 @@ Object.defineProperty(exports, "resolveAttrType", {
125
126
  }
126
127
  });
127
128
 
128
- //# sourceMappingURL=util-zAG7brd9.cjs.map
129
+ //# sourceMappingURL=util-BOJ7V5_l.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util-BOJ7V5_l.cjs","names":["T"],"sources":["../src/util.ts"],"sourcesContent":["import type {\n AttributeDefinition,\n CreateTableCommandInput,\n ProjectionType,\n} from \"@aws-sdk/client-dynamodb\";\nimport { type TSchema } from \"typebox\";\nimport * as T from \"typebox/type\";\nimport type { Obj } from \"./types\";\nimport type { Table } from \"./table\";\n\nexport const resolveAttrType = (schema: TSchema, attrName: string): \"S\" | \"N\" => {\n if (T.IsString(schema) || T.IsLiteralString(schema)) {\n return \"S\";\n }\n\n if (T.IsNumber(schema) || T.IsLiteralNumber(schema) || T.IsInteger(schema)) {\n return \"N\";\n }\n\n if (T.IsObject(schema)) {\n const attrSchema = schema.properties[attrName];\n if (!attrSchema) {\n throw new Error(`Attribute \"${attrName}\" not found.`);\n }\n return resolveAttrType(attrSchema, attrName);\n }\n\n if (T.IsIntersect(schema) || T.IsUnion(schema)) {\n const schemas = T.IsUnion(schema) ? schema.anyOf : schema.allOf;\n const [firstType, ...otherTypes] = schemas.flatMap((s) => resolveAttrType(s, attrName));\n if (!firstType || otherTypes.some((t) => t !== firstType)) {\n throw new Error(`Attribute \"${attrName}\" type not consistent.`);\n }\n\n return firstType;\n }\n\n throw new Error(`Unable to resolve type for attribute \"${attrName}\"`);\n};\n\nexport const extractTableDesc = (table: Table): CreateTableCommandInput => {\n const attributes = new Map<string, AttributeDefinition>();\n\n const setAttributes = (\n attrNames: (string | undefined)[],\n keyType: \"HASH\" | \"RANGE\",\n ): { AttributeName: string; KeyType: \"HASH\" | \"RANGE\" }[] => {\n return attrNames.flatMap((attrName) => {\n if (!attrName) return [];\n attributes.set(attrName, {\n AttributeName: attrName,\n AttributeType: resolveAttrType(table.schema, attrName),\n });\n return { AttributeName: attrName, KeyType: keyType };\n });\n };\n\n let gsis: CreateTableCommandInput[\"GlobalSecondaryIndexes\"];\n if (table.def.gsis) {\n gsis = Object.entries(table.def.gsis ?? {}).map(([indexName, gsi]) => {\n return {\n IndexName: indexName,\n KeySchema: [\n ...setAttributes([gsi.partitionKey].flat(), \"HASH\"),\n ...setAttributes([gsi.sortKey].flat(), \"RANGE\"),\n ],\n Projection: {\n ProjectionType: (Array.isArray(gsi.projection)\n ? \"INCLUDE\"\n : (gsi.projection ?? \"ALL\")) as ProjectionType,\n NonKeyAttributes: Array.isArray(gsi.projection) ? gsi.projection : undefined,\n },\n };\n });\n }\n\n // attribute definitions need to go AFTER key schemas since\n // are built while resolving the rest of the configuration\n return {\n TableName: table.def.name,\n KeySchema: [\n ...setAttributes([table.def.partitionKey], \"HASH\"),\n ...setAttributes([table.def.sortKey], \"RANGE\"),\n ],\n GlobalSecondaryIndexes: gsis,\n AttributeDefinitions: [...attributes.values()],\n BillingMode: table.def.billingMode,\n StreamSpecification: table.def.stream\n ? { StreamEnabled: true, StreamViewType: table.def.stream }\n : undefined,\n };\n};\n\nexport const chunk = <T = unknown>(arr: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) return [];\n\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n chunks.push(arr.slice(i, i + chunkSize));\n }\n\n return chunks;\n};\n\n// this currently creates sparse arrays if an undefined\n// value is found inside an array...not sure if thats valid?\nexport const removeUndefined = (obj: Obj) => {\n const stack = [obj];\n while (stack.length) {\n const currentObj = stack.pop();\n if (currentObj !== undefined) {\n Object.entries(currentObj).forEach(([k, v]) => {\n if (v && v instanceof Object) stack.push(v);\n else if (v === undefined) delete currentObj[k];\n });\n }\n }\n return obj;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAa,mBAAmB,QAAiB,aAAgC;AAC/E,KAAIA,aAAE,SAAS,OAAO,IAAIA,aAAE,gBAAgB,OAAO,CACjD,QAAO;AAGT,KAAIA,aAAE,SAAS,OAAO,IAAIA,aAAE,gBAAgB,OAAO,IAAIA,aAAE,UAAU,OAAO,CACxE,QAAO;AAGT,KAAIA,aAAE,SAAS,OAAO,EAAE;EACtB,MAAM,aAAa,OAAO,WAAW;AACrC,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,cAAc,SAAS,cAAc;AAEvD,SAAO,gBAAgB,YAAY,SAAS;;AAG9C,KAAIA,aAAE,YAAY,OAAO,IAAIA,aAAE,QAAQ,OAAO,EAAE;EAE9C,MAAM,CAAC,WAAW,GAAG,eADLA,aAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ,OAAO,OACf,SAAS,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACvF,MAAI,CAAC,aAAa,WAAW,MAAM,MAAM,MAAM,UAAU,CACvD,OAAM,IAAI,MAAM,cAAc,SAAS,wBAAwB;AAGjE,SAAO;;AAGT,OAAM,IAAI,MAAM,yCAAyC,SAAS,GAAG;;AAGvE,MAAa,oBAAoB,UAA0C;CACzE,MAAM,6BAAa,IAAI,KAAkC;CAEzD,MAAM,iBACJ,WACA,YAC2D;AAC3D,SAAO,UAAU,SAAS,aAAa;AACrC,OAAI,CAAC,SAAU,QAAO,EAAE;AACxB,cAAW,IAAI,UAAU;IACvB,eAAe;IACf,eAAe,gBAAgB,MAAM,QAAQ,SAAS;IACvD,CAAC;AACF,UAAO;IAAE,eAAe;IAAU,SAAS;IAAS;IACpD;;CAGJ,IAAI;AACJ,KAAI,MAAM,IAAI,KACZ,QAAO,OAAO,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,SAAS;AACpE,SAAO;GACL,WAAW;GACX,WAAW,CACT,GAAG,cAAc,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,EACnD,GAAG,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAChD;GACD,YAAY;IACV,gBAAiB,MAAM,QAAQ,IAAI,WAAW,GAC1C,YACC,IAAI,cAAc;IACvB,kBAAkB,MAAM,QAAQ,IAAI,WAAW,GAAG,IAAI,aAAa,KAAA;IACpE;GACF;GACD;AAKJ,QAAO;EACL,WAAW,MAAM,IAAI;EACrB,WAAW,CACT,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,EAClD,GAAG,cAAc,CAAC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAC/C;EACD,wBAAwB;EACxB,sBAAsB,CAAC,GAAG,WAAW,QAAQ,CAAC;EAC9C,aAAa,MAAM,IAAI;EACvB,qBAAqB,MAAM,IAAI,SAC3B;GAAE,eAAe;GAAM,gBAAgB,MAAM,IAAI;GAAQ,GACzD,KAAA;EACL;;AAGH,MAAa,SAAsB,KAAU,cAA6B;AACxE,KAAI,aAAa,EAAG,QAAO,EAAE;CAE7B,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,UACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAG1C,QAAO;;AAKT,MAAa,mBAAmB,QAAa;CAC3C,MAAM,QAAQ,CAAC,IAAI;AACnB,QAAO,MAAM,QAAQ;EACnB,MAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,eAAe,KAAA,EACjB,QAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO;AAC7C,OAAI,KAAK,aAAa,OAAQ,OAAM,KAAK,EAAE;YAClC,MAAM,KAAA,EAAW,QAAO,WAAW;IAC5C;;AAGN,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinah",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "A dynamodb client designed for typescript",
5
5
  "homepage": "https://github.com/jayalfredprufrock/dinah#readme",
6
6
  "bugs": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"util-DDOj_NRD.mjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type {\n AttributeDefinition,\n CreateTableCommandInput,\n ProjectionType,\n} from \"@aws-sdk/client-dynamodb\";\nimport { type TSchema } from \"typebox\";\nimport * as T from \"typebox\";\nimport type { Obj } from \"./types\";\nimport type { Table } from \"./table\";\n\nexport const resolveAttrType = (schema: TSchema, attrName: string): \"S\" | \"N\" => {\n if (T.IsString(schema) || T.IsLiteralString(schema)) {\n return \"S\";\n }\n\n if (T.IsNumber(schema) || T.IsLiteralNumber(schema) || T.IsInteger(schema)) {\n return \"N\";\n }\n\n if (T.IsObject(schema)) {\n const attrSchema = schema.properties[attrName];\n if (!attrSchema) {\n throw new Error(`Attribute \"${attrName}\" not found.`);\n }\n return resolveAttrType(attrSchema, attrName);\n }\n\n if (T.IsIntersect(schema) || T.IsUnion(schema)) {\n const schemas = T.IsUnion(schema) ? schema.anyOf : schema.allOf;\n const [firstType, ...otherTypes] = schemas.flatMap((s) => resolveAttrType(s, attrName));\n if (!firstType || otherTypes.some((t) => t !== firstType)) {\n throw new Error(`Attribute \"${attrName}\" type not consistent.`);\n }\n\n return firstType;\n }\n\n throw new Error(`Unable to resolve type for attribute \"${attrName}\"`);\n};\n\nexport const extractTableDesc = (table: Table): CreateTableCommandInput => {\n const attributes = new Map<string, AttributeDefinition>();\n\n const setAttributes = (\n attrNames: (string | undefined)[],\n keyType: \"HASH\" | \"RANGE\",\n ): { AttributeName: string; KeyType: \"HASH\" | \"RANGE\" }[] => {\n return attrNames.flatMap((attrName) => {\n if (!attrName) return [];\n attributes.set(attrName, {\n AttributeName: attrName,\n AttributeType: resolveAttrType(table.schema, attrName),\n });\n return { AttributeName: attrName, KeyType: keyType };\n });\n };\n\n let gsis: CreateTableCommandInput[\"GlobalSecondaryIndexes\"];\n if (table.def.gsis) {\n gsis = Object.entries(table.def.gsis ?? {}).map(([indexName, gsi]) => {\n return {\n IndexName: indexName,\n KeySchema: [\n ...setAttributes([gsi.partitionKey].flat(), \"HASH\"),\n ...setAttributes([gsi.sortKey].flat(), \"RANGE\"),\n ],\n Projection: {\n ProjectionType: (Array.isArray(gsi.projection)\n ? \"INCLUDE\"\n : (gsi.projection ?? \"ALL\")) as ProjectionType,\n NonKeyAttributes: Array.isArray(gsi.projection) ? gsi.projection : undefined,\n },\n };\n });\n }\n\n // attribute definitions need to go AFTER key schemas since\n // are built while resolving the rest of the configuration\n return {\n TableName: table.def.name,\n KeySchema: [\n ...setAttributes([table.def.partitionKey], \"HASH\"),\n ...setAttributes([table.def.sortKey], \"RANGE\"),\n ],\n GlobalSecondaryIndexes: gsis,\n AttributeDefinitions: [...attributes.values()],\n BillingMode: table.def.billingMode,\n StreamSpecification: table.def.stream\n ? { StreamEnabled: true, StreamViewType: table.def.stream }\n : undefined,\n };\n};\n\nexport const chunk = <T = unknown>(arr: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) return [];\n\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n chunks.push(arr.slice(i, i + chunkSize));\n }\n\n return chunks;\n};\n\n// this currently creates sparse arrays if an undefined\n// value is found inside an array...not sure if thats valid?\nexport const removeUndefined = (obj: Obj) => {\n const stack = [obj];\n while (stack.length) {\n const currentObj = stack.pop();\n if (currentObj !== undefined) {\n Object.entries(currentObj).forEach(([k, v]) => {\n if (v && v instanceof Object) stack.push(v);\n else if (v === undefined) delete currentObj[k];\n });\n }\n }\n return obj;\n};\n"],"mappings":";;AAUA,MAAa,mBAAmB,QAAiB,aAAgC;AAC/E,KAAI,EAAE,SAAS,OAAO,IAAI,EAAE,gBAAgB,OAAO,CACjD,QAAO;AAGT,KAAI,EAAE,SAAS,OAAO,IAAI,EAAE,gBAAgB,OAAO,IAAI,EAAE,UAAU,OAAO,CACxE,QAAO;AAGT,KAAI,EAAE,SAAS,OAAO,EAAE;EACtB,MAAM,aAAa,OAAO,WAAW;AACrC,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,cAAc,SAAS,cAAc;AAEvD,SAAO,gBAAgB,YAAY,SAAS;;AAG9C,KAAI,EAAE,YAAY,OAAO,IAAI,EAAE,QAAQ,OAAO,EAAE;EAE9C,MAAM,CAAC,WAAW,GAAG,eADL,EAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ,OAAO,OACf,SAAS,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACvF,MAAI,CAAC,aAAa,WAAW,MAAM,MAAM,MAAM,UAAU,CACvD,OAAM,IAAI,MAAM,cAAc,SAAS,wBAAwB;AAGjE,SAAO;;AAGT,OAAM,IAAI,MAAM,yCAAyC,SAAS,GAAG;;AAGvE,MAAa,oBAAoB,UAA0C;CACzE,MAAM,6BAAa,IAAI,KAAkC;CAEzD,MAAM,iBACJ,WACA,YAC2D;AAC3D,SAAO,UAAU,SAAS,aAAa;AACrC,OAAI,CAAC,SAAU,QAAO,EAAE;AACxB,cAAW,IAAI,UAAU;IACvB,eAAe;IACf,eAAe,gBAAgB,MAAM,QAAQ,SAAS;IACvD,CAAC;AACF,UAAO;IAAE,eAAe;IAAU,SAAS;IAAS;IACpD;;CAGJ,IAAI;AACJ,KAAI,MAAM,IAAI,KACZ,QAAO,OAAO,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,SAAS;AACpE,SAAO;GACL,WAAW;GACX,WAAW,CACT,GAAG,cAAc,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,EACnD,GAAG,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAChD;GACD,YAAY;IACV,gBAAiB,MAAM,QAAQ,IAAI,WAAW,GAC1C,YACC,IAAI,cAAc;IACvB,kBAAkB,MAAM,QAAQ,IAAI,WAAW,GAAG,IAAI,aAAa,KAAA;IACpE;GACF;GACD;AAKJ,QAAO;EACL,WAAW,MAAM,IAAI;EACrB,WAAW,CACT,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,EAClD,GAAG,cAAc,CAAC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAC/C;EACD,wBAAwB;EACxB,sBAAsB,CAAC,GAAG,WAAW,QAAQ,CAAC;EAC9C,aAAa,MAAM,IAAI;EACvB,qBAAqB,MAAM,IAAI,SAC3B;GAAE,eAAe;GAAM,gBAAgB,MAAM,IAAI;GAAQ,GACzD,KAAA;EACL;;AAGH,MAAa,SAAsB,KAAU,cAA6B;AACxE,KAAI,aAAa,EAAG,QAAO,EAAE;CAE7B,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,UACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAG1C,QAAO;;AAKT,MAAa,mBAAmB,QAAa;CAC3C,MAAM,QAAQ,CAAC,IAAI;AACnB,QAAO,MAAM,QAAQ;EACnB,MAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,eAAe,KAAA,EACjB,QAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO;AAC7C,OAAI,KAAK,aAAa,OAAQ,OAAM,KAAK,EAAE;YAClC,MAAM,KAAA,EAAW,QAAO,WAAW;IAC5C;;AAGN,QAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"util-zAG7brd9.cjs","names":["T"],"sources":["../src/util.ts"],"sourcesContent":["import type {\n AttributeDefinition,\n CreateTableCommandInput,\n ProjectionType,\n} from \"@aws-sdk/client-dynamodb\";\nimport { type TSchema } from \"typebox\";\nimport * as T from \"typebox\";\nimport type { Obj } from \"./types\";\nimport type { Table } from \"./table\";\n\nexport const resolveAttrType = (schema: TSchema, attrName: string): \"S\" | \"N\" => {\n if (T.IsString(schema) || T.IsLiteralString(schema)) {\n return \"S\";\n }\n\n if (T.IsNumber(schema) || T.IsLiteralNumber(schema) || T.IsInteger(schema)) {\n return \"N\";\n }\n\n if (T.IsObject(schema)) {\n const attrSchema = schema.properties[attrName];\n if (!attrSchema) {\n throw new Error(`Attribute \"${attrName}\" not found.`);\n }\n return resolveAttrType(attrSchema, attrName);\n }\n\n if (T.IsIntersect(schema) || T.IsUnion(schema)) {\n const schemas = T.IsUnion(schema) ? schema.anyOf : schema.allOf;\n const [firstType, ...otherTypes] = schemas.flatMap((s) => resolveAttrType(s, attrName));\n if (!firstType || otherTypes.some((t) => t !== firstType)) {\n throw new Error(`Attribute \"${attrName}\" type not consistent.`);\n }\n\n return firstType;\n }\n\n throw new Error(`Unable to resolve type for attribute \"${attrName}\"`);\n};\n\nexport const extractTableDesc = (table: Table): CreateTableCommandInput => {\n const attributes = new Map<string, AttributeDefinition>();\n\n const setAttributes = (\n attrNames: (string | undefined)[],\n keyType: \"HASH\" | \"RANGE\",\n ): { AttributeName: string; KeyType: \"HASH\" | \"RANGE\" }[] => {\n return attrNames.flatMap((attrName) => {\n if (!attrName) return [];\n attributes.set(attrName, {\n AttributeName: attrName,\n AttributeType: resolveAttrType(table.schema, attrName),\n });\n return { AttributeName: attrName, KeyType: keyType };\n });\n };\n\n let gsis: CreateTableCommandInput[\"GlobalSecondaryIndexes\"];\n if (table.def.gsis) {\n gsis = Object.entries(table.def.gsis ?? {}).map(([indexName, gsi]) => {\n return {\n IndexName: indexName,\n KeySchema: [\n ...setAttributes([gsi.partitionKey].flat(), \"HASH\"),\n ...setAttributes([gsi.sortKey].flat(), \"RANGE\"),\n ],\n Projection: {\n ProjectionType: (Array.isArray(gsi.projection)\n ? \"INCLUDE\"\n : (gsi.projection ?? \"ALL\")) as ProjectionType,\n NonKeyAttributes: Array.isArray(gsi.projection) ? gsi.projection : undefined,\n },\n };\n });\n }\n\n // attribute definitions need to go AFTER key schemas since\n // are built while resolving the rest of the configuration\n return {\n TableName: table.def.name,\n KeySchema: [\n ...setAttributes([table.def.partitionKey], \"HASH\"),\n ...setAttributes([table.def.sortKey], \"RANGE\"),\n ],\n GlobalSecondaryIndexes: gsis,\n AttributeDefinitions: [...attributes.values()],\n BillingMode: table.def.billingMode,\n StreamSpecification: table.def.stream\n ? { StreamEnabled: true, StreamViewType: table.def.stream }\n : undefined,\n };\n};\n\nexport const chunk = <T = unknown>(arr: T[], chunkSize: number): T[][] => {\n if (chunkSize <= 0) return [];\n\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += chunkSize) {\n chunks.push(arr.slice(i, i + chunkSize));\n }\n\n return chunks;\n};\n\n// this currently creates sparse arrays if an undefined\n// value is found inside an array...not sure if thats valid?\nexport const removeUndefined = (obj: Obj) => {\n const stack = [obj];\n while (stack.length) {\n const currentObj = stack.pop();\n if (currentObj !== undefined) {\n Object.entries(currentObj).forEach(([k, v]) => {\n if (v && v instanceof Object) stack.push(v);\n else if (v === undefined) delete currentObj[k];\n });\n }\n }\n return obj;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAa,mBAAmB,QAAiB,aAAgC;AAC/E,KAAIA,QAAE,SAAS,OAAO,IAAIA,QAAE,gBAAgB,OAAO,CACjD,QAAO;AAGT,KAAIA,QAAE,SAAS,OAAO,IAAIA,QAAE,gBAAgB,OAAO,IAAIA,QAAE,UAAU,OAAO,CACxE,QAAO;AAGT,KAAIA,QAAE,SAAS,OAAO,EAAE;EACtB,MAAM,aAAa,OAAO,WAAW;AACrC,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,cAAc,SAAS,cAAc;AAEvD,SAAO,gBAAgB,YAAY,SAAS;;AAG9C,KAAIA,QAAE,YAAY,OAAO,IAAIA,QAAE,QAAQ,OAAO,EAAE;EAE9C,MAAM,CAAC,WAAW,GAAG,eADLA,QAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ,OAAO,OACf,SAAS,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACvF,MAAI,CAAC,aAAa,WAAW,MAAM,MAAM,MAAM,UAAU,CACvD,OAAM,IAAI,MAAM,cAAc,SAAS,wBAAwB;AAGjE,SAAO;;AAGT,OAAM,IAAI,MAAM,yCAAyC,SAAS,GAAG;;AAGvE,MAAa,oBAAoB,UAA0C;CACzE,MAAM,6BAAa,IAAI,KAAkC;CAEzD,MAAM,iBACJ,WACA,YAC2D;AAC3D,SAAO,UAAU,SAAS,aAAa;AACrC,OAAI,CAAC,SAAU,QAAO,EAAE;AACxB,cAAW,IAAI,UAAU;IACvB,eAAe;IACf,eAAe,gBAAgB,MAAM,QAAQ,SAAS;IACvD,CAAC;AACF,UAAO;IAAE,eAAe;IAAU,SAAS;IAAS;IACpD;;CAGJ,IAAI;AACJ,KAAI,MAAM,IAAI,KACZ,QAAO,OAAO,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,SAAS;AACpE,SAAO;GACL,WAAW;GACX,WAAW,CACT,GAAG,cAAc,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,EACnD,GAAG,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAChD;GACD,YAAY;IACV,gBAAiB,MAAM,QAAQ,IAAI,WAAW,GAC1C,YACC,IAAI,cAAc;IACvB,kBAAkB,MAAM,QAAQ,IAAI,WAAW,GAAG,IAAI,aAAa,KAAA;IACpE;GACF;GACD;AAKJ,QAAO;EACL,WAAW,MAAM,IAAI;EACrB,WAAW,CACT,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,EAAE,OAAO,EAClD,GAAG,cAAc,CAAC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAC/C;EACD,wBAAwB;EACxB,sBAAsB,CAAC,GAAG,WAAW,QAAQ,CAAC;EAC9C,aAAa,MAAM,IAAI;EACvB,qBAAqB,MAAM,IAAI,SAC3B;GAAE,eAAe;GAAM,gBAAgB,MAAM,IAAI;GAAQ,GACzD,KAAA;EACL;;AAGH,MAAa,SAAsB,KAAU,cAA6B;AACxE,KAAI,aAAa,EAAG,QAAO,EAAE;CAE7B,MAAM,SAAgB,EAAE;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,UACnC,QAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAG1C,QAAO;;AAKT,MAAa,mBAAmB,QAAa;CAC3C,MAAM,QAAQ,CAAC,IAAI;AACnB,QAAO,MAAM,QAAQ;EACnB,MAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,eAAe,KAAA,EACjB,QAAO,QAAQ,WAAW,CAAC,SAAS,CAAC,GAAG,OAAO;AAC7C,OAAI,KAAK,aAAa,OAAQ,OAAM,KAAK,EAAE;YAClC,MAAM,KAAA,EAAW,QAAO,WAAW;IAC5C;;AAGN,QAAO"}