@webiny/db-dynamodb 0.0.0-mt-2 → 0.0.0-unstable.085ff6572f
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/BatchProcess.d.ts +27 -11
- package/BatchProcess.js +10 -42
- package/BatchProcess.js.map +1 -0
- package/DynamoDbDriver.d.ts +19 -11
- package/DynamoDbDriver.js +11 -44
- package/DynamoDbDriver.js.map +1 -0
- package/QueryGenerator.d.ts +15 -13
- package/QueryGenerator.js +16 -31
- package/QueryGenerator.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +25 -4
- package/index.js.map +1 -0
- package/operators/comparison/beginsWith.js.map +1 -0
- package/operators/comparison/between.js.map +1 -0
- package/operators/comparison/eq.js +0 -2
- package/operators/comparison/eq.js.map +1 -0
- package/operators/comparison/gt.js.map +1 -0
- package/operators/comparison/gte.js.map +1 -0
- package/operators/comparison/lt.js.map +1 -0
- package/operators/comparison/lte.js.map +1 -0
- package/operators/index.js +1 -12
- package/operators/index.js.map +1 -0
- package/operators/logical/and.js +0 -5
- package/operators/logical/and.js.map +1 -0
- package/operators/logical/or.js +0 -5
- package/operators/logical/or.js.map +1 -0
- package/package.json +20 -19
- package/plugins/definitions/AttributePlugin.d.ts +3 -3
- package/plugins/definitions/AttributePlugin.js +1 -14
- package/plugins/definitions/AttributePlugin.js.map +1 -0
- package/plugins/definitions/DateTimeTransformPlugin.d.ts +2 -2
- package/plugins/definitions/DateTimeTransformPlugin.js +6 -20
- package/plugins/definitions/DateTimeTransformPlugin.js.map +1 -0
- package/plugins/definitions/FieldPathPlugin.d.ts +3 -3
- package/plugins/definitions/FieldPathPlugin.js +3 -17
- package/plugins/definitions/FieldPathPlugin.js.map +1 -0
- package/plugins/definitions/FieldPlugin.d.ts +3 -3
- package/plugins/definitions/FieldPlugin.js +1 -17
- package/plugins/definitions/FieldPlugin.js.map +1 -0
- package/plugins/definitions/NumberTransformPlugin.d.ts +2 -2
- package/plugins/definitions/NumberTransformPlugin.js +3 -18
- package/plugins/definitions/NumberTransformPlugin.js.map +1 -0
- package/plugins/definitions/TimeTransformPlugin.d.ts +2 -2
- package/plugins/definitions/TimeTransformPlugin.js +3 -21
- package/plugins/definitions/TimeTransformPlugin.js.map +1 -0
- package/plugins/definitions/ValueFilterPlugin.d.ts +10 -10
- package/plugins/definitions/ValueFilterPlugin.js +1 -13
- package/plugins/definitions/ValueFilterPlugin.js.map +1 -0
- package/plugins/definitions/ValueTransformPlugin.d.ts +8 -8
- package/plugins/definitions/ValueTransformPlugin.js +3 -18
- package/plugins/definitions/ValueTransformPlugin.js.map +1 -0
- package/plugins/definitions/assignFields.js +1 -10
- package/plugins/definitions/assignFields.js.map +1 -0
- package/plugins/filters/andIn.d.ts +2 -2
- package/plugins/filters/andIn.js +4 -9
- package/plugins/filters/andIn.js.map +1 -0
- package/plugins/filters/between.d.ts +2 -2
- package/plugins/filters/between.js +4 -9
- package/plugins/filters/between.js.map +1 -0
- package/plugins/filters/contains.d.ts +2 -2
- package/plugins/filters/contains.js +3 -6
- package/plugins/filters/contains.js.map +1 -0
- package/plugins/filters/eq.d.ts +2 -2
- package/plugins/filters/eq.js +15 -4
- package/plugins/filters/eq.js.map +1 -0
- package/plugins/filters/fuzzy.d.ts +2 -2
- package/plugins/filters/fuzzy.js +9 -9
- package/plugins/filters/fuzzy.js.map +1 -0
- package/plugins/filters/gt.d.ts +2 -2
- package/plugins/filters/gt.js +3 -4
- package/plugins/filters/gt.js.map +1 -0
- package/plugins/filters/gte.d.ts +2 -2
- package/plugins/filters/gte.js +3 -4
- package/plugins/filters/gte.js.map +1 -0
- package/plugins/filters/in.d.ts +2 -2
- package/plugins/filters/in.js +4 -9
- package/plugins/filters/in.js.map +1 -0
- package/plugins/filters/index.js +3 -15
- package/plugins/filters/index.js.map +1 -0
- package/plugins/filters/lt.d.ts +2 -2
- package/plugins/filters/lt.js +3 -4
- package/plugins/filters/lt.js.map +1 -0
- package/plugins/filters/lte.d.ts +2 -2
- package/plugins/filters/lte.js +3 -4
- package/plugins/filters/lte.js.map +1 -0
- package/plugins/filters/startsWith.d.ts +3 -0
- package/plugins/filters/startsWith.js +29 -0
- package/plugins/filters/startsWith.js.map +1 -0
- package/plugins/index.js +1 -5
- package/plugins/index.js.map +1 -0
- package/statements/createKeyConditionExpressionArgs.d.ts +12 -9
- package/statements/createKeyConditionExpressionArgs.js +5 -8
- package/statements/createKeyConditionExpressionArgs.js.map +1 -0
- package/statements/processStatement.d.ts +3 -4
- package/statements/processStatement.js +7 -11
- package/statements/processStatement.js.map +1 -0
- package/types.d.ts +45 -8
- package/types.js.map +1 -0
- package/utils/attributes.d.ts +2 -2
- package/utils/attributes.js +3 -14
- package/utils/attributes.js.map +1 -0
- package/utils/batchRead.d.ts +4 -5
- package/utils/batchRead.js +43 -34
- package/utils/batchRead.js.map +1 -0
- package/utils/batchWrite.d.ts +4 -5
- package/utils/batchWrite.js +1 -7
- package/utils/batchWrite.js.map +1 -0
- package/utils/cleanup.d.ts +2 -2
- package/utils/cleanup.js +9 -27
- package/utils/cleanup.js.map +1 -0
- package/utils/createEntity.d.ts +14 -0
- package/utils/createEntity.js +60 -0
- package/utils/createEntity.js.map +1 -0
- package/utils/createTable.d.ts +7 -0
- package/utils/createTable.js +25 -0
- package/utils/createTable.js.map +1 -0
- package/utils/cursor.d.ts +2 -2
- package/utils/cursor.js +0 -6
- package/utils/cursor.js.map +1 -0
- package/utils/filter.d.ts +2 -2
- package/utils/filter.js +7 -43
- package/utils/filter.js.map +1 -0
- package/utils/get.d.ts +2 -2
- package/utils/get.js +0 -4
- package/utils/get.js.map +1 -0
- package/utils/index.d.ts +12 -0
- package/utils/index.js +137 -0
- package/utils/index.js.map +1 -0
- package/utils/listResponse.d.ts +1 -1
- package/utils/listResponse.js +7 -8
- package/utils/listResponse.js.map +1 -0
- package/utils/query.d.ts +8 -4
- package/utils/query.js +28 -36
- package/utils/query.js.map +1 -0
- package/utils/sort.d.ts +2 -2
- package/utils/sort.js +4 -23
- package/utils/sort.js.map +1 -0
- package/utils/table.js +1 -6
- package/utils/table.js.map +1 -0
- package/utils/documentClient.d.ts +0 -8
- package/utils/documentClient.js +0 -33
package/BatchProcess.d.ts
CHANGED
|
@@ -1,18 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove this when no apps are using our internal db drivers anymore
|
|
3
|
+
*/
|
|
1
4
|
import { DocumentClient } from "aws-sdk/clients/dynamodb";
|
|
2
5
|
import { Batch } from "@webiny/db";
|
|
3
6
|
declare type BatchType = "batchWrite" | "batchGet";
|
|
7
|
+
export declare type AddBatchOperationResponse = () => any | null;
|
|
8
|
+
interface RejectBuildCallable {
|
|
9
|
+
({ message }: {
|
|
10
|
+
message: string;
|
|
11
|
+
}): void;
|
|
12
|
+
}
|
|
13
|
+
interface RejectExecutionCallable {
|
|
14
|
+
({ message }: {
|
|
15
|
+
message: string;
|
|
16
|
+
}): void;
|
|
17
|
+
}
|
|
18
|
+
interface AddBatchOperationArgs {
|
|
19
|
+
/**
|
|
20
|
+
* TODO: determine correct type.
|
|
21
|
+
*/
|
|
22
|
+
[key: string]: any;
|
|
23
|
+
}
|
|
4
24
|
declare class BatchProcess {
|
|
5
25
|
documentClient: DocumentClient;
|
|
6
26
|
batch: Batch;
|
|
7
27
|
resolveBuild: () => void;
|
|
8
|
-
rejectBuild:
|
|
9
|
-
message: any;
|
|
10
|
-
}) => void;
|
|
28
|
+
rejectBuild: RejectBuildCallable;
|
|
11
29
|
queryBuild: Promise<void>;
|
|
12
30
|
resolveExecution: () => void;
|
|
13
|
-
rejectExecution:
|
|
14
|
-
message: any;
|
|
15
|
-
}) => void;
|
|
31
|
+
rejectExecution: RejectExecutionCallable;
|
|
16
32
|
queryExecution: Promise<void>;
|
|
17
33
|
operations: [Record<string, any>, Record<string, any>][];
|
|
18
34
|
batchType: BatchType;
|
|
@@ -21,11 +37,11 @@ declare class BatchProcess {
|
|
|
21
37
|
constructor(batch: Batch, documentClient: DocumentClient);
|
|
22
38
|
waitStartExecution(): Promise<void>;
|
|
23
39
|
waitExecution(): Promise<void>;
|
|
24
|
-
addBatchOperation(type: BatchType, args:
|
|
25
|
-
addBatchWrite(args:
|
|
26
|
-
addBatchDelete(args:
|
|
27
|
-
addBatchGet(args:
|
|
40
|
+
addBatchOperation(type: BatchType, args: AddBatchOperationArgs, meta?: {}): AddBatchOperationResponse;
|
|
41
|
+
addBatchWrite(args: AddBatchOperationArgs): AddBatchOperationResponse;
|
|
42
|
+
addBatchDelete(args: AddBatchOperationArgs): AddBatchOperationResponse;
|
|
43
|
+
addBatchGet(args: AddBatchOperationArgs): AddBatchOperationResponse;
|
|
28
44
|
allOperationsAdded(): boolean;
|
|
29
|
-
startExecution(): import("aws-sdk/lib/request").Request<DocumentClient.
|
|
45
|
+
startExecution(): import("aws-sdk/lib/request").Request<DocumentClient.BatchGetItemOutput, import("aws-sdk/lib/error").AWSError> | import("aws-sdk/lib/request").Request<DocumentClient.BatchWriteItemOutput, import("aws-sdk/lib/error").AWSError>;
|
|
30
46
|
}
|
|
31
47
|
export default BatchProcess;
|
package/BatchProcess.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
10
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Remove this when no apps are using our internal db drivers anymore
|
|
12
|
+
*/
|
|
13
|
+
// @ts-nocheck
|
|
15
14
|
|
|
16
15
|
class BatchProcess {
|
|
17
16
|
constructor(batch, documentClient) {
|
|
@@ -46,15 +45,12 @@ class BatchProcess {
|
|
|
46
45
|
this.response = [];
|
|
47
46
|
this.batchType;
|
|
48
47
|
}
|
|
49
|
-
|
|
50
48
|
waitStartExecution() {
|
|
51
49
|
return this.queryBuild;
|
|
52
50
|
}
|
|
53
|
-
|
|
54
51
|
waitExecution() {
|
|
55
52
|
return this.queryExecution;
|
|
56
53
|
}
|
|
57
|
-
|
|
58
54
|
addBatchOperation(type, args, meta = {}) {
|
|
59
55
|
if (!this.batchType) {
|
|
60
56
|
this.batchType = type;
|
|
@@ -64,62 +60,49 @@ class BatchProcess {
|
|
|
64
60
|
this.rejectBuild({
|
|
65
61
|
message: `Cannot batch operations - all operations must be of the same type (the initial operation type was "${initial}", and operation type on index "${index}" is "${type}").`
|
|
66
62
|
});
|
|
67
|
-
return;
|
|
63
|
+
return null;
|
|
68
64
|
}
|
|
69
|
-
|
|
70
65
|
this.operations.push([args, meta]);
|
|
71
66
|
const index = this.operations.length - 1;
|
|
72
67
|
return () => this.results[index];
|
|
73
68
|
}
|
|
74
|
-
|
|
75
69
|
addBatchWrite(args) {
|
|
76
70
|
return this.addBatchOperation("batchWrite", args);
|
|
77
71
|
}
|
|
78
|
-
|
|
79
72
|
addBatchDelete(args) {
|
|
80
|
-
return this.addBatchOperation("batchWrite",
|
|
73
|
+
return this.addBatchOperation("batchWrite", (0, _objectSpread2.default)({}, args), {
|
|
81
74
|
delete: true
|
|
82
75
|
});
|
|
83
76
|
}
|
|
84
|
-
|
|
85
77
|
addBatchGet(args) {
|
|
86
78
|
return this.addBatchOperation("batchGet", args);
|
|
87
79
|
}
|
|
88
|
-
|
|
89
80
|
allOperationsAdded() {
|
|
90
81
|
return this.operations.length === this.batch.operations.length;
|
|
91
82
|
}
|
|
92
|
-
|
|
93
83
|
startExecution() {
|
|
94
84
|
this.resolveBuild();
|
|
95
85
|
const documentClientArgs = {
|
|
96
86
|
ReturnConsumedCapacity: "TOTAL",
|
|
97
87
|
RequestItems: {}
|
|
98
88
|
};
|
|
99
|
-
|
|
100
89
|
const reject = e => {
|
|
101
90
|
e.message = `An error occurred while executing "${this.batchType}" batch operation: ${e.message}`;
|
|
102
91
|
return this.rejectExecution(e);
|
|
103
92
|
};
|
|
104
|
-
|
|
105
93
|
let resolve = response => {
|
|
106
94
|
this.response = response;
|
|
107
95
|
this.resolveExecution();
|
|
108
96
|
};
|
|
109
|
-
|
|
110
97
|
switch (this.batchType) {
|
|
111
98
|
case "batchWrite":
|
|
112
99
|
documentClientArgs.RequestItems = {};
|
|
113
|
-
|
|
114
100
|
for (let i = 0; i < this.operations.length; i++) {
|
|
115
101
|
const [args, meta] = this.operations[i];
|
|
116
|
-
|
|
117
102
|
if (!documentClientArgs.RequestItems[args.table]) {
|
|
118
103
|
documentClientArgs.RequestItems[args.table] = [];
|
|
119
104
|
}
|
|
120
|
-
|
|
121
105
|
const push = {};
|
|
122
|
-
|
|
123
106
|
if (meta.delete) {
|
|
124
107
|
push.DeleteRequest = {
|
|
125
108
|
Key: args.query
|
|
@@ -129,58 +112,45 @@ class BatchProcess {
|
|
|
129
112
|
Item: args.data
|
|
130
113
|
};
|
|
131
114
|
}
|
|
132
|
-
|
|
133
115
|
documentClientArgs.RequestItems[args.table].push(push);
|
|
134
116
|
}
|
|
135
|
-
|
|
136
117
|
break;
|
|
137
|
-
|
|
138
118
|
case "batchGet":
|
|
139
119
|
documentClientArgs.RequestItems = {};
|
|
140
|
-
|
|
141
120
|
for (let i = 0; i < this.operations.length; i++) {
|
|
142
121
|
const [args] = this.operations[i];
|
|
143
|
-
|
|
144
122
|
if (!documentClientArgs.RequestItems[args.table]) {
|
|
145
123
|
documentClientArgs.RequestItems[args.table] = {
|
|
146
124
|
Keys: []
|
|
147
125
|
};
|
|
148
126
|
}
|
|
149
|
-
|
|
150
127
|
documentClientArgs.RequestItems[args.table].Keys.push(args.query);
|
|
151
128
|
}
|
|
152
|
-
|
|
153
129
|
resolve = response => {
|
|
154
130
|
this.response = response;
|
|
155
|
-
const results = [];
|
|
131
|
+
const results = [];
|
|
156
132
|
|
|
133
|
+
// The results of batchGet aren't ordered so we have to figure out the order of results ourselves.
|
|
157
134
|
for (let i = 0; i < this.operations.length; i++) {
|
|
158
135
|
const [args] = this.operations[i];
|
|
159
136
|
const responseItems = response.Responses[args.table];
|
|
160
137
|
let foundResult = null;
|
|
161
|
-
|
|
162
138
|
outer: for (let j = 0; j < responseItems.length; j++) {
|
|
163
139
|
const responseItem = responseItems[j];
|
|
164
|
-
|
|
165
140
|
for (const queryKey in args.query) {
|
|
166
141
|
if (typeof responseItem[queryKey] === "undefined" || args.query[queryKey] !== responseItem[queryKey]) {
|
|
167
142
|
continue outer;
|
|
168
143
|
}
|
|
169
144
|
}
|
|
170
|
-
|
|
171
145
|
foundResult = responseItem;
|
|
172
146
|
}
|
|
173
|
-
|
|
174
147
|
results.push(foundResult);
|
|
175
148
|
}
|
|
176
|
-
|
|
177
149
|
this.results = results;
|
|
178
150
|
this.resolveExecution();
|
|
179
151
|
};
|
|
180
|
-
|
|
181
152
|
break;
|
|
182
153
|
}
|
|
183
|
-
|
|
184
154
|
return this.documentClient[this.batchType](documentClientArgs, (error, result) => {
|
|
185
155
|
if (error) {
|
|
186
156
|
reject(error);
|
|
@@ -189,8 +159,6 @@ class BatchProcess {
|
|
|
189
159
|
}
|
|
190
160
|
});
|
|
191
161
|
}
|
|
192
|
-
|
|
193
162
|
}
|
|
194
|
-
|
|
195
163
|
var _default = BatchProcess;
|
|
196
164
|
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BatchProcess","constructor","batch","documentClient","resolveBuild","rejectBuild","queryBuild","Promise","resolve","reject","resolveExecution","rejectExecution","queryExecution","operations","results","response","batchType","waitStartExecution","waitExecution","addBatchOperation","type","args","meta","initial","index","length","message","push","addBatchWrite","addBatchDelete","delete","addBatchGet","allOperationsAdded","startExecution","documentClientArgs","ReturnConsumedCapacity","RequestItems","e","i","table","DeleteRequest","Key","query","PutRequest","Item","data","Keys","responseItems","Responses","foundResult","outer","j","responseItem","queryKey","error","result"],"sources":["BatchProcess.ts"],"sourcesContent":["/**\n * Remove this when no apps are using our internal db drivers anymore\n */\n// @ts-nocheck\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport { Batch } from \"@webiny/db\";\n\ntype BatchType = \"batchWrite\" | \"batchGet\";\n\nexport type AddBatchOperationResponse = () => any | null;\n\ninterface RejectBuildCallable {\n ({ message }: { message: string }): void;\n}\n\ninterface RejectExecutionCallable {\n ({ message }: { message: string }): void;\n}\n\ninterface AddBatchOperationArgs {\n /**\n * TODO: determine correct type.\n */\n [key: string]: any;\n}\n\ninterface Response {\n /**\n * TODO: determine correct type.\n */\n [key: string]: any;\n}\n\ninterface DocumentClientArgs {\n ReturnConsumedCapacity: string;\n RequestItems: Record<string, any>;\n}\n\nclass BatchProcess {\n documentClient: DocumentClient;\n batch: Batch;\n resolveBuild: () => void;\n rejectBuild: RejectBuildCallable;\n queryBuild: Promise<void>;\n resolveExecution: () => void;\n rejectExecution: RejectExecutionCallable;\n queryExecution: Promise<void>;\n operations: [Record<string, any>, Record<string, any>][];\n batchType: BatchType;\n results: Record<string, any>[];\n response: Record<string, any>;\n constructor(batch: Batch, documentClient: DocumentClient) {\n this.documentClient = documentClient;\n this.batch = batch;\n\n this.resolveBuild = null;\n this.rejectBuild = null;\n this.queryBuild = new Promise((resolve, reject) => {\n this.resolveBuild = resolve;\n this.rejectBuild = reject;\n });\n\n this.resolveExecution = null;\n this.rejectExecution = null;\n this.queryExecution = new Promise((resolve, reject) => {\n this.resolveExecution = resolve;\n this.rejectExecution = reject;\n });\n\n this.operations = [];\n this.results = [];\n this.response = [];\n\n this.batchType;\n }\n\n waitStartExecution(): Promise<void> {\n return this.queryBuild;\n }\n\n waitExecution(): Promise<void> {\n return this.queryExecution;\n }\n\n addBatchOperation(\n type: BatchType,\n args: AddBatchOperationArgs,\n meta = {}\n ): AddBatchOperationResponse {\n if (!this.batchType) {\n this.batchType = type;\n } else if (this.batchType !== type) {\n const initial = this.batchType;\n const index = this.operations.length;\n this.rejectBuild({\n message: `Cannot batch operations - all operations must be of the same type (the initial operation type was \"${initial}\", and operation type on index \"${index}\" is \"${type}\").`\n });\n return null;\n }\n\n this.operations.push([args, meta]);\n const index = this.operations.length - 1;\n return () => this.results[index];\n }\n\n addBatchWrite(args: AddBatchOperationArgs): AddBatchOperationResponse {\n return this.addBatchOperation(\"batchWrite\", args);\n }\n\n addBatchDelete(args: AddBatchOperationArgs): AddBatchOperationResponse {\n return this.addBatchOperation(\"batchWrite\", { ...args }, { delete: true });\n }\n\n addBatchGet(args: AddBatchOperationArgs): AddBatchOperationResponse {\n return this.addBatchOperation(\"batchGet\", args);\n }\n\n allOperationsAdded(): boolean {\n return this.operations.length === this.batch.operations.length;\n }\n\n startExecution() {\n this.resolveBuild();\n\n const documentClientArgs: DocumentClientArgs = {\n ReturnConsumedCapacity: \"TOTAL\",\n RequestItems: {}\n };\n\n const reject = (e: Error) => {\n e.message = `An error occurred while executing \"${this.batchType}\" batch operation: ${e.message}`;\n return this.rejectExecution(e);\n };\n\n let resolve = (response: Response) => {\n this.response = response;\n this.resolveExecution();\n };\n\n switch (this.batchType) {\n case \"batchWrite\":\n documentClientArgs.RequestItems = {};\n for (let i = 0; i < this.operations.length; i++) {\n const [args, meta] = this.operations[i];\n\n if (!documentClientArgs.RequestItems[args.table]) {\n documentClientArgs.RequestItems[args.table] = [];\n }\n\n const push: {\n DeleteRequest?: Record<string, any>;\n PutRequest?: Record<string, any>;\n } = {};\n\n if (meta.delete) {\n push.DeleteRequest = {\n Key: args.query\n };\n } else {\n push.PutRequest = {\n Item: args.data\n };\n }\n\n documentClientArgs.RequestItems[args.table].push(push);\n }\n break;\n case \"batchGet\":\n documentClientArgs.RequestItems = {};\n for (let i = 0; i < this.operations.length; i++) {\n const [args] = this.operations[i];\n\n if (!documentClientArgs.RequestItems[args.table]) {\n documentClientArgs.RequestItems[args.table] = { Keys: [] };\n }\n\n documentClientArgs.RequestItems[args.table].Keys.push(args.query);\n }\n\n resolve = response => {\n this.response = response;\n const results = [];\n\n // The results of batchGet aren't ordered so we have to figure out the order of results ourselves.\n for (let i = 0; i < this.operations.length; i++) {\n const [args] = this.operations[i];\n const responseItems = response.Responses[args.table];\n\n let foundResult = null;\n outer: for (let j = 0; j < responseItems.length; j++) {\n const responseItem = responseItems[j];\n for (const queryKey in args.query) {\n if (\n typeof responseItem[queryKey] === \"undefined\" ||\n args.query[queryKey] !== responseItem[queryKey]\n ) {\n continue outer;\n }\n }\n foundResult = responseItem;\n }\n\n results.push(foundResult);\n }\n\n this.results = results;\n this.resolveExecution();\n };\n break;\n }\n\n return this.documentClient[this.batchType](\n documentClientArgs,\n (error: Error, result: Record<string, any>) => {\n if (error) {\n reject(error);\n } else {\n resolve(result);\n }\n }\n );\n }\n}\n\nexport default BatchProcess;\n"],"mappings":"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"}
|
package/DynamoDbDriver.d.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove this when no apps are using our internal db drivers anymore
|
|
3
|
+
*/
|
|
1
4
|
import { DocumentClient } from "aws-sdk/clients/dynamodb";
|
|
2
5
|
import BatchProcess from "./BatchProcess";
|
|
3
|
-
import { DbDriver, Args, Result } from "@webiny/db";
|
|
6
|
+
import { DbDriver, Args, Result, ArgsBatch } from "@webiny/db";
|
|
4
7
|
declare type ConstructorArgs = {
|
|
5
8
|
documentClient?: DocumentClient;
|
|
6
9
|
};
|
|
10
|
+
interface ReadLogsParams {
|
|
11
|
+
table: string;
|
|
12
|
+
}
|
|
13
|
+
interface CreateLogParams {
|
|
14
|
+
id: string;
|
|
15
|
+
operation: string;
|
|
16
|
+
/**
|
|
17
|
+
* TODO: determine the data type.
|
|
18
|
+
*/
|
|
19
|
+
data: any;
|
|
20
|
+
table: string;
|
|
21
|
+
}
|
|
7
22
|
declare class DynamoDbDriver implements DbDriver {
|
|
8
23
|
batchProcesses: Record<string, BatchProcess>;
|
|
9
24
|
documentClient: DocumentClient;
|
|
@@ -13,15 +28,8 @@ declare class DynamoDbDriver implements DbDriver {
|
|
|
13
28
|
update({ query, data, table, meta, __batch: batch }: Args): Promise<Result>;
|
|
14
29
|
delete({ query, table, meta, __batch: batch }: Args): Promise<Result>;
|
|
15
30
|
read<T>({ table, query, sort, limit, keys, meta, __batch: batch }: Args): Promise<Result<T[]>>;
|
|
16
|
-
createLog({ id, operation, data, table }:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
data: any;
|
|
20
|
-
table: any;
|
|
21
|
-
}): Promise<Result>;
|
|
22
|
-
readLogs<T>({ table }: {
|
|
23
|
-
table: any;
|
|
24
|
-
}): Promise<Result<T[]>>;
|
|
25
|
-
getBatchProcess(__batch: any): BatchProcess;
|
|
31
|
+
createLog({ id, operation, data, table }: CreateLogParams): Promise<Result>;
|
|
32
|
+
readLogs<T>({ table }: ReadLogsParams): Promise<Result<T[]>>;
|
|
33
|
+
getBatchProcess(__batch: ArgsBatch): BatchProcess;
|
|
26
34
|
}
|
|
27
35
|
export default DynamoDbDriver;
|
package/DynamoDbDriver.js
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
10
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
var _dynamodb = require("aws-sdk/clients/dynamodb");
|
|
13
|
-
|
|
14
11
|
var _BatchProcess = _interopRequireDefault(require("./BatchProcess"));
|
|
15
|
-
|
|
16
12
|
var _QueryGenerator = _interopRequireDefault(require("./QueryGenerator"));
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Remove this when no apps are using our internal db drivers anymore
|
|
15
|
+
*/
|
|
16
|
+
// @ts-nocheck
|
|
21
17
|
|
|
22
18
|
const LOG_KEYS = [{
|
|
23
19
|
primary: true,
|
|
@@ -29,7 +25,6 @@ const LOG_KEYS = [{
|
|
|
29
25
|
name: "SK"
|
|
30
26
|
}]
|
|
31
27
|
}];
|
|
32
|
-
|
|
33
28
|
class DynamoDbDriver {
|
|
34
29
|
constructor({
|
|
35
30
|
documentClient
|
|
@@ -39,11 +34,9 @@ class DynamoDbDriver {
|
|
|
39
34
|
this.batchProcesses = {};
|
|
40
35
|
this.documentClient = documentClient || new _dynamodb.DocumentClient();
|
|
41
36
|
}
|
|
42
|
-
|
|
43
37
|
getClient() {
|
|
44
38
|
return this.documentClient;
|
|
45
39
|
}
|
|
46
|
-
|
|
47
40
|
async create({
|
|
48
41
|
table,
|
|
49
42
|
data,
|
|
@@ -60,25 +53,21 @@ class DynamoDbDriver {
|
|
|
60
53
|
response: result.$response
|
|
61
54
|
}];
|
|
62
55
|
}
|
|
63
|
-
|
|
64
56
|
const batchProcess = this.getBatchProcess(batch);
|
|
65
57
|
batchProcess.addBatchWrite({
|
|
66
58
|
table,
|
|
67
59
|
data
|
|
68
60
|
});
|
|
69
|
-
|
|
70
61
|
if (batchProcess.allOperationsAdded()) {
|
|
71
62
|
batchProcess.startExecution();
|
|
72
63
|
} else {
|
|
73
64
|
await batchProcess.waitStartExecution();
|
|
74
65
|
}
|
|
75
|
-
|
|
76
66
|
await batchProcess.waitExecution();
|
|
77
67
|
return [true, {
|
|
78
68
|
response: batchProcess.response
|
|
79
69
|
}];
|
|
80
70
|
}
|
|
81
|
-
|
|
82
71
|
async update({
|
|
83
72
|
query,
|
|
84
73
|
data,
|
|
@@ -93,15 +82,13 @@ class DynamoDbDriver {
|
|
|
93
82
|
ExpressionAttributeValues: {}
|
|
94
83
|
};
|
|
95
84
|
const updateExpression = [];
|
|
96
|
-
|
|
97
85
|
for (const key in data) {
|
|
98
86
|
updateExpression.push(`#${key} = :${key}`);
|
|
99
87
|
update.ExpressionAttributeNames[`#${key}`] = key;
|
|
100
88
|
update.ExpressionAttributeValues[`:${key}`] = data[key];
|
|
101
89
|
}
|
|
102
|
-
|
|
103
90
|
update.UpdateExpression += updateExpression.join(", ");
|
|
104
|
-
const result = await this.documentClient.update(
|
|
91
|
+
const result = await this.documentClient.update((0, _objectSpread2.default)({
|
|
105
92
|
TableName: table,
|
|
106
93
|
Key: query,
|
|
107
94
|
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
@@ -110,25 +97,21 @@ class DynamoDbDriver {
|
|
|
110
97
|
response: result.$response
|
|
111
98
|
}];
|
|
112
99
|
}
|
|
113
|
-
|
|
114
100
|
const batchProcess = this.getBatchProcess(batch);
|
|
115
101
|
batchProcess.addBatchWrite({
|
|
116
102
|
table,
|
|
117
103
|
data
|
|
118
104
|
});
|
|
119
|
-
|
|
120
105
|
if (batchProcess.allOperationsAdded()) {
|
|
121
106
|
batchProcess.startExecution();
|
|
122
107
|
} else {
|
|
123
108
|
await batchProcess.waitStartExecution();
|
|
124
109
|
}
|
|
125
|
-
|
|
126
110
|
await batchProcess.waitExecution();
|
|
127
111
|
return [true, {
|
|
128
112
|
response: batchProcess.response
|
|
129
113
|
}];
|
|
130
114
|
}
|
|
131
|
-
|
|
132
115
|
async delete({
|
|
133
116
|
query,
|
|
134
117
|
table,
|
|
@@ -145,25 +128,21 @@ class DynamoDbDriver {
|
|
|
145
128
|
response: result.$response
|
|
146
129
|
}];
|
|
147
130
|
}
|
|
148
|
-
|
|
149
131
|
const batchProcess = this.getBatchProcess(batch);
|
|
150
132
|
batchProcess.addBatchDelete({
|
|
151
133
|
table,
|
|
152
134
|
query
|
|
153
135
|
});
|
|
154
|
-
|
|
155
136
|
if (batchProcess.allOperationsAdded()) {
|
|
156
137
|
batchProcess.startExecution();
|
|
157
138
|
} else {
|
|
158
139
|
await batchProcess.waitStartExecution();
|
|
159
140
|
}
|
|
160
|
-
|
|
161
141
|
await batchProcess.waitExecution();
|
|
162
142
|
return [true, {
|
|
163
143
|
response: batchProcess.response
|
|
164
144
|
}];
|
|
165
145
|
}
|
|
166
|
-
|
|
167
146
|
async read({
|
|
168
147
|
table,
|
|
169
148
|
query,
|
|
@@ -182,48 +161,41 @@ class DynamoDbDriver {
|
|
|
182
161
|
limit,
|
|
183
162
|
tableName: table
|
|
184
163
|
});
|
|
185
|
-
const response = await this.documentClient.query(
|
|
164
|
+
const response = await this.documentClient.query((0, _objectSpread2.default)((0, _objectSpread2.default)({}, queryParams), {}, {
|
|
186
165
|
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
187
166
|
})).promise();
|
|
188
|
-
|
|
189
167
|
if (Array.isArray(response.Items)) {
|
|
190
168
|
return [response.Items, {
|
|
191
169
|
response: response.$response
|
|
192
170
|
}];
|
|
193
171
|
}
|
|
194
|
-
|
|
195
172
|
return [[], {
|
|
196
173
|
response: response.$response
|
|
197
174
|
}];
|
|
198
|
-
}
|
|
199
|
-
|
|
175
|
+
}
|
|
200
176
|
|
|
177
|
+
// DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
|
|
201
178
|
const batchProcess = this.getBatchProcess(batch);
|
|
202
179
|
const getResult = batchProcess.addBatchGet({
|
|
203
180
|
table,
|
|
204
181
|
query
|
|
205
182
|
});
|
|
206
|
-
|
|
207
183
|
if (batchProcess.allOperationsAdded()) {
|
|
208
184
|
batchProcess.startExecution();
|
|
209
185
|
} else {
|
|
210
186
|
await batchProcess.waitStartExecution();
|
|
211
187
|
}
|
|
212
|
-
|
|
213
188
|
await batchProcess.waitExecution();
|
|
214
189
|
const result = getResult();
|
|
215
|
-
|
|
216
190
|
if (result) {
|
|
217
191
|
return [[result], {
|
|
218
192
|
response: batchProcess.response
|
|
219
193
|
}];
|
|
220
194
|
}
|
|
221
|
-
|
|
222
195
|
return [[], {
|
|
223
196
|
response: batchProcess.response
|
|
224
197
|
}];
|
|
225
198
|
}
|
|
226
|
-
|
|
227
199
|
async createLog({
|
|
228
200
|
id,
|
|
229
201
|
operation,
|
|
@@ -233,7 +205,7 @@ class DynamoDbDriver {
|
|
|
233
205
|
await this.create({
|
|
234
206
|
table: table,
|
|
235
207
|
keys: LOG_KEYS,
|
|
236
|
-
data:
|
|
208
|
+
data: (0, _objectSpread2.default)({
|
|
237
209
|
PK: "log",
|
|
238
210
|
SK: id,
|
|
239
211
|
id,
|
|
@@ -242,7 +214,6 @@ class DynamoDbDriver {
|
|
|
242
214
|
});
|
|
243
215
|
return [true, {}];
|
|
244
216
|
}
|
|
245
|
-
|
|
246
217
|
async readLogs({
|
|
247
218
|
table
|
|
248
219
|
}) {
|
|
@@ -257,16 +228,12 @@ class DynamoDbDriver {
|
|
|
257
228
|
}
|
|
258
229
|
});
|
|
259
230
|
}
|
|
260
|
-
|
|
261
231
|
getBatchProcess(__batch) {
|
|
262
232
|
if (!this.batchProcesses[__batch.instance.id]) {
|
|
263
233
|
this.batchProcesses[__batch.instance.id] = new _BatchProcess.default(__batch.instance, this.documentClient);
|
|
264
234
|
}
|
|
265
|
-
|
|
266
235
|
return this.batchProcesses[__batch.instance.id];
|
|
267
236
|
}
|
|
268
|
-
|
|
269
237
|
}
|
|
270
|
-
|
|
271
238
|
var _default = DynamoDbDriver;
|
|
272
239
|
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LOG_KEYS","primary","unique","name","fields","DynamoDbDriver","constructor","documentClient","batchProcesses","DocumentClient","getClient","create","table","data","meta","__batch","batch","result","put","TableName","Item","ReturnConsumedCapacity","promise","response","$response","batchProcess","getBatchProcess","addBatchWrite","allOperationsAdded","startExecution","waitStartExecution","waitExecution","update","query","UpdateExpression","ExpressionAttributeNames","ExpressionAttributeValues","updateExpression","key","push","join","Key","delete","addBatchDelete","read","sort","limit","keys","queryGenerator","QueryGenerator","queryParams","generate","tableName","Array","isArray","Items","getResult","addBatchGet","createLog","id","operation","PK","SK","readLogs","$gte","instance","BatchProcess"],"sources":["DynamoDbDriver.ts"],"sourcesContent":["/**\n * Remove this when no apps are using our internal db drivers anymore\n */\n// @ts-nocheck\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport BatchProcess from \"./BatchProcess\";\nimport QueryGenerator from \"./QueryGenerator\";\nimport { DbDriver, Args, Result, ArgsBatch } from \"@webiny/db\";\nimport { QueryKeys } from \"~/types\";\n\ntype ConstructorArgs = {\n documentClient?: DocumentClient;\n};\n\nconst LOG_KEYS: QueryKeys = [\n {\n primary: true,\n unique: true,\n name: \"primary\",\n fields: [{ name: \"PK\" }, { name: \"SK\" }]\n }\n];\n\ninterface Update {\n UpdateExpression: string;\n ExpressionAttributeNames: Record<string, any>;\n ExpressionAttributeValues: Record<string, any>;\n}\n\ninterface ReadLogsParams {\n table: string;\n}\n\ninterface CreateLogParams {\n id: string;\n operation: string;\n /**\n * TODO: determine the data type.\n */\n data: any;\n table: string;\n}\n\nclass DynamoDbDriver implements DbDriver {\n batchProcesses: Record<string, BatchProcess>;\n documentClient: DocumentClient;\n constructor({ documentClient }: ConstructorArgs = {}) {\n this.batchProcesses = {};\n this.documentClient = documentClient || new DocumentClient();\n }\n\n getClient() {\n return this.documentClient;\n }\n\n async create({ table, data, meta, __batch: batch }: Args): Promise<Result> {\n if (!batch) {\n const result = await this.documentClient\n .put({\n TableName: table,\n Item: data,\n ReturnConsumedCapacity: meta ? \"TOTAL\" : \"NONE\"\n })\n .promise();\n return [true, { response: result.$response }];\n }\n\n const batchProcess = this.getBatchProcess(batch);\n batchProcess.addBatchWrite({ table, data });\n\n if (batchProcess.allOperationsAdded()) {\n batchProcess.startExecution();\n } else {\n await batchProcess.waitStartExecution();\n }\n\n await batchProcess.waitExecution();\n\n return [true, { response: batchProcess.response }];\n }\n\n async update({ query, data, table, meta, __batch: batch }: Args): Promise<Result> {\n if (!batch) {\n const update: Update = {\n UpdateExpression: \"SET \",\n ExpressionAttributeNames: {},\n ExpressionAttributeValues: {}\n };\n\n const updateExpression = [];\n for (const key in data) {\n updateExpression.push(`#${key} = :${key}`);\n update.ExpressionAttributeNames[`#${key}`] = key;\n update.ExpressionAttributeValues[`:${key}`] = data[key];\n }\n\n update.UpdateExpression += updateExpression.join(\", \");\n\n const result = await this.documentClient\n .update({\n TableName: table,\n Key: query,\n ReturnConsumedCapacity: meta ? \"TOTAL\" : \"NONE\",\n ...update\n })\n .promise();\n\n return [true, { response: result.$response }];\n }\n\n const batchProcess = this.getBatchProcess(batch);\n\n batchProcess.addBatchWrite({\n table,\n data\n });\n\n if (batchProcess.allOperationsAdded()) {\n batchProcess.startExecution();\n } else {\n await batchProcess.waitStartExecution();\n }\n\n await batchProcess.waitExecution();\n\n return [true, { response: batchProcess.response }];\n }\n\n async delete({ query, table, meta, __batch: batch }: Args): Promise<Result> {\n if (!batch) {\n const result = await this.documentClient\n .delete({\n TableName: table,\n Key: query,\n ReturnConsumedCapacity: meta ? \"TOTAL\" : \"NONE\"\n })\n .promise();\n\n return [true, { response: result.$response }];\n }\n\n const batchProcess = this.getBatchProcess(batch);\n batchProcess.addBatchDelete({\n table,\n query\n });\n\n if (batchProcess.allOperationsAdded()) {\n batchProcess.startExecution();\n } else {\n await batchProcess.waitStartExecution();\n }\n\n await batchProcess.waitExecution();\n\n return [true, { response: batchProcess.response }];\n }\n\n async read<T>({\n table,\n query,\n sort,\n limit,\n keys,\n meta,\n __batch: batch\n }: Args): Promise<Result<T[]>> {\n if (!batch) {\n const queryGenerator = new QueryGenerator();\n const queryParams = queryGenerator.generate({\n query,\n keys,\n sort,\n limit,\n tableName: table\n });\n\n const response = await this.documentClient\n .query({ ...queryParams, ReturnConsumedCapacity: meta ? \"TOTAL\" : \"NONE\" })\n .promise();\n\n if (Array.isArray(response.Items)) {\n return [response.Items as T[], { response: response.$response }];\n }\n return [[], { response: response.$response }];\n }\n\n // DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.\n const batchProcess = this.getBatchProcess(batch);\n const getResult = batchProcess.addBatchGet({\n table,\n query\n });\n\n if (batchProcess.allOperationsAdded()) {\n batchProcess.startExecution();\n } else {\n await batchProcess.waitStartExecution();\n }\n\n await batchProcess.waitExecution();\n\n const result = getResult() as T;\n if (result) {\n return [[result], { response: batchProcess.response }];\n }\n\n return [[], { response: batchProcess.response }];\n }\n\n async createLog({ id, operation, data, table }: CreateLogParams): Promise<Result> {\n await this.create({\n table: table,\n keys: LOG_KEYS,\n data: {\n PK: \"log\",\n SK: id,\n id,\n operation,\n ...data\n }\n });\n\n return [true, {}];\n }\n\n async readLogs<T>({ table }: ReadLogsParams) {\n return this.read<T>({\n table,\n keys: LOG_KEYS,\n query: {\n PK: \"log\",\n SK: { $gte: \" \" }\n }\n });\n }\n\n getBatchProcess(__batch: ArgsBatch): BatchProcess {\n if (!this.batchProcesses[__batch.instance.id]) {\n this.batchProcesses[__batch.instance.id] = new BatchProcess(\n __batch.instance,\n this.documentClient\n );\n }\n\n return this.batchProcesses[__batch.instance.id];\n }\n}\n\nexport default DynamoDbDriver;\n"],"mappings":"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"}
|
package/QueryGenerator.d.ts
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
+
import { Query, QueryKey, QueryKeys, QuerySort } from "./types";
|
|
2
|
+
interface GenerateParams {
|
|
3
|
+
query: Query;
|
|
4
|
+
keys: QueryKeys;
|
|
5
|
+
sort: QuerySort;
|
|
6
|
+
limit: number;
|
|
7
|
+
tableName: string;
|
|
8
|
+
}
|
|
1
9
|
declare class QueryGenerator {
|
|
2
|
-
generate(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
sort: any;
|
|
6
|
-
limit: any;
|
|
7
|
-
tableName: any;
|
|
8
|
-
}): {
|
|
9
|
-
TableName: any;
|
|
10
|
-
Limit: any;
|
|
10
|
+
generate(params: GenerateParams): {
|
|
11
|
+
TableName: string;
|
|
12
|
+
Limit: number;
|
|
11
13
|
KeyConditionExpression: string;
|
|
12
|
-
ExpressionAttributeNames:
|
|
13
|
-
ExpressionAttributeValues:
|
|
14
|
+
ExpressionAttributeNames: Record<string, any>;
|
|
15
|
+
ExpressionAttributeValues: Record<string, any>;
|
|
14
16
|
ScanIndexForward: boolean;
|
|
15
|
-
IndexName:
|
|
17
|
+
IndexName: string;
|
|
16
18
|
};
|
|
17
|
-
findQueryKey(query?:
|
|
19
|
+
findQueryKey(query?: Query, keys?: QueryKeys): QueryKey | null;
|
|
18
20
|
}
|
|
19
21
|
export default QueryGenerator;
|