@infra-blocks/aws-dynamodb 0.2.1 → 0.3.0-alpha.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.
@@ -3,6 +3,7 @@ import type { TranslateConfig } from "@aws-sdk/lib-dynamodb";
3
3
  import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
4
4
  import type { Logger } from "@infra-blocks/logger-interface";
5
5
  import { type Retry, type RetryConfig } from "@infra-blocks/retry";
6
+ import { type CreateTableParams } from "./commands/create-table.js";
6
7
  import type { Attributes, GetItem, PutItem, Query, WriteTransaction } from "./types.js";
7
8
  /**
8
9
  * Creation parameters for the {@link DynamoDbClient}.
@@ -43,16 +44,13 @@ export declare class DynamoDbClient {
43
44
  private readonly logger;
44
45
  private constructor();
45
46
  /**
46
- * Awaits until the DynamoDB service is ready to accept requests.
47
+ * Creates a table using the CreateTable API.
47
48
  *
48
- * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
49
- * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
50
- * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
51
- * library.
49
+ * @param params - The parameters to use to create the table.
52
50
  *
53
- * @param options - Options to pass to the underlying retry mechanism.
51
+ * @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
54
52
  */
55
- ready(options?: Omit<RetryConfig, "isRetryableError">): Retry<void>;
53
+ createTable(params: CreateTableParams): Promise<void>;
56
54
  /**
57
55
  * Gets an item using the GetItem API.
58
56
  *
@@ -102,6 +100,17 @@ export declare class DynamoDbClient {
102
100
  * @returns The only item matching the query, or `undefined` if no item matches.
103
101
  */
104
102
  queryOne<T extends Attributes = Attributes>(params: Query): Promise<T | undefined>;
103
+ /**
104
+ * Awaits until the DynamoDB service is ready to accept requests.
105
+ *
106
+ * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
107
+ * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
108
+ * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
109
+ * library.
110
+ *
111
+ * @param options - Options to pass to the underlying retry mechanism.
112
+ */
113
+ ready(options?: Omit<RetryConfig, "isRetryableError">): Retry<void>;
105
114
  /**
106
115
  * Executes a write transaction using the TransactWriteItems API.
107
116
  *
package/lib/cjs/client.js CHANGED
@@ -5,6 +5,7 @@ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
5
  const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
6
6
  const null_logger_1 = require("@infra-blocks/null-logger");
7
7
  const retry_1 = require("@infra-blocks/retry");
8
+ const create_table_js_1 = require("./commands/create-table.js");
8
9
  class DynamoDbClientError extends Error {
9
10
  constructor(message, options) {
10
11
  super(message, options);
@@ -25,27 +26,25 @@ class DynamoDbClient {
25
26
  this.logger = logger;
26
27
  }
27
28
  /**
28
- * Awaits until the DynamoDB service is ready to accept requests.
29
+ * Creates a table using the CreateTable API.
29
30
  *
30
- * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
31
- * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
32
- * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
33
- * library.
31
+ * @param params - The parameters to use to create the table.
34
32
  *
35
- * @param options - Options to pass to the underlying retry mechanism.
33
+ * @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
36
34
  */
37
- ready(options) {
38
- return (0, retry_1.retry)(async () => {
39
- await this.client.send(new client_dynamodb_1.ListTablesCommand({}));
40
- }, {
41
- ...options,
42
- isRetryableError: (err) => {
43
- if ("code" in err) {
44
- return err.code === "ECONNRESET";
45
- }
46
- return false;
47
- },
48
- });
35
+ async createTable(params) {
36
+ if (this.logger.isDebugEnabled()) {
37
+ this.logger.debug("createTable(%s)", JSON.stringify(params));
38
+ }
39
+ try {
40
+ const command = create_table_js_1.CreateTable.from(params);
41
+ await this.client.send(command.toAwsCommand());
42
+ }
43
+ catch (err) {
44
+ throw new DynamoDbClientError(`error while creating table: ${JSON.stringify(params)}`, {
45
+ cause: err,
46
+ });
47
+ }
49
48
  }
50
49
  /**
51
50
  * Gets an item using the GetItem API.
@@ -173,6 +172,29 @@ class DynamoDbClient {
173
172
  });
174
173
  }
175
174
  }
175
+ /**
176
+ * Awaits until the DynamoDB service is ready to accept requests.
177
+ *
178
+ * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
179
+ * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
180
+ * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
181
+ * library.
182
+ *
183
+ * @param options - Options to pass to the underlying retry mechanism.
184
+ */
185
+ ready(options) {
186
+ return (0, retry_1.retry)(async () => {
187
+ await this.client.send(new client_dynamodb_1.ListTablesCommand({}));
188
+ }, {
189
+ ...options,
190
+ isRetryableError: (err) => {
191
+ if ("code" in err) {
192
+ return err.code === "ECONNRESET";
193
+ }
194
+ return false;
195
+ },
196
+ });
197
+ }
176
198
  /**
177
199
  * Executes a write transaction using the TransactWriteItems API.
178
200
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { CreateTableCommand, type CreateTableCommandInput } from "@aws-sdk/client-dynamodb";
2
+ import type { Index } from "../types.js";
3
+ export interface CreateTableParams {
4
+ name: string;
5
+ primaryKey: Index;
6
+ gsis?: Record<string, Index>;
7
+ lsis?: Record<string, Index>;
8
+ }
9
+ export declare class CreateTable {
10
+ private readonly name;
11
+ private readonly primaryKey;
12
+ private readonly gsis?;
13
+ private readonly lsis?;
14
+ private constructor();
15
+ toInput(): CreateTableCommandInput;
16
+ toAwsCommand(): CreateTableCommand;
17
+ private gsiInput;
18
+ private lsiInput;
19
+ static from(params: CreateTableParams): CreateTable;
20
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateTable = void 0;
4
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
+ class CreateTable {
6
+ name;
7
+ primaryKey;
8
+ gsis;
9
+ lsis;
10
+ constructor(params) {
11
+ const { name, primaryKey, gsis, lsis } = params;
12
+ this.name = name;
13
+ this.primaryKey = primaryKey;
14
+ this.gsis = gsis;
15
+ this.lsis = lsis;
16
+ }
17
+ toInput() {
18
+ const { name } = this;
19
+ const attributeDefinitions = new Map();
20
+ const primaryKeySchema = keySchema({
21
+ attributeDefinitions,
22
+ key: this.primaryKey,
23
+ });
24
+ const globalSecondaryIndexes = this.gsiInput(attributeDefinitions);
25
+ const localSecondaryIndexes = this.lsiInput(attributeDefinitions);
26
+ return {
27
+ AttributeDefinitions: [...attributeDefinitions.entries()].map(([name, type]) => ({
28
+ AttributeName: name,
29
+ AttributeType: type,
30
+ })),
31
+ TableName: name,
32
+ KeySchema: primaryKeySchema,
33
+ GlobalSecondaryIndexes: globalSecondaryIndexes.length > 0 ? globalSecondaryIndexes : undefined,
34
+ LocalSecondaryIndexes: localSecondaryIndexes.length > 0 ? localSecondaryIndexes : undefined,
35
+ BillingMode: "PAY_PER_REQUEST", // Use on-demand billing mode by default.
36
+ };
37
+ }
38
+ toAwsCommand() {
39
+ return new client_dynamodb_1.CreateTableCommand(this.toInput());
40
+ }
41
+ gsiInput(attributeDefinitions) {
42
+ const { gsis = {} } = this;
43
+ const globalSecondaryIndexes = [];
44
+ for (const [indexName, field] of Object.entries(gsis)) {
45
+ const ks = keySchema({
46
+ attributeDefinitions,
47
+ key: field,
48
+ });
49
+ globalSecondaryIndexes.push({
50
+ IndexName: indexName,
51
+ KeySchema: ks,
52
+ Projection: {
53
+ ProjectionType: "ALL",
54
+ },
55
+ });
56
+ }
57
+ return globalSecondaryIndexes;
58
+ }
59
+ lsiInput(attributeDefinitions) {
60
+ const { lsis = {} } = this;
61
+ const localSecondaryIndexes = [];
62
+ for (const [indexName, field] of Object.entries(lsis)) {
63
+ const ks = keySchema({
64
+ attributeDefinitions,
65
+ key: {
66
+ partitionKey: field.partitionKey,
67
+ sortKey: field.sortKey,
68
+ },
69
+ });
70
+ localSecondaryIndexes.push({
71
+ IndexName: indexName,
72
+ KeySchema: ks,
73
+ Projection: {
74
+ ProjectionType: "ALL",
75
+ },
76
+ });
77
+ }
78
+ return localSecondaryIndexes;
79
+ }
80
+ static from(params) {
81
+ return new CreateTable(params);
82
+ }
83
+ }
84
+ exports.CreateTable = CreateTable;
85
+ function keySchema(params) {
86
+ const { attributeDefinitions, key } = params;
87
+ const keySchema = [];
88
+ attributeDefinitions.set(key.partitionKey.name, key.partitionKey.type);
89
+ keySchema.push({
90
+ AttributeName: key.partitionKey.name,
91
+ KeyType: "HASH",
92
+ });
93
+ if (key.sortKey != null) {
94
+ attributeDefinitions.set(key.sortKey.name, key.sortKey.type);
95
+ keySchema.push({
96
+ AttributeName: key.sortKey.name,
97
+ KeyType: "RANGE",
98
+ });
99
+ }
100
+ return keySchema;
101
+ }
102
+ //# sourceMappingURL=create-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../../src/commands/create-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { CreateTableParams } from "./create-table.js";
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  export * from "./client.js";
2
+ export * from "./commands/index.js";
2
3
  export * from "./condition-expression.js";
3
4
  export * from "./key-condition-expression.js";
4
5
  export * from "./types.js";
package/lib/cjs/index.js CHANGED
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./client.js"), exports);
18
+ __exportStar(require("./commands/index.js"), exports);
18
19
  __exportStar(require("./condition-expression.js"), exports);
19
20
  __exportStar(require("./key-condition-expression.js"), exports);
20
21
  __exportStar(require("./types.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4DAA0C;AAC1C,gEAA8C;AAC9C,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,sDAAoC;AACpC,4DAA0C;AAC1C,gEAA8C;AAC9C,6CAA2B"}
@@ -1,3 +1,4 @@
1
+ import type { ScalarAttributeType } from "@aws-sdk/client-dynamodb";
1
2
  import type { NativeAttributeValue } from "@aws-sdk/lib-dynamodb";
2
3
  import type { ConditionExpression } from "./condition-expression.js";
3
4
  import type { KeyConditionExpression } from "./key-condition-expression.js";
@@ -10,6 +11,15 @@ export interface Attribute {
10
11
  value: AttributeValue;
11
12
  }
12
13
  export type Attributes = Record<AttributeName, NativeAttributeValue>;
14
+ export type IndexFieldType = ScalarAttributeType;
15
+ export interface IndexField {
16
+ name: string;
17
+ type: IndexFieldType;
18
+ }
19
+ export interface Index {
20
+ partitionKey: IndexField;
21
+ sortKey?: IndexField;
22
+ }
13
23
  /**
14
24
  * The input required to call the GetItem API.
15
25
  */
@@ -3,6 +3,7 @@ import type { TranslateConfig } from "@aws-sdk/lib-dynamodb";
3
3
  import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
4
4
  import type { Logger } from "@infra-blocks/logger-interface";
5
5
  import { type Retry, type RetryConfig } from "@infra-blocks/retry";
6
+ import { type CreateTableParams } from "./commands/create-table.js";
6
7
  import type { Attributes, GetItem, PutItem, Query, WriteTransaction } from "./types.js";
7
8
  /**
8
9
  * Creation parameters for the {@link DynamoDbClient}.
@@ -43,16 +44,13 @@ export declare class DynamoDbClient {
43
44
  private readonly logger;
44
45
  private constructor();
45
46
  /**
46
- * Awaits until the DynamoDB service is ready to accept requests.
47
+ * Creates a table using the CreateTable API.
47
48
  *
48
- * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
49
- * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
50
- * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
51
- * library.
49
+ * @param params - The parameters to use to create the table.
52
50
  *
53
- * @param options - Options to pass to the underlying retry mechanism.
51
+ * @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
54
52
  */
55
- ready(options?: Omit<RetryConfig, "isRetryableError">): Retry<void>;
53
+ createTable(params: CreateTableParams): Promise<void>;
56
54
  /**
57
55
  * Gets an item using the GetItem API.
58
56
  *
@@ -102,6 +100,17 @@ export declare class DynamoDbClient {
102
100
  * @returns The only item matching the query, or `undefined` if no item matches.
103
101
  */
104
102
  queryOne<T extends Attributes = Attributes>(params: Query): Promise<T | undefined>;
103
+ /**
104
+ * Awaits until the DynamoDB service is ready to accept requests.
105
+ *
106
+ * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
107
+ * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
108
+ * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
109
+ * library.
110
+ *
111
+ * @param options - Options to pass to the underlying retry mechanism.
112
+ */
113
+ ready(options?: Omit<RetryConfig, "isRetryableError">): Retry<void>;
105
114
  /**
106
115
  * Executes a write transaction using the TransactWriteItems API.
107
116
  *
package/lib/esm/client.js CHANGED
@@ -2,6 +2,7 @@ import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
2
2
  import { DynamoDBDocumentClient, GetCommand, PutCommand, QueryCommand, TransactWriteCommand, } from "@aws-sdk/lib-dynamodb";
3
3
  import { NullLogger } from "@infra-blocks/null-logger";
4
4
  import { retry } from "@infra-blocks/retry";
5
+ import { CreateTable, } from "./commands/create-table.js";
5
6
  export class DynamoDbClientError extends Error {
6
7
  constructor(message, options) {
7
8
  super(message, options);
@@ -21,27 +22,25 @@ export class DynamoDbClient {
21
22
  this.logger = logger;
22
23
  }
23
24
  /**
24
- * Awaits until the DynamoDB service is ready to accept requests.
25
+ * Creates a table using the CreateTable API.
25
26
  *
26
- * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
27
- * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
28
- * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
29
- * library.
27
+ * @param params - The parameters to use to create the table.
30
28
  *
31
- * @param options - Options to pass to the underlying retry mechanism.
29
+ * @see https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
32
30
  */
33
- ready(options) {
34
- return retry(async () => {
35
- await this.client.send(new ListTablesCommand({}));
36
- }, {
37
- ...options,
38
- isRetryableError: (err) => {
39
- if ("code" in err) {
40
- return err.code === "ECONNRESET";
41
- }
42
- return false;
43
- },
44
- });
31
+ async createTable(params) {
32
+ if (this.logger.isDebugEnabled()) {
33
+ this.logger.debug("createTable(%s)", JSON.stringify(params));
34
+ }
35
+ try {
36
+ const command = CreateTable.from(params);
37
+ await this.client.send(command.toAwsCommand());
38
+ }
39
+ catch (err) {
40
+ throw new DynamoDbClientError(`error while creating table: ${JSON.stringify(params)}`, {
41
+ cause: err,
42
+ });
43
+ }
45
44
  }
46
45
  /**
47
46
  * Gets an item using the GetItem API.
@@ -169,6 +168,29 @@ export class DynamoDbClient {
169
168
  });
170
169
  }
171
170
  }
171
+ /**
172
+ * Awaits until the DynamoDB service is ready to accept requests.
173
+ *
174
+ * This is mostly useful in local and test environments, where DynamoDB might be started as a docker container.
175
+ * This function uses the {@link @infra-blocks/retry} with its default configuration. If the user wishes
176
+ * to change those, they can do so by passing the `options` parameter that is simply forwarded to the
177
+ * library.
178
+ *
179
+ * @param options - Options to pass to the underlying retry mechanism.
180
+ */
181
+ ready(options) {
182
+ return retry(async () => {
183
+ await this.client.send(new ListTablesCommand({}));
184
+ }, {
185
+ ...options,
186
+ isRetryableError: (err) => {
187
+ if ("code" in err) {
188
+ return err.code === "ECONNRESET";
189
+ }
190
+ return false;
191
+ },
192
+ });
193
+ }
172
194
  /**
173
195
  * Executes a write transaction using the TransactWriteItems API.
174
196
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { CreateTableCommand, type CreateTableCommandInput } from "@aws-sdk/client-dynamodb";
2
+ import type { Index } from "../types.js";
3
+ export interface CreateTableParams {
4
+ name: string;
5
+ primaryKey: Index;
6
+ gsis?: Record<string, Index>;
7
+ lsis?: Record<string, Index>;
8
+ }
9
+ export declare class CreateTable {
10
+ private readonly name;
11
+ private readonly primaryKey;
12
+ private readonly gsis?;
13
+ private readonly lsis?;
14
+ private constructor();
15
+ toInput(): CreateTableCommandInput;
16
+ toAwsCommand(): CreateTableCommand;
17
+ private gsiInput;
18
+ private lsiInput;
19
+ static from(params: CreateTableParams): CreateTable;
20
+ }
@@ -0,0 +1,98 @@
1
+ import { CreateTableCommand, } from "@aws-sdk/client-dynamodb";
2
+ export class CreateTable {
3
+ name;
4
+ primaryKey;
5
+ gsis;
6
+ lsis;
7
+ constructor(params) {
8
+ const { name, primaryKey, gsis, lsis } = params;
9
+ this.name = name;
10
+ this.primaryKey = primaryKey;
11
+ this.gsis = gsis;
12
+ this.lsis = lsis;
13
+ }
14
+ toInput() {
15
+ const { name } = this;
16
+ const attributeDefinitions = new Map();
17
+ const primaryKeySchema = keySchema({
18
+ attributeDefinitions,
19
+ key: this.primaryKey,
20
+ });
21
+ const globalSecondaryIndexes = this.gsiInput(attributeDefinitions);
22
+ const localSecondaryIndexes = this.lsiInput(attributeDefinitions);
23
+ return {
24
+ AttributeDefinitions: [...attributeDefinitions.entries()].map(([name, type]) => ({
25
+ AttributeName: name,
26
+ AttributeType: type,
27
+ })),
28
+ TableName: name,
29
+ KeySchema: primaryKeySchema,
30
+ GlobalSecondaryIndexes: globalSecondaryIndexes.length > 0 ? globalSecondaryIndexes : undefined,
31
+ LocalSecondaryIndexes: localSecondaryIndexes.length > 0 ? localSecondaryIndexes : undefined,
32
+ BillingMode: "PAY_PER_REQUEST", // Use on-demand billing mode by default.
33
+ };
34
+ }
35
+ toAwsCommand() {
36
+ return new CreateTableCommand(this.toInput());
37
+ }
38
+ gsiInput(attributeDefinitions) {
39
+ const { gsis = {} } = this;
40
+ const globalSecondaryIndexes = [];
41
+ for (const [indexName, field] of Object.entries(gsis)) {
42
+ const ks = keySchema({
43
+ attributeDefinitions,
44
+ key: field,
45
+ });
46
+ globalSecondaryIndexes.push({
47
+ IndexName: indexName,
48
+ KeySchema: ks,
49
+ Projection: {
50
+ ProjectionType: "ALL",
51
+ },
52
+ });
53
+ }
54
+ return globalSecondaryIndexes;
55
+ }
56
+ lsiInput(attributeDefinitions) {
57
+ const { lsis = {} } = this;
58
+ const localSecondaryIndexes = [];
59
+ for (const [indexName, field] of Object.entries(lsis)) {
60
+ const ks = keySchema({
61
+ attributeDefinitions,
62
+ key: {
63
+ partitionKey: field.partitionKey,
64
+ sortKey: field.sortKey,
65
+ },
66
+ });
67
+ localSecondaryIndexes.push({
68
+ IndexName: indexName,
69
+ KeySchema: ks,
70
+ Projection: {
71
+ ProjectionType: "ALL",
72
+ },
73
+ });
74
+ }
75
+ return localSecondaryIndexes;
76
+ }
77
+ static from(params) {
78
+ return new CreateTable(params);
79
+ }
80
+ }
81
+ function keySchema(params) {
82
+ const { attributeDefinitions, key } = params;
83
+ const keySchema = [];
84
+ attributeDefinitions.set(key.partitionKey.name, key.partitionKey.type);
85
+ keySchema.push({
86
+ AttributeName: key.partitionKey.name,
87
+ KeyType: "HASH",
88
+ });
89
+ if (key.sortKey != null) {
90
+ attributeDefinitions.set(key.sortKey.name, key.sortKey.type);
91
+ keySchema.push({
92
+ AttributeName: key.sortKey.name,
93
+ KeyType: "RANGE",
94
+ });
95
+ }
96
+ return keySchema;
97
+ }
98
+ //# sourceMappingURL=create-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../../src/commands/create-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { CreateTableParams } from "./create-table.js";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  export * from "./client.js";
2
+ export * from "./commands/index.js";
2
3
  export * from "./condition-expression.js";
3
4
  export * from "./key-condition-expression.js";
4
5
  export * from "./types.js";
package/lib/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./client.js";
2
+ export * from "./commands/index.js";
2
3
  export * from "./condition-expression.js";
3
4
  export * from "./key-condition-expression.js";
4
5
  export * from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ScalarAttributeType } from "@aws-sdk/client-dynamodb";
1
2
  import type { NativeAttributeValue } from "@aws-sdk/lib-dynamodb";
2
3
  import type { ConditionExpression } from "./condition-expression.js";
3
4
  import type { KeyConditionExpression } from "./key-condition-expression.js";
@@ -10,6 +11,15 @@ export interface Attribute {
10
11
  value: AttributeValue;
11
12
  }
12
13
  export type Attributes = Record<AttributeName, NativeAttributeValue>;
14
+ export type IndexFieldType = ScalarAttributeType;
15
+ export interface IndexField {
16
+ name: string;
17
+ type: IndexFieldType;
18
+ }
19
+ export interface Index {
20
+ partitionKey: IndexField;
21
+ sortKey?: IndexField;
22
+ }
13
23
  /**
14
24
  * The input required to call the GetItem API.
15
25
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infra-blocks/aws-dynamodb",
3
- "version": "0.2.1",
3
+ "version": "0.3.0-alpha.1",
4
4
  "description": "A convenience wrapper over @aws-sdk/client-dynamodb and @aws-sdk/lib-dynamodb.",
5
5
  "keywords": [
6
6
  "aws",
@@ -24,7 +24,9 @@
24
24
  ],
25
25
  "scripts": {
26
26
  "prebuild": "npm run clean",
27
- "build": "tsc -b tsconfig.build.esm.json tsconfig.build.cjs.json",
27
+ "build": "npm run build:esm && npm run build:cjs",
28
+ "build:esm": "tsc -b tsconfig.build.esm.json",
29
+ "build:cjs": "tsc -b tsconfig.build.cjs.json",
28
30
  "postbuild": "scripts/post-build.sh",
29
31
  "clean": "rm -rf lib && rm -f infra-blocks-*.tgz",
30
32
  "compile": "tsc",
@@ -39,15 +41,20 @@
39
41
  },
40
42
  "devDependencies": {
41
43
  "@biomejs/biome": "^2.0.6",
42
- "@infra-blocks/checks": "^0.2.6",
44
+ "@infra-blocks/checks": "^0.2.7",
45
+ "@infra-blocks/node-console-logger": "^0.3.1",
43
46
  "@infra-blocks/test": "^0.4.0",
47
+ "@infra-blocks/types": "^0.10.0",
44
48
  "@types/mocha": "^10.0.10",
45
49
  "@types/node": "^24.0.10",
46
50
  "c8": "^10.1.3",
51
+ "dotenv": "^17.0.1",
47
52
  "lefthook": "^1.11.16",
48
- "mocha": "^11.7.1",
53
+ "mocha": "^11.6.0",
54
+ "radash": "^12.1.1",
49
55
  "tsx": "^4.20.3",
50
- "typescript": "^5.8.3"
56
+ "typescript": "^5.8.3",
57
+ "zod": "^3.25.74"
51
58
  },
52
59
  "engines": {
53
60
  "node": ">=22.0.0"