@webiny/db-dynamodb 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68
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.js +37 -3
- package/BatchProcess.js.map +1 -1
- package/DynamoDbDriver.js +38 -3
- package/DynamoDbDriver.js.map +1 -1
- package/QueryGenerator.js +18 -4
- package/QueryGenerator.js.map +1 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/operators/comparison/beginsWith.js.map +1 -1
- package/operators/comparison/between.js.map +1 -1
- package/operators/comparison/eq.js +2 -0
- package/operators/comparison/eq.js.map +1 -1
- package/operators/comparison/gt.js.map +1 -1
- package/operators/comparison/gte.js.map +1 -1
- package/operators/comparison/lt.js.map +1 -1
- package/operators/comparison/lte.js.map +1 -1
- package/operators/index.js +11 -0
- package/operators/index.js.map +1 -1
- package/operators/logical/and.js +5 -0
- package/operators/logical/and.js.map +1 -1
- package/operators/logical/or.js +5 -0
- package/operators/logical/or.js.map +1 -1
- package/package.json +9 -9
- package/plugins/definitions/AttributePlugin.js +13 -0
- package/plugins/definitions/AttributePlugin.js.map +1 -1
- package/plugins/definitions/DateTimeTransformPlugin.js +14 -0
- package/plugins/definitions/DateTimeTransformPlugin.js.map +1 -1
- package/plugins/definitions/FieldPathPlugin.js +12 -0
- package/plugins/definitions/FieldPathPlugin.js.map +1 -1
- package/plugins/definitions/FieldPlugin.js +16 -0
- package/plugins/definitions/FieldPlugin.js.map +1 -1
- package/plugins/definitions/NumberTransformPlugin.js +11 -0
- package/plugins/definitions/NumberTransformPlugin.js.map +1 -1
- package/plugins/definitions/TimeTransformPlugin.js +14 -0
- package/plugins/definitions/TimeTransformPlugin.js.map +1 -1
- package/plugins/definitions/ValueFilterPlugin.js +12 -0
- package/plugins/definitions/ValueFilterPlugin.js.map +1 -1
- package/plugins/definitions/ValueTransformPlugin.js +13 -0
- package/plugins/definitions/ValueTransformPlugin.js.map +1 -1
- package/plugins/definitions/assignFields.js +9 -0
- package/plugins/definitions/assignFields.js.map +1 -1
- package/plugins/filters/andIn.d.ts +2 -2
- package/plugins/filters/andIn.js +9 -1
- package/plugins/filters/andIn.js.map +1 -1
- package/plugins/filters/between.d.ts +2 -2
- package/plugins/filters/between.js +9 -1
- package/plugins/filters/between.js.map +1 -1
- package/plugins/filters/contains.d.ts +2 -2
- package/plugins/filters/contains.js +7 -1
- package/plugins/filters/contains.js.map +1 -1
- package/plugins/filters/eq.d.ts +2 -2
- package/plugins/filters/eq.js +6 -1
- package/plugins/filters/eq.js.map +1 -1
- package/plugins/filters/fuzzy.d.ts +2 -2
- package/plugins/filters/fuzzy.js +8 -1
- package/plugins/filters/fuzzy.js.map +1 -1
- package/plugins/filters/gt.d.ts +2 -2
- package/plugins/filters/gt.js +5 -1
- package/plugins/filters/gt.js.map +1 -1
- package/plugins/filters/gte.d.ts +2 -2
- package/plugins/filters/gte.js +5 -1
- package/plugins/filters/gte.js.map +1 -1
- package/plugins/filters/in.d.ts +2 -2
- package/plugins/filters/in.js +9 -1
- package/plugins/filters/in.js.map +1 -1
- package/plugins/filters/index.js +14 -0
- package/plugins/filters/index.js.map +1 -1
- package/plugins/filters/lt.d.ts +2 -2
- package/plugins/filters/lt.js +5 -1
- package/plugins/filters/lt.js.map +1 -1
- package/plugins/filters/lte.d.ts +2 -2
- package/plugins/filters/lte.js +5 -1
- package/plugins/filters/lte.js.map +1 -1
- package/plugins/filters/startsWith.d.ts +2 -2
- package/plugins/filters/startsWith.js +8 -1
- package/plugins/filters/startsWith.js.map +1 -1
- package/plugins/index.js +4 -0
- package/plugins/index.js.map +1 -1
- package/statements/createKeyConditionExpressionArgs.js +7 -0
- package/statements/createKeyConditionExpressionArgs.js.map +1 -1
- package/statements/processStatement.js +7 -0
- package/statements/processStatement.js.map +1 -1
- package/utils/attributes.js +7 -0
- package/utils/attributes.js.map +1 -1
- package/utils/batchRead.js +22 -0
- package/utils/batchRead.js.map +1 -1
- package/utils/batchWrite.js +6 -0
- package/utils/batchWrite.js.map +1 -1
- package/utils/cleanup.js +10 -0
- package/utils/cleanup.js.map +1 -1
- package/utils/cursor.js +6 -0
- package/utils/cursor.js.map +1 -1
- package/utils/filter.js +37 -0
- package/utils/filter.js.map +1 -1
- package/utils/get.js +4 -0
- package/utils/get.js.map +1 -1
- package/utils/listResponse.js +4 -0
- package/utils/listResponse.js.map +1 -1
- package/utils/query.js +19 -0
- package/utils/query.js.map +1 -1
- package/utils/sort.js +17 -0
- package/utils/sort.js.map +1 -1
- package/utils/table.js +5 -0
- package/utils/table.js.map +1 -1
package/BatchProcess.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
10
14
|
/**
|
|
11
15
|
* Remove this when no apps are using our internal db drivers anymore
|
|
12
16
|
*/
|
|
13
17
|
// @ts-nocheck
|
|
14
|
-
|
|
15
18
|
class BatchProcess {
|
|
16
19
|
constructor(batch, documentClient) {
|
|
17
20
|
(0, _defineProperty2.default)(this, "documentClient", void 0);
|
|
@@ -45,12 +48,15 @@ class BatchProcess {
|
|
|
45
48
|
this.response = [];
|
|
46
49
|
this.batchType;
|
|
47
50
|
}
|
|
51
|
+
|
|
48
52
|
waitStartExecution() {
|
|
49
53
|
return this.queryBuild;
|
|
50
54
|
}
|
|
55
|
+
|
|
51
56
|
waitExecution() {
|
|
52
57
|
return this.queryExecution;
|
|
53
58
|
}
|
|
59
|
+
|
|
54
60
|
addBatchOperation(type, args, meta = {}) {
|
|
55
61
|
if (!this.batchType) {
|
|
56
62
|
this.batchType = type;
|
|
@@ -62,47 +68,60 @@ class BatchProcess {
|
|
|
62
68
|
});
|
|
63
69
|
return null;
|
|
64
70
|
}
|
|
71
|
+
|
|
65
72
|
this.operations.push([args, meta]);
|
|
66
73
|
const index = this.operations.length - 1;
|
|
67
74
|
return () => this.results[index];
|
|
68
75
|
}
|
|
76
|
+
|
|
69
77
|
addBatchWrite(args) {
|
|
70
78
|
return this.addBatchOperation("batchWrite", args);
|
|
71
79
|
}
|
|
80
|
+
|
|
72
81
|
addBatchDelete(args) {
|
|
73
82
|
return this.addBatchOperation("batchWrite", (0, _objectSpread2.default)({}, args), {
|
|
74
83
|
delete: true
|
|
75
84
|
});
|
|
76
85
|
}
|
|
86
|
+
|
|
77
87
|
addBatchGet(args) {
|
|
78
88
|
return this.addBatchOperation("batchGet", args);
|
|
79
89
|
}
|
|
90
|
+
|
|
80
91
|
allOperationsAdded() {
|
|
81
92
|
return this.operations.length === this.batch.operations.length;
|
|
82
93
|
}
|
|
94
|
+
|
|
83
95
|
startExecution() {
|
|
84
96
|
this.resolveBuild();
|
|
85
97
|
const documentClientArgs = {
|
|
86
98
|
ReturnConsumedCapacity: "TOTAL",
|
|
87
99
|
RequestItems: {}
|
|
88
100
|
};
|
|
101
|
+
|
|
89
102
|
const reject = e => {
|
|
90
103
|
e.message = `An error occurred while executing "${this.batchType}" batch operation: ${e.message}`;
|
|
91
104
|
return this.rejectExecution(e);
|
|
92
105
|
};
|
|
106
|
+
|
|
93
107
|
let resolve = response => {
|
|
94
108
|
this.response = response;
|
|
95
109
|
this.resolveExecution();
|
|
96
110
|
};
|
|
111
|
+
|
|
97
112
|
switch (this.batchType) {
|
|
98
113
|
case "batchWrite":
|
|
99
114
|
documentClientArgs.RequestItems = {};
|
|
115
|
+
|
|
100
116
|
for (let i = 0; i < this.operations.length; i++) {
|
|
101
117
|
const [args, meta] = this.operations[i];
|
|
118
|
+
|
|
102
119
|
if (!documentClientArgs.RequestItems[args.table]) {
|
|
103
120
|
documentClientArgs.RequestItems[args.table] = [];
|
|
104
121
|
}
|
|
122
|
+
|
|
105
123
|
const push = {};
|
|
124
|
+
|
|
106
125
|
if (meta.delete) {
|
|
107
126
|
push.DeleteRequest = {
|
|
108
127
|
Key: args.query
|
|
@@ -112,45 +131,58 @@ class BatchProcess {
|
|
|
112
131
|
Item: args.data
|
|
113
132
|
};
|
|
114
133
|
}
|
|
134
|
+
|
|
115
135
|
documentClientArgs.RequestItems[args.table].push(push);
|
|
116
136
|
}
|
|
137
|
+
|
|
117
138
|
break;
|
|
139
|
+
|
|
118
140
|
case "batchGet":
|
|
119
141
|
documentClientArgs.RequestItems = {};
|
|
142
|
+
|
|
120
143
|
for (let i = 0; i < this.operations.length; i++) {
|
|
121
144
|
const [args] = this.operations[i];
|
|
145
|
+
|
|
122
146
|
if (!documentClientArgs.RequestItems[args.table]) {
|
|
123
147
|
documentClientArgs.RequestItems[args.table] = {
|
|
124
148
|
Keys: []
|
|
125
149
|
};
|
|
126
150
|
}
|
|
151
|
+
|
|
127
152
|
documentClientArgs.RequestItems[args.table].Keys.push(args.query);
|
|
128
153
|
}
|
|
154
|
+
|
|
129
155
|
resolve = response => {
|
|
130
156
|
this.response = response;
|
|
131
|
-
const results = [];
|
|
157
|
+
const results = []; // The results of batchGet aren't ordered so we have to figure out the order of results ourselves.
|
|
132
158
|
|
|
133
|
-
// The results of batchGet aren't ordered so we have to figure out the order of results ourselves.
|
|
134
159
|
for (let i = 0; i < this.operations.length; i++) {
|
|
135
160
|
const [args] = this.operations[i];
|
|
136
161
|
const responseItems = response.Responses[args.table];
|
|
137
162
|
let foundResult = null;
|
|
163
|
+
|
|
138
164
|
outer: for (let j = 0; j < responseItems.length; j++) {
|
|
139
165
|
const responseItem = responseItems[j];
|
|
166
|
+
|
|
140
167
|
for (const queryKey in args.query) {
|
|
141
168
|
if (typeof responseItem[queryKey] === "undefined" || args.query[queryKey] !== responseItem[queryKey]) {
|
|
142
169
|
continue outer;
|
|
143
170
|
}
|
|
144
171
|
}
|
|
172
|
+
|
|
145
173
|
foundResult = responseItem;
|
|
146
174
|
}
|
|
175
|
+
|
|
147
176
|
results.push(foundResult);
|
|
148
177
|
}
|
|
178
|
+
|
|
149
179
|
this.results = results;
|
|
150
180
|
this.resolveExecution();
|
|
151
181
|
};
|
|
182
|
+
|
|
152
183
|
break;
|
|
153
184
|
}
|
|
185
|
+
|
|
154
186
|
return this.documentClient[this.batchType](documentClientArgs, (error, result) => {
|
|
155
187
|
if (error) {
|
|
156
188
|
reject(error);
|
|
@@ -159,6 +191,8 @@ class BatchProcess {
|
|
|
159
191
|
}
|
|
160
192
|
});
|
|
161
193
|
}
|
|
194
|
+
|
|
162
195
|
}
|
|
196
|
+
|
|
163
197
|
var _default = BatchProcess;
|
|
164
198
|
exports.default = _default;
|
package/BatchProcess.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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.js
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
10
14
|
var _dynamodb = require("aws-sdk/clients/dynamodb");
|
|
15
|
+
|
|
11
16
|
var _BatchProcess = _interopRequireDefault(require("./BatchProcess"));
|
|
17
|
+
|
|
12
18
|
var _QueryGenerator = _interopRequireDefault(require("./QueryGenerator"));
|
|
19
|
+
|
|
13
20
|
/**
|
|
14
21
|
* Remove this when no apps are using our internal db drivers anymore
|
|
15
22
|
*/
|
|
16
23
|
// @ts-nocheck
|
|
17
|
-
|
|
18
24
|
const LOG_KEYS = [{
|
|
19
25
|
primary: true,
|
|
20
26
|
unique: true,
|
|
@@ -25,6 +31,7 @@ const LOG_KEYS = [{
|
|
|
25
31
|
name: "SK"
|
|
26
32
|
}]
|
|
27
33
|
}];
|
|
34
|
+
|
|
28
35
|
class DynamoDbDriver {
|
|
29
36
|
constructor({
|
|
30
37
|
documentClient
|
|
@@ -34,9 +41,11 @@ class DynamoDbDriver {
|
|
|
34
41
|
this.batchProcesses = {};
|
|
35
42
|
this.documentClient = documentClient || new _dynamodb.DocumentClient();
|
|
36
43
|
}
|
|
44
|
+
|
|
37
45
|
getClient() {
|
|
38
46
|
return this.documentClient;
|
|
39
47
|
}
|
|
48
|
+
|
|
40
49
|
async create({
|
|
41
50
|
table,
|
|
42
51
|
data,
|
|
@@ -53,21 +62,25 @@ class DynamoDbDriver {
|
|
|
53
62
|
response: result.$response
|
|
54
63
|
}];
|
|
55
64
|
}
|
|
65
|
+
|
|
56
66
|
const batchProcess = this.getBatchProcess(batch);
|
|
57
67
|
batchProcess.addBatchWrite({
|
|
58
68
|
table,
|
|
59
69
|
data
|
|
60
70
|
});
|
|
71
|
+
|
|
61
72
|
if (batchProcess.allOperationsAdded()) {
|
|
62
73
|
batchProcess.startExecution();
|
|
63
74
|
} else {
|
|
64
75
|
await batchProcess.waitStartExecution();
|
|
65
76
|
}
|
|
77
|
+
|
|
66
78
|
await batchProcess.waitExecution();
|
|
67
79
|
return [true, {
|
|
68
80
|
response: batchProcess.response
|
|
69
81
|
}];
|
|
70
82
|
}
|
|
83
|
+
|
|
71
84
|
async update({
|
|
72
85
|
query,
|
|
73
86
|
data,
|
|
@@ -82,11 +95,13 @@ class DynamoDbDriver {
|
|
|
82
95
|
ExpressionAttributeValues: {}
|
|
83
96
|
};
|
|
84
97
|
const updateExpression = [];
|
|
98
|
+
|
|
85
99
|
for (const key in data) {
|
|
86
100
|
updateExpression.push(`#${key} = :${key}`);
|
|
87
101
|
update.ExpressionAttributeNames[`#${key}`] = key;
|
|
88
102
|
update.ExpressionAttributeValues[`:${key}`] = data[key];
|
|
89
103
|
}
|
|
104
|
+
|
|
90
105
|
update.UpdateExpression += updateExpression.join(", ");
|
|
91
106
|
const result = await this.documentClient.update((0, _objectSpread2.default)({
|
|
92
107
|
TableName: table,
|
|
@@ -97,21 +112,25 @@ class DynamoDbDriver {
|
|
|
97
112
|
response: result.$response
|
|
98
113
|
}];
|
|
99
114
|
}
|
|
115
|
+
|
|
100
116
|
const batchProcess = this.getBatchProcess(batch);
|
|
101
117
|
batchProcess.addBatchWrite({
|
|
102
118
|
table,
|
|
103
119
|
data
|
|
104
120
|
});
|
|
121
|
+
|
|
105
122
|
if (batchProcess.allOperationsAdded()) {
|
|
106
123
|
batchProcess.startExecution();
|
|
107
124
|
} else {
|
|
108
125
|
await batchProcess.waitStartExecution();
|
|
109
126
|
}
|
|
127
|
+
|
|
110
128
|
await batchProcess.waitExecution();
|
|
111
129
|
return [true, {
|
|
112
130
|
response: batchProcess.response
|
|
113
131
|
}];
|
|
114
132
|
}
|
|
133
|
+
|
|
115
134
|
async delete({
|
|
116
135
|
query,
|
|
117
136
|
table,
|
|
@@ -128,21 +147,25 @@ class DynamoDbDriver {
|
|
|
128
147
|
response: result.$response
|
|
129
148
|
}];
|
|
130
149
|
}
|
|
150
|
+
|
|
131
151
|
const batchProcess = this.getBatchProcess(batch);
|
|
132
152
|
batchProcess.addBatchDelete({
|
|
133
153
|
table,
|
|
134
154
|
query
|
|
135
155
|
});
|
|
156
|
+
|
|
136
157
|
if (batchProcess.allOperationsAdded()) {
|
|
137
158
|
batchProcess.startExecution();
|
|
138
159
|
} else {
|
|
139
160
|
await batchProcess.waitStartExecution();
|
|
140
161
|
}
|
|
162
|
+
|
|
141
163
|
await batchProcess.waitExecution();
|
|
142
164
|
return [true, {
|
|
143
165
|
response: batchProcess.response
|
|
144
166
|
}];
|
|
145
167
|
}
|
|
168
|
+
|
|
146
169
|
async read({
|
|
147
170
|
table,
|
|
148
171
|
query,
|
|
@@ -164,38 +187,45 @@ class DynamoDbDriver {
|
|
|
164
187
|
const response = await this.documentClient.query((0, _objectSpread2.default)((0, _objectSpread2.default)({}, queryParams), {}, {
|
|
165
188
|
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
166
189
|
})).promise();
|
|
190
|
+
|
|
167
191
|
if (Array.isArray(response.Items)) {
|
|
168
192
|
return [response.Items, {
|
|
169
193
|
response: response.$response
|
|
170
194
|
}];
|
|
171
195
|
}
|
|
196
|
+
|
|
172
197
|
return [[], {
|
|
173
198
|
response: response.$response
|
|
174
199
|
}];
|
|
175
|
-
}
|
|
200
|
+
} // DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
|
|
201
|
+
|
|
176
202
|
|
|
177
|
-
// DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
|
|
178
203
|
const batchProcess = this.getBatchProcess(batch);
|
|
179
204
|
const getResult = batchProcess.addBatchGet({
|
|
180
205
|
table,
|
|
181
206
|
query
|
|
182
207
|
});
|
|
208
|
+
|
|
183
209
|
if (batchProcess.allOperationsAdded()) {
|
|
184
210
|
batchProcess.startExecution();
|
|
185
211
|
} else {
|
|
186
212
|
await batchProcess.waitStartExecution();
|
|
187
213
|
}
|
|
214
|
+
|
|
188
215
|
await batchProcess.waitExecution();
|
|
189
216
|
const result = getResult();
|
|
217
|
+
|
|
190
218
|
if (result) {
|
|
191
219
|
return [[result], {
|
|
192
220
|
response: batchProcess.response
|
|
193
221
|
}];
|
|
194
222
|
}
|
|
223
|
+
|
|
195
224
|
return [[], {
|
|
196
225
|
response: batchProcess.response
|
|
197
226
|
}];
|
|
198
227
|
}
|
|
228
|
+
|
|
199
229
|
async createLog({
|
|
200
230
|
id,
|
|
201
231
|
operation,
|
|
@@ -214,6 +244,7 @@ class DynamoDbDriver {
|
|
|
214
244
|
});
|
|
215
245
|
return [true, {}];
|
|
216
246
|
}
|
|
247
|
+
|
|
217
248
|
async readLogs({
|
|
218
249
|
table
|
|
219
250
|
}) {
|
|
@@ -228,12 +259,16 @@ class DynamoDbDriver {
|
|
|
228
259
|
}
|
|
229
260
|
});
|
|
230
261
|
}
|
|
262
|
+
|
|
231
263
|
getBatchProcess(__batch) {
|
|
232
264
|
if (!this.batchProcesses[__batch.instance.id]) {
|
|
233
265
|
this.batchProcesses[__batch.instance.id] = new _BatchProcess.default(__batch.instance, this.documentClient);
|
|
234
266
|
}
|
|
267
|
+
|
|
235
268
|
return this.batchProcesses[__batch.instance.id];
|
|
236
269
|
}
|
|
270
|
+
|
|
237
271
|
}
|
|
272
|
+
|
|
238
273
|
var _default = DynamoDbDriver;
|
|
239
274
|
exports.default = _default;
|
package/DynamoDbDriver.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _createKeyConditionExpressionArgs = _interopRequireDefault(require("./statements/createKeyConditionExpressionArgs"));
|
|
13
|
+
|
|
10
14
|
class QueryGenerator {
|
|
11
15
|
generate(params) {
|
|
12
16
|
const {
|
|
@@ -15,16 +19,18 @@ class QueryGenerator {
|
|
|
15
19
|
sort,
|
|
16
20
|
limit,
|
|
17
21
|
tableName
|
|
18
|
-
} = params;
|
|
19
|
-
|
|
22
|
+
} = params; // 1. Which key can we use in this query operation?
|
|
23
|
+
|
|
20
24
|
const key = this.findQueryKey(query, keys);
|
|
25
|
+
|
|
21
26
|
if (!key) {
|
|
22
27
|
throw new Error("Cannot perform query - key not found.");
|
|
23
|
-
}
|
|
28
|
+
} // 2. Now that we know the key, let's separate the key attributes from the rest.
|
|
29
|
+
|
|
24
30
|
|
|
25
|
-
// 2. Now that we know the key, let's separate the key attributes from the rest.
|
|
26
31
|
const keyAttributesValues = {};
|
|
27
32
|
const nonKeyAttributesValues = {};
|
|
33
|
+
|
|
28
34
|
for (const queryKey in query) {
|
|
29
35
|
if (key.fields.find(item => item.name === queryKey)) {
|
|
30
36
|
keyAttributesValues[queryKey] = query[queryKey];
|
|
@@ -32,6 +38,7 @@ class QueryGenerator {
|
|
|
32
38
|
nonKeyAttributesValues[queryKey] = query[queryKey];
|
|
33
39
|
}
|
|
34
40
|
}
|
|
41
|
+
|
|
35
42
|
const keyConditionExpression = (0, _createKeyConditionExpressionArgs.default)({
|
|
36
43
|
query: keyAttributesValues,
|
|
37
44
|
sort,
|
|
@@ -42,23 +49,30 @@ class QueryGenerator {
|
|
|
42
49
|
Limit: limit
|
|
43
50
|
});
|
|
44
51
|
}
|
|
52
|
+
|
|
45
53
|
findQueryKey(query = {}, keys = []) {
|
|
46
54
|
for (let i = 0; i < keys.length; i++) {
|
|
47
55
|
const key = keys[i];
|
|
48
56
|
let hasAllFields = true;
|
|
57
|
+
|
|
49
58
|
for (let j = 0; j < key.fields.length; j++) {
|
|
50
59
|
const field = key.fields[j];
|
|
60
|
+
|
|
51
61
|
if (!query[field.name]) {
|
|
52
62
|
hasAllFields = false;
|
|
53
63
|
break;
|
|
54
64
|
}
|
|
55
65
|
}
|
|
66
|
+
|
|
56
67
|
if (hasAllFields) {
|
|
57
68
|
return key;
|
|
58
69
|
}
|
|
59
70
|
}
|
|
71
|
+
|
|
60
72
|
return null;
|
|
61
73
|
}
|
|
74
|
+
|
|
62
75
|
}
|
|
76
|
+
|
|
63
77
|
var _default = QueryGenerator;
|
|
64
78
|
exports.default = _default;
|
package/QueryGenerator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["QueryGenerator","generate","params","query","keys","sort","limit","tableName","key","findQueryKey","Error","keyAttributesValues","nonKeyAttributesValues","queryKey","fields","find","item","name","keyConditionExpression","createKeyConditionExpressionArgs","TableName","Limit","i","length","hasAllFields","j","field"],"sources":["QueryGenerator.ts"],"sourcesContent":["import createKeyConditionExpressionArgs from \"./statements/createKeyConditionExpressionArgs\";\nimport { Query, QueryKey, QueryKeyField, QueryKeys, QuerySort } from \"~/types\";\n\ninterface GenerateParams {\n query: Query;\n keys: QueryKeys;\n sort: QuerySort;\n limit: number;\n tableName: string;\n}\nclass QueryGenerator {\n generate(params: GenerateParams) {\n const { query, keys, sort, limit, tableName } = params;\n // 1. Which key can we use in this query operation?\n const key = this.findQueryKey(query, keys);\n\n if (!key) {\n throw new Error(\"Cannot perform query - key not found.\");\n }\n\n // 2. Now that we know the key, let's separate the key attributes from the rest.\n const keyAttributesValues: Record<string, string> = {};\n const nonKeyAttributesValues: Record<string, string> = {};\n for (const queryKey in query) {\n if (key.fields.find((item: QueryKeyField) => item.name === queryKey)) {\n keyAttributesValues[queryKey] = query[queryKey];\n } else {\n nonKeyAttributesValues[queryKey] = query[queryKey];\n }\n }\n\n const keyConditionExpression = createKeyConditionExpressionArgs({\n query: keyAttributesValues,\n sort,\n key\n });\n\n return { ...keyConditionExpression, TableName: tableName, Limit: limit };\n }\n\n findQueryKey(query: Query = {}, keys: QueryKeys = []): QueryKey | null {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n let hasAllFields = true;\n for (let j = 0; j < key.fields.length; j++) {\n const field = key.fields[j];\n if (!query[field.name]) {\n hasAllFields = false;\n break;\n }\n }\n\n if (hasAllFields) {\n return key;\n }\n }\n return null;\n }\n}\n\nexport default QueryGenerator;\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["QueryGenerator","generate","params","query","keys","sort","limit","tableName","key","findQueryKey","Error","keyAttributesValues","nonKeyAttributesValues","queryKey","fields","find","item","name","keyConditionExpression","createKeyConditionExpressionArgs","TableName","Limit","i","length","hasAllFields","j","field"],"sources":["QueryGenerator.ts"],"sourcesContent":["import createKeyConditionExpressionArgs from \"./statements/createKeyConditionExpressionArgs\";\nimport { Query, QueryKey, QueryKeyField, QueryKeys, QuerySort } from \"~/types\";\n\ninterface GenerateParams {\n query: Query;\n keys: QueryKeys;\n sort: QuerySort;\n limit: number;\n tableName: string;\n}\nclass QueryGenerator {\n generate(params: GenerateParams) {\n const { query, keys, sort, limit, tableName } = params;\n // 1. Which key can we use in this query operation?\n const key = this.findQueryKey(query, keys);\n\n if (!key) {\n throw new Error(\"Cannot perform query - key not found.\");\n }\n\n // 2. Now that we know the key, let's separate the key attributes from the rest.\n const keyAttributesValues: Record<string, string> = {};\n const nonKeyAttributesValues: Record<string, string> = {};\n for (const queryKey in query) {\n if (key.fields.find((item: QueryKeyField) => item.name === queryKey)) {\n keyAttributesValues[queryKey] = query[queryKey];\n } else {\n nonKeyAttributesValues[queryKey] = query[queryKey];\n }\n }\n\n const keyConditionExpression = createKeyConditionExpressionArgs({\n query: keyAttributesValues,\n sort,\n key\n });\n\n return { ...keyConditionExpression, TableName: tableName, Limit: limit };\n }\n\n findQueryKey(query: Query = {}, keys: QueryKeys = []): QueryKey | null {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n let hasAllFields = true;\n for (let j = 0; j < key.fields.length; j++) {\n const field = key.fields[j];\n if (!query[field.name]) {\n hasAllFields = false;\n break;\n }\n }\n\n if (hasAllFields) {\n return key;\n }\n }\n return null;\n }\n}\n\nexport default QueryGenerator;\n"],"mappings":";;;;;;;;;;;AAAA;;AAUA,MAAMA,cAAN,CAAqB;EACjBC,QAAQ,CAACC,MAAD,EAAyB;IAC7B,MAAM;MAAEC,KAAF;MAASC,IAAT;MAAeC,IAAf;MAAqBC,KAArB;MAA4BC;IAA5B,IAA0CL,MAAhD,CAD6B,CAE7B;;IACA,MAAMM,GAAG,GAAG,KAAKC,YAAL,CAAkBN,KAAlB,EAAyBC,IAAzB,CAAZ;;IAEA,IAAI,CAACI,GAAL,EAAU;MACN,MAAM,IAAIE,KAAJ,CAAU,uCAAV,CAAN;IACH,CAP4B,CAS7B;;;IACA,MAAMC,mBAA2C,GAAG,EAApD;IACA,MAAMC,sBAA8C,GAAG,EAAvD;;IACA,KAAK,MAAMC,QAAX,IAAuBV,KAAvB,EAA8B;MAC1B,IAAIK,GAAG,CAACM,MAAJ,CAAWC,IAAX,CAAiBC,IAAD,IAAyBA,IAAI,CAACC,IAAL,KAAcJ,QAAvD,CAAJ,EAAsE;QAClEF,mBAAmB,CAACE,QAAD,CAAnB,GAAgCV,KAAK,CAACU,QAAD,CAArC;MACH,CAFD,MAEO;QACHD,sBAAsB,CAACC,QAAD,CAAtB,GAAmCV,KAAK,CAACU,QAAD,CAAxC;MACH;IACJ;;IAED,MAAMK,sBAAsB,GAAG,IAAAC,yCAAA,EAAiC;MAC5DhB,KAAK,EAAEQ,mBADqD;MAE5DN,IAF4D;MAG5DG;IAH4D,CAAjC,CAA/B;IAMA,mEAAYU,sBAAZ;MAAoCE,SAAS,EAAEb,SAA/C;MAA0Dc,KAAK,EAAEf;IAAjE;EACH;;EAEDG,YAAY,CAACN,KAAY,GAAG,EAAhB,EAAoBC,IAAe,GAAG,EAAtC,EAA2D;IACnE,KAAK,IAAIkB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGlB,IAAI,CAACmB,MAAzB,EAAiCD,CAAC,EAAlC,EAAsC;MAClC,MAAMd,GAAG,GAAGJ,IAAI,CAACkB,CAAD,CAAhB;MACA,IAAIE,YAAY,GAAG,IAAnB;;MACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGjB,GAAG,CAACM,MAAJ,CAAWS,MAA/B,EAAuCE,CAAC,EAAxC,EAA4C;QACxC,MAAMC,KAAK,GAAGlB,GAAG,CAACM,MAAJ,CAAWW,CAAX,CAAd;;QACA,IAAI,CAACtB,KAAK,CAACuB,KAAK,CAACT,IAAP,CAAV,EAAwB;UACpBO,YAAY,GAAG,KAAf;UACA;QACH;MACJ;;MAED,IAAIA,YAAJ,EAAkB;QACd,OAAOhB,GAAP;MACH;IACJ;;IACD,OAAO,IAAP;EACH;;AA/CgB;;eAkDNR,c"}
|
package/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
@@ -10,4 +11,5 @@ Object.defineProperty(exports, "DynamoDbDriver", {
|
|
|
10
11
|
return _DynamoDbDriver.default;
|
|
11
12
|
}
|
|
12
13
|
});
|
|
14
|
+
|
|
13
15
|
var _DynamoDbDriver = _interopRequireDefault(require("./DynamoDbDriver"));
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["import { default as DynamoDbDriver } from \"./DynamoDbDriver\";\n\nexport { DynamoDbDriver };\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["import { default as DynamoDbDriver } from \"./DynamoDbDriver\";\n\nexport { DynamoDbDriver };\n"],"mappings":";;;;;;;;;;;;;;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["beginsWith","canProcess","value","process","key","args","expression","attributeNames","attributeValues"],"sources":["beginsWith.ts"],"sourcesContent":["import { Operator } from \"~/types\";\n\nconst beginsWith: Operator = {\n canProcess: ({ value }) => {\n return value && typeof value[\"$beginsWith\"] !== \"undefined\";\n },\n process: ({ key, value, args }) => {\n args.expression += `begins_with (#${key}, :${key})`;\n args.attributeNames[`#${key}`] = key;\n args.attributeValues[`:${key}`] = value[\"$beginsWith\"];\n }\n};\n\nexport default beginsWith;\n"],"mappings":";;;;;;AAEA,MAAMA,UAAoB,GAAG;EACzBC,UAAU,EAAE,CAAC;IAAEC;
|
|
1
|
+
{"version":3,"names":["beginsWith","canProcess","value","process","key","args","expression","attributeNames","attributeValues"],"sources":["beginsWith.ts"],"sourcesContent":["import { Operator } from \"~/types\";\n\nconst beginsWith: Operator = {\n canProcess: ({ value }) => {\n return value && typeof value[\"$beginsWith\"] !== \"undefined\";\n },\n process: ({ key, value, args }) => {\n args.expression += `begins_with (#${key}, :${key})`;\n args.attributeNames[`#${key}`] = key;\n args.attributeValues[`:${key}`] = value[\"$beginsWith\"];\n }\n};\n\nexport default beginsWith;\n"],"mappings":";;;;;;AAEA,MAAMA,UAAoB,GAAG;EACzBC,UAAU,EAAE,CAAC;IAAEC;EAAF,CAAD,KAAe;IACvB,OAAOA,KAAK,IAAI,OAAOA,KAAK,CAAC,aAAD,CAAZ,KAAgC,WAAhD;EACH,CAHwB;EAIzBC,OAAO,EAAE,CAAC;IAAEC,GAAF;IAAOF,KAAP;IAAcG;EAAd,CAAD,KAA0B;IAC/BA,IAAI,CAACC,UAAL,IAAoB,iBAAgBF,GAAI,MAAKA,GAAI,GAAjD;IACAC,IAAI,CAACE,cAAL,CAAqB,IAAGH,GAAI,EAA5B,IAAiCA,GAAjC;IACAC,IAAI,CAACG,eAAL,CAAsB,IAAGJ,GAAI,EAA7B,IAAkCF,KAAK,CAAC,aAAD,CAAvC;EACH;AARwB,CAA7B;eAWeF,U"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["between","canProcess","value","process","key","statement","attributeNames","attributeValues"],"sources":["between.ts"],"sourcesContent":["import { Operator } from \"~/types\";\n\nconst between: Operator = {\n canProcess: ({ value }) => {\n return value && typeof value[\"$between\"] !== \"undefined\";\n },\n process: ({ key, value }) => {\n return {\n statement: `#${key} BETWEEN :${key}Gte AND :${key}Lte`,\n attributeNames: {\n [`#${key}`]: key\n },\n attributeValues: {\n [`:${key}Gte`]: value[0],\n [`:${key}Lte`]: value[1]\n }\n };\n }\n};\n\nexport default between;\n"],"mappings":";;;;;;AAEA,MAAMA,OAAiB,GAAG;EACtBC,UAAU,EAAE,CAAC;IAAEC;
|
|
1
|
+
{"version":3,"names":["between","canProcess","value","process","key","statement","attributeNames","attributeValues"],"sources":["between.ts"],"sourcesContent":["import { Operator } from \"~/types\";\n\nconst between: Operator = {\n canProcess: ({ value }) => {\n return value && typeof value[\"$between\"] !== \"undefined\";\n },\n process: ({ key, value }) => {\n return {\n statement: `#${key} BETWEEN :${key}Gte AND :${key}Lte`,\n attributeNames: {\n [`#${key}`]: key\n },\n attributeValues: {\n [`:${key}Gte`]: value[0],\n [`:${key}Lte`]: value[1]\n }\n };\n }\n};\n\nexport default between;\n"],"mappings":";;;;;;AAEA,MAAMA,OAAiB,GAAG;EACtBC,UAAU,EAAE,CAAC;IAAEC;EAAF,CAAD,KAAe;IACvB,OAAOA,KAAK,IAAI,OAAOA,KAAK,CAAC,UAAD,CAAZ,KAA6B,WAA7C;EACH,CAHqB;EAItBC,OAAO,EAAE,CAAC;IAAEC,GAAF;IAAOF;EAAP,CAAD,KAAoB;IACzB,OAAO;MACHG,SAAS,EAAG,IAAGD,GAAI,aAAYA,GAAI,YAAWA,GAAI,KAD/C;MAEHE,cAAc,EAAE;QACZ,CAAE,IAAGF,GAAI,EAAT,GAAaA;MADD,CAFb;MAKHG,eAAe,EAAE;QACb,CAAE,IAAGH,GAAI,KAAT,GAAgBF,KAAK,CAAC,CAAD,CADR;QAEb,CAAE,IAAGE,GAAI,KAAT,GAAgBF,KAAK,CAAC,CAAD;MAFR;IALd,CAAP;EAUH;AAfqB,CAA1B;eAkBeF,O"}
|