dynamodb-helpers 1.0.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/.gitattributes +2 -0
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/index.js +322 -0
- package/dist/index.js.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/updateExpressions.js +142 -0
- package/dist/updateExpressions.js.map +1 -0
- package/dist/utils.js +48 -0
- package/dist/utils.js.map +1 -0
- package/index.ts +439 -0
- package/package.json +33 -0
- package/tsconfig.json +108 -0
- package/types.ts +29 -0
- package/updateExpressions.ts +167 -0
- package/utils.ts +50 -0
package/.gitattributes
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Christina Yang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# dynamodb-helpers
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install dynamodb-helpers
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
Create a file (I use `lib/dynamodb.ts`). All the helper functions will be exported from this file. Paste the following code in the file:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
export {
|
|
15
|
+
dynamodb,
|
|
16
|
+
getItem,
|
|
17
|
+
putItem,
|
|
18
|
+
queryStartsWith,
|
|
19
|
+
batchWriteAll,
|
|
20
|
+
queryAllItems,
|
|
21
|
+
scanAll,
|
|
22
|
+
batchGetItem,
|
|
23
|
+
updateItem,
|
|
24
|
+
client,
|
|
25
|
+
ddbDocClient,
|
|
26
|
+
} = createDynamoDBHelpers(dbConfig, translateConfig);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`dbConfig` and `translateConfig` come from the DyanmoDB Docs. Here is an example of how to set them up:
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// lib/dynamodb.ts
|
|
34
|
+
import createDynamoDBHelpers from 'dynamodb-helpers';
|
|
35
|
+
|
|
36
|
+
const marshallOptions = {
|
|
37
|
+
// Whether to automatically convert empty strings, blobs, and sets to `null`.
|
|
38
|
+
convertEmptyValues: false, // false, by default.
|
|
39
|
+
// Whether to remove undefined values while marshalling.
|
|
40
|
+
removeUndefinedValues: true, // false, by default.
|
|
41
|
+
// Whether to convert typeof object to map attribute.
|
|
42
|
+
convertClassInstanceToMap: false, // false, by default.
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const unmarshallOptions = {
|
|
46
|
+
// Whether to return numbers as a string instead of converting them to native JavaScript numbers.
|
|
47
|
+
wrapNumbers: false, // false, by default.
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const translateConfig = { marshallOptions, unmarshallOptions };
|
|
51
|
+
export const dbConfig: DynamoDBClientConfig = {
|
|
52
|
+
region: process.env.REGION,
|
|
53
|
+
credentials: {
|
|
54
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
55
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
dynamodb,
|
|
61
|
+
getItem,
|
|
62
|
+
putItem,
|
|
63
|
+
queryStartsWith,
|
|
64
|
+
batchWriteAll,
|
|
65
|
+
queryAllItems,
|
|
66
|
+
scanAll,
|
|
67
|
+
batchGetItem,
|
|
68
|
+
updateItem,
|
|
69
|
+
client,
|
|
70
|
+
ddbDocClient,
|
|
71
|
+
} = createDynamoDBHelpers(dbConfig, translateConfig);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Now simply import a function to use it!
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
import { updateItem } from '@/lib/dynamodb';
|
|
78
|
+
|
|
79
|
+
await updateItem(process.env.TABLE_NAME!, { pk: '1', sk: 'John Doe' }, {
|
|
80
|
+
set: {
|
|
81
|
+
date: '2021-01-01',
|
|
82
|
+
name: 'John Doe',
|
|
83
|
+
},
|
|
84
|
+
setIfNotExists: {
|
|
85
|
+
age: 30,
|
|
86
|
+
dateOfBirth: '1990-01-01',
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
```
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DB_RESERVED_WORDS = void 0;
|
|
27
|
+
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
28
|
+
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb"); // ES6 import
|
|
29
|
+
const utils_1 = require("./utils");
|
|
30
|
+
const updateExpressions_1 = require("./updateExpressions");
|
|
31
|
+
exports.DB_RESERVED_WORDS = new Set([
|
|
32
|
+
"name",
|
|
33
|
+
"date",
|
|
34
|
+
"count",
|
|
35
|
+
"counter",
|
|
36
|
+
// 'duration'
|
|
37
|
+
]);
|
|
38
|
+
const createDynamoDBHelpers = (dbConfig, translateConfig) => {
|
|
39
|
+
const client = new client_dynamodb_1.DynamoDBClient(dbConfig);
|
|
40
|
+
const ddbDocClient = lib_dynamodb_1.DynamoDBDocumentClient.from(client, translateConfig); // client is DynamoDB client
|
|
41
|
+
const update = (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.UpdateCommand(params)); });
|
|
42
|
+
const batchWriteNative = (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.BatchWriteCommand(params)); });
|
|
43
|
+
const dynamodb = {
|
|
44
|
+
client: ddbDocClient,
|
|
45
|
+
get: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.GetCommand(params)); }),
|
|
46
|
+
getAWSFormat: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield client.send(new lib_dynamodb_1.GetCommand(params)); }),
|
|
47
|
+
put: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.PutCommand(params)); }),
|
|
48
|
+
query: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.QueryCommand(params)); }),
|
|
49
|
+
update,
|
|
50
|
+
delete: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.DeleteCommand(params)); }),
|
|
51
|
+
batchWrite: batchWriteNative,
|
|
52
|
+
batchGet: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.BatchGetCommand(params)); }),
|
|
53
|
+
transactWrite: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.TransactWriteCommand(params)); }),
|
|
54
|
+
ogUpdate: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new client_dynamodb_1.UpdateItemCommand(params)); }),
|
|
55
|
+
scan: (params) => __awaiter(void 0, void 0, void 0, function* () { return yield ddbDocClient.send(new lib_dynamodb_1.ScanCommand(params)); }),
|
|
56
|
+
};
|
|
57
|
+
const getItem = (Key_1, ...args_1) => __awaiter(void 0, [Key_1, ...args_1], void 0, function* (Key, TableName = process.env.TABLE_NAME) {
|
|
58
|
+
try {
|
|
59
|
+
const res = yield dynamodb.get({
|
|
60
|
+
TableName,
|
|
61
|
+
Key,
|
|
62
|
+
});
|
|
63
|
+
return res.Item;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (!(error instanceof Error))
|
|
67
|
+
throw new Error(String(error));
|
|
68
|
+
console.log("get item");
|
|
69
|
+
console.error(error.message);
|
|
70
|
+
throw error;
|
|
71
|
+
// return undefined
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const putItem = (Item_1, ...args_1) => __awaiter(void 0, [Item_1, ...args_1], void 0, function* (Item, TableName = process.env.TABLE_NAME, options) {
|
|
75
|
+
try {
|
|
76
|
+
return yield dynamodb.put(Object.assign({ TableName,
|
|
77
|
+
Item }, options));
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.log("put item", Item);
|
|
81
|
+
console.error(error);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const queryByPkOnly = (pk, TableName, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
try {
|
|
87
|
+
let KeyConditionExpression = "#userId = :userId";
|
|
88
|
+
const res = yield dynamodb.query(Object.assign({ TableName,
|
|
89
|
+
KeyConditionExpression, ExpressionAttributeNames: {
|
|
90
|
+
"#userId": pk.name,
|
|
91
|
+
}, ExpressionAttributeValues: {
|
|
92
|
+
":userId": pk.value,
|
|
93
|
+
} }, options));
|
|
94
|
+
return res.Items;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (!(error instanceof Error))
|
|
98
|
+
throw new Error(String(error));
|
|
99
|
+
console.log("queryByPkOnly error");
|
|
100
|
+
console.error(error.message);
|
|
101
|
+
throw error;
|
|
102
|
+
// return undefined
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const queryStartsWith = (pk, sk, TableName, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
if (!sk)
|
|
107
|
+
return queryByPkOnly(pk, TableName, options);
|
|
108
|
+
if (!sk.startsWith && !sk.equals)
|
|
109
|
+
throw new Error("sk.startsWith or sk.equals is required");
|
|
110
|
+
try {
|
|
111
|
+
let KeyConditionExpression = "#userId = :userId";
|
|
112
|
+
if (sk.startsWith) {
|
|
113
|
+
KeyConditionExpression += " AND begins_with(#id, :idPrefix)";
|
|
114
|
+
}
|
|
115
|
+
if (sk.equals) {
|
|
116
|
+
KeyConditionExpression += " AND #id = :idFull";
|
|
117
|
+
}
|
|
118
|
+
const res = yield dynamodb.query(Object.assign({ TableName,
|
|
119
|
+
KeyConditionExpression, ExpressionAttributeNames: {
|
|
120
|
+
"#userId": pk.name,
|
|
121
|
+
"#id": sk.name,
|
|
122
|
+
}, ExpressionAttributeValues: Object.assign(Object.assign({ ":userId": pk.value }, (sk.startsWith && { ":idPrefix": sk.startsWith })), (sk.equals && { ":idFull": sk.equals })) }, options));
|
|
123
|
+
return res.Items;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (!(error instanceof Error))
|
|
127
|
+
throw new Error(String(error));
|
|
128
|
+
console.log("queryStartsWith error");
|
|
129
|
+
console.error(error.message);
|
|
130
|
+
throw error;
|
|
131
|
+
// return undefined
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
function batchWriteAll(params) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
if (!params.RequestItems)
|
|
137
|
+
return;
|
|
138
|
+
const tables = Object.keys(params.RequestItems);
|
|
139
|
+
let count = 0;
|
|
140
|
+
let req = { RequestItems: {} };
|
|
141
|
+
try {
|
|
142
|
+
for (let table of tables) {
|
|
143
|
+
const items = params.RequestItems[table];
|
|
144
|
+
while (items.length >= 25) {
|
|
145
|
+
const writeItems = items.splice(0, 25);
|
|
146
|
+
try {
|
|
147
|
+
yield batchWriteNative(Object.assign(Object.assign({}, params), { RequestItems: { [table]: writeItems } }));
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
console.log("in while", writeItems.length, items.length);
|
|
151
|
+
console.error(e);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (items.length + count < 25) {
|
|
155
|
+
if (items.length > 0)
|
|
156
|
+
req.RequestItems[table] = items;
|
|
157
|
+
count += items.length;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
req.RequestItems[table] = items.splice(0, 25 - count);
|
|
162
|
+
yield batchWriteNative(Object.assign(Object.assign({}, params), req));
|
|
163
|
+
count = items.length;
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
const query = Object.assign(Object.assign({}, params), req);
|
|
167
|
+
console.log("in last", count, Object.keys(query.RequestItems).length, query);
|
|
168
|
+
console.log(e);
|
|
169
|
+
}
|
|
170
|
+
if (items.length > 0)
|
|
171
|
+
req.RequestItems[table] = items;
|
|
172
|
+
}
|
|
173
|
+
// last batch
|
|
174
|
+
if (count > 0)
|
|
175
|
+
yield batchWriteNative(Object.assign(Object.assign({}, params), req));
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
console.error(error);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
const queryAllItems = (params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
183
|
+
let items = [];
|
|
184
|
+
try {
|
|
185
|
+
let LastEvaluatedKey;
|
|
186
|
+
do {
|
|
187
|
+
if (LastEvaluatedKey)
|
|
188
|
+
params.ExclusiveStartKey = LastEvaluatedKey;
|
|
189
|
+
const res = yield dynamodb.query(params);
|
|
190
|
+
LastEvaluatedKey = res.LastEvaluatedKey;
|
|
191
|
+
items = items.concat(res.Items || []);
|
|
192
|
+
} while (LastEvaluatedKey);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
console.error(error);
|
|
196
|
+
}
|
|
197
|
+
return items;
|
|
198
|
+
});
|
|
199
|
+
const scanAll = (TableName, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
200
|
+
if (process.env.NODE_ENV !== "development")
|
|
201
|
+
throw new Error("HOW DARE YOU SCAN MY TABLE");
|
|
202
|
+
let items = [];
|
|
203
|
+
try {
|
|
204
|
+
let LastEvaluatedKey;
|
|
205
|
+
do {
|
|
206
|
+
let params = Object.assign({ TableName }, options);
|
|
207
|
+
if (LastEvaluatedKey)
|
|
208
|
+
params.ExclusiveStartKey = LastEvaluatedKey;
|
|
209
|
+
const res = yield dynamodb.scan(params);
|
|
210
|
+
LastEvaluatedKey = res.LastEvaluatedKey;
|
|
211
|
+
items = items.concat(res.Items || []);
|
|
212
|
+
} while (LastEvaluatedKey);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error(error);
|
|
216
|
+
}
|
|
217
|
+
return items;
|
|
218
|
+
});
|
|
219
|
+
const batchGetItem = (Keys_1, ...args_1) => __awaiter(void 0, [Keys_1, ...args_1], void 0, function* (Keys, TableName = process.env.TABLE_NAME, options) {
|
|
220
|
+
if (Keys.length === 0)
|
|
221
|
+
return;
|
|
222
|
+
const { ProjectionExpression, ExpressionAttributeNames, maxGet } = options || {};
|
|
223
|
+
if (maxGet && Keys.length > maxGet)
|
|
224
|
+
throw new Error("Keys length exceeds maxGet");
|
|
225
|
+
const currentKeys = Keys.slice(0, 25);
|
|
226
|
+
const laterKeys = Keys.slice(25);
|
|
227
|
+
const data = yield dynamodb.batchGet({
|
|
228
|
+
RequestItems: {
|
|
229
|
+
[TableName]: Object.assign(Object.assign({ Keys: currentKeys }, (ProjectionExpression !== undefined && {
|
|
230
|
+
ProjectionExpression,
|
|
231
|
+
})), (ExpressionAttributeNames !== undefined && {
|
|
232
|
+
ExpressionAttributeNames,
|
|
233
|
+
})),
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
if (!(data.Responses && data.Responses[TableName]))
|
|
237
|
+
return;
|
|
238
|
+
const items = data.Responses[TableName];
|
|
239
|
+
if (laterKeys.length > 0) {
|
|
240
|
+
const otherItems = yield batchGetItem(laterKeys, TableName, options);
|
|
241
|
+
if (otherItems)
|
|
242
|
+
return items.concat(otherItems);
|
|
243
|
+
}
|
|
244
|
+
return items;
|
|
245
|
+
});
|
|
246
|
+
const updateItem = (TableName_1, Key_1, updates_1, ...args_1) => __awaiter(void 0, [TableName_1, Key_1, updates_1, ...args_1], void 0, function* (TableName, Key, updates, preventNewItem = true, options) {
|
|
247
|
+
if ((0, utils_1.isEmpty)(updates))
|
|
248
|
+
return;
|
|
249
|
+
// console.log('in update')
|
|
250
|
+
// console.log(updates)
|
|
251
|
+
for (let key of Object.keys(Key)) {
|
|
252
|
+
if (updates.set && key in updates.set) {
|
|
253
|
+
delete updates.set[key];
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const primaryKey = (options === null || options === void 0 ? void 0 : options.primaryKey) || ("userId" in Key ? "userId" : "pk");
|
|
257
|
+
const ExpressionAttributeValues = {};
|
|
258
|
+
const ExpressionAttributeNames = {};
|
|
259
|
+
const SetUpdateExpression = (updates.set || updates.listAppend || updates.setIfNotExists) &&
|
|
260
|
+
(0, updateExpressions_1.updateSetExpressions)({
|
|
261
|
+
set: Object.assign(Object.assign({}, updates.set), { updatedAt: Date.now() }),
|
|
262
|
+
listAppend: updates.listAppend,
|
|
263
|
+
setIfNotExists: updates.setIfNotExists,
|
|
264
|
+
}, ExpressionAttributeValues, ExpressionAttributeNames);
|
|
265
|
+
const RemoveUpdateExpression = updates.remove &&
|
|
266
|
+
(0, updateExpressions_1.updateRemoveExpressions)(updates.remove, ExpressionAttributeNames);
|
|
267
|
+
const AddUpdateExpression = updates.add &&
|
|
268
|
+
(0, updateExpressions_1.updateAddDeleteExpressions)("add", updates.add, ExpressionAttributeValues, ExpressionAttributeNames);
|
|
269
|
+
const DeleteUpdateExpression = updates.delete &&
|
|
270
|
+
(0, updateExpressions_1.updateAddDeleteExpressions)("delete", updates.delete, ExpressionAttributeValues, ExpressionAttributeNames);
|
|
271
|
+
const UpdateExpression = [
|
|
272
|
+
SetUpdateExpression,
|
|
273
|
+
RemoveUpdateExpression,
|
|
274
|
+
AddUpdateExpression,
|
|
275
|
+
DeleteUpdateExpression,
|
|
276
|
+
]
|
|
277
|
+
.filter(Boolean)
|
|
278
|
+
.join(" ");
|
|
279
|
+
const params = Object.assign(Object.assign(Object.assign({ TableName,
|
|
280
|
+
Key,
|
|
281
|
+
UpdateExpression,
|
|
282
|
+
ExpressionAttributeNames }, (!(0, utils_1.isEmpty)(ExpressionAttributeValues) && {
|
|
283
|
+
ExpressionAttributeValues,
|
|
284
|
+
})), (preventNewItem && {
|
|
285
|
+
ConditionExpression: `attribute_exists(${primaryKey})`,
|
|
286
|
+
})), ((options === null || options === void 0 ? void 0 : options.ReturnValues) && {
|
|
287
|
+
ReturnValues: options.ReturnValues,
|
|
288
|
+
}));
|
|
289
|
+
if (options === null || options === void 0 ? void 0 : options.debug)
|
|
290
|
+
console.log("params", params);
|
|
291
|
+
try {
|
|
292
|
+
return yield update(params);
|
|
293
|
+
}
|
|
294
|
+
catch (e) {
|
|
295
|
+
if (!(e instanceof Error))
|
|
296
|
+
throw e;
|
|
297
|
+
if (e.message.startsWith("ConditionalCheckFailedException") &&
|
|
298
|
+
!(options === null || options === void 0 ? void 0 : options.throwConditionalFail))
|
|
299
|
+
return;
|
|
300
|
+
console.log(e);
|
|
301
|
+
console.log("params", params);
|
|
302
|
+
// @ts-expect-error
|
|
303
|
+
throw new Error(e);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
return {
|
|
307
|
+
dynamodb,
|
|
308
|
+
getItem,
|
|
309
|
+
putItem,
|
|
310
|
+
queryStartsWith,
|
|
311
|
+
batchWriteAll,
|
|
312
|
+
queryAllItems,
|
|
313
|
+
scanAll,
|
|
314
|
+
batchGetItem,
|
|
315
|
+
updateItem,
|
|
316
|
+
client,
|
|
317
|
+
ddbDocClient,
|
|
318
|
+
};
|
|
319
|
+
};
|
|
320
|
+
exports.default = createDynamoDBHelpers;
|
|
321
|
+
__exportStar(require("./types"), exports);
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateAddDeleteExpressions = exports.updateRemoveExpressions = exports.updateSetExpressions = void 0;
|
|
4
|
+
const utils_1 = require("./utils");
|
|
5
|
+
const ADD_ON = "AO1";
|
|
6
|
+
const updateSetExpressions = (updates, ExpressionAttributeValues, ExpressionAttributeNames) => {
|
|
7
|
+
const { set, listAppend, setIfNotExists } = updates;
|
|
8
|
+
const str = set
|
|
9
|
+
? Object.keys(set).map(function (key, i) {
|
|
10
|
+
const { name, id } = handleSet(key, i, set);
|
|
11
|
+
return `${name} = :${id + i}${ADD_ON}valset`;
|
|
12
|
+
})
|
|
13
|
+
: [];
|
|
14
|
+
const ifNotExists = setIfNotExists
|
|
15
|
+
? Object.keys(setIfNotExists).map(function (key, i) {
|
|
16
|
+
const { name, id } = handleSet(key, i, setIfNotExists);
|
|
17
|
+
return `${name} = if_not_exists(${name}, :${id + i}${ADD_ON}valset)`;
|
|
18
|
+
})
|
|
19
|
+
: [];
|
|
20
|
+
const list = listAppend
|
|
21
|
+
? Object.keys(listAppend).map((path) => {
|
|
22
|
+
const id = (0, utils_1.randomId)();
|
|
23
|
+
const name = (0, utils_1.handlePath)(path, ExpressionAttributeNames);
|
|
24
|
+
const valKey = ":arr" + id;
|
|
25
|
+
ExpressionAttributeValues[valKey] = listAppend[path];
|
|
26
|
+
ExpressionAttributeValues[":empty_list"] = [];
|
|
27
|
+
return `${name} = list_append(if_not_exists(${name}, :empty_list), ${valKey})`;
|
|
28
|
+
})
|
|
29
|
+
: [];
|
|
30
|
+
return "set " + [...str, ...list, ...ifNotExists].join(", ");
|
|
31
|
+
function handleSet(key, i, set) {
|
|
32
|
+
const id = (0, utils_1.randomId)();
|
|
33
|
+
const name = (0, utils_1.handlePath)(key, ExpressionAttributeNames);
|
|
34
|
+
ExpressionAttributeValues[`:${id + i}${ADD_ON}valset`] = set[key];
|
|
35
|
+
return { name, id };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.updateSetExpressions = updateSetExpressions;
|
|
39
|
+
const updateRemoveExpressions = (attributes, ExpressionAttributeNames) => {
|
|
40
|
+
if (!Array.isArray(attributes) ||
|
|
41
|
+
attributes.length === 0 ||
|
|
42
|
+
!attributes.every((x) => typeof x === "string"))
|
|
43
|
+
return undefined;
|
|
44
|
+
const UpdateExpression = "remove " +
|
|
45
|
+
attributes
|
|
46
|
+
.map((x) => {
|
|
47
|
+
return (0, utils_1.handlePath)(x, ExpressionAttributeNames);
|
|
48
|
+
})
|
|
49
|
+
.join(", ");
|
|
50
|
+
return UpdateExpression;
|
|
51
|
+
};
|
|
52
|
+
exports.updateRemoveExpressions = updateRemoveExpressions;
|
|
53
|
+
const updateAddDeleteExpressions = (op, pathValuesDict, ExpressionAttributeValues, ExpressionAttributeNames) => {
|
|
54
|
+
if ((0, utils_1.isEmpty)(pathValuesDict) || (op !== "add" && op !== "delete"))
|
|
55
|
+
return;
|
|
56
|
+
const exp = Object.keys(pathValuesDict)
|
|
57
|
+
.map((path) => {
|
|
58
|
+
const id = (0, utils_1.randomId)();
|
|
59
|
+
const valKey = ":p" + id;
|
|
60
|
+
const value = pathValuesDict[path];
|
|
61
|
+
ExpressionAttributeValues[valKey] =
|
|
62
|
+
typeof value === "number" ? value : new Set([...value]);
|
|
63
|
+
return `${(0, utils_1.handlePath)(path, ExpressionAttributeNames)} ${valKey}`;
|
|
64
|
+
})
|
|
65
|
+
.join(", ");
|
|
66
|
+
const UpdateExpression = `${op} ${exp}`;
|
|
67
|
+
return UpdateExpression;
|
|
68
|
+
};
|
|
69
|
+
exports.updateAddDeleteExpressions = updateAddDeleteExpressions;
|
|
70
|
+
// export const updateRemove = async (
|
|
71
|
+
// TableName: string,
|
|
72
|
+
// Key: Record<string, string>,
|
|
73
|
+
// attributes: string[]
|
|
74
|
+
// ) => {
|
|
75
|
+
// if (isEmpty(attributes)) return;
|
|
76
|
+
// const ExpressionAttributeNames: Record<string, string> = {};
|
|
77
|
+
// const UpdateExpression = "set updatedAt = :updatedAt remove " +
|
|
78
|
+
// attributes
|
|
79
|
+
// .map((x) => {
|
|
80
|
+
// return x
|
|
81
|
+
// .split(".")
|
|
82
|
+
// .map((y) => toKeyAndExpName(y, ExpressionAttributeNames))
|
|
83
|
+
// .join(".");
|
|
84
|
+
// })
|
|
85
|
+
// .join(", ");
|
|
86
|
+
// const params: any = {
|
|
87
|
+
// TableName,
|
|
88
|
+
// Key,
|
|
89
|
+
// UpdateExpression,
|
|
90
|
+
// ExpressionAttributeNames,
|
|
91
|
+
// ExpressionAttributeValues: {
|
|
92
|
+
// ":updatedAt": Date.now(),
|
|
93
|
+
// },
|
|
94
|
+
// };
|
|
95
|
+
// await update(params);
|
|
96
|
+
// };
|
|
97
|
+
// export const updateSet = async (
|
|
98
|
+
// TableName: string,
|
|
99
|
+
// Key: Record<string, string>,
|
|
100
|
+
// updates: { [x: string | number | symbol]: any; }
|
|
101
|
+
// ) => {
|
|
102
|
+
// if (isEmpty(updates)) return;
|
|
103
|
+
// const ExpressionAttributeValues: Record<string, any> = {};
|
|
104
|
+
// const ExpressionAttributeNames: Record<string, any> = {};
|
|
105
|
+
// const UpdateExpression = updateSetExpressions(
|
|
106
|
+
// updates,
|
|
107
|
+
// ExpressionAttributeValues,
|
|
108
|
+
// ExpressionAttributeNames
|
|
109
|
+
// );
|
|
110
|
+
// const params: any = {
|
|
111
|
+
// TableName,
|
|
112
|
+
// Key,
|
|
113
|
+
// UpdateExpression,
|
|
114
|
+
// ExpressionAttributeValues,
|
|
115
|
+
// ...(!isEmpty(ExpressionAttributeNames) && { ExpressionAttributeNames }),
|
|
116
|
+
// };
|
|
117
|
+
// await update(params);
|
|
118
|
+
// };
|
|
119
|
+
// export const updateListAppend = async (
|
|
120
|
+
// TableName: string,
|
|
121
|
+
// Key: Record<string, string>,
|
|
122
|
+
// propertyName: string,
|
|
123
|
+
// items: any[]
|
|
124
|
+
// ) => {
|
|
125
|
+
// const ename = "#" + propertyName;
|
|
126
|
+
// const UpdateExpression = `set updatedAt = :updatedAt, ${ename} = list_append(if_not_exists(${ename}, :empty_list), :new_arr_item)`; //if_not_exists(subtasks, :empty_list)
|
|
127
|
+
// const params: any = {
|
|
128
|
+
// TableName,
|
|
129
|
+
// Key,
|
|
130
|
+
// UpdateExpression,
|
|
131
|
+
// ExpressionAttributeValues: {
|
|
132
|
+
// ":updatedAt": Date.now(),
|
|
133
|
+
// ":empty_list": [],
|
|
134
|
+
// ":new_arr_item": items,
|
|
135
|
+
// },
|
|
136
|
+
// ExpressionAttributeNames: {
|
|
137
|
+
// [ename]: propertyName,
|
|
138
|
+
// },
|
|
139
|
+
// };
|
|
140
|
+
// await update(params);
|
|
141
|
+
// };
|
|
142
|
+
//# sourceMappingURL=updateExpressions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateExpressions.js","sourceRoot":"","sources":["../updateExpressions.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEmpty = void 0;
|
|
4
|
+
exports.randomId = randomId;
|
|
5
|
+
exports.toKeyAndExpName = toKeyAndExpName;
|
|
6
|
+
exports.handleProjectionExpression = handleProjectionExpression;
|
|
7
|
+
exports.handlePath = handlePath;
|
|
8
|
+
const isEmpty = (obj) => {
|
|
9
|
+
if (obj === null || obj === undefined)
|
|
10
|
+
return true;
|
|
11
|
+
if (Array.isArray(obj) && obj.length === 0)
|
|
12
|
+
return true;
|
|
13
|
+
if (typeof obj === "object" && Object.keys(obj).length === 0)
|
|
14
|
+
return true;
|
|
15
|
+
return false;
|
|
16
|
+
};
|
|
17
|
+
exports.isEmpty = isEmpty;
|
|
18
|
+
function randomId(length = 8) {
|
|
19
|
+
let result = "";
|
|
20
|
+
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
21
|
+
const charactersLength = characters.length;
|
|
22
|
+
let counter = 0;
|
|
23
|
+
while (counter < length) {
|
|
24
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
25
|
+
counter += 1;
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
function toKeyAndExpName(val, ExpressionAttributeNames) {
|
|
30
|
+
const [name, ...rest] = val.split("[");
|
|
31
|
+
// const name = val.split('[')[0]
|
|
32
|
+
const fixedName = name.split("/")[0] + randomId(5);
|
|
33
|
+
ExpressionAttributeNames["#" + fixedName] = name;
|
|
34
|
+
return "#" + [fixedName, ...rest].join("["); // val -> name
|
|
35
|
+
}
|
|
36
|
+
function handleProjectionExpression(ExpressionAttributeNames, ProjectionExpression) {
|
|
37
|
+
return ProjectionExpression.split(",")
|
|
38
|
+
.map((y) => toKeyAndExpName(y.trim(), ExpressionAttributeNames))
|
|
39
|
+
.join(",");
|
|
40
|
+
}
|
|
41
|
+
// I like this function:)
|
|
42
|
+
function handlePath(path, ExpressionAttributeNames) {
|
|
43
|
+
return path
|
|
44
|
+
.split(".")
|
|
45
|
+
.map((y) => toKeyAndExpName(y, ExpressionAttributeNames))
|
|
46
|
+
.join(".");
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=utils.js.map
|