simple-dynamo-ts 1.0.2
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/LICENSE +339 -0
- package/README.md +454 -0
- package/dist/decorators.d.ts +18 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +116 -0
- package/dist/decorators.js.map +1 -0
- package/dist/exceptions.d.ts +13 -0
- package/dist/exceptions.d.ts.map +1 -0
- package/dist/exceptions.js +29 -0
- package/dist/exceptions.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/simple-dynamodb-repository.d.ts +29 -0
- package/dist/simple-dynamodb-repository.d.ts.map +1 -0
- package/dist/simple-dynamodb-repository.js +187 -0
- package/dist/simple-dynamodb-repository.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
|
|
2
|
+
import { DynamoKey, DynamoKeyMap, QueryOptions } from "./types";
|
|
3
|
+
export declare abstract class DynamoDBRepository<T> {
|
|
4
|
+
protected readonly client: DynamoDBDocumentClient;
|
|
5
|
+
protected readonly entityClass: NewableFunction;
|
|
6
|
+
constructor(client: DynamoDBDocumentClient, entityClass: NewableFunction);
|
|
7
|
+
protected getTableName(): string;
|
|
8
|
+
protected getPKName(indexName?: string): string;
|
|
9
|
+
protected getSKName(indexName?: string): string | undefined;
|
|
10
|
+
protected buildKeyMap(pk: DynamoKey, sk?: DynamoKey): DynamoKeyMap;
|
|
11
|
+
private buildCreateConditionExpression;
|
|
12
|
+
private buildExpressionAttributeNames;
|
|
13
|
+
create(item: T): Promise<T>;
|
|
14
|
+
getItem(pk: DynamoKey, sk?: DynamoKey): Promise<T>;
|
|
15
|
+
put(item: T): Promise<T>;
|
|
16
|
+
softDelete(pk: DynamoKey, sk?: DynamoKey): Promise<void>;
|
|
17
|
+
remove(pk: DynamoKey, sk?: DynamoKey): Promise<void>;
|
|
18
|
+
query(options: QueryOptions): Promise<{
|
|
19
|
+
items: T[];
|
|
20
|
+
lastEvaluatedKey: T;
|
|
21
|
+
count: number;
|
|
22
|
+
}>;
|
|
23
|
+
protected buildQueryExpressions(pk: DynamoKey, pkName: string, sk?: DynamoKey, skName?: string, skComparator?: string): {
|
|
24
|
+
keyConditionExpression: string;
|
|
25
|
+
expressionAttributeNames: Record<string, string>;
|
|
26
|
+
expressionAttributeValues: Record<string, string | number>;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=simple-dynamodb-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-dynamodb-repository.d.ts","sourceRoot":"","sources":["../src/simple-dynamodb-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOhE,8BAAsB,kBAAkB,CAAC,CAAC;IAEtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB;IACjD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe;gBAD5B,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,eAAe;IAGjD,SAAS,CAAC,YAAY,IAAI,MAAM;IAUhC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAe/C,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAW3D,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,YAAY;IAoBlE,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,6BAA6B;IAa/B,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA8B3B,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAoBlD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBxB,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD,KAAK,CACT,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,gBAAgB,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAoD9D,SAAS,CAAC,qBAAqB,CAC7B,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,SAAS,EACd,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB;QACD,sBAAsB,EAAE,MAAM,CAAC;QAC/B,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;KAC5D;CAyBF"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { GetCommand, PutCommand, DeleteCommand, QueryCommand, } from "@aws-sdk/lib-dynamodb";
|
|
2
|
+
import { getDynamoTableName, getPartitionKeyName, getSortKeyName, getIndexPartitionKeyName, getIndexSortKeyName, } from "./decorators";
|
|
3
|
+
import { DecoratorMissingError, InvalidParametersError, ItemNotFoundError, } from "./exceptions";
|
|
4
|
+
export class DynamoDBRepository {
|
|
5
|
+
client;
|
|
6
|
+
entityClass;
|
|
7
|
+
constructor(client, entityClass) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
this.entityClass = entityClass;
|
|
10
|
+
}
|
|
11
|
+
getTableName() {
|
|
12
|
+
const tableName = getDynamoTableName(this.entityClass);
|
|
13
|
+
if (!tableName) {
|
|
14
|
+
throw new DecoratorMissingError(`Table name not found for entity class "${this.entityClass.name}". Make sure the class is decorated with @DynamoTable.`);
|
|
15
|
+
}
|
|
16
|
+
return tableName;
|
|
17
|
+
}
|
|
18
|
+
getPKName(indexName) {
|
|
19
|
+
let pkName = undefined;
|
|
20
|
+
if (indexName)
|
|
21
|
+
pkName = getIndexPartitionKeyName(this.entityClass, indexName);
|
|
22
|
+
pkName = pkName ? pkName : getPartitionKeyName(this.entityClass);
|
|
23
|
+
if (pkName)
|
|
24
|
+
return pkName;
|
|
25
|
+
throw new DecoratorMissingError(`Partition key not found for entity class "${this.entityClass.name}". Make sure a property is decorated with @PartitionKey.`);
|
|
26
|
+
}
|
|
27
|
+
getSKName(indexName) {
|
|
28
|
+
let skName = undefined;
|
|
29
|
+
if (indexName)
|
|
30
|
+
skName = getIndexSortKeyName(this.entityClass, indexName);
|
|
31
|
+
return skName ? skName : getSortKeyName(this.entityClass);
|
|
32
|
+
}
|
|
33
|
+
buildKeyMap(pk, sk) {
|
|
34
|
+
const partitionKey = this.getPKName();
|
|
35
|
+
const keys = { [partitionKey]: pk };
|
|
36
|
+
if (sk !== undefined) {
|
|
37
|
+
const sortKey = this.getSKName();
|
|
38
|
+
if (!sortKey) {
|
|
39
|
+
throw new DecoratorMissingError(`Sort key provided but entity class "${this.entityClass.name}" does not have a sort key defined. Make sure a property is decorated with @SortKey.`);
|
|
40
|
+
}
|
|
41
|
+
keys[sortKey] = sk;
|
|
42
|
+
}
|
|
43
|
+
return keys;
|
|
44
|
+
}
|
|
45
|
+
buildCreateConditionExpression(skName) {
|
|
46
|
+
if (skName) {
|
|
47
|
+
return `attribute_not_exists(#pk) AND attribute_not_exists(#sk)`;
|
|
48
|
+
}
|
|
49
|
+
return `attribute_not_exists(#pk)`;
|
|
50
|
+
}
|
|
51
|
+
buildExpressionAttributeNames(pkName, skName) {
|
|
52
|
+
const expressionAttributeNames = {
|
|
53
|
+
"#pk": pkName,
|
|
54
|
+
};
|
|
55
|
+
if (skName)
|
|
56
|
+
expressionAttributeNames["#sk"] = skName;
|
|
57
|
+
return expressionAttributeNames;
|
|
58
|
+
}
|
|
59
|
+
async create(item) {
|
|
60
|
+
if (!item) {
|
|
61
|
+
throw new Error("Item cannot be null or undefined");
|
|
62
|
+
}
|
|
63
|
+
const tableName = this.getTableName();
|
|
64
|
+
const partitionKey = this.getPKName();
|
|
65
|
+
const sortKey = this.getSKName();
|
|
66
|
+
const conditionExpression = this.buildCreateConditionExpression(sortKey);
|
|
67
|
+
const expressionAttributeNames = this.buildExpressionAttributeNames(partitionKey, sortKey);
|
|
68
|
+
const command = new PutCommand({
|
|
69
|
+
TableName: tableName,
|
|
70
|
+
Item: item,
|
|
71
|
+
ConditionExpression: conditionExpression,
|
|
72
|
+
ExpressionAttributeNames: expressionAttributeNames,
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
await this.client.send(command);
|
|
76
|
+
return item;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error("Error creating item in DynamoDB:", error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async getItem(pk, sk) {
|
|
84
|
+
const tableName = this.getTableName();
|
|
85
|
+
const key = this.buildKeyMap(pk, sk);
|
|
86
|
+
const command = new GetCommand({
|
|
87
|
+
TableName: tableName,
|
|
88
|
+
Key: key,
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const response = await this.client.send(command);
|
|
92
|
+
if (response.Item)
|
|
93
|
+
return response.Item;
|
|
94
|
+
throw new ItemNotFoundError("Item not found in your DynamoDB Table!");
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error("Error getting item from DynamoDB:", error);
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async put(item) {
|
|
102
|
+
if (!item)
|
|
103
|
+
throw new InvalidParametersError("Item cannot be null or undefined!");
|
|
104
|
+
const command = new PutCommand({
|
|
105
|
+
TableName: this.getTableName(),
|
|
106
|
+
Item: item,
|
|
107
|
+
});
|
|
108
|
+
try {
|
|
109
|
+
await this.client.send(command);
|
|
110
|
+
return item;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error("Error putting item to DynamoDB:", error);
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async softDelete(pk, sk) {
|
|
118
|
+
const item = await this.getItem(pk, sk);
|
|
119
|
+
item["deletedAt"] = new Date().toISOString();
|
|
120
|
+
await this.put(item);
|
|
121
|
+
}
|
|
122
|
+
async remove(pk, sk) {
|
|
123
|
+
const command = new DeleteCommand({
|
|
124
|
+
TableName: this.getTableName(),
|
|
125
|
+
Key: this.buildKeyMap(pk, sk),
|
|
126
|
+
});
|
|
127
|
+
try {
|
|
128
|
+
await this.client.send(command);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error("Error deleting item from DynamoDB:", error);
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async query(options) {
|
|
136
|
+
const { pk, sk, skComparator = "=", indexName, scanIndexForward = true, limit, } = options;
|
|
137
|
+
const tableName = this.getTableName();
|
|
138
|
+
const pkName = this.getPKName(indexName);
|
|
139
|
+
const skName = sk !== undefined ? this.getSKName(indexName) : undefined;
|
|
140
|
+
if (sk !== undefined && !skName) {
|
|
141
|
+
throw new DecoratorMissingError(`Sort key provided but no sort key found in entity class "${this.entityClass.name}". Make sure a property is decorated with @SortKey or @IndexSortKey.`);
|
|
142
|
+
}
|
|
143
|
+
const { keyConditionExpression, expressionAttributeNames, expressionAttributeValues, } = this.buildQueryExpressions(pk, pkName, sk, skName, skComparator);
|
|
144
|
+
const commandInput = {
|
|
145
|
+
TableName: tableName,
|
|
146
|
+
IndexName: indexName,
|
|
147
|
+
KeyConditionExpression: keyConditionExpression,
|
|
148
|
+
ExpressionAttributeNames: expressionAttributeNames,
|
|
149
|
+
ExpressionAttributeValues: expressionAttributeValues,
|
|
150
|
+
Limit: limit,
|
|
151
|
+
ScanIndexForward: scanIndexForward,
|
|
152
|
+
};
|
|
153
|
+
try {
|
|
154
|
+
const response = await this.client.send(new QueryCommand(commandInput));
|
|
155
|
+
return {
|
|
156
|
+
items: response.Items,
|
|
157
|
+
lastEvaluatedKey: response.LastEvaluatedKey,
|
|
158
|
+
count: response.Count ? response.Count : 0,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error("Error querying items from DynamoDB:", error);
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
buildQueryExpressions(pk, pkName, sk, skName, skComparator) {
|
|
167
|
+
const expressionAttributeNames = { "#pk": pkName };
|
|
168
|
+
const expressionAttributeValues = {
|
|
169
|
+
":pkValue": pk,
|
|
170
|
+
};
|
|
171
|
+
let keyConditionExpression = "#pk = :pkValue";
|
|
172
|
+
if (sk !== undefined && skName) {
|
|
173
|
+
const skComparisonString = skComparator === "begins_with"
|
|
174
|
+
? "begins_with(#sk, :skValue)"
|
|
175
|
+
: `#sk ${skComparator} :skValue`;
|
|
176
|
+
keyConditionExpression = `${keyConditionExpression} AND ${skComparisonString}`;
|
|
177
|
+
expressionAttributeNames["#sk"] = skName;
|
|
178
|
+
expressionAttributeValues[":skValue"] = sk;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
keyConditionExpression,
|
|
182
|
+
expressionAttributeNames,
|
|
183
|
+
expressionAttributeValues,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=simple-dynamodb-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-dynamodb-repository.js","sourceRoot":"","sources":["../src/simple-dynamodb-repository.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type QueryOptions = {
|
|
2
|
+
pk: DynamoKey;
|
|
3
|
+
sk?: DynamoKey;
|
|
4
|
+
skComparator?: "=" | ">" | "<" | ">=" | "<=" | "BETWEEN" | "begins_with";
|
|
5
|
+
indexName?: string;
|
|
6
|
+
scanIndexForward?: boolean;
|
|
7
|
+
limit?: number;
|
|
8
|
+
};
|
|
9
|
+
export type DynamoKey = string | number;
|
|
10
|
+
export type DynamoKeyMap = Record<string, DynamoKey>;
|
|
11
|
+
export type DynamoEntityTarget = NewableFunction | {
|
|
12
|
+
constructor: NewableFunction;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,SAAS,CAAC;IACd,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AACxC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAKrD,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf;IAAE,WAAW,EAAE,eAAe,CAAA;CAAE,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "simple-dynamo-ts",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "A simple TypeScript library for working with DynamoDB using decorators and a repository pattern",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.cjs"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"husky": {
|
|
18
|
+
"hooks": {
|
|
19
|
+
"pre-commit": "sh hooks/pre-commit",
|
|
20
|
+
"pre-push": "sh hooks/pre-push"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"dynamodb",
|
|
25
|
+
"aws",
|
|
26
|
+
"typescript",
|
|
27
|
+
"repository",
|
|
28
|
+
"decorators",
|
|
29
|
+
"orm"
|
|
30
|
+
],
|
|
31
|
+
"author": "Blimit",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@aws-sdk/lib-dynamodb": "^3.940.0",
|
|
35
|
+
"reflect-metadata": "^0.2.2"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@commitlint/cli": "^19.8.1",
|
|
39
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
40
|
+
"@eslint/eslintrc": "^3.2.0",
|
|
41
|
+
"@eslint/js": "^9.18.0",
|
|
42
|
+
"@types/jest": "^29.5.14",
|
|
43
|
+
"@types/node": "^22.10.7",
|
|
44
|
+
"eslint": "^9.18.0",
|
|
45
|
+
"eslint-config-prettier": "^10.0.1",
|
|
46
|
+
"eslint-plugin-prettier": "^5.2.2",
|
|
47
|
+
"globals": "^16.0.0",
|
|
48
|
+
"husky": "^9.1.7",
|
|
49
|
+
"jest": "^29.7.0",
|
|
50
|
+
"prettier": "^3.4.2",
|
|
51
|
+
"ts-jest": "^29.2.5",
|
|
52
|
+
"typescript": "^5.7.3",
|
|
53
|
+
"typescript-eslint": "^8.20.0"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"@aws-sdk/lib-dynamodb": "^3.0.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsc -p tsconfig.build.json",
|
|
60
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
61
|
+
"lint": "eslint \"src/**/*.ts\" --fix",
|
|
62
|
+
"test": "jest",
|
|
63
|
+
"test:watch": "jest --watch",
|
|
64
|
+
"test:cov": "jest --coverage"
|
|
65
|
+
}
|
|
66
|
+
}
|