@webiny/db-dynamodb 5.39.0-beta.0 → 5.39.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DynamoDbDriver.d.ts +15 -31
- package/DynamoDbDriver.js +15 -214
- package/DynamoDbDriver.js.map +1 -1
- package/index.js.map +1 -1
- package/package.json +12 -11
- package/plugins/definitions/AttributePlugin.d.ts +3 -5
- package/plugins/definitions/AttributePlugin.js +2 -6
- package/plugins/definitions/AttributePlugin.js.map +1 -1
- package/plugins/definitions/DateTimeTransformPlugin.js +12 -12
- package/plugins/definitions/DateTimeTransformPlugin.js.map +1 -1
- package/plugins/definitions/FieldPathPlugin.js +4 -6
- package/plugins/definitions/FieldPathPlugin.js.map +1 -1
- package/plugins/definitions/FieldPlugin.d.ts +1 -1
- package/plugins/definitions/FieldPlugin.js +0 -8
- package/plugins/definitions/FieldPlugin.js.map +1 -1
- package/plugins/definitions/NumberTransformPlugin.js +4 -4
- package/plugins/definitions/NumberTransformPlugin.js.map +1 -1
- package/plugins/definitions/TimeTransformPlugin.js +11 -7
- package/plugins/definitions/TimeTransformPlugin.js.map +1 -1
- package/plugins/definitions/ValueFilterPlugin.js +1 -3
- package/plugins/definitions/ValueFilterPlugin.js.map +1 -1
- package/plugins/definitions/ValueTransformPlugin.d.ts +1 -1
- package/plugins/definitions/ValueTransformPlugin.js +4 -6
- package/plugins/definitions/ValueTransformPlugin.js.map +1 -1
- package/plugins/filters/fuzzy.js +9 -5
- package/plugins/filters/fuzzy.js.map +1 -1
- package/toolbox.d.ts +3 -0
- package/toolbox.js +20 -0
- package/toolbox.js.map +1 -0
- package/utils/attributes.d.ts +3 -3
- package/utils/attributes.js +4 -3
- package/utils/attributes.js.map +1 -1
- package/utils/batchRead.d.ts +3 -3
- package/utils/batchRead.js +3 -0
- package/utils/batchRead.js.map +1 -1
- package/utils/batchWrite.d.ts +19 -6
- package/utils/batchWrite.js +44 -5
- package/utils/batchWrite.js.map +1 -1
- package/utils/cleanup.d.ts +1 -1
- package/utils/cleanup.js +3 -3
- package/utils/cleanup.js.map +1 -1
- package/utils/count.js +4 -5
- package/utils/count.js.map +1 -1
- package/utils/createEntity.d.ts +45 -6
- package/utils/createEntity.js +7 -8
- package/utils/createEntity.js.map +1 -1
- package/utils/createTable.d.ts +4 -4
- package/utils/createTable.js +5 -3
- package/utils/createTable.js.map +1 -1
- package/utils/delete.d.ts +10 -0
- package/utils/delete.js +18 -0
- package/utils/delete.js.map +1 -0
- package/utils/filter.js +4 -1
- package/utils/filter.js.map +1 -1
- package/utils/get.d.ts +3 -2
- package/utils/get.js +14 -3
- package/utils/get.js.map +1 -1
- package/utils/index.d.ts +5 -2
- package/utils/index.js +45 -12
- package/utils/index.js.map +1 -1
- package/utils/put.d.ts +11 -0
- package/utils/put.js +18 -0
- package/utils/put.js.map +1 -0
- package/utils/query.d.ts +6 -4
- package/utils/query.js +29 -12
- package/utils/query.js.map +1 -1
- package/utils/scan.d.ts +19 -11
- package/utils/scan.js +12 -8
- package/utils/scan.js.map +1 -1
- package/utils/update.d.ts +11 -0
- package/utils/update.js +18 -0
- package/utils/update.js.map +1 -0
- package/BatchProcess.d.ts +0 -47
- package/BatchProcess.js +0 -166
- package/BatchProcess.js.map +0 -1
- package/QueryGenerator.d.ts +0 -21
- package/QueryGenerator.js +0 -66
- package/QueryGenerator.js.map +0 -1
- package/operators/comparison/beginsWith.d.ts +0 -3
- package/operators/comparison/beginsWith.js +0 -26
- package/operators/comparison/beginsWith.js.map +0 -1
- package/operators/comparison/between.d.ts +0 -3
- package/operators/comparison/between.js +0 -32
- package/operators/comparison/between.js.map +0 -1
- package/operators/comparison/eq.d.ts +0 -3
- package/operators/comparison/eq.js +0 -34
- package/operators/comparison/eq.js.map +0 -1
- package/operators/comparison/gt.d.ts +0 -3
- package/operators/comparison/gt.js +0 -26
- package/operators/comparison/gt.js.map +0 -1
- package/operators/comparison/gte.d.ts +0 -3
- package/operators/comparison/gte.js +0 -26
- package/operators/comparison/gte.js.map +0 -1
- package/operators/comparison/lt.d.ts +0 -3
- package/operators/comparison/lt.js +0 -26
- package/operators/comparison/lt.js.map +0 -1
- package/operators/comparison/lte.d.ts +0 -3
- package/operators/comparison/lte.js +0 -26
- package/operators/comparison/lte.js.map +0 -1
- package/operators/index.d.ts +0 -12
- package/operators/index.js +0 -30
- package/operators/index.js.map +0 -1
- package/operators/logical/and.d.ts +0 -3
- package/operators/logical/and.js +0 -60
- package/operators/logical/and.js.map +0 -1
- package/operators/logical/or.d.ts +0 -3
- package/operators/logical/or.js +0 -60
- package/operators/logical/or.js.map +0 -1
- package/statements/createKeyConditionExpressionArgs.d.ts +0 -15
- package/statements/createKeyConditionExpressionArgs.js +0 -47
- package/statements/createKeyConditionExpressionArgs.js.map +0 -1
- package/statements/processStatement.d.ts +0 -3
- package/statements/processStatement.js +0 -37
- package/statements/processStatement.js.map +0 -1
package/DynamoDbDriver.d.ts
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import BatchProcess from "./BatchProcess";
|
|
6
|
-
import { DbDriver, Args, Result, ArgsBatch } from "@webiny/db";
|
|
7
|
-
declare type ConstructorArgs = {
|
|
8
|
-
documentClient?: DocumentClient;
|
|
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;
|
|
1
|
+
import { DynamoDBClient } from "@webiny/aws-sdk/client-dynamodb";
|
|
2
|
+
import { DbDriver, Result } from "@webiny/db";
|
|
3
|
+
interface ConstructorArgs {
|
|
4
|
+
documentClient: DynamoDBClient;
|
|
21
5
|
}
|
|
22
6
|
declare class DynamoDbDriver implements DbDriver {
|
|
23
|
-
batchProcesses: Record<string,
|
|
24
|
-
documentClient:
|
|
25
|
-
constructor({ documentClient }
|
|
26
|
-
getClient():
|
|
27
|
-
create(
|
|
28
|
-
update(
|
|
29
|
-
delete(
|
|
30
|
-
read<T>(
|
|
31
|
-
createLog(
|
|
32
|
-
readLogs<T>(
|
|
33
|
-
getBatchProcess(
|
|
7
|
+
batchProcesses: Record<string, any>;
|
|
8
|
+
documentClient: DynamoDBClient;
|
|
9
|
+
constructor({ documentClient }: ConstructorArgs);
|
|
10
|
+
getClient(): DynamoDBClient;
|
|
11
|
+
create(): Promise<Result>;
|
|
12
|
+
update(): Promise<Result>;
|
|
13
|
+
delete(): Promise<Result>;
|
|
14
|
+
read<T>(): Promise<Result<T[]>>;
|
|
15
|
+
createLog(): Promise<Result>;
|
|
16
|
+
readLogs<T>(): Promise<Result<T[]>>;
|
|
17
|
+
getBatchProcess(): void;
|
|
34
18
|
}
|
|
35
19
|
export default DynamoDbDriver;
|
package/DynamoDbDriver.js
CHANGED
|
@@ -1,238 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.default = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
-
var _dynamodb = require("aws-sdk/clients/dynamodb");
|
|
11
|
-
var _BatchProcess = _interopRequireDefault(require("./BatchProcess"));
|
|
12
|
-
var _QueryGenerator = _interopRequireDefault(require("./QueryGenerator"));
|
|
13
|
-
/**
|
|
14
|
-
* Remove this when no apps are using our internal db drivers anymore
|
|
15
|
-
*/
|
|
16
|
-
// @ts-nocheck
|
|
17
|
-
|
|
18
|
-
const LOG_KEYS = [{
|
|
19
|
-
primary: true,
|
|
20
|
-
unique: true,
|
|
21
|
-
name: "primary",
|
|
22
|
-
fields: [{
|
|
23
|
-
name: "PK"
|
|
24
|
-
}, {
|
|
25
|
-
name: "SK"
|
|
26
|
-
}]
|
|
27
|
-
}];
|
|
28
7
|
class DynamoDbDriver {
|
|
29
8
|
constructor({
|
|
30
9
|
documentClient
|
|
31
|
-
}
|
|
32
|
-
(0, _defineProperty2.default)(this, "batchProcesses", void 0);
|
|
33
|
-
(0, _defineProperty2.default)(this, "documentClient", void 0);
|
|
10
|
+
}) {
|
|
34
11
|
this.batchProcesses = {};
|
|
35
|
-
this.documentClient = documentClient
|
|
12
|
+
this.documentClient = documentClient;
|
|
36
13
|
}
|
|
37
14
|
getClient() {
|
|
38
15
|
return this.documentClient;
|
|
39
16
|
}
|
|
40
|
-
async create({
|
|
41
|
-
|
|
42
|
-
data,
|
|
43
|
-
meta,
|
|
44
|
-
__batch: batch
|
|
45
|
-
}) {
|
|
46
|
-
if (!batch) {
|
|
47
|
-
const result = await this.documentClient.put({
|
|
48
|
-
TableName: table,
|
|
49
|
-
Item: data,
|
|
50
|
-
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
51
|
-
}).promise();
|
|
52
|
-
return [true, {
|
|
53
|
-
response: result.$response
|
|
54
|
-
}];
|
|
55
|
-
}
|
|
56
|
-
const batchProcess = this.getBatchProcess(batch);
|
|
57
|
-
batchProcess.addBatchWrite({
|
|
58
|
-
table,
|
|
59
|
-
data
|
|
60
|
-
});
|
|
61
|
-
if (batchProcess.allOperationsAdded()) {
|
|
62
|
-
batchProcess.startExecution();
|
|
63
|
-
} else {
|
|
64
|
-
await batchProcess.waitStartExecution();
|
|
65
|
-
}
|
|
66
|
-
await batchProcess.waitExecution();
|
|
67
|
-
return [true, {
|
|
68
|
-
response: batchProcess.response
|
|
69
|
-
}];
|
|
17
|
+
async create() {
|
|
18
|
+
return [true, {}];
|
|
70
19
|
}
|
|
71
|
-
async update({
|
|
72
|
-
|
|
73
|
-
data,
|
|
74
|
-
table,
|
|
75
|
-
meta,
|
|
76
|
-
__batch: batch
|
|
77
|
-
}) {
|
|
78
|
-
if (!batch) {
|
|
79
|
-
const update = {
|
|
80
|
-
UpdateExpression: "SET ",
|
|
81
|
-
ExpressionAttributeNames: {},
|
|
82
|
-
ExpressionAttributeValues: {}
|
|
83
|
-
};
|
|
84
|
-
const updateExpression = [];
|
|
85
|
-
for (const key in data) {
|
|
86
|
-
updateExpression.push(`#${key} = :${key}`);
|
|
87
|
-
update.ExpressionAttributeNames[`#${key}`] = key;
|
|
88
|
-
update.ExpressionAttributeValues[`:${key}`] = data[key];
|
|
89
|
-
}
|
|
90
|
-
update.UpdateExpression += updateExpression.join(", ");
|
|
91
|
-
const result = await this.documentClient.update((0, _objectSpread2.default)({
|
|
92
|
-
TableName: table,
|
|
93
|
-
Key: query,
|
|
94
|
-
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
95
|
-
}, update)).promise();
|
|
96
|
-
return [true, {
|
|
97
|
-
response: result.$response
|
|
98
|
-
}];
|
|
99
|
-
}
|
|
100
|
-
const batchProcess = this.getBatchProcess(batch);
|
|
101
|
-
batchProcess.addBatchWrite({
|
|
102
|
-
table,
|
|
103
|
-
data
|
|
104
|
-
});
|
|
105
|
-
if (batchProcess.allOperationsAdded()) {
|
|
106
|
-
batchProcess.startExecution();
|
|
107
|
-
} else {
|
|
108
|
-
await batchProcess.waitStartExecution();
|
|
109
|
-
}
|
|
110
|
-
await batchProcess.waitExecution();
|
|
111
|
-
return [true, {
|
|
112
|
-
response: batchProcess.response
|
|
113
|
-
}];
|
|
20
|
+
async update() {
|
|
21
|
+
return [true, {}];
|
|
114
22
|
}
|
|
115
|
-
async delete({
|
|
116
|
-
|
|
117
|
-
table,
|
|
118
|
-
meta,
|
|
119
|
-
__batch: batch
|
|
120
|
-
}) {
|
|
121
|
-
if (!batch) {
|
|
122
|
-
const result = await this.documentClient.delete({
|
|
123
|
-
TableName: table,
|
|
124
|
-
Key: query,
|
|
125
|
-
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
126
|
-
}).promise();
|
|
127
|
-
return [true, {
|
|
128
|
-
response: result.$response
|
|
129
|
-
}];
|
|
130
|
-
}
|
|
131
|
-
const batchProcess = this.getBatchProcess(batch);
|
|
132
|
-
batchProcess.addBatchDelete({
|
|
133
|
-
table,
|
|
134
|
-
query
|
|
135
|
-
});
|
|
136
|
-
if (batchProcess.allOperationsAdded()) {
|
|
137
|
-
batchProcess.startExecution();
|
|
138
|
-
} else {
|
|
139
|
-
await batchProcess.waitStartExecution();
|
|
140
|
-
}
|
|
141
|
-
await batchProcess.waitExecution();
|
|
142
|
-
return [true, {
|
|
143
|
-
response: batchProcess.response
|
|
144
|
-
}];
|
|
23
|
+
async delete() {
|
|
24
|
+
return [true, {}];
|
|
145
25
|
}
|
|
146
|
-
async read({
|
|
147
|
-
|
|
148
|
-
query,
|
|
149
|
-
sort,
|
|
150
|
-
limit,
|
|
151
|
-
keys,
|
|
152
|
-
meta,
|
|
153
|
-
__batch: batch
|
|
154
|
-
}) {
|
|
155
|
-
if (!batch) {
|
|
156
|
-
const queryGenerator = new _QueryGenerator.default();
|
|
157
|
-
const queryParams = queryGenerator.generate({
|
|
158
|
-
query,
|
|
159
|
-
keys,
|
|
160
|
-
sort,
|
|
161
|
-
limit,
|
|
162
|
-
tableName: table
|
|
163
|
-
});
|
|
164
|
-
const response = await this.documentClient.query((0, _objectSpread2.default)((0, _objectSpread2.default)({}, queryParams), {}, {
|
|
165
|
-
ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
|
|
166
|
-
})).promise();
|
|
167
|
-
if (Array.isArray(response.Items)) {
|
|
168
|
-
return [response.Items, {
|
|
169
|
-
response: response.$response
|
|
170
|
-
}];
|
|
171
|
-
}
|
|
172
|
-
return [[], {
|
|
173
|
-
response: response.$response
|
|
174
|
-
}];
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
|
|
178
|
-
const batchProcess = this.getBatchProcess(batch);
|
|
179
|
-
const getResult = batchProcess.addBatchGet({
|
|
180
|
-
table,
|
|
181
|
-
query
|
|
182
|
-
});
|
|
183
|
-
if (batchProcess.allOperationsAdded()) {
|
|
184
|
-
batchProcess.startExecution();
|
|
185
|
-
} else {
|
|
186
|
-
await batchProcess.waitStartExecution();
|
|
187
|
-
}
|
|
188
|
-
await batchProcess.waitExecution();
|
|
189
|
-
const result = getResult();
|
|
190
|
-
if (result) {
|
|
191
|
-
return [[result], {
|
|
192
|
-
response: batchProcess.response
|
|
193
|
-
}];
|
|
194
|
-
}
|
|
195
|
-
return [[], {
|
|
196
|
-
response: batchProcess.response
|
|
197
|
-
}];
|
|
26
|
+
async read() {
|
|
27
|
+
return [[], {}];
|
|
198
28
|
}
|
|
199
|
-
async createLog({
|
|
200
|
-
id,
|
|
201
|
-
operation,
|
|
202
|
-
data,
|
|
203
|
-
table
|
|
204
|
-
}) {
|
|
205
|
-
await this.create({
|
|
206
|
-
table: table,
|
|
207
|
-
keys: LOG_KEYS,
|
|
208
|
-
data: (0, _objectSpread2.default)({
|
|
209
|
-
PK: "log",
|
|
210
|
-
SK: id,
|
|
211
|
-
id,
|
|
212
|
-
operation
|
|
213
|
-
}, data)
|
|
214
|
-
});
|
|
29
|
+
async createLog() {
|
|
215
30
|
return [true, {}];
|
|
216
31
|
}
|
|
217
|
-
async readLogs({
|
|
218
|
-
|
|
219
|
-
}) {
|
|
220
|
-
return this.read({
|
|
221
|
-
table,
|
|
222
|
-
keys: LOG_KEYS,
|
|
223
|
-
query: {
|
|
224
|
-
PK: "log",
|
|
225
|
-
SK: {
|
|
226
|
-
$gte: " "
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
});
|
|
32
|
+
async readLogs() {
|
|
33
|
+
return this.read();
|
|
230
34
|
}
|
|
231
|
-
getBatchProcess(
|
|
232
|
-
|
|
233
|
-
this.batchProcesses[__batch.instance.id] = new _BatchProcess.default(__batch.instance, this.documentClient);
|
|
234
|
-
}
|
|
235
|
-
return this.batchProcesses[__batch.instance.id];
|
|
35
|
+
getBatchProcess() {
|
|
36
|
+
// not empty
|
|
236
37
|
}
|
|
237
38
|
}
|
|
238
39
|
var _default = DynamoDbDriver;
|
package/DynamoDbDriver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_dynamodb","require","_BatchProcess","_interopRequireDefault","_QueryGenerator","LOG_KEYS","primary","unique","name","fields","DynamoDbDriver","constructor","documentClient","_defineProperty2","default","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","_objectSpread2","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","_default","exports"],"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":";;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,eAAA,GAAAD,sBAAA,CAAAF,OAAA;AANA;AACA;AACA;AACA;;AAWA,MAAMI,QAAmB,GAAG,CACxB;EACIC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,IAAI;EACZC,IAAI,EAAE,SAAS;EACfC,MAAM,EAAE,CAAC;IAAED,IAAI,EAAE;EAAK,CAAC,EAAE;IAAEA,IAAI,EAAE;EAAK,CAAC;AAC3C,CAAC,CACJ;AAsBD,MAAME,cAAc,CAAqB;EAGrCC,WAAWA,CAAC;IAAEC;EAAgC,CAAC,GAAG,CAAC,CAAC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAClD,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAACH,cAAc,GAAGA,cAAc,IAAI,IAAII,wBAAc,CAAC,CAAC;EAChE;EAEAC,SAASA,CAAA,EAAG;IACR,OAAO,IAAI,CAACL,cAAc;EAC9B;EAEA,MAAMM,MAAMA,CAAC;IAAEC,KAAK;IAAEC,IAAI;IAAEC,IAAI;IAAEC,OAAO,EAAEC;EAAY,CAAC,EAAmB;IACvE,IAAI,CAACA,KAAK,EAAE;MACR,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACZ,cAAc,CACnCa,GAAG,CAAC;QACDC,SAAS,EAAEP,KAAK;QAChBQ,IAAI,EAAEP,IAAI;QACVQ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAC7C,CAAC,CAAC,CACDQ,OAAO,CAAC,CAAC;MACd,OAAO,CAAC,IAAI,EAAE;QAAEC,QAAQ,EAAEN,MAAM,CAACO;MAAU,CAAC,CAAC;IACjD;IAEA,MAAMC,YAAY,GAAG,IAAI,CAACC,eAAe,CAACV,KAAK,CAAC;IAChDS,YAAY,CAACE,aAAa,CAAC;MAAEf,KAAK;MAAEC;IAAK,CAAC,CAAC;IAE3C,IAAIY,YAAY,CAACG,kBAAkB,CAAC,CAAC,EAAE;MACnCH,YAAY,CAACI,cAAc,CAAC,CAAC;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,CAAC,CAAC;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,CAAC,CAAC;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMS,MAAMA,CAAC;IAAEC,KAAK;IAAEpB,IAAI;IAAED,KAAK;IAAEE,IAAI;IAAEC,OAAO,EAAEC;EAAY,CAAC,EAAmB;IAC9E,IAAI,CAACA,KAAK,EAAE;MACR,MAAMgB,MAAc,GAAG;QACnBE,gBAAgB,EAAE,MAAM;QACxBC,wBAAwB,EAAE,CAAC,CAAC;QAC5BC,yBAAyB,EAAE,CAAC;MAChC,CAAC;MAED,MAAMC,gBAAgB,GAAG,EAAE;MAC3B,KAAK,MAAMC,GAAG,IAAIzB,IAAI,EAAE;QACpBwB,gBAAgB,CAACE,IAAI,CAAE,IAAGD,GAAI,OAAMA,GAAI,EAAC,CAAC;QAC1CN,MAAM,CAACG,wBAAwB,CAAE,IAAGG,GAAI,EAAC,CAAC,GAAGA,GAAG;QAChDN,MAAM,CAACI,yBAAyB,CAAE,IAAGE,GAAI,EAAC,CAAC,GAAGzB,IAAI,CAACyB,GAAG,CAAC;MAC3D;MAEAN,MAAM,CAACE,gBAAgB,IAAIG,gBAAgB,CAACG,IAAI,CAAC,IAAI,CAAC;MAEtD,MAAMvB,MAAM,GAAG,MAAM,IAAI,CAACZ,cAAc,CACnC2B,MAAM,KAAAS,cAAA,CAAAlC,OAAA;QACHY,SAAS,EAAEP,KAAK;QAChB8B,GAAG,EAAET,KAAK;QACVZ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAAM,GAC5CkB,MAAM,CACZ,CAAC,CACDV,OAAO,CAAC,CAAC;MAEd,OAAO,CAAC,IAAI,EAAE;QAAEC,QAAQ,EAAEN,MAAM,CAACO;MAAU,CAAC,CAAC;IACjD;IAEA,MAAMC,YAAY,GAAG,IAAI,CAACC,eAAe,CAACV,KAAK,CAAC;IAEhDS,YAAY,CAACE,aAAa,CAAC;MACvBf,KAAK;MACLC;IACJ,CAAC,CAAC;IAEF,IAAIY,YAAY,CAACG,kBAAkB,CAAC,CAAC,EAAE;MACnCH,YAAY,CAACI,cAAc,CAAC,CAAC;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,CAAC,CAAC;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,CAAC,CAAC;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMoB,MAAMA,CAAC;IAAEV,KAAK;IAAErB,KAAK;IAAEE,IAAI;IAAEC,OAAO,EAAEC;EAAY,CAAC,EAAmB;IACxE,IAAI,CAACA,KAAK,EAAE;MACR,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACZ,cAAc,CACnCsC,MAAM,CAAC;QACJxB,SAAS,EAAEP,KAAK;QAChB8B,GAAG,EAAET,KAAK;QACVZ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAC7C,CAAC,CAAC,CACDQ,OAAO,CAAC,CAAC;MAEd,OAAO,CAAC,IAAI,EAAE;QAAEC,QAAQ,EAAEN,MAAM,CAACO;MAAU,CAAC,CAAC;IACjD;IAEA,MAAMC,YAAY,GAAG,IAAI,CAACC,eAAe,CAACV,KAAK,CAAC;IAChDS,YAAY,CAACmB,cAAc,CAAC;MACxBhC,KAAK;MACLqB;IACJ,CAAC,CAAC;IAEF,IAAIR,YAAY,CAACG,kBAAkB,CAAC,CAAC,EAAE;MACnCH,YAAY,CAACI,cAAc,CAAC,CAAC;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,CAAC,CAAC;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,CAAC,CAAC;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMsB,IAAIA,CAAI;IACVjC,KAAK;IACLqB,KAAK;IACLa,IAAI;IACJC,KAAK;IACLC,IAAI;IACJlC,IAAI;IACJC,OAAO,EAAEC;EACP,CAAC,EAAwB;IAC3B,IAAI,CAACA,KAAK,EAAE;MACR,MAAMiC,cAAc,GAAG,IAAIC,uBAAc,CAAC,CAAC;MAC3C,MAAMC,WAAW,GAAGF,cAAc,CAACG,QAAQ,CAAC;QACxCnB,KAAK;QACLe,IAAI;QACJF,IAAI;QACJC,KAAK;QACLM,SAAS,EAAEzC;MACf,CAAC,CAAC;MAEF,MAAMW,QAAQ,GAAG,MAAM,IAAI,CAAClB,cAAc,CACrC4B,KAAK,KAAAQ,cAAA,CAAAlC,OAAA,MAAAkC,cAAA,CAAAlC,OAAA,MAAM4C,WAAW;QAAE9B,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAAM,EAAE,CAAC,CAC1EQ,OAAO,CAAC,CAAC;MAEd,IAAIgC,KAAK,CAACC,OAAO,CAAChC,QAAQ,CAACiC,KAAK,CAAC,EAAE;QAC/B,OAAO,CAACjC,QAAQ,CAACiC,KAAK,EAAS;UAAEjC,QAAQ,EAAEA,QAAQ,CAACC;QAAU,CAAC,CAAC;MACpE;MACA,OAAO,CAAC,EAAE,EAAE;QAAED,QAAQ,EAAEA,QAAQ,CAACC;MAAU,CAAC,CAAC;IACjD;;IAEA;IACA,MAAMC,YAAY,GAAG,IAAI,CAACC,eAAe,CAACV,KAAK,CAAC;IAChD,MAAMyC,SAAS,GAAGhC,YAAY,CAACiC,WAAW,CAAC;MACvC9C,KAAK;MACLqB;IACJ,CAAC,CAAC;IAEF,IAAIR,YAAY,CAACG,kBAAkB,CAAC,CAAC,EAAE;MACnCH,YAAY,CAACI,cAAc,CAAC,CAAC;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,CAAC,CAAC;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,CAAC,CAAC;IAElC,MAAMd,MAAM,GAAGwC,SAAS,CAAC,CAAM;IAC/B,IAAIxC,MAAM,EAAE;MACR,OAAO,CAAC,CAACA,MAAM,CAAC,EAAE;QAAEM,QAAQ,EAAEE,YAAY,CAACF;MAAS,CAAC,CAAC;IAC1D;IAEA,OAAO,CAAC,EAAE,EAAE;MAAEA,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACpD;EAEA,MAAMoC,SAASA,CAAC;IAAEC,EAAE;IAAEC,SAAS;IAAEhD,IAAI;IAAED;EAAuB,CAAC,EAAmB;IAC9E,MAAM,IAAI,CAACD,MAAM,CAAC;MACdC,KAAK,EAAEA,KAAK;MACZoC,IAAI,EAAElD,QAAQ;MACde,IAAI,MAAA4B,cAAA,CAAAlC,OAAA;QACAuD,EAAE,EAAE,KAAK;QACTC,EAAE,EAAEH,EAAE;QACNA,EAAE;QACFC;MAAS,GACNhD,IAAI;IAEf,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMmD,QAAQA,CAAI;IAAEpD;EAAsB,CAAC,EAAE;IACzC,OAAO,IAAI,CAACiC,IAAI,CAAI;MAChBjC,KAAK;MACLoC,IAAI,EAAElD,QAAQ;MACdmC,KAAK,EAAE;QACH6B,EAAE,EAAE,KAAK;QACTC,EAAE,EAAE;UAAEE,IAAI,EAAE;QAAI;MACpB;IACJ,CAAC,CAAC;EACN;EAEAvC,eAAeA,CAACX,OAAkB,EAAgB;IAC9C,IAAI,CAAC,IAAI,CAACP,cAAc,CAACO,OAAO,CAACmD,QAAQ,CAACN,EAAE,CAAC,EAAE;MAC3C,IAAI,CAACpD,cAAc,CAACO,OAAO,CAACmD,QAAQ,CAACN,EAAE,CAAC,GAAG,IAAIO,qBAAY,CACvDpD,OAAO,CAACmD,QAAQ,EAChB,IAAI,CAAC7D,cACT,CAAC;IACL;IAEA,OAAO,IAAI,CAACG,cAAc,CAACO,OAAO,CAACmD,QAAQ,CAACN,EAAE,CAAC;EACnD;AACJ;AAAC,IAAAQ,QAAA,GAEcjE,cAAc;AAAAkE,OAAA,CAAA9D,OAAA,GAAA6D,QAAA"}
|
|
1
|
+
{"version":3,"names":["DynamoDbDriver","constructor","documentClient","batchProcesses","getClient","create","update","delete","read","createLog","readLogs","getBatchProcess","_default","exports","default"],"sources":["DynamoDbDriver.ts"],"sourcesContent":["import { DynamoDBClient } from \"@webiny/aws-sdk/client-dynamodb\";\nimport { DbDriver, Result } from \"@webiny/db\";\n\ninterface ConstructorArgs {\n documentClient: DynamoDBClient;\n}\n\nclass DynamoDbDriver implements DbDriver {\n batchProcesses: Record<string, any>;\n documentClient: DynamoDBClient;\n constructor({ documentClient }: ConstructorArgs) {\n this.batchProcesses = {};\n this.documentClient = documentClient;\n }\n\n getClient() {\n return this.documentClient;\n }\n async create(): Promise<Result> {\n return [true, {}];\n }\n\n async update(): Promise<Result> {\n return [true, {}];\n }\n\n async delete(): Promise<Result> {\n return [true, {}];\n }\n\n async read<T>(): Promise<Result<T[]>> {\n return [[], {}];\n }\n\n async createLog(): Promise<Result> {\n return [true, {}];\n }\n\n async readLogs<T>() {\n return this.read<T>();\n }\n\n getBatchProcess() {\n // not empty\n }\n}\n\nexport default DynamoDbDriver;\n"],"mappings":";;;;;;AAOA,MAAMA,cAAc,CAAqB;EAGrCC,WAAWA,CAAC;IAAEC;EAAgC,CAAC,EAAE;IAC7C,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAACD,cAAc,GAAGA,cAAc;EACxC;EAEAE,SAASA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,cAAc;EAC9B;EACA,MAAMG,MAAMA,CAAA,EAAoB;IAC5B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMC,MAAMA,CAAA,EAAoB;IAC5B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMC,MAAMA,CAAA,EAAoB;IAC5B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMC,IAAIA,CAAA,EAA4B;IAClC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACnB;EAEA,MAAMC,SAASA,CAAA,EAAoB;IAC/B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMC,QAAQA,CAAA,EAAM;IAChB,OAAO,IAAI,CAACF,IAAI,CAAI,CAAC;EACzB;EAEAG,eAAeA,CAAA,EAAG;IACd;EAAA;AAER;AAAC,IAAAC,QAAA,GAEcZ,cAAc;AAAAa,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_DynamoDbDriver","_interopRequireDefault","require","_utils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_types"],"sources":["index.ts"],"sourcesContent":["import { default as DynamoDbDriver } from \"./DynamoDbDriver\";\nexport * from \"./utils\";\nexport { DbItem } from \"./types\";\n\nexport { DynamoDbDriver };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_DynamoDbDriver","_interopRequireDefault","require","_utils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_types"],"sources":["index.ts"],"sourcesContent":["import { default as DynamoDbDriver } from \"./DynamoDbDriver\";\n\nexport * from \"./utils\";\nexport { DbItem } from \"./types\";\n\nexport { DynamoDbDriver };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,MAAA,GAAAd,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/db-dynamodb",
|
|
3
|
-
"version": "5.39.0-beta.
|
|
3
|
+
"version": "5.39.0-beta.2",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,14 +10,16 @@
|
|
|
10
10
|
"author": "Webiny Ltd",
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@webiny/api": "5.39.0-beta.
|
|
14
|
-
"@webiny/
|
|
15
|
-
"@webiny/
|
|
16
|
-
"@webiny/
|
|
17
|
-
"@webiny/
|
|
13
|
+
"@webiny/api": "5.39.0-beta.2",
|
|
14
|
+
"@webiny/aws-sdk": "5.39.0-beta.2",
|
|
15
|
+
"@webiny/db": "5.39.0-beta.2",
|
|
16
|
+
"@webiny/error": "5.39.0-beta.2",
|
|
17
|
+
"@webiny/handler-db": "5.39.0-beta.2",
|
|
18
|
+
"@webiny/plugins": "5.39.0-beta.2",
|
|
18
19
|
"date-fns": "2.29.3",
|
|
19
20
|
"dot-prop": "6.0.1",
|
|
20
|
-
"
|
|
21
|
+
"dynamodb-toolbox": "0.9.2",
|
|
22
|
+
"fuse.js": "7.0.0",
|
|
21
23
|
"is-number": "7.0.0",
|
|
22
24
|
"lodash": "4.17.21"
|
|
23
25
|
},
|
|
@@ -25,9 +27,8 @@
|
|
|
25
27
|
"@babel/cli": "7.22.6",
|
|
26
28
|
"@babel/core": "7.22.8",
|
|
27
29
|
"@types/is-number": "7.0.3",
|
|
28
|
-
"@webiny/cli": "5.39.0-beta.
|
|
29
|
-
"@webiny/project-utils": "5.39.0-beta.
|
|
30
|
-
"dynamodb-toolbox": "0.3.5",
|
|
30
|
+
"@webiny/cli": "5.39.0-beta.2",
|
|
31
|
+
"@webiny/project-utils": "5.39.0-beta.2",
|
|
31
32
|
"jest": "29.5.0",
|
|
32
33
|
"jest-dynalite": "3.6.1",
|
|
33
34
|
"rimraf": "3.0.2",
|
|
@@ -42,5 +43,5 @@
|
|
|
42
43
|
"build": "yarn webiny run build",
|
|
43
44
|
"watch": "yarn webiny run watch"
|
|
44
45
|
},
|
|
45
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "193039382160557448f23f43685f29136f58f87a"
|
|
46
47
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { Plugin } from "@webiny/plugins";
|
|
2
|
-
import {
|
|
3
|
-
import { EntityAttributeConfig, EntityCompositeAttributes } from "dynamodb-toolbox/dist/classes/Entity";
|
|
4
|
-
export declare type DefinitionParams = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;
|
|
2
|
+
import { AttributeDefinition } from "../../toolbox";
|
|
5
3
|
export interface AttributePluginParams {
|
|
6
4
|
entity: string;
|
|
7
5
|
attribute: string;
|
|
8
|
-
params:
|
|
6
|
+
params: AttributeDefinition;
|
|
9
7
|
}
|
|
10
8
|
export declare abstract class AttributePlugin extends Plugin {
|
|
11
9
|
static readonly type: string;
|
|
@@ -15,6 +13,6 @@ export declare abstract class AttributePlugin extends Plugin {
|
|
|
15
13
|
get entity(): string;
|
|
16
14
|
get attribute(): string;
|
|
17
15
|
constructor({ entity, attribute, params }: AttributePluginParams);
|
|
18
|
-
getDefinition(): Record<string,
|
|
16
|
+
getDefinition(): Record<string, AttributeDefinition>;
|
|
19
17
|
private validateReserved;
|
|
20
18
|
}
|
|
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.AttributePlugin = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _plugins = require("@webiny/plugins");
|
|
10
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
9
|
+
var _plugins = require("@webiny/plugins");
|
|
11
10
|
const reservedFields = ["PK", "SK", "index", "data"];
|
|
12
11
|
class AttributePlugin extends _plugins.Plugin {
|
|
12
|
+
static type = "db.dynamodb.attribute";
|
|
13
13
|
get entity() {
|
|
14
14
|
return this._entity;
|
|
15
15
|
}
|
|
@@ -22,9 +22,6 @@ class AttributePlugin extends _plugins.Plugin {
|
|
|
22
22
|
params
|
|
23
23
|
}) {
|
|
24
24
|
super();
|
|
25
|
-
(0, _defineProperty2.default)(this, "_entity", void 0);
|
|
26
|
-
(0, _defineProperty2.default)(this, "_attribute", void 0);
|
|
27
|
-
(0, _defineProperty2.default)(this, "_params", void 0);
|
|
28
25
|
this.validateReserved(attribute);
|
|
29
26
|
this._entity = entity;
|
|
30
27
|
this._attribute = attribute;
|
|
@@ -45,6 +42,5 @@ class AttributePlugin extends _plugins.Plugin {
|
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
44
|
exports.AttributePlugin = AttributePlugin;
|
|
48
|
-
(0, _defineProperty2.default)(AttributePlugin, "type", "db.dynamodb.attribute");
|
|
49
45
|
|
|
50
46
|
//# sourceMappingURL=AttributePlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_plugins","reservedFields","AttributePlugin","Plugin","type","entity","_entity","attribute","_attribute","constructor","params","validateReserved","_params","getDefinition","includes","WebinyError","exports"],"sources":["AttributePlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Plugin } from \"@webiny/plugins\";\nimport { AttributeDefinition } from \"~/toolbox\";\n\nconst reservedFields = [\"PK\", \"SK\", \"index\", \"data\"];\n\nexport interface AttributePluginParams {\n entity: string;\n attribute: string;\n params: AttributeDefinition;\n}\n\nexport abstract class AttributePlugin extends Plugin {\n public static override readonly type: string = \"db.dynamodb.attribute\";\n private readonly _entity: string;\n private readonly _attribute: string;\n private readonly _params: AttributeDefinition;\n\n public get entity(): string {\n return this._entity;\n }\n\n public get attribute(): string {\n return this._attribute;\n }\n\n public constructor({ entity, attribute, params }: AttributePluginParams) {\n super();\n\n this.validateReserved(attribute);\n\n this._entity = entity;\n this._attribute = attribute;\n this._params = params;\n }\n\n public getDefinition(): Record<string, AttributeDefinition> {\n return {\n [this.attribute]: this._params\n };\n }\n\n private validateReserved(attribute: string): void {\n if (reservedFields.includes(attribute) === false) {\n return;\n }\n throw new WebinyError(\n `Attribute name \"${attribute}\" is not allowed.`,\n \"ATTRIBUTE_NOT_ALLOWED\",\n {\n attribute\n }\n );\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAGA,MAAME,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;AAQ7C,MAAeC,eAAe,SAASC,eAAM,CAAC;EACjD,OAAgCC,IAAI,GAAW,uBAAuB;EAKtE,IAAWC,MAAMA,CAAA,EAAW;IACxB,OAAO,IAAI,CAACC,OAAO;EACvB;EAEA,IAAWC,SAASA,CAAA,EAAW;IAC3B,OAAO,IAAI,CAACC,UAAU;EAC1B;EAEOC,WAAWA,CAAC;IAAEJ,MAAM;IAAEE,SAAS;IAAEG;EAA8B,CAAC,EAAE;IACrE,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,gBAAgB,CAACJ,SAAS,CAAC;IAEhC,IAAI,CAACD,OAAO,GAAGD,MAAM;IACrB,IAAI,CAACG,UAAU,GAAGD,SAAS;IAC3B,IAAI,CAACK,OAAO,GAAGF,MAAM;EACzB;EAEOG,aAAaA,CAAA,EAAwC;IACxD,OAAO;MACH,CAAC,IAAI,CAACN,SAAS,GAAG,IAAI,CAACK;IAC3B,CAAC;EACL;EAEQD,gBAAgBA,CAACJ,SAAiB,EAAQ;IAC9C,IAAIN,cAAc,CAACa,QAAQ,CAACP,SAAS,CAAC,KAAK,KAAK,EAAE;MAC9C;IACJ;IACA,MAAM,IAAIQ,cAAW,CAChB,mBAAkBR,SAAU,mBAAkB,EAC/C,uBAAuB,EACvB;MACIA;IACJ,CACJ,CAAC;EACL;AACJ;AAACS,OAAA,CAAAd,eAAA,GAAAA,eAAA"}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.DateTimeTransformPlugin = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
8
|
var _ValueTransformPlugin = require("./ValueTransformPlugin");
|
|
10
9
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
11
10
|
var _dateFns = require("date-fns");
|
|
@@ -13,28 +12,29 @@ const transformDateTime = params => {
|
|
|
13
12
|
const {
|
|
14
13
|
value
|
|
15
14
|
} = params;
|
|
16
|
-
if (value === null) {
|
|
15
|
+
if (value === null || value === undefined) {
|
|
17
16
|
return null;
|
|
18
|
-
}
|
|
19
|
-
|
|
17
|
+
} else if (typeof value === "string") {
|
|
18
|
+
const parsedDateTime = (0, _dateFns.parseISO)(value).getTime();
|
|
19
|
+
if (isNaN(parsedDateTime) === false) {
|
|
20
|
+
return parsedDateTime;
|
|
21
|
+
}
|
|
22
|
+
} else if (value instanceof Date || typeof value?.getTime === "function") {
|
|
20
23
|
/**
|
|
21
|
-
* In this case we assume this is a date object and we just get the time.
|
|
24
|
+
* In this case we assume this is a date object, and we just get the time.
|
|
22
25
|
*/
|
|
23
26
|
return value.getTime();
|
|
24
27
|
}
|
|
25
|
-
const parsedDateTime = (0, _dateFns.parseISO)(value).getTime();
|
|
26
|
-
if (isNaN(parsedDateTime) === false) {
|
|
27
|
-
return parsedDateTime;
|
|
28
|
-
}
|
|
29
28
|
throw new _error.default("Could not parse given dateTime value.", "PARSE_DATE_ERROR", {
|
|
30
29
|
value
|
|
31
30
|
});
|
|
32
31
|
};
|
|
33
32
|
class DateTimeTransformPlugin extends _ValueTransformPlugin.ValueTransformPlugin {
|
|
34
33
|
constructor(params) {
|
|
35
|
-
super(
|
|
36
|
-
transform: transformDateTime
|
|
37
|
-
|
|
34
|
+
super({
|
|
35
|
+
transform: transformDateTime,
|
|
36
|
+
...params
|
|
37
|
+
});
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
exports.DateTimeTransformPlugin = DateTimeTransformPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ValueTransformPlugin","require","_error","_interopRequireDefault","_dateFns","transformDateTime","params","value","
|
|
1
|
+
{"version":3,"names":["_ValueTransformPlugin","require","_error","_interopRequireDefault","_dateFns","transformDateTime","params","value","undefined","parsedDateTime","parseISO","getTime","isNaN","Date","WebinyError","DateTimeTransformPlugin","ValueTransformPlugin","constructor","transform","exports"],"sources":["DateTimeTransformPlugin.ts"],"sourcesContent":["import {\n ValueTransformPlugin,\n ValueTransformPluginParams,\n ValueTransformPluginParamsTransformParams\n} from \"./ValueTransformPlugin\";\nimport WebinyError from \"@webiny/error\";\nimport { parseISO } from \"date-fns\";\n\nconst transformDateTime = (params: ValueTransformPluginParamsTransformParams): number | null => {\n const { value } = params;\n if (value === null || value === undefined) {\n return null;\n } else if (typeof value === \"string\") {\n const parsedDateTime = parseISO(value).getTime();\n if (isNaN(parsedDateTime) === false) {\n return parsedDateTime;\n }\n } else if (value instanceof Date || typeof (value as unknown as Date)?.getTime === \"function\") {\n /**\n * In this case we assume this is a date object, and we just get the time.\n */\n return value.getTime();\n }\n\n throw new WebinyError(\"Could not parse given dateTime value.\", \"PARSE_DATE_ERROR\", {\n value\n });\n};\n\nexport class DateTimeTransformPlugin extends ValueTransformPlugin {\n public constructor(params: Omit<ValueTransformPluginParams, \"transform\">) {\n super({\n transform: transformDateTime,\n ...params\n });\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AAKA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAEA,MAAMI,iBAAiB,GAAIC,MAAiD,IAAoB;EAC5F,MAAM;IAAEC;EAAM,CAAC,GAAGD,MAAM;EACxB,IAAIC,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKC,SAAS,EAAE;IACvC,OAAO,IAAI;EACf,CAAC,MAAM,IAAI,OAAOD,KAAK,KAAK,QAAQ,EAAE;IAClC,MAAME,cAAc,GAAG,IAAAC,iBAAQ,EAACH,KAAK,CAAC,CAACI,OAAO,CAAC,CAAC;IAChD,IAAIC,KAAK,CAACH,cAAc,CAAC,KAAK,KAAK,EAAE;MACjC,OAAOA,cAAc;IACzB;EACJ,CAAC,MAAM,IAAIF,KAAK,YAAYM,IAAI,IAAI,OAAQN,KAAK,EAAsBI,OAAO,KAAK,UAAU,EAAE;IAC3F;AACR;AACA;IACQ,OAAOJ,KAAK,CAACI,OAAO,CAAC,CAAC;EAC1B;EAEA,MAAM,IAAIG,cAAW,CAAC,uCAAuC,EAAE,kBAAkB,EAAE;IAC/EP;EACJ,CAAC,CAAC;AACN,CAAC;AAEM,MAAMQ,uBAAuB,SAASC,0CAAoB,CAAC;EACvDC,WAAWA,CAACX,MAAqD,EAAE;IACtE,KAAK,CAAC;MACFY,SAAS,EAAEb,iBAAiB;MAC5B,GAAGC;IACP,CAAC,CAAC;EACN;AACJ;AAACa,OAAA,CAAAJ,uBAAA,GAAAA,uBAAA"}
|
|
@@ -5,18 +5,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.FieldPathPlugin = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
8
|
var _plugins = require("@webiny/plugins");
|
|
11
9
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
12
10
|
var _assignFields = require("./assignFields");
|
|
13
11
|
class FieldPathPlugin extends _plugins.Plugin {
|
|
12
|
+
static type = "dynamodb.value.path";
|
|
14
13
|
constructor(params) {
|
|
15
14
|
super();
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
this._params = {
|
|
16
|
+
...params,
|
|
18
17
|
fields: (0, _assignFields.assignFields)(params.fields)
|
|
19
|
-
}
|
|
18
|
+
};
|
|
20
19
|
}
|
|
21
20
|
canCreate(field) {
|
|
22
21
|
return this._params.fields.includes(field);
|
|
@@ -31,6 +30,5 @@ class FieldPathPlugin extends _plugins.Plugin {
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
exports.FieldPathPlugin = FieldPathPlugin;
|
|
34
|
-
(0, _defineProperty2.default)(FieldPathPlugin, "type", "dynamodb.value.path");
|
|
35
33
|
|
|
36
34
|
//# sourceMappingURL=FieldPathPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_plugins","require","_error","_interopRequireDefault","_assignFields","FieldPathPlugin","Plugin","
|
|
1
|
+
{"version":3,"names":["_plugins","require","_error","_interopRequireDefault","_assignFields","FieldPathPlugin","Plugin","type","constructor","params","_params","fields","assignFields","canCreate","field","includes","createPath","WebinyError","exports"],"sources":["FieldPathPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport WebinyError from \"@webiny/error\";\nimport { assignFields } from \"./assignFields\";\n\nexport interface CreatePath {\n (field: string): string;\n}\nexport interface FieldPathPluginParams {\n /**\n * Which field(s) is this plugin for.\n */\n fields: string | string[];\n /**\n * Create a path for given field.\n * Field is passed because it can be a multi-field plugin.\n */\n createPath: CreatePath;\n}\n\nexport class FieldPathPlugin extends Plugin {\n public static override readonly type: string = \"dynamodb.value.path\";\n private readonly _params: Omit<FieldPathPluginParams, \"fields\"> & { fields: string[] };\n\n public constructor(params: FieldPathPluginParams) {\n super();\n this._params = {\n ...params,\n fields: assignFields(params.fields)\n };\n }\n\n public canCreate(field: string): boolean {\n return this._params.fields.includes(field);\n }\n\n public createPath(field: string): string {\n if (!this._params.createPath) {\n throw new WebinyError(`Missing \"createPath\" in the plugin.`, \"TRANSFORM_ERROR\", {\n fields: this._params.fields\n });\n }\n return this._params.createPath(field);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAiBO,MAAMI,eAAe,SAASC,eAAM,CAAC;EACxC,OAAgCC,IAAI,GAAW,qBAAqB;EAG7DC,WAAWA,CAACC,MAA6B,EAAE;IAC9C,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,OAAO,GAAG;MACX,GAAGD,MAAM;MACTE,MAAM,EAAE,IAAAC,0BAAY,EAACH,MAAM,CAACE,MAAM;IACtC,CAAC;EACL;EAEOE,SAASA,CAACC,KAAa,EAAW;IACrC,OAAO,IAAI,CAACJ,OAAO,CAACC,MAAM,CAACI,QAAQ,CAACD,KAAK,CAAC;EAC9C;EAEOE,UAAUA,CAACF,KAAa,EAAU;IACrC,IAAI,CAAC,IAAI,CAACJ,OAAO,CAACM,UAAU,EAAE;MAC1B,MAAM,IAAIC,cAAW,CAAE,qCAAoC,EAAE,iBAAiB,EAAE;QAC5EN,MAAM,EAAE,IAAI,CAACD,OAAO,CAACC;MACzB,CAAC,CAAC;IACN;IACA,OAAO,IAAI,CAACD,OAAO,CAACM,UAAU,CAACF,KAAK,CAAC;EACzC;AACJ;AAACI,OAAA,CAAAb,eAAA,GAAAA,eAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Plugin } from "@webiny/plugins";
|
|
2
|
-
import { DynamoDBTypes } from "
|
|
2
|
+
import { DynamoDBTypes } from "../../toolbox";
|
|
3
3
|
export declare type FieldType = DynamoDBTypes & "date" & any;
|
|
4
4
|
export interface TransformValueCb {
|
|
5
5
|
(value: any): any;
|
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.FieldPlugin = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
7
|
var _plugins = require("@webiny/plugins");
|
|
10
8
|
class FieldPlugin extends _plugins.Plugin {
|
|
11
9
|
constructor(params) {
|
|
12
10
|
super();
|
|
13
|
-
(0, _defineProperty2.default)(this, "path", void 0);
|
|
14
|
-
(0, _defineProperty2.default)(this, "field", void 0);
|
|
15
|
-
(0, _defineProperty2.default)(this, "fieldType", void 0);
|
|
16
|
-
(0, _defineProperty2.default)(this, "dynamoDbType", void 0);
|
|
17
|
-
(0, _defineProperty2.default)(this, "sortable", void 0);
|
|
18
|
-
(0, _defineProperty2.default)(this, "_transformValue", void 0);
|
|
19
11
|
this.fieldType = params.type || "string";
|
|
20
12
|
this.dynamoDbType = params.type === "date" ? "string" : params.type;
|
|
21
13
|
this.field = params.field;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_plugins","require","FieldPlugin","Plugin","constructor","params","
|
|
1
|
+
{"version":3,"names":["_plugins","require","FieldPlugin","Plugin","constructor","params","fieldType","type","dynamoDbType","field","path","sortable","undefined","_transformValue","transformValue","getPath","getType","getField","getDynamoDbType","value","Number","Date","isSortable","exports"],"sources":["FieldPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { DynamoDBTypes } from \"~/toolbox\";\n\nexport type FieldType = DynamoDBTypes & \"date\" & any;\n\nexport interface TransformValueCb {\n (value: any): any;\n}\n\nexport interface FieldPluginParams {\n /**\n * Default is string.\n */\n type?: FieldType;\n field: string;\n path?: string;\n /**\n * Default is true.\n */\n sortable?: boolean;\n\n transformValue?: TransformValueCb;\n}\n\nexport abstract class FieldPlugin extends Plugin {\n private readonly path?: string;\n private readonly field: string;\n private readonly fieldType: FieldType;\n private readonly dynamoDbType: DynamoDBTypes;\n private readonly sortable: boolean;\n private readonly _transformValue: TransformValueCb | undefined;\n\n public constructor(params: FieldPluginParams) {\n super();\n this.fieldType = params.type || \"string\";\n this.dynamoDbType = params.type === \"date\" ? \"string\" : params.type;\n this.field = params.field;\n this.path = params.path;\n this.sortable = params.sortable === undefined ? true : params.sortable;\n this._transformValue = params.transformValue;\n }\n\n public getPath(): string {\n return this.path || this.field;\n }\n\n public getType(): FieldType {\n return this.fieldType;\n }\n\n public getField(): string {\n return this.field;\n }\n\n public getDynamoDbType(): string {\n return this.dynamoDbType;\n }\n\n public transformValue(value: any): any {\n if (this._transformValue) {\n return this.transformValue(value);\n }\n switch (this.fieldType) {\n case \"number\":\n return Number(value);\n case \"date\":\n if (!value) {\n return null;\n }\n return new Date(value);\n }\n return value;\n }\n\n public isSortable(): boolean {\n return this.sortable;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAwBO,MAAeC,WAAW,SAASC,eAAM,CAAC;EAQtCC,WAAWA,CAACC,MAAyB,EAAE;IAC1C,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,SAAS,GAAGD,MAAM,CAACE,IAAI,IAAI,QAAQ;IACxC,IAAI,CAACC,YAAY,GAAGH,MAAM,CAACE,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAGF,MAAM,CAACE,IAAI;IACnE,IAAI,CAACE,KAAK,GAAGJ,MAAM,CAACI,KAAK;IACzB,IAAI,CAACC,IAAI,GAAGL,MAAM,CAACK,IAAI;IACvB,IAAI,CAACC,QAAQ,GAAGN,MAAM,CAACM,QAAQ,KAAKC,SAAS,GAAG,IAAI,GAAGP,MAAM,CAACM,QAAQ;IACtE,IAAI,CAACE,eAAe,GAAGR,MAAM,CAACS,cAAc;EAChD;EAEOC,OAAOA,CAAA,EAAW;IACrB,OAAO,IAAI,CAACL,IAAI,IAAI,IAAI,CAACD,KAAK;EAClC;EAEOO,OAAOA,CAAA,EAAc;IACxB,OAAO,IAAI,CAACV,SAAS;EACzB;EAEOW,QAAQA,CAAA,EAAW;IACtB,OAAO,IAAI,CAACR,KAAK;EACrB;EAEOS,eAAeA,CAAA,EAAW;IAC7B,OAAO,IAAI,CAACV,YAAY;EAC5B;EAEOM,cAAcA,CAACK,KAAU,EAAO;IACnC,IAAI,IAAI,CAACN,eAAe,EAAE;MACtB,OAAO,IAAI,CAACC,cAAc,CAACK,KAAK,CAAC;IACrC;IACA,QAAQ,IAAI,CAACb,SAAS;MAClB,KAAK,QAAQ;QACT,OAAOc,MAAM,CAACD,KAAK,CAAC;MACxB,KAAK,MAAM;QACP,IAAI,CAACA,KAAK,EAAE;UACR,OAAO,IAAI;QACf;QACA,OAAO,IAAIE,IAAI,CAACF,KAAK,CAAC;IAC9B;IACA,OAAOA,KAAK;EAChB;EAEOG,UAAUA,CAAA,EAAY;IACzB,OAAO,IAAI,CAACX,QAAQ;EACxB;AACJ;AAACY,OAAA,CAAArB,WAAA,GAAAA,WAAA"}
|