@webiny/api-prerendering-service-so-ddb 0.0.0-ee-vpcs.549378cf03

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.
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createQueueJobStorageOperations = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _batchWrite = require("@webiny/db-dynamodb/utils/batchWrite");
15
+
16
+ var _query = require("@webiny/db-dynamodb/utils/query");
17
+
18
+ var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
19
+
20
+ const createQueueJobStorageOperations = params => {
21
+ const {
22
+ entity
23
+ } = params;
24
+
25
+ const createQueueJobPartitionKey = () => {
26
+ return "PS#Q#JOB";
27
+ };
28
+
29
+ const createQueueJobSortKey = id => {
30
+ return id;
31
+ };
32
+
33
+ const createQueueJobType = () => {
34
+ return "ps.queue.job";
35
+ };
36
+
37
+ const createQueueJob = async params => {
38
+ const {
39
+ queueJob
40
+ } = params;
41
+ const keys = {
42
+ PK: createQueueJobPartitionKey(),
43
+ SK: createQueueJobSortKey(queueJob.id)
44
+ };
45
+
46
+ try {
47
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, queueJob), keys), {}, {
48
+ TYPE: createQueueJobType()
49
+ }));
50
+ return queueJob;
51
+ } catch (ex) {
52
+ throw new _error.default(ex.message || "Could not create render record.", ex.code || "CREATE_RENDER_ERROR", {
53
+ keys,
54
+ queueJob
55
+ });
56
+ }
57
+ };
58
+
59
+ const listQueueJobs = async () => {
60
+ const queryAllParams = {
61
+ entity,
62
+ partitionKey: createQueueJobPartitionKey(),
63
+ options: {
64
+ gte: " "
65
+ }
66
+ };
67
+
68
+ try {
69
+ const results = await (0, _query.queryAll)(queryAllParams);
70
+ return (0, _cleanup.cleanupItems)(entity, results);
71
+ } catch (ex) {
72
+ throw new _error.default(ex.message || "Could not list queue jobs records.", ex.code || "LIST_QUEUE_JOBS_ERROR", {
73
+ partitionKey: queryAllParams.partitionKey,
74
+ options: queryAllParams.options
75
+ });
76
+ }
77
+ };
78
+
79
+ const deleteQueueJobs = async params => {
80
+ const {
81
+ queueJobs
82
+ } = params;
83
+ const items = queueJobs.map(job => {
84
+ return entity.deleteBatch({
85
+ PK: createQueueJobPartitionKey(),
86
+ SK: createQueueJobSortKey(job.id)
87
+ });
88
+ });
89
+
90
+ try {
91
+ await (0, _batchWrite.batchWriteAll)({
92
+ table: entity.table,
93
+ items
94
+ });
95
+ return queueJobs;
96
+ } catch (ex) {
97
+ throw new _error.default(ex.message || "Could not delete queue jobs records.", ex.code || "DELETE_QUEUE_JOBS_ERROR", {
98
+ queueJobs
99
+ });
100
+ }
101
+ };
102
+
103
+ return {
104
+ createQueueJob,
105
+ deleteQueueJobs,
106
+ listQueueJobs
107
+ };
108
+ };
109
+
110
+ exports.createQueueJobStorageOperations = createQueueJobStorageOperations;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createQueueJobStorageOperations","params","entity","createQueueJobPartitionKey","createQueueJobSortKey","id","createQueueJobType","createQueueJob","queueJob","keys","PK","SK","put","TYPE","ex","WebinyError","message","code","listQueueJobs","queryAllParams","partitionKey","options","gte","results","queryAll","cleanupItems","deleteQueueJobs","queueJobs","items","map","job","deleteBatch","batchWriteAll","table"],"sources":["queueJob.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n PrerenderingServiceQueueJobStorageOperations,\n PrerenderingServiceStorageOperationsCreateQueueJobParams,\n PrerenderingServiceStorageOperationsDeleteQueueJobsParams,\n QueueJob\n} from \"@webiny/api-prerendering-service/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\n\nexport interface CreateQueueJobStorageOperationsParams {\n entity: Entity<any>;\n}\n\nexport const createQueueJobStorageOperations = (\n params: CreateQueueJobStorageOperationsParams\n): PrerenderingServiceQueueJobStorageOperations => {\n const { entity } = params;\n\n const createQueueJobPartitionKey = (): string => {\n return \"PS#Q#JOB\";\n };\n const createQueueJobSortKey = (id: string): string => {\n return id;\n };\n\n const createQueueJobType = () => {\n return \"ps.queue.job\";\n };\n\n const createQueueJob = async (\n params: PrerenderingServiceStorageOperationsCreateQueueJobParams\n ): Promise<QueueJob> => {\n const { queueJob } = params;\n const keys = {\n PK: createQueueJobPartitionKey(),\n SK: createQueueJobSortKey(queueJob.id)\n };\n\n try {\n await entity.put({\n ...queueJob,\n ...keys,\n TYPE: createQueueJobType()\n });\n return queueJob;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create render record.\",\n ex.code || \"CREATE_RENDER_ERROR\",\n {\n keys,\n queueJob\n }\n );\n }\n };\n\n const listQueueJobs = async () => {\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createQueueJobPartitionKey(),\n options: {\n gte: \" \"\n }\n };\n\n try {\n const results = await queryAll<QueueJob>(queryAllParams);\n\n return cleanupItems(entity, results);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list queue jobs records.\",\n ex.code || \"LIST_QUEUE_JOBS_ERROR\",\n {\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n }\n );\n }\n };\n\n const deleteQueueJobs = async (\n params: PrerenderingServiceStorageOperationsDeleteQueueJobsParams\n ) => {\n const { queueJobs } = params;\n\n const items = queueJobs.map(job => {\n return entity.deleteBatch({\n PK: createQueueJobPartitionKey(),\n SK: createQueueJobSortKey(job.id)\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n return queueJobs;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete queue jobs records.\",\n ex.code || \"DELETE_QUEUE_JOBS_ERROR\",\n {\n queueJobs\n }\n );\n }\n };\n\n return {\n createQueueJob,\n deleteQueueJobs,\n listQueueJobs\n };\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAQA;;AACA;;AACA;;AAMO,MAAMA,+BAA+B,GACxCC,MAD2C,IAEI;EAC/C,MAAM;IAAEC;EAAF,IAAaD,MAAnB;;EAEA,MAAME,0BAA0B,GAAG,MAAc;IAC7C,OAAO,UAAP;EACH,CAFD;;EAGA,MAAMC,qBAAqB,GAAIC,EAAD,IAAwB;IAClD,OAAOA,EAAP;EACH,CAFD;;EAIA,MAAMC,kBAAkB,GAAG,MAAM;IAC7B,OAAO,cAAP;EACH,CAFD;;EAIA,MAAMC,cAAc,GAAG,MACnBN,MADmB,IAEC;IACpB,MAAM;MAAEO;IAAF,IAAeP,MAArB;IACA,MAAMQ,IAAI,GAAG;MACTC,EAAE,EAAEP,0BAA0B,EADrB;MAETQ,EAAE,EAAEP,qBAAqB,CAACI,QAAQ,CAACH,EAAV;IAFhB,CAAb;;IAKA,IAAI;MACA,MAAMH,MAAM,CAACU,GAAP,yFACCJ,QADD,GAECC,IAFD;QAGFI,IAAI,EAAEP,kBAAkB;MAHtB,GAAN;MAKA,OAAOE,QAAP;IACH,CAPD,CAOE,OAAOM,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,iCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,qBAFT,EAGF;QACIR,IADJ;QAEID;MAFJ,CAHE,CAAN;IAQH;EACJ,CA1BD;;EA4BA,MAAMU,aAAa,GAAG,YAAY;IAC9B,MAAMC,cAA8B,GAAG;MACnCjB,MADmC;MAEnCkB,YAAY,EAAEjB,0BAA0B,EAFL;MAGnCkB,OAAO,EAAE;QACLC,GAAG,EAAE;MADA;IAH0B,CAAvC;;IAQA,IAAI;MACA,MAAMC,OAAO,GAAG,MAAM,IAAAC,eAAA,EAAmBL,cAAnB,CAAtB;MAEA,OAAO,IAAAM,qBAAA,EAAavB,MAAb,EAAqBqB,OAArB,CAAP;IACH,CAJD,CAIE,OAAOT,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,oCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIG,YAAY,EAAED,cAAc,CAACC,YADjC;QAEIC,OAAO,EAAEF,cAAc,CAACE;MAF5B,CAHE,CAAN;IAQH;EACJ,CAvBD;;EAyBA,MAAMK,eAAe,GAAG,MACpBzB,MADoB,IAEnB;IACD,MAAM;MAAE0B;IAAF,IAAgB1B,MAAtB;IAEA,MAAM2B,KAAK,GAAGD,SAAS,CAACE,GAAV,CAAcC,GAAG,IAAI;MAC/B,OAAO5B,MAAM,CAAC6B,WAAP,CAAmB;QACtBrB,EAAE,EAAEP,0BAA0B,EADR;QAEtBQ,EAAE,EAAEP,qBAAqB,CAAC0B,GAAG,CAACzB,EAAL;MAFH,CAAnB,CAAP;IAIH,CALa,CAAd;;IAOA,IAAI;MACA,MAAM,IAAA2B,yBAAA,EAAc;QAChBC,KAAK,EAAE/B,MAAM,CAAC+B,KADE;QAEhBL;MAFgB,CAAd,CAAN;MAIA,OAAOD,SAAP;IACH,CAND,CAME,OAAOb,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,sCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,yBAFT,EAGF;QACIU;MADJ,CAHE,CAAN;IAOH;EACJ,CA3BD;;EA6BA,OAAO;IACHpB,cADG;IAEHmB,eAFG;IAGHR;EAHG,CAAP;AAKH,CAvGM"}
@@ -0,0 +1,21 @@
1
+ import { PrerenderingServiceRenderStorageOperations } from "@webiny/api-prerendering-service/types";
2
+ import { Entity } from "dynamodb-toolbox";
3
+ import { Tag } from "@webiny/api-prerendering-service/types";
4
+ export interface CreateRenderStorageOperationsParams {
5
+ entity: Entity<any>;
6
+ tagPathLinkEntity: Entity<any>;
7
+ }
8
+ export interface CreateTagPathLinkPartitionKeyParams {
9
+ tenant: string;
10
+ tag: Tag;
11
+ path: string;
12
+ }
13
+ export interface CreateTagPathLinkGSI1PartitionKeyParams {
14
+ tenant: string;
15
+ tag: Tag;
16
+ }
17
+ export interface CreateTagPathLinkSortKeyParams {
18
+ tag: Tag;
19
+ path?: string;
20
+ }
21
+ export declare const createRenderStorageOperations: (params: CreateRenderStorageOperationsParams) => PrerenderingServiceRenderStorageOperations;
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createRenderStorageOperations = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _get = require("@webiny/db-dynamodb/utils/get");
15
+
16
+ var _query = require("@webiny/db-dynamodb/utils/query");
17
+
18
+ var _batchRead = require("@webiny/db-dynamodb/utils/batchRead");
19
+
20
+ var _batchWrite = require("@webiny/db-dynamodb/utils/batchWrite");
21
+
22
+ var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
23
+
24
+ const createRenderStorageOperations = params => {
25
+ const {
26
+ entity,
27
+ tagPathLinkEntity
28
+ } = params;
29
+
30
+ const createRenderPartitionKey = (tenant, path) => {
31
+ /**
32
+ * For backwards compatibility remove the T# if it exists.
33
+ */
34
+ if (tenant.startsWith("T#")) {
35
+ tenant = tenant.replace(/^T#/, "");
36
+ }
37
+
38
+ return `T#${tenant}#PS#RENDER#${path}`;
39
+ };
40
+
41
+ const createRenderSortKey = () => {
42
+ return "A";
43
+ };
44
+
45
+ const createRenderGSI1PartitionKey = tenant => {
46
+ return `T#${tenant}#PS#RENDER`;
47
+ };
48
+
49
+ const createRenderType = () => {
50
+ return "ps.render";
51
+ };
52
+
53
+ const createTagPathLinkPartitionKey = params => {
54
+ const {
55
+ tag,
56
+ path
57
+ } = params;
58
+ let {
59
+ tenant
60
+ } = params;
61
+
62
+ if (tenant.startsWith("T#")) {
63
+ tenant = tenant.replace(/^T#/, "");
64
+ }
65
+
66
+ return `T#${tenant}#PS#TAG#${tag.key}#${tag.value}#${path}`;
67
+ };
68
+
69
+ const createTagPathLinkSortKey = params => {
70
+ const {
71
+ tag,
72
+ path
73
+ } = params;
74
+ const values = [tag.value];
75
+
76
+ if (path) {
77
+ values.push(path);
78
+ }
79
+
80
+ return values.join("#");
81
+ };
82
+
83
+ const createTagPathLinkGSI1PartitionKey = params => {
84
+ let {
85
+ tenant
86
+ } = params;
87
+
88
+ if (tenant.startsWith("T#")) {
89
+ tenant = tenant.replace(/^T#/, "");
90
+ }
91
+
92
+ return `T#${tenant}#PS#TAG`;
93
+ };
94
+
95
+ const createTagPathLinkGSI1SortKey = params => {
96
+ const {
97
+ tag,
98
+ path
99
+ } = params;
100
+ return `${tag.key}#${tag.value}#${path}`;
101
+ };
102
+
103
+ const createTagPathLinkType = () => {
104
+ return "ps.tagPathLink";
105
+ };
106
+
107
+ const getRender = async params => {
108
+ const {
109
+ where
110
+ } = params;
111
+ const keys = {
112
+ PK: createRenderPartitionKey(where.tenant, where.path),
113
+ SK: createRenderSortKey()
114
+ };
115
+
116
+ try {
117
+ const result = await (0, _get.get)({
118
+ entity,
119
+ keys
120
+ });
121
+ const dbItem = (0, _cleanup.cleanupItem)(entity, result);
122
+ return dbItem ? dbItem.data : null;
123
+ } catch (ex) {
124
+ throw new _error.default(ex.message || "Could not get render record by given key.", ex.code || "GET_RENDER_ERROR", {
125
+ keys,
126
+ params
127
+ });
128
+ }
129
+ };
130
+
131
+ const createRender = async params => {
132
+ const {
133
+ render
134
+ } = params;
135
+ const keys = {
136
+ PK: createRenderPartitionKey(render.tenant, render.path),
137
+ SK: createRenderSortKey()
138
+ };
139
+
140
+ try {
141
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, keys), {}, {
142
+ data: render,
143
+ TYPE: createRenderType(),
144
+ GSI1_PK: createRenderGSI1PartitionKey(render.tenant),
145
+ GSI1_SK: render.path
146
+ }));
147
+ return render;
148
+ } catch (ex) {
149
+ throw new _error.default(ex.message || "Could not create render record.", ex.code || "CREATE_RENDER_ERROR", {
150
+ keys,
151
+ render
152
+ });
153
+ }
154
+ };
155
+
156
+ const deleteRender = async params => {
157
+ const {
158
+ render
159
+ } = params;
160
+ const keys = {
161
+ PK: createRenderPartitionKey(render.tenant, render.path),
162
+ SK: createRenderSortKey()
163
+ };
164
+
165
+ try {
166
+ await entity.delete(keys);
167
+ } catch (ex) {
168
+ throw new _error.default(ex.message || "Could not delete render record.", ex.code || "DELETE_RENDER_ERROR", {
169
+ keys,
170
+ render
171
+ });
172
+ }
173
+ };
174
+
175
+ const listRendersByTag = async params => {
176
+ const {
177
+ where
178
+ } = params;
179
+ const {
180
+ tenant,
181
+ tag
182
+ } = where;
183
+ /**
184
+ * Possibly there is no tag.key so no need to go further
185
+ */
186
+
187
+ if (!tag || !tag.key) {
188
+ return [];
189
+ }
190
+
191
+ const links = await listTagPathLinks({
192
+ where: {
193
+ tenant,
194
+ tag
195
+ }
196
+ });
197
+ const items = links.map(link => {
198
+ return entity.getBatch({
199
+ PK: createRenderPartitionKey(tenant, link.path),
200
+ SK: createRenderSortKey()
201
+ });
202
+ });
203
+
204
+ try {
205
+ const results = await (0, _batchRead.batchReadAll)({
206
+ table: entity.table,
207
+ items
208
+ });
209
+ return (0, _cleanup.cleanupItems)(entity, results).map(item => item.data);
210
+ } catch (ex) {
211
+ throw new _error.default(ex.message || "Could not list render records after links.", ex.code || "LIST_LINKS_RENDER_ERROR", {
212
+ links
213
+ });
214
+ }
215
+ };
216
+
217
+ const listRenders = async params => {
218
+ const {
219
+ where
220
+ } = params;
221
+ const {
222
+ tenant,
223
+ tag
224
+ } = where;
225
+
226
+ if (tag) {
227
+ return listRendersByTag(params);
228
+ }
229
+
230
+ const queryAllParams = {
231
+ entity,
232
+ partitionKey: createRenderGSI1PartitionKey(tenant),
233
+ options: {
234
+ index: "GSI1",
235
+ gte: " "
236
+ }
237
+ };
238
+
239
+ try {
240
+ const results = await (0, _query.queryAll)(queryAllParams);
241
+ return (0, _cleanup.cleanupItems)(entity, results).map(item => item.data);
242
+ } catch (ex) {
243
+ throw new _error.default(ex.message || "Could not list render records.", ex.code || "LIST_RENDER_ERROR", {
244
+ partitionKey: queryAllParams.partitionKey,
245
+ options: queryAllParams.options
246
+ });
247
+ }
248
+ };
249
+
250
+ const createTagPathLinks = async params => {
251
+ const {
252
+ tagPathLinks
253
+ } = params;
254
+ const items = tagPathLinks.map(item => {
255
+ return tagPathLinkEntity.putBatch({
256
+ data: item,
257
+ TYPE: createTagPathLinkType(),
258
+ PK: createTagPathLinkPartitionKey({
259
+ tenant: item.tenant,
260
+ tag: item,
261
+ path: item.path
262
+ }),
263
+ SK: createTagPathLinkSortKey({
264
+ tag: item,
265
+ path: item.path
266
+ }),
267
+ GSI1_PK: createTagPathLinkGSI1PartitionKey({
268
+ tag: item,
269
+ tenant: item.tenant
270
+ }),
271
+ GSI1_SK: createTagPathLinkGSI1SortKey({
272
+ tag: item,
273
+ path: item.path
274
+ })
275
+ });
276
+ });
277
+
278
+ try {
279
+ await (0, _batchWrite.batchWriteAll)({
280
+ table: tagPathLinkEntity.table,
281
+ items
282
+ });
283
+ return tagPathLinks;
284
+ } catch (ex) {
285
+ throw new _error.default(ex.message || "Could not create tagPathLink records.", ex.code || "CREATE_URL_TAG_LINKS_ERROR", {
286
+ tagPathLinks
287
+ });
288
+ }
289
+ };
290
+
291
+ const deleteTagPathLinks = async params => {
292
+ const {
293
+ tenant,
294
+ tags,
295
+ path
296
+ } = params;
297
+ const items = tags.map(tag => {
298
+ return tagPathLinkEntity.deleteBatch({
299
+ PK: createTagPathLinkPartitionKey({
300
+ tag,
301
+ tenant,
302
+ path
303
+ }),
304
+ SK: createTagPathLinkSortKey({
305
+ tag,
306
+ path
307
+ })
308
+ });
309
+ });
310
+
311
+ try {
312
+ await (0, _batchWrite.batchWriteAll)({
313
+ table: tagPathLinkEntity.table,
314
+ items
315
+ });
316
+ } catch (ex) {
317
+ throw new _error.default(ex.message || "Could not delete tagPathLink records.", ex.code || "DELETE_URL_TAG_LINKS_ERROR", {
318
+ tags,
319
+ tenant,
320
+ path
321
+ });
322
+ }
323
+ };
324
+
325
+ const listTagPathLinks = async params => {
326
+ const {
327
+ where
328
+ } = params;
329
+ const {
330
+ tenant,
331
+ tag
332
+ } = where;
333
+ const partitionKey = createTagPathLinkGSI1PartitionKey({
334
+ tenant,
335
+ tag
336
+ });
337
+ const options = {
338
+ index: "GSI1"
339
+ };
340
+
341
+ if (tag.value) {
342
+ options.beginsWith = `${tag.key}#${tag.value}#`;
343
+ } else {
344
+ options.beginsWith = `${tag.key}#`;
345
+ }
346
+
347
+ const queryAllParams = {
348
+ entity: tagPathLinkEntity,
349
+ partitionKey,
350
+ options
351
+ };
352
+
353
+ try {
354
+ const results = await (0, _query.queryAll)(queryAllParams);
355
+ return (0, _cleanup.cleanupItems)(tagPathLinkEntity, results).map(item => item.data);
356
+ } catch (ex) {
357
+ throw new _error.default(ex.message || "Could not list tagPathLink records.", ex.code || "LIST_TAG_PATH_LINK_ERROR", {
358
+ partitionKey,
359
+ options
360
+ });
361
+ }
362
+ };
363
+
364
+ return {
365
+ createRender,
366
+ deleteRender,
367
+ listRenders,
368
+ getRender,
369
+ createTagPathLinks,
370
+ deleteTagPathLinks,
371
+ listTagPathLinks
372
+ };
373
+ };
374
+
375
+ exports.createRenderStorageOperations = createRenderStorageOperations;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createRenderStorageOperations","params","entity","tagPathLinkEntity","createRenderPartitionKey","tenant","path","startsWith","replace","createRenderSortKey","createRenderGSI1PartitionKey","createRenderType","createTagPathLinkPartitionKey","tag","key","value","createTagPathLinkSortKey","values","push","join","createTagPathLinkGSI1PartitionKey","createTagPathLinkGSI1SortKey","createTagPathLinkType","getRender","where","keys","PK","SK","result","get","dbItem","cleanupItem","data","ex","WebinyError","message","code","createRender","render","put","TYPE","GSI1_PK","GSI1_SK","deleteRender","delete","listRendersByTag","links","listTagPathLinks","items","map","link","getBatch","results","batchReadAll","table","cleanupItems","item","listRenders","queryAllParams","partitionKey","options","index","gte","queryAll","createTagPathLinks","tagPathLinks","putBatch","batchWriteAll","deleteTagPathLinks","tags","deleteBatch","beginsWith"],"sources":["render.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n PrerenderingServiceRenderStorageOperations,\n PrerenderingServiceStorageOperationsCreateRenderParams,\n PrerenderingServiceStorageOperationsCreateTagPathLinksParams,\n PrerenderingServiceStorageOperationsDeleteRenderParams,\n PrerenderingServiceStorageOperationsDeleteTagPathLinksParams,\n PrerenderingServiceStorageOperationsGetRenderParams,\n PrerenderingServiceStorageOperationsListRendersParams,\n PrerenderingServiceStorageOperationsListTagPathLinksParams,\n Render,\n TagPathLink\n} from \"@webiny/api-prerendering-service/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { get } from \"@webiny/db-dynamodb/utils/get\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { batchReadAll } from \"@webiny/db-dynamodb/utils/batchRead\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { Tag } from \"@webiny/api-prerendering-service/types\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { DataContainer } from \"~/types\";\n\nexport interface CreateRenderStorageOperationsParams {\n entity: Entity<any>;\n tagPathLinkEntity: Entity<any>;\n}\n\nexport interface CreateTagPathLinkPartitionKeyParams {\n tenant: string;\n tag: Tag;\n path: string;\n}\n\nexport interface CreateTagPathLinkGSI1PartitionKeyParams {\n tenant: string;\n tag: Tag;\n}\n\nexport interface CreateTagPathLinkSortKeyParams {\n tag: Tag;\n path?: string;\n}\n\nexport const createRenderStorageOperations = (\n params: CreateRenderStorageOperationsParams\n): PrerenderingServiceRenderStorageOperations => {\n const { entity, tagPathLinkEntity } = params;\n\n const createRenderPartitionKey = (tenant: string, path: string): string => {\n /**\n * For backwards compatibility remove the T# if it exists.\n */\n if (tenant.startsWith(\"T#\")) {\n tenant = tenant.replace(/^T#/, \"\");\n }\n return `T#${tenant}#PS#RENDER#${path}`;\n };\n\n const createRenderSortKey = (): string => {\n return \"A\";\n };\n\n const createRenderGSI1PartitionKey = (tenant: string): string => {\n return `T#${tenant}#PS#RENDER`;\n };\n\n const createRenderType = (): string => {\n return \"ps.render\";\n };\n\n const createTagPathLinkPartitionKey = (params: CreateTagPathLinkPartitionKeyParams): string => {\n const { tag, path } = params;\n let { tenant } = params;\n if (tenant.startsWith(\"T#\")) {\n tenant = tenant.replace(/^T#/, \"\");\n }\n return `T#${tenant}#PS#TAG#${tag.key}#${tag.value}#${path}`;\n };\n\n const createTagPathLinkSortKey = (params: CreateTagPathLinkSortKeyParams): string => {\n const { tag, path } = params;\n const values = [tag.value];\n if (path) {\n values.push(path);\n }\n return values.join(\"#\");\n };\n\n const createTagPathLinkGSI1PartitionKey = (\n params: CreateTagPathLinkGSI1PartitionKeyParams\n ): string => {\n let { tenant } = params;\n if (tenant.startsWith(\"T#\")) {\n tenant = tenant.replace(/^T#/, \"\");\n }\n return `T#${tenant}#PS#TAG`;\n };\n\n const createTagPathLinkGSI1SortKey = (params: CreateTagPathLinkSortKeyParams): string => {\n const { tag, path } = params;\n\n return `${tag.key}#${tag.value}#${path}`;\n };\n\n const createTagPathLinkType = (): string => {\n return \"ps.tagPathLink\";\n };\n\n const getRender = async (\n params: PrerenderingServiceStorageOperationsGetRenderParams\n ): Promise<Render | null> => {\n const { where } = params;\n\n const keys = {\n PK: createRenderPartitionKey(where.tenant, where.path),\n SK: createRenderSortKey()\n };\n\n try {\n const result = await get<DataContainer<Render>>({\n entity,\n keys\n });\n\n const dbItem = cleanupItem(entity, result);\n\n return dbItem ? dbItem.data : null;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get render record by given key.\",\n ex.code || \"GET_RENDER_ERROR\",\n {\n keys,\n params\n }\n );\n }\n };\n const createRender = async (params: PrerenderingServiceStorageOperationsCreateRenderParams) => {\n const { render } = params;\n\n const keys = {\n PK: createRenderPartitionKey(render.tenant, render.path),\n SK: createRenderSortKey()\n };\n\n try {\n await entity.put({\n ...keys,\n data: render,\n TYPE: createRenderType(),\n GSI1_PK: createRenderGSI1PartitionKey(render.tenant),\n GSI1_SK: render.path\n });\n\n return render;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create render record.\",\n ex.code || \"CREATE_RENDER_ERROR\",\n {\n keys,\n render\n }\n );\n }\n };\n const deleteRender = async (\n params: PrerenderingServiceStorageOperationsDeleteRenderParams\n ): Promise<void> => {\n const { render } = params;\n\n const keys = {\n PK: createRenderPartitionKey(render.tenant, render.path),\n SK: createRenderSortKey()\n };\n\n try {\n await entity.delete(keys);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete render record.\",\n ex.code || \"DELETE_RENDER_ERROR\",\n {\n keys,\n render\n }\n );\n }\n };\n\n const listRendersByTag = async (\n params: PrerenderingServiceStorageOperationsListRendersParams\n ) => {\n const { where } = params;\n const { tenant, tag } = where;\n /**\n * Possibly there is no tag.key so no need to go further\n */\n if (!tag || !tag.key) {\n return [];\n }\n\n const links = await listTagPathLinks({\n where: {\n tenant,\n tag\n }\n });\n\n const items = links.map(link => {\n return entity.getBatch({\n PK: createRenderPartitionKey(tenant, link.path),\n SK: createRenderSortKey()\n });\n });\n try {\n const results = await batchReadAll<DataContainer<Render>>({\n table: entity.table,\n items\n });\n return cleanupItems(entity, results).map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list render records after links.\",\n ex.code || \"LIST_LINKS_RENDER_ERROR\",\n {\n links\n }\n );\n }\n };\n\n const listRenders = async (params: PrerenderingServiceStorageOperationsListRendersParams) => {\n const { where } = params;\n const { tenant, tag } = where;\n\n if (tag) {\n return listRendersByTag(params);\n }\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createRenderGSI1PartitionKey(tenant),\n options: {\n index: \"GSI1\",\n gte: \" \"\n }\n };\n\n try {\n const results = await queryAll<DataContainer<Render>>(queryAllParams);\n\n return cleanupItems(entity, results).map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list render records.\",\n ex.code || \"LIST_RENDER_ERROR\",\n {\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n }\n );\n }\n };\n\n const createTagPathLinks = async (\n params: PrerenderingServiceStorageOperationsCreateTagPathLinksParams\n ) => {\n const { tagPathLinks } = params;\n\n const items = tagPathLinks.map(item => {\n return tagPathLinkEntity.putBatch({\n data: item,\n TYPE: createTagPathLinkType(),\n PK: createTagPathLinkPartitionKey({\n tenant: item.tenant,\n tag: item,\n path: item.path\n }),\n SK: createTagPathLinkSortKey({\n tag: item,\n path: item.path\n }),\n GSI1_PK: createTagPathLinkGSI1PartitionKey({ tag: item, tenant: item.tenant }),\n GSI1_SK: createTagPathLinkGSI1SortKey({ tag: item, path: item.path })\n });\n });\n\n try {\n await batchWriteAll({\n table: tagPathLinkEntity.table,\n items\n });\n return tagPathLinks;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create tagPathLink records.\",\n ex.code || \"CREATE_URL_TAG_LINKS_ERROR\",\n {\n tagPathLinks\n }\n );\n }\n };\n\n const deleteTagPathLinks = async (\n params: PrerenderingServiceStorageOperationsDeleteTagPathLinksParams\n ): Promise<void> => {\n const { tenant, tags, path } = params;\n const items = tags.map(tag => {\n return tagPathLinkEntity.deleteBatch({\n PK: createTagPathLinkPartitionKey({\n tag,\n tenant,\n path\n }),\n SK: createTagPathLinkSortKey({\n tag,\n path\n })\n });\n });\n\n try {\n await batchWriteAll({\n table: tagPathLinkEntity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete tagPathLink records.\",\n ex.code || \"DELETE_URL_TAG_LINKS_ERROR\",\n {\n tags,\n tenant,\n path\n }\n );\n }\n };\n\n const listTagPathLinks = async (\n params: PrerenderingServiceStorageOperationsListTagPathLinksParams\n ) => {\n const { where } = params;\n const { tenant, tag } = where;\n\n const partitionKey = createTagPathLinkGSI1PartitionKey({\n tenant,\n tag\n });\n\n const options: DynamoDBToolboxQueryOptions = { index: \"GSI1\" };\n\n if (tag.value) {\n options.beginsWith = `${tag.key}#${tag.value}#`;\n } else {\n options.beginsWith = `${tag.key}#`;\n }\n\n const queryAllParams: QueryAllParams = {\n entity: tagPathLinkEntity,\n partitionKey,\n options\n };\n\n try {\n const results = await queryAll<DataContainer<TagPathLink>>(queryAllParams);\n\n return cleanupItems(tagPathLinkEntity, results).map(item => item.data);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list tagPathLink records.\",\n ex.code || \"LIST_TAG_PATH_LINK_ERROR\",\n {\n partitionKey,\n options\n }\n );\n }\n };\n\n return {\n createRender,\n deleteRender,\n listRenders,\n getRender,\n createTagPathLinks,\n deleteTagPathLinks,\n listTagPathLinks\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PrerenderingServiceSettingsStorageOperations } from "@webiny/api-prerendering-service/types";
2
+ import { Entity } from "dynamodb-toolbox";
3
+ export interface CreateSettingsStorageOperationsParams {
4
+ entity: Entity<any>;
5
+ }
6
+ export declare const createSettingsStorageOperations: (params: CreateSettingsStorageOperationsParams) => PrerenderingServiceSettingsStorageOperations;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createSettingsStorageOperations = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _error = _interopRequireDefault(require("@webiny/error"));
13
+
14
+ var _get = require("@webiny/db-dynamodb/utils/get");
15
+
16
+ const createSettingsStorageOperations = params => {
17
+ const {
18
+ entity
19
+ } = params;
20
+
21
+ const getSettings = async (variant = "default") => {
22
+ const keys = {
23
+ PK: "PS#SETTINGS",
24
+ SK: variant
25
+ };
26
+
27
+ try {
28
+ const result = await (0, _get.get)({
29
+ entity,
30
+ keys
31
+ });
32
+
33
+ if (!result) {
34
+ throw Error();
35
+ }
36
+
37
+ return result.data;
38
+ } catch (ex) {
39
+ throw new _error.default(ex.message || "Could not load prerendering settings!", ex.code || "GET_SETTINGS_ERROR", {
40
+ keys,
41
+ params
42
+ });
43
+ }
44
+ };
45
+
46
+ const saveSettings = async params => {
47
+ const {
48
+ settings,
49
+ variant = "default"
50
+ } = params;
51
+ const keys = {
52
+ PK: "PS#SETTINGS",
53
+ SK: variant
54
+ };
55
+
56
+ try {
57
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, keys), {}, {
58
+ TYPE: "ps.settings",
59
+ data: settings
60
+ }));
61
+ return settings;
62
+ } catch (ex) {
63
+ throw new _error.default(ex.message || "Could not save settings.", ex.code || "SAVE_SETTINGS_ERROR", {
64
+ keys
65
+ });
66
+ }
67
+ };
68
+
69
+ return {
70
+ getSettings,
71
+ saveSettings
72
+ };
73
+ };
74
+
75
+ exports.createSettingsStorageOperations = createSettingsStorageOperations;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSettingsStorageOperations","params","entity","getSettings","variant","keys","PK","SK","result","get","Error","data","ex","WebinyError","message","code","saveSettings","settings","put","TYPE"],"sources":["settings.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n PrerenderingServiceSaveSettingsParams,\n PrerenderingServiceSettingsStorageOperations,\n PrerenderingSettings\n} from \"@webiny/api-prerendering-service/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { get } from \"@webiny/db-dynamodb/utils/get\";\n\nexport interface CreateSettingsStorageOperationsParams {\n entity: Entity<any>;\n}\n\nexport const createSettingsStorageOperations = (\n params: CreateSettingsStorageOperationsParams\n): PrerenderingServiceSettingsStorageOperations => {\n const { entity } = params;\n\n const getSettings = async (variant = \"default\"): Promise<PrerenderingSettings> => {\n const keys = {\n PK: \"PS#SETTINGS\",\n SK: variant\n };\n\n try {\n const result = await get<{ data: PrerenderingSettings }>({\n entity,\n keys\n });\n\n if (!result) {\n throw Error();\n }\n\n return result.data;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load prerendering settings!\",\n ex.code || \"GET_SETTINGS_ERROR\",\n {\n keys,\n params\n }\n );\n }\n };\n\n const saveSettings = async (params: PrerenderingServiceSaveSettingsParams) => {\n const { settings, variant = \"default\" } = params;\n const keys = {\n PK: \"PS#SETTINGS\",\n SK: variant\n };\n\n try {\n await entity.put({\n ...keys,\n TYPE: \"ps.settings\",\n data: settings\n });\n\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not save settings.\",\n ex.code || \"SAVE_SETTINGS_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n return {\n getSettings,\n saveSettings\n };\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAOA;;AAMO,MAAMA,+BAA+B,GACxCC,MAD2C,IAEI;EAC/C,MAAM;IAAEC;EAAF,IAAaD,MAAnB;;EAEA,MAAME,WAAW,GAAG,OAAOC,OAAO,GAAG,SAAjB,KAA8D;IAC9E,MAAMC,IAAI,GAAG;MACTC,EAAE,EAAE,aADK;MAETC,EAAE,EAAEH;IAFK,CAAb;;IAKA,IAAI;MACA,MAAMI,MAAM,GAAG,MAAM,IAAAC,QAAA,EAAoC;QACrDP,MADqD;QAErDG;MAFqD,CAApC,CAArB;;MAKA,IAAI,CAACG,MAAL,EAAa;QACT,MAAME,KAAK,EAAX;MACH;;MAED,OAAOF,MAAM,CAACG,IAAd;IACH,CAXD,CAWE,OAAOC,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,uCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIV,IADJ;QAEIJ;MAFJ,CAHE,CAAN;IAQH;EACJ,CA3BD;;EA6BA,MAAMe,YAAY,GAAG,MAAOf,MAAP,IAAyD;IAC1E,MAAM;MAAEgB,QAAF;MAAYb,OAAO,GAAG;IAAtB,IAAoCH,MAA1C;IACA,MAAMI,IAAI,GAAG;MACTC,EAAE,EAAE,aADK;MAETC,EAAE,EAAEH;IAFK,CAAb;;IAKA,IAAI;MACA,MAAMF,MAAM,CAACgB,GAAP,6DACCb,IADD;QAEFc,IAAI,EAAE,aAFJ;QAGFR,IAAI,EAAEM;MAHJ,GAAN;MAMA,OAAOA,QAAP;IACH,CARD,CAQE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0BADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,qBAFT,EAGF;QACIV;MADJ,CAHE,CAAN;IAOH;EACJ,CAxBD;;EA0BA,OAAO;IACHF,WADG;IAEHa;EAFG,CAAP;AAIH,CAhEM"}