@webiny/db-dynamodb 5.34.8-beta.1 → 5.35.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/BatchProcess.d.ts +1 -1
  2. package/BatchProcess.js +3 -37
  3. package/BatchProcess.js.map +1 -1
  4. package/DynamoDbDriver.js +3 -38
  5. package/DynamoDbDriver.js.map +1 -1
  6. package/QueryGenerator.js +4 -18
  7. package/QueryGenerator.js.map +1 -1
  8. package/index.d.ts +2 -0
  9. package/index.js +24 -3
  10. package/index.js.map +1 -1
  11. package/operators/comparison/beginsWith.js.map +1 -1
  12. package/operators/comparison/between.js.map +1 -1
  13. package/operators/comparison/eq.js +0 -2
  14. package/operators/comparison/eq.js.map +1 -1
  15. package/operators/comparison/gt.js.map +1 -1
  16. package/operators/comparison/gte.js.map +1 -1
  17. package/operators/comparison/lt.js.map +1 -1
  18. package/operators/comparison/lte.js.map +1 -1
  19. package/operators/index.js +0 -11
  20. package/operators/index.js.map +1 -1
  21. package/operators/logical/and.js +0 -5
  22. package/operators/logical/and.js.map +1 -1
  23. package/operators/logical/or.js +0 -5
  24. package/operators/logical/or.js.map +1 -1
  25. package/package.json +9 -9
  26. package/plugins/definitions/AttributePlugin.js +0 -13
  27. package/plugins/definitions/AttributePlugin.js.map +1 -1
  28. package/plugins/definitions/DateTimeTransformPlugin.js +0 -14
  29. package/plugins/definitions/DateTimeTransformPlugin.js.map +1 -1
  30. package/plugins/definitions/FieldPathPlugin.js +0 -12
  31. package/plugins/definitions/FieldPathPlugin.js.map +1 -1
  32. package/plugins/definitions/FieldPlugin.js +0 -16
  33. package/plugins/definitions/FieldPlugin.js.map +1 -1
  34. package/plugins/definitions/NumberTransformPlugin.js +0 -11
  35. package/plugins/definitions/NumberTransformPlugin.js.map +1 -1
  36. package/plugins/definitions/TimeTransformPlugin.js +0 -14
  37. package/plugins/definitions/TimeTransformPlugin.js.map +1 -1
  38. package/plugins/definitions/ValueFilterPlugin.js +0 -12
  39. package/plugins/definitions/ValueFilterPlugin.js.map +1 -1
  40. package/plugins/definitions/ValueTransformPlugin.js +0 -13
  41. package/plugins/definitions/ValueTransformPlugin.js.map +1 -1
  42. package/plugins/definitions/assignFields.js +0 -9
  43. package/plugins/definitions/assignFields.js.map +1 -1
  44. package/plugins/filters/andIn.js +0 -6
  45. package/plugins/filters/andIn.js.map +1 -1
  46. package/plugins/filters/between.js +0 -6
  47. package/plugins/filters/between.js.map +1 -1
  48. package/plugins/filters/contains.js +0 -4
  49. package/plugins/filters/contains.js.map +1 -1
  50. package/plugins/filters/eq.js +0 -3
  51. package/plugins/filters/eq.js.map +1 -1
  52. package/plugins/filters/fuzzy.js +0 -5
  53. package/plugins/filters/fuzzy.js.map +1 -1
  54. package/plugins/filters/gt.js +0 -2
  55. package/plugins/filters/gt.js.map +1 -1
  56. package/plugins/filters/gte.js +0 -2
  57. package/plugins/filters/gte.js.map +1 -1
  58. package/plugins/filters/in.js +0 -6
  59. package/plugins/filters/in.js.map +1 -1
  60. package/plugins/filters/index.js +0 -14
  61. package/plugins/filters/index.js.map +1 -1
  62. package/plugins/filters/lt.js +0 -2
  63. package/plugins/filters/lt.js.map +1 -1
  64. package/plugins/filters/lte.js +0 -2
  65. package/plugins/filters/lte.js.map +1 -1
  66. package/plugins/filters/startsWith.js +0 -5
  67. package/plugins/filters/startsWith.js.map +1 -1
  68. package/plugins/index.js +0 -4
  69. package/plugins/index.js.map +1 -1
  70. package/statements/createKeyConditionExpressionArgs.js +0 -7
  71. package/statements/createKeyConditionExpressionArgs.js.map +1 -1
  72. package/statements/processStatement.js +0 -7
  73. package/statements/processStatement.js.map +1 -1
  74. package/types.d.ts +8 -0
  75. package/types.js.map +1 -1
  76. package/utils/attributes.js +0 -7
  77. package/utils/attributes.js.map +1 -1
  78. package/utils/batchRead.js +0 -22
  79. package/utils/batchRead.js.map +1 -1
  80. package/utils/batchWrite.js +0 -6
  81. package/utils/batchWrite.js.map +1 -1
  82. package/utils/cleanup.js +0 -10
  83. package/utils/cleanup.js.map +1 -1
  84. package/utils/createStandardEntity.d.ts +2 -0
  85. package/utils/createStandardEntity.js +34 -0
  86. package/utils/createStandardEntity.js.map +1 -0
  87. package/utils/cursor.js +0 -6
  88. package/utils/cursor.js.map +1 -1
  89. package/utils/filter.js +0 -37
  90. package/utils/filter.js.map +1 -1
  91. package/utils/get.js +0 -4
  92. package/utils/get.js.map +1 -1
  93. package/utils/listResponse.js +0 -4
  94. package/utils/listResponse.js.map +1 -1
  95. package/utils/query.d.ts +6 -1
  96. package/utils/query.js +21 -21
  97. package/utils/query.js.map +1 -1
  98. package/utils/sort.js +0 -17
  99. package/utils/sort.js.map +1 -1
  100. package/utils/table.js +0 -5
  101. package/utils/table.js.map +1 -1
package/BatchProcess.d.ts CHANGED
@@ -42,6 +42,6 @@ declare class BatchProcess {
42
42
  addBatchDelete(args: AddBatchOperationArgs): AddBatchOperationResponse;
43
43
  addBatchGet(args: AddBatchOperationArgs): AddBatchOperationResponse;
44
44
  allOperationsAdded(): boolean;
45
- startExecution(): import("aws-sdk/lib/request").Request<DocumentClient.BatchGetItemOutput, import("aws-sdk/lib/error").AWSError> | import("aws-sdk/lib/request").Request<DocumentClient.BatchWriteItemOutput, import("aws-sdk/lib/error").AWSError>;
45
+ startExecution(): import("aws-sdk/lib/request").Request<DocumentClient.BatchWriteItemOutput, import("aws-sdk/lib/error").AWSError> | import("aws-sdk/lib/request").Request<DocumentClient.BatchGetItemOutput, import("aws-sdk/lib/error").AWSError>;
46
46
  }
47
47
  export default BatchProcess;
package/BatchProcess.js CHANGED
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
10
  /**
15
11
  * Remove this when no apps are using our internal db drivers anymore
16
12
  */
17
13
  // @ts-nocheck
14
+
18
15
  class BatchProcess {
19
16
  constructor(batch, documentClient) {
20
17
  (0, _defineProperty2.default)(this, "documentClient", void 0);
@@ -48,15 +45,12 @@ class BatchProcess {
48
45
  this.response = [];
49
46
  this.batchType;
50
47
  }
51
-
52
48
  waitStartExecution() {
53
49
  return this.queryBuild;
54
50
  }
55
-
56
51
  waitExecution() {
57
52
  return this.queryExecution;
58
53
  }
59
-
60
54
  addBatchOperation(type, args, meta = {}) {
61
55
  if (!this.batchType) {
62
56
  this.batchType = type;
@@ -68,60 +62,47 @@ class BatchProcess {
68
62
  });
69
63
  return null;
70
64
  }
71
-
72
65
  this.operations.push([args, meta]);
73
66
  const index = this.operations.length - 1;
74
67
  return () => this.results[index];
75
68
  }
76
-
77
69
  addBatchWrite(args) {
78
70
  return this.addBatchOperation("batchWrite", args);
79
71
  }
80
-
81
72
  addBatchDelete(args) {
82
73
  return this.addBatchOperation("batchWrite", (0, _objectSpread2.default)({}, args), {
83
74
  delete: true
84
75
  });
85
76
  }
86
-
87
77
  addBatchGet(args) {
88
78
  return this.addBatchOperation("batchGet", args);
89
79
  }
90
-
91
80
  allOperationsAdded() {
92
81
  return this.operations.length === this.batch.operations.length;
93
82
  }
94
-
95
83
  startExecution() {
96
84
  this.resolveBuild();
97
85
  const documentClientArgs = {
98
86
  ReturnConsumedCapacity: "TOTAL",
99
87
  RequestItems: {}
100
88
  };
101
-
102
89
  const reject = e => {
103
90
  e.message = `An error occurred while executing "${this.batchType}" batch operation: ${e.message}`;
104
91
  return this.rejectExecution(e);
105
92
  };
106
-
107
93
  let resolve = response => {
108
94
  this.response = response;
109
95
  this.resolveExecution();
110
96
  };
111
-
112
97
  switch (this.batchType) {
113
98
  case "batchWrite":
114
99
  documentClientArgs.RequestItems = {};
115
-
116
100
  for (let i = 0; i < this.operations.length; i++) {
117
101
  const [args, meta] = this.operations[i];
118
-
119
102
  if (!documentClientArgs.RequestItems[args.table]) {
120
103
  documentClientArgs.RequestItems[args.table] = [];
121
104
  }
122
-
123
105
  const push = {};
124
-
125
106
  if (meta.delete) {
126
107
  push.DeleteRequest = {
127
108
  Key: args.query
@@ -131,58 +112,45 @@ class BatchProcess {
131
112
  Item: args.data
132
113
  };
133
114
  }
134
-
135
115
  documentClientArgs.RequestItems[args.table].push(push);
136
116
  }
137
-
138
117
  break;
139
-
140
118
  case "batchGet":
141
119
  documentClientArgs.RequestItems = {};
142
-
143
120
  for (let i = 0; i < this.operations.length; i++) {
144
121
  const [args] = this.operations[i];
145
-
146
122
  if (!documentClientArgs.RequestItems[args.table]) {
147
123
  documentClientArgs.RequestItems[args.table] = {
148
124
  Keys: []
149
125
  };
150
126
  }
151
-
152
127
  documentClientArgs.RequestItems[args.table].Keys.push(args.query);
153
128
  }
154
-
155
129
  resolve = response => {
156
130
  this.response = response;
157
- const results = []; // The results of batchGet aren't ordered so we have to figure out the order of results ourselves.
131
+ const results = [];
158
132
 
133
+ // The results of batchGet aren't ordered so we have to figure out the order of results ourselves.
159
134
  for (let i = 0; i < this.operations.length; i++) {
160
135
  const [args] = this.operations[i];
161
136
  const responseItems = response.Responses[args.table];
162
137
  let foundResult = null;
163
-
164
138
  outer: for (let j = 0; j < responseItems.length; j++) {
165
139
  const responseItem = responseItems[j];
166
-
167
140
  for (const queryKey in args.query) {
168
141
  if (typeof responseItem[queryKey] === "undefined" || args.query[queryKey] !== responseItem[queryKey]) {
169
142
  continue outer;
170
143
  }
171
144
  }
172
-
173
145
  foundResult = responseItem;
174
146
  }
175
-
176
147
  results.push(foundResult);
177
148
  }
178
-
179
149
  this.results = results;
180
150
  this.resolveExecution();
181
151
  };
182
-
183
152
  break;
184
153
  }
185
-
186
154
  return this.documentClient[this.batchType](documentClientArgs, (error, result) => {
187
155
  if (error) {
188
156
  reject(error);
@@ -191,8 +159,6 @@ class BatchProcess {
191
159
  }
192
160
  });
193
161
  }
194
-
195
162
  }
196
-
197
163
  var _default = BatchProcess;
198
164
  exports.default = _default;
@@ -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,26 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
10
  var _dynamodb = require("aws-sdk/clients/dynamodb");
15
-
16
11
  var _BatchProcess = _interopRequireDefault(require("./BatchProcess"));
17
-
18
12
  var _QueryGenerator = _interopRequireDefault(require("./QueryGenerator"));
19
-
20
13
  /**
21
14
  * Remove this when no apps are using our internal db drivers anymore
22
15
  */
23
16
  // @ts-nocheck
17
+
24
18
  const LOG_KEYS = [{
25
19
  primary: true,
26
20
  unique: true,
@@ -31,7 +25,6 @@ const LOG_KEYS = [{
31
25
  name: "SK"
32
26
  }]
33
27
  }];
34
-
35
28
  class DynamoDbDriver {
36
29
  constructor({
37
30
  documentClient
@@ -41,11 +34,9 @@ class DynamoDbDriver {
41
34
  this.batchProcesses = {};
42
35
  this.documentClient = documentClient || new _dynamodb.DocumentClient();
43
36
  }
44
-
45
37
  getClient() {
46
38
  return this.documentClient;
47
39
  }
48
-
49
40
  async create({
50
41
  table,
51
42
  data,
@@ -62,25 +53,21 @@ class DynamoDbDriver {
62
53
  response: result.$response
63
54
  }];
64
55
  }
65
-
66
56
  const batchProcess = this.getBatchProcess(batch);
67
57
  batchProcess.addBatchWrite({
68
58
  table,
69
59
  data
70
60
  });
71
-
72
61
  if (batchProcess.allOperationsAdded()) {
73
62
  batchProcess.startExecution();
74
63
  } else {
75
64
  await batchProcess.waitStartExecution();
76
65
  }
77
-
78
66
  await batchProcess.waitExecution();
79
67
  return [true, {
80
68
  response: batchProcess.response
81
69
  }];
82
70
  }
83
-
84
71
  async update({
85
72
  query,
86
73
  data,
@@ -95,13 +82,11 @@ class DynamoDbDriver {
95
82
  ExpressionAttributeValues: {}
96
83
  };
97
84
  const updateExpression = [];
98
-
99
85
  for (const key in data) {
100
86
  updateExpression.push(`#${key} = :${key}`);
101
87
  update.ExpressionAttributeNames[`#${key}`] = key;
102
88
  update.ExpressionAttributeValues[`:${key}`] = data[key];
103
89
  }
104
-
105
90
  update.UpdateExpression += updateExpression.join(", ");
106
91
  const result = await this.documentClient.update((0, _objectSpread2.default)({
107
92
  TableName: table,
@@ -112,25 +97,21 @@ class DynamoDbDriver {
112
97
  response: result.$response
113
98
  }];
114
99
  }
115
-
116
100
  const batchProcess = this.getBatchProcess(batch);
117
101
  batchProcess.addBatchWrite({
118
102
  table,
119
103
  data
120
104
  });
121
-
122
105
  if (batchProcess.allOperationsAdded()) {
123
106
  batchProcess.startExecution();
124
107
  } else {
125
108
  await batchProcess.waitStartExecution();
126
109
  }
127
-
128
110
  await batchProcess.waitExecution();
129
111
  return [true, {
130
112
  response: batchProcess.response
131
113
  }];
132
114
  }
133
-
134
115
  async delete({
135
116
  query,
136
117
  table,
@@ -147,25 +128,21 @@ class DynamoDbDriver {
147
128
  response: result.$response
148
129
  }];
149
130
  }
150
-
151
131
  const batchProcess = this.getBatchProcess(batch);
152
132
  batchProcess.addBatchDelete({
153
133
  table,
154
134
  query
155
135
  });
156
-
157
136
  if (batchProcess.allOperationsAdded()) {
158
137
  batchProcess.startExecution();
159
138
  } else {
160
139
  await batchProcess.waitStartExecution();
161
140
  }
162
-
163
141
  await batchProcess.waitExecution();
164
142
  return [true, {
165
143
  response: batchProcess.response
166
144
  }];
167
145
  }
168
-
169
146
  async read({
170
147
  table,
171
148
  query,
@@ -187,45 +164,38 @@ class DynamoDbDriver {
187
164
  const response = await this.documentClient.query((0, _objectSpread2.default)((0, _objectSpread2.default)({}, queryParams), {}, {
188
165
  ReturnConsumedCapacity: meta ? "TOTAL" : "NONE"
189
166
  })).promise();
190
-
191
167
  if (Array.isArray(response.Items)) {
192
168
  return [response.Items, {
193
169
  response: response.$response
194
170
  }];
195
171
  }
196
-
197
172
  return [[], {
198
173
  response: response.$response
199
174
  }];
200
- } // DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
201
-
175
+ }
202
176
 
177
+ // DynamoDb doesn't support batch queries, so we can immediately assume the GetRequest operation.
203
178
  const batchProcess = this.getBatchProcess(batch);
204
179
  const getResult = batchProcess.addBatchGet({
205
180
  table,
206
181
  query
207
182
  });
208
-
209
183
  if (batchProcess.allOperationsAdded()) {
210
184
  batchProcess.startExecution();
211
185
  } else {
212
186
  await batchProcess.waitStartExecution();
213
187
  }
214
-
215
188
  await batchProcess.waitExecution();
216
189
  const result = getResult();
217
-
218
190
  if (result) {
219
191
  return [[result], {
220
192
  response: batchProcess.response
221
193
  }];
222
194
  }
223
-
224
195
  return [[], {
225
196
  response: batchProcess.response
226
197
  }];
227
198
  }
228
-
229
199
  async createLog({
230
200
  id,
231
201
  operation,
@@ -244,7 +214,6 @@ class DynamoDbDriver {
244
214
  });
245
215
  return [true, {}];
246
216
  }
247
-
248
217
  async readLogs({
249
218
  table
250
219
  }) {
@@ -259,16 +228,12 @@ class DynamoDbDriver {
259
228
  }
260
229
  });
261
230
  }
262
-
263
231
  getBatchProcess(__batch) {
264
232
  if (!this.batchProcesses[__batch.instance.id]) {
265
233
  this.batchProcesses[__batch.instance.id] = new _BatchProcess.default(__batch.instance, this.documentClient);
266
234
  }
267
-
268
235
  return this.batchProcesses[__batch.instance.id];
269
236
  }
270
-
271
237
  }
272
-
273
238
  var _default = DynamoDbDriver;
274
239
  exports.default = _default;
@@ -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":";;;;;;;;;AAIA;AACA;AACA;AANA;AACA;AACA;AACA;;AAWA,MAAMA,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,WAAW,CAAC;IAAEC;EAAgC,CAAC,GAAG,CAAC,CAAC,EAAE;IAAA;IAAA;IAClD,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAACD,cAAc,GAAGA,cAAc,IAAI,IAAIE,wBAAc,EAAE;EAChE;EAEAC,SAAS,GAAG;IACR,OAAO,IAAI,CAACH,cAAc;EAC9B;EAEA,MAAMI,MAAM,CAAC;IAAEC,KAAK;IAAEC,IAAI;IAAEC,IAAI;IAAEC,OAAO,EAAEC;EAAY,CAAC,EAAmB;IACvE,IAAI,CAACA,KAAK,EAAE;MACR,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACV,cAAc,CACnCW,GAAG,CAAC;QACDC,SAAS,EAAEP,KAAK;QAChBQ,IAAI,EAAEP,IAAI;QACVQ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAC7C,CAAC,CAAC,CACDQ,OAAO,EAAE;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,EAAE,EAAE;MACnCH,YAAY,CAACI,cAAc,EAAE;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,EAAE;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,EAAE;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMS,MAAM,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,CAACV,cAAc,CACnCyB,MAAM;QACHb,SAAS,EAAEP,KAAK;QAChB6B,GAAG,EAAER,KAAK;QACVZ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAAM,GAC5CkB,MAAM,EACX,CACDV,OAAO,EAAE;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,EAAE,EAAE;MACnCH,YAAY,CAACI,cAAc,EAAE;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,EAAE;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,EAAE;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMmB,MAAM,CAAC;IAAET,KAAK;IAAErB,KAAK;IAAEE,IAAI;IAAEC,OAAO,EAAEC;EAAY,CAAC,EAAmB;IACxE,IAAI,CAACA,KAAK,EAAE;MACR,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACV,cAAc,CACnCmC,MAAM,CAAC;QACJvB,SAAS,EAAEP,KAAK;QAChB6B,GAAG,EAAER,KAAK;QACVZ,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAC7C,CAAC,CAAC,CACDQ,OAAO,EAAE;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,CAACkB,cAAc,CAAC;MACxB/B,KAAK;MACLqB;IACJ,CAAC,CAAC;IAEF,IAAIR,YAAY,CAACG,kBAAkB,EAAE,EAAE;MACnCH,YAAY,CAACI,cAAc,EAAE;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,EAAE;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,EAAE;IAElC,OAAO,CAAC,IAAI,EAAE;MAAER,QAAQ,EAAEE,YAAY,CAACF;IAAS,CAAC,CAAC;EACtD;EAEA,MAAMqB,IAAI,CAAI;IACVhC,KAAK;IACLqB,KAAK;IACLY,IAAI;IACJC,KAAK;IACLC,IAAI;IACJjC,IAAI;IACJC,OAAO,EAAEC;EACP,CAAC,EAAwB;IAC3B,IAAI,CAACA,KAAK,EAAE;MACR,MAAMgC,cAAc,GAAG,IAAIC,uBAAc,EAAE;MAC3C,MAAMC,WAAW,GAAGF,cAAc,CAACG,QAAQ,CAAC;QACxClB,KAAK;QACLc,IAAI;QACJF,IAAI;QACJC,KAAK;QACLM,SAAS,EAAExC;MACf,CAAC,CAAC;MAEF,MAAMW,QAAQ,GAAG,MAAM,IAAI,CAAChB,cAAc,CACrC0B,KAAK,6DAAMiB,WAAW;QAAE7B,sBAAsB,EAAEP,IAAI,GAAG,OAAO,GAAG;MAAM,GAAG,CAC1EQ,OAAO,EAAE;MAEd,IAAI+B,KAAK,CAACC,OAAO,CAAC/B,QAAQ,CAACgC,KAAK,CAAC,EAAE;QAC/B,OAAO,CAAChC,QAAQ,CAACgC,KAAK,EAAS;UAAEhC,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,MAAMwC,SAAS,GAAG/B,YAAY,CAACgC,WAAW,CAAC;MACvC7C,KAAK;MACLqB;IACJ,CAAC,CAAC;IAEF,IAAIR,YAAY,CAACG,kBAAkB,EAAE,EAAE;MACnCH,YAAY,CAACI,cAAc,EAAE;IACjC,CAAC,MAAM;MACH,MAAMJ,YAAY,CAACK,kBAAkB,EAAE;IAC3C;IAEA,MAAML,YAAY,CAACM,aAAa,EAAE;IAElC,MAAMd,MAAM,GAAGuC,SAAS,EAAO;IAC/B,IAAIvC,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,MAAMmC,SAAS,CAAC;IAAEC,EAAE;IAAEC,SAAS;IAAE/C,IAAI;IAAED;EAAuB,CAAC,EAAmB;IAC9E,MAAM,IAAI,CAACD,MAAM,CAAC;MACdC,KAAK,EAAEA,KAAK;MACZmC,IAAI,EAAE/C,QAAQ;MACda,IAAI;QACAgD,EAAE,EAAE,KAAK;QACTC,EAAE,EAAEH,EAAE;QACNA,EAAE;QACFC;MAAS,GACN/C,IAAI;IAEf,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;EACrB;EAEA,MAAMkD,QAAQ,CAAI;IAAEnD;EAAsB,CAAC,EAAE;IACzC,OAAO,IAAI,CAACgC,IAAI,CAAI;MAChBhC,KAAK;MACLmC,IAAI,EAAE/C,QAAQ;MACdiC,KAAK,EAAE;QACH4B,EAAE,EAAE,KAAK;QACTC,EAAE,EAAE;UAAEE,IAAI,EAAE;QAAI;MACpB;IACJ,CAAC,CAAC;EACN;EAEAtC,eAAe,CAACX,OAAkB,EAAgB;IAC9C,IAAI,CAAC,IAAI,CAACP,cAAc,CAACO,OAAO,CAACkD,QAAQ,CAACN,EAAE,CAAC,EAAE;MAC3C,IAAI,CAACnD,cAAc,CAACO,OAAO,CAACkD,QAAQ,CAACN,EAAE,CAAC,GAAG,IAAIO,qBAAY,CACvDnD,OAAO,CAACkD,QAAQ,EAChB,IAAI,CAAC1D,cAAc,CACtB;IACL;IAEA,OAAO,IAAI,CAACC,cAAc,CAACO,OAAO,CAACkD,QAAQ,CAACN,EAAE,CAAC;EACnD;AACJ;AAAC,eAEctD,cAAc;AAAA"}
package/QueryGenerator.js CHANGED
@@ -1,16 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
-
12
9
  var _createKeyConditionExpressionArgs = _interopRequireDefault(require("./statements/createKeyConditionExpressionArgs"));
13
-
14
10
  class QueryGenerator {
15
11
  generate(params) {
16
12
  const {
@@ -19,18 +15,16 @@ class QueryGenerator {
19
15
  sort,
20
16
  limit,
21
17
  tableName
22
- } = params; // 1. Which key can we use in this query operation?
23
-
18
+ } = params;
19
+ // 1. Which key can we use in this query operation?
24
20
  const key = this.findQueryKey(query, keys);
25
-
26
21
  if (!key) {
27
22
  throw new Error("Cannot perform query - key not found.");
28
- } // 2. Now that we know the key, let's separate the key attributes from the rest.
29
-
23
+ }
30
24
 
25
+ // 2. Now that we know the key, let's separate the key attributes from the rest.
31
26
  const keyAttributesValues = {};
32
27
  const nonKeyAttributesValues = {};
33
-
34
28
  for (const queryKey in query) {
35
29
  if (key.fields.find(item => item.name === queryKey)) {
36
30
  keyAttributesValues[queryKey] = query[queryKey];
@@ -38,7 +32,6 @@ class QueryGenerator {
38
32
  nonKeyAttributesValues[queryKey] = query[queryKey];
39
33
  }
40
34
  }
41
-
42
35
  const keyConditionExpression = (0, _createKeyConditionExpressionArgs.default)({
43
36
  query: keyAttributesValues,
44
37
  sort,
@@ -49,30 +42,23 @@ class QueryGenerator {
49
42
  Limit: limit
50
43
  });
51
44
  }
52
-
53
45
  findQueryKey(query = {}, keys = []) {
54
46
  for (let i = 0; i < keys.length; i++) {
55
47
  const key = keys[i];
56
48
  let hasAllFields = true;
57
-
58
49
  for (let j = 0; j < key.fields.length; j++) {
59
50
  const field = key.fields[j];
60
-
61
51
  if (!query[field.name]) {
62
52
  hasAllFields = false;
63
53
  break;
64
54
  }
65
55
  }
66
-
67
56
  if (hasAllFields) {
68
57
  return key;
69
58
  }
70
59
  }
71
-
72
60
  return null;
73
61
  }
74
-
75
62
  }
76
-
77
63
  var _default = QueryGenerator;
78
64
  exports.default = _default;
@@ -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":";;;;;;;;;;;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"}
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,cAAc,CAAC;EACjBC,QAAQ,CAACC,MAAsB,EAAE;IAC7B,MAAM;MAAEC,KAAK;MAAEC,IAAI;MAAEC,IAAI;MAAEC,KAAK;MAAEC;IAAU,CAAC,GAAGL,MAAM;IACtD;IACA,MAAMM,GAAG,GAAG,IAAI,CAACC,YAAY,CAACN,KAAK,EAAEC,IAAI,CAAC;IAE1C,IAAI,CAACI,GAAG,EAAE;MACN,MAAM,IAAIE,KAAK,CAAC,uCAAuC,CAAC;IAC5D;;IAEA;IACA,MAAMC,mBAA2C,GAAG,CAAC,CAAC;IACtD,MAAMC,sBAA8C,GAAG,CAAC,CAAC;IACzD,KAAK,MAAMC,QAAQ,IAAIV,KAAK,EAAE;MAC1B,IAAIK,GAAG,CAACM,MAAM,CAACC,IAAI,CAAEC,IAAmB,IAAKA,IAAI,CAACC,IAAI,KAAKJ,QAAQ,CAAC,EAAE;QAClEF,mBAAmB,CAACE,QAAQ,CAAC,GAAGV,KAAK,CAACU,QAAQ,CAAC;MACnD,CAAC,MAAM;QACHD,sBAAsB,CAACC,QAAQ,CAAC,GAAGV,KAAK,CAACU,QAAQ,CAAC;MACtD;IACJ;IAEA,MAAMK,sBAAsB,GAAG,IAAAC,yCAAgC,EAAC;MAC5DhB,KAAK,EAAEQ,mBAAmB;MAC1BN,IAAI;MACJG;IACJ,CAAC,CAAC;IAEF,mEAAYU,sBAAsB;MAAEE,SAAS,EAAEb,SAAS;MAAEc,KAAK,EAAEf;IAAK;EAC1E;EAEAG,YAAY,CAACN,KAAY,GAAG,CAAC,CAAC,EAAEC,IAAe,GAAG,EAAE,EAAmB;IACnE,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlB,IAAI,CAACmB,MAAM,EAAED,CAAC,EAAE,EAAE;MAClC,MAAMd,GAAG,GAAGJ,IAAI,CAACkB,CAAC,CAAC;MACnB,IAAIE,YAAY,GAAG,IAAI;MACvB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGjB,GAAG,CAACM,MAAM,CAACS,MAAM,EAAEE,CAAC,EAAE,EAAE;QACxC,MAAMC,KAAK,GAAGlB,GAAG,CAACM,MAAM,CAACW,CAAC,CAAC;QAC3B,IAAI,CAACtB,KAAK,CAACuB,KAAK,CAACT,IAAI,CAAC,EAAE;UACpBO,YAAY,GAAG,KAAK;UACpB;QACJ;MACJ;MAEA,IAAIA,YAAY,EAAE;QACd,OAAOhB,GAAG;MACd;IACJ;IACA,OAAO,IAAI;EACf;AACJ;AAAC,eAEcR,cAAc;AAAA"}
package/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  import { default as DynamoDbDriver } from "./DynamoDbDriver";
2
+ export * from "./utils/createStandardEntity";
3
+ export { DbItem } from "./types";
2
4
  export { DynamoDbDriver };
package/index.js CHANGED
@@ -1,15 +1,36 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
7
+ var _exportNames = {
8
+ DynamoDbDriver: true,
9
+ DbItem: true
10
+ };
11
+ Object.defineProperty(exports, "DbItem", {
12
+ enumerable: true,
13
+ get: function () {
14
+ return _types.DbItem;
15
+ }
16
+ });
8
17
  Object.defineProperty(exports, "DynamoDbDriver", {
9
18
  enumerable: true,
10
19
  get: function () {
11
20
  return _DynamoDbDriver.default;
12
21
  }
13
22
  });
14
-
15
- var _DynamoDbDriver = _interopRequireDefault(require("./DynamoDbDriver"));
23
+ var _DynamoDbDriver = _interopRequireDefault(require("./DynamoDbDriver"));
24
+ var _createStandardEntity = require("./utils/createStandardEntity");
25
+ Object.keys(_createStandardEntity).forEach(function (key) {
26
+ if (key === "default" || key === "__esModule") return;
27
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
28
+ if (key in exports && exports[key] === _createStandardEntity[key]) return;
29
+ Object.defineProperty(exports, key, {
30
+ enumerable: true,
31
+ get: function () {
32
+ return _createStandardEntity[key];
33
+ }
34
+ });
35
+ });
36
+ var _types = require("./types");