@webiny/api-headless-cms-ddb 5.26.0 → 5.27.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.
@@ -87,7 +87,13 @@ const createEntriesStorageOperations = params => {
87
87
  entry,
88
88
  storageEntry
89
89
  } = args;
90
- const partitionKey = (0, _keys.createPartitionKey)(entry);
90
+ const partitionKey = (0, _keys.createPartitionKey)({
91
+ id: entry.id,
92
+ locale: model.locale,
93
+ tenant: model.tenant
94
+ });
95
+ const isPublished = entry.status === "published";
96
+ const locked = isPublished ? true : entry.locked;
91
97
  /**
92
98
  * We need to:
93
99
  * - create new main entry item
@@ -95,18 +101,34 @@ const createEntriesStorageOperations = params => {
95
101
  */
96
102
 
97
103
  const items = [entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
104
+ locked,
98
105
  PK: partitionKey,
99
106
  SK: (0, _keys.createRevisionSortKey)(entry),
100
107
  TYPE: createType(),
101
108
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
102
109
  GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
103
110
  })), entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
111
+ locked,
104
112
  PK: partitionKey,
105
113
  SK: (0, _keys.createLatestSortKey)(),
106
114
  TYPE: createLatestType(),
107
115
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "L"),
108
116
  GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
109
117
  }))];
118
+ /**
119
+ * We need to create published entry if
120
+ */
121
+
122
+ if (isPublished) {
123
+ items.push(entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
124
+ locked,
125
+ PK: partitionKey,
126
+ SK: (0, _keys.createPublishedSortKey)(),
127
+ TYPE: createLatestType(),
128
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "P"),
129
+ GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
130
+ })));
131
+ }
110
132
 
111
133
  try {
112
134
  await (0, _batchWrite.batchWriteAll)({
@@ -129,10 +151,13 @@ const createEntriesStorageOperations = params => {
129
151
  const createRevisionFrom = async (model, params) => {
130
152
  const {
131
153
  entry,
132
- storageEntry,
133
- latestEntry
154
+ storageEntry
134
155
  } = params;
135
- const partitionKey = (0, _keys.createPartitionKey)(entry);
156
+ const partitionKey = (0, _keys.createPartitionKey)({
157
+ id: entry.id,
158
+ locale: model.locale,
159
+ tenant: model.tenant
160
+ });
136
161
  /**
137
162
  * We need to:
138
163
  * - create the main entry item
@@ -164,7 +189,6 @@ const createEntriesStorageOperations = params => {
164
189
  } catch (ex) {
165
190
  throw new _error.default(ex.message || "Could not create revision from given entry.", ex.code || "CREATE_REVISION_ERROR", {
166
191
  error: ex,
167
- latestEntry,
168
192
  entry,
169
193
  storageEntry
170
194
  });
@@ -182,7 +206,13 @@ const createEntriesStorageOperations = params => {
182
206
  entry,
183
207
  storageEntry
184
208
  } = params;
185
- const partitionKey = (0, _keys.createPartitionKey)(entry);
209
+ const partitionKey = (0, _keys.createPartitionKey)({
210
+ id: entry.id,
211
+ locale: model.locale,
212
+ tenant: model.tenant
213
+ });
214
+ const isPublished = entry.status === "published";
215
+ const locked = isPublished ? true : entry.locked;
186
216
  const items = [];
187
217
  /**
188
218
  * We need to:
@@ -191,20 +221,34 @@ const createEntriesStorageOperations = params => {
191
221
  */
192
222
 
193
223
  items.push(entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
224
+ locked,
194
225
  PK: partitionKey,
195
226
  SK: (0, _keys.createRevisionSortKey)(storageEntry),
196
227
  TYPE: createType(),
197
228
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
198
229
  GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
199
230
  })));
231
+
232
+ if (isPublished) {
233
+ items.push(entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
234
+ locked,
235
+ PK: partitionKey,
236
+ SK: (0, _keys.createPublishedSortKey)(),
237
+ TYPE: createPublishedType(),
238
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "P"),
239
+ GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
240
+ })));
241
+ }
200
242
  /**
201
243
  * We need the latest entry to update it as well if neccessary.
202
244
  */
203
245
 
246
+
204
247
  const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);
205
248
 
206
249
  if (latestStorageEntry && latestStorageEntry.id === entry.id) {
207
250
  items.push(entity.putBatch(_objectSpread(_objectSpread({}, storageEntry), {}, {
251
+ locked,
208
252
  PK: partitionKey,
209
253
  SK: (0, _keys.createLatestSortKey)(),
210
254
  TYPE: createLatestType(),
@@ -237,7 +281,11 @@ const createEntriesStorageOperations = params => {
237
281
  } = params;
238
282
  const queryAllParams = {
239
283
  entity,
240
- partitionKey: (0, _keys.createPartitionKey)(entry),
284
+ partitionKey: (0, _keys.createPartitionKey)({
285
+ id: entry.id,
286
+ locale: model.locale,
287
+ tenant: model.tenant
288
+ }),
241
289
  options: {
242
290
  gte: " "
243
291
  }
@@ -283,7 +331,11 @@ const createEntriesStorageOperations = params => {
283
331
  latestEntry,
284
332
  latestStorageEntry
285
333
  } = params;
286
- const partitionKey = (0, _keys.createPartitionKey)(entry);
334
+ const partitionKey = (0, _keys.createPartitionKey)({
335
+ id: entry.id,
336
+ locale: model.locale,
337
+ tenant: model.tenant
338
+ });
287
339
  const items = [entity.deleteBatch({
288
340
  PK: partitionKey,
289
341
  SK: (0, _keys.createRevisionSortKey)(entry)
@@ -380,10 +432,6 @@ const createEntriesStorageOperations = params => {
380
432
  };
381
433
 
382
434
  const getPreviousRevision = async (model, params) => {
383
- const {
384
- tenant,
385
- locale
386
- } = model;
387
435
  const {
388
436
  entryId,
389
437
  version
@@ -391,8 +439,8 @@ const createEntriesStorageOperations = params => {
391
439
  const queryParams = {
392
440
  entity,
393
441
  partitionKey: (0, _keys.createPartitionKey)({
394
- tenant,
395
- locale,
442
+ tenant: model.tenant,
443
+ locale: model.locale,
396
444
  id: entryId
397
445
  }),
398
446
  options: {
@@ -537,7 +585,11 @@ const createEntriesStorageOperations = params => {
537
585
  entry,
538
586
  storageEntry
539
587
  } = params;
540
- const partitionKey = (0, _keys.createPartitionKey)(entry);
588
+ const partitionKey = (0, _keys.createPartitionKey)({
589
+ id: entry.id,
590
+ locale: model.locale,
591
+ tenant: model.tenant
592
+ });
541
593
  /**
542
594
  * We need to:
543
595
  * - update the existing entry
@@ -589,7 +641,11 @@ const createEntriesStorageOperations = params => {
589
641
  entry,
590
642
  storageEntry
591
643
  } = params;
592
- const partitionKey = (0, _keys.createPartitionKey)(entry);
644
+ const partitionKey = (0, _keys.createPartitionKey)({
645
+ id: entry.id,
646
+ locale: model.locale,
647
+ tenant: model.tenant
648
+ });
593
649
  /**
594
650
  * We need to:
595
651
  * - update existing entry
@@ -641,7 +697,11 @@ const createEntriesStorageOperations = params => {
641
697
  entry,
642
698
  storageEntry
643
699
  } = params;
644
- const partitionKey = (0, _keys.createPartitionKey)(entry);
700
+ const partitionKey = (0, _keys.createPartitionKey)({
701
+ id: entry.id,
702
+ locale: model.locale,
703
+ tenant: model.tenant
704
+ });
645
705
  /**
646
706
  * We need the latest and published entries to see if something needs to be updated along side the publishing one.
647
707
  */
@@ -714,7 +774,11 @@ const createEntriesStorageOperations = params => {
714
774
  entry,
715
775
  storageEntry
716
776
  } = params;
717
- const partitionKey = (0, _keys.createPartitionKey)(entry);
777
+ const partitionKey = (0, _keys.createPartitionKey)({
778
+ id: entry.id,
779
+ locale: model.locale,
780
+ tenant: model.tenant
781
+ });
718
782
  /**
719
783
  * We need to:
720
784
  * - delete currently published entry
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["createType","createLatestType","createPublishedType","createEntriesStorageOperations","params","entity","plugins","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","type","reduce","collection","plugin","fieldType","createStorageTransformCallable","model","field","value","fromStorage","getStoragePlugin","create","args","entry","storageEntry","partitionKey","items","putBatch","PK","SK","TYPE","GSI1_PK","GSI1_SK","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","latestEntry","update","push","latestStorageEntry","getLatestRevisionByEntryId","id","deleteEntry","queryAllParams","options","gte","records","map","item","deleteBatch","deleteRevision","publishedStorageEntry","getPublishedRevisionByEntryId","result","ids","shift","getRevisionById","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","tenant","locale","entryId","version","queryParams","lt","filters","attr","eq","reverse","list","limit","initialLimit","where","initialWhere","after","sort","fields","search","published","index","length","hasMoreItems","totalCount","cursor","modelFields","filteredItems","fullTextSearch","term","sortedItems","start","parseInt","end","undefined","slicedItems","slice","get","requestChanges","requestReview","publish","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","unpublish","delete"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AA0BA;;AACA;;AAQA;;AACA;;AAMA;;AAEA;;AACA;;AACA;;;;;;AAEA,MAAMA,UAAU,GAAG,MAAc;AAC7B,SAAO,WAAP;AACH,CAFD;;AAGA,MAAMC,gBAAgB,GAAG,MAAc;AACnC,SAAQ,GAAED,UAAU,EAAG,IAAvB;AACH,CAFD;;AAGA,MAAME,mBAAmB,GAAG,MAAc;AACtC,SAAQ,GAAEF,UAAU,EAAG,IAAvB;AACH,CAFD;;AAQO,MAAMG,8BAA8B,GACvCC,MAD0C,IAEd;AAC5B,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,MAAsBF,MAA5B;AAEA,QAAMG,WAAW,GAAG,IAAIC,+BAAJ,CAAuB;AACvCH,IAAAA;AADuC,GAAvB,CAApB;AAIA,QAAMI,uBAAuB,GAAGH,OAAO,CAClCI,MAD2B,CACIC,uCAAuBC,IAD3B,EAE3BC,MAF2B,CAEpB,CAACC,UAAD,EAAaC,MAAb,KAAwB;AAC5BD,IAAAA,UAAU,CAACC,MAAM,CAACC,SAAR,CAAV,GAA+BD,MAA/B;AACA,WAAOD,UAAP;AACH,GAL2B,EAKzB,EALyB,CAAhC;;AAOA,QAAMG,8BAA8B,GAAIC,KAAD,IAA4C;AAC/E,WAAO,CAACC,KAAD,EAAQC,KAAR,KAAkB;AACrB,YAAML,MAA8B,GAAGN,uBAAuB,CAACU,KAAK,CAACP,IAAP,CAA9D;;AACA,UAAI,CAACG,MAAL,EAAa;AACT,eAAOK,KAAP;AACH;;AACD,aAAOL,MAAM,CAACM,WAAP,CAAmB;AACtBH,QAAAA,KADsB;AAEtBC,QAAAA,KAFsB;AAGtBC,QAAAA,KAHsB;;AAItBE,QAAAA,gBAAgB,CAACN,SAAD,EAA4C;AACxD,iBAAOP,uBAAuB,CAACO,SAAD,CAAvB,IAAsCP,uBAAuB,CAAC,GAAD,CAApE;AACH,SANqB;;AAOtBH,QAAAA;AAPsB,OAAnB,CAAP;AASH,KAdD;AAeH,GAhBD;;AAkBA,QAAMiB,MAAM,GAAG,OAAOL,KAAP,EAAwBM,IAAxB,KAAwE;AACnF,UAAM;AAAEC,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BF,IAAhC;AAEA,UAAMG,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AACA;AACR;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB,CAHR;AAIIO,MAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKIiC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBR,YAAjB;AANb,OADU,EASVrB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,gCAHR;AAIIC,MAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBR,YAAjB;AANb,OATU,CAAd;;AAmBA,QAAI;AACA,YAAM,+BAAc;AAChBS,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGH,KARD,CAQE,OAAOmB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0CADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIZ,QAAAA;AAFJ,OAHE,CAAN;AAQH;;AAED,WAAOC,YAAP;AACH,GAhDD;;AAkDA,QAAMgB,kBAAkB,GAAG,OACvBxB,KADuB,EAEvBd,MAFuB,KAGtB;AACD,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA,YAAT;AAAuBiB,MAAAA;AAAvB,QAAuCvC,MAA7C;AAEA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AACA;AACR;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,iCAAsBL,YAAtB,CAHR;AAIIM,MAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKIiC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBR,YAAjB;AANb,OADU,EASVrB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,gCAHR;AAIIC,MAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBR,YAAjB;AANb,OATU,CAAd;;AAkBA,QAAI;AACA,YAAM,+BAAc;AAChBS,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGH,KARD,CAQE,OAAOmB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,6CADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIM,QAAAA,WAFJ;AAGIlB,QAAAA,KAHJ;AAIIC,QAAAA;AAJJ,OAHE,CAAN;AAUH;AACD;AACR;AACA;;;AACQ,WAAOA,YAAP;AACH,GAtDD;;AAwDA,QAAMkB,MAAM,GAAG,OAAO1B,KAAP,EAAwBd,MAAxB,KAA0E;AACrF,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BtB,MAAhC;AACA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AAEA,UAAMG,KAAK,GAAG,EAAd;AACA;AACR;AACA;AACA;AACA;;AACQA,IAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,iCAAsBL,YAAtB,CAHR;AAIIM,MAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKIiC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBR,YAAjB;AANb,OADJ;AAWA;AACR;AACA;;AACQ,UAAMoB,kBAAkB,GAAG,MAAMC,0BAA0B,CAAC7B,KAAD,EAAQO,KAAR,CAA3D;;AAEA,QAAIqB,kBAAkB,IAAIA,kBAAkB,CAACE,EAAnB,KAA0BvB,KAAK,CAACuB,EAA1D,EAA8D;AAC1DpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,SADJ;AAUH;;AAED,QAAI;AACA,YAAM,+BAAc;AAChBU,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGA,aAAOQ,YAAP;AACH,KATD,CASE,OAAOW,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,yBADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,cAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIZ,QAAAA,KAFJ;AAGIqB,QAAAA;AAHJ,OAHE,CAAN;AASH;AACJ,GA3DD;;AA6DA,QAAMG,WAAW,GAAG,OAAO/B,KAAP,EAAwBd,MAAxB,KAA0E;AAC1F,UAAM;AAAEqB,MAAAA;AAAF,QAAYrB,MAAlB;AAEA,UAAM8C,cAA8B,GAAG;AACnC7C,MAAAA,MADmC;AAEnCsB,MAAAA,YAAY,EAAE,8BAAmBF,KAAnB,CAFqB;AAGnC0B,MAAAA,OAAO,EAAE;AACLC,QAAAA,GAAG,EAAE;AADA;AAH0B,KAAvC;AAQA,QAAIC,OAAO,GAAG,EAAd;;AACA,QAAI;AACAA,MAAAA,OAAO,GAAG,MAAM,qBAASH,cAAT,CAAhB;AACH,KAFD,CAEE,OAAOb,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,6BADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,wBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIZ,QAAAA;AAFJ,OAHE,CAAN;AAQH;;AACD,UAAMG,KAAK,GAAGyB,OAAO,CAACC,GAAR,CAAYC,IAAI,IAAI;AAC9B,aAAOlD,MAAM,CAACmD,WAAP,CAAmB;AACtB1B,QAAAA,EAAE,EAAEyB,IAAI,CAACzB,EADa;AAEtBC,QAAAA,EAAE,EAAEwB,IAAI,CAACxB;AAFa,OAAnB,CAAP;AAIH,KALa,CAAd;;AAOA,QAAI;AACA,YAAM,+BAAc;AAChBI,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGH,KARD,CAQE,OAAOmB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,6BADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIV,QAAAA,YAAY,EAAEuB,cAAc,CAACvB,YAFjC;AAGIF,QAAAA;AAHJ,OAHE,CAAN;AASH;AACJ,GAlDD;;AAoDA,QAAMgC,cAAc,GAAG,OACnBvC,KADmB,EAEnBd,MAFmB,KAGlB;AACD,UAAM;AAAEqB,MAAAA,KAAF;AAASkB,MAAAA,WAAT;AAAsBG,MAAAA;AAAtB,QAA6C1C,MAAnD;AACA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AAEA,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACmD,WAAP,CAAmB;AACf1B,MAAAA,EAAE,EAAEH,YADW;AAEfI,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB;AAFW,KAAnB,CADU,CAAd;AAOA,UAAMiC,qBAAqB,GAAG,MAAMC,6BAA6B,CAACzC,KAAD,EAAQO,KAAR,CAAjE;AAEA;AACR;AACA;;AACQ,QAAIiC,qBAAqB,IAAIjC,KAAK,CAACuB,EAAN,KAAaU,qBAAqB,CAACV,EAAhE,EAAoE;AAChEpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACmD,WAAP,CAAmB;AACf1B,QAAAA,EAAE,EAAEH,YADW;AAEfI,QAAAA,EAAE,EAAE;AAFW,OAAnB,CADJ;AAMH;;AACD,QAAIe,kBAAJ,EAAwB;AACpBlB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOiB,kBADP;AAEIhB,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBY,kBAAjB;AANb,SADJ;AAUH;;AACD,QAAI;AACA,YAAM,+BAAc;AAChBX,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGH,KARD,CAQE,OAAOmB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4BF,EAAE,CAACG,IAA/B,EAAqC;AACvCC,QAAAA,KAAK,EAAEJ,EADgC;AAEvCZ,QAAAA,KAFuC;AAGvCkB,QAAAA;AAHuC,OAArC,CAAN;AAKH;AACJ,GAtDD;;AAwDA,QAAMI,0BAA0B,GAAG,OAC/B7B,KAD+B,EAE/Bd,MAF+B,KAG9B;AACD,UAAMwD,MAAM,GAAG,MAAMrD,WAAW,CAACwC,0BAAZ,CAAuC;AACxD7B,MAAAA,KADwD;AAExD2C,MAAAA,GAAG,EAAE,CAACzD,MAAM,CAAC4C,EAAR;AAFmD,KAAvC,CAArB;AAIA,WAAOY,MAAM,CAACE,KAAP,MAAkB,IAAzB;AACH,GATD;;AAUA,QAAMH,6BAA6B,GAAG,OAClCzC,KADkC,EAElCd,MAFkC,KAGjC;AACD,UAAMwD,MAAM,GAAG,MAAMrD,WAAW,CAACoD,6BAAZ,CAA0C;AAC3DzC,MAAAA,KAD2D;AAE3D2C,MAAAA,GAAG,EAAE,CAACzD,MAAM,CAAC4C,EAAR;AAFsD,KAA1C,CAArB;AAIA,WAAOY,MAAM,CAACE,KAAP,MAAkB,IAAzB;AACH,GATD;;AAWA,QAAMC,eAAe,GAAG,OACpB7C,KADoB,EAEpBd,MAFoB,KAGnB;AACD,UAAMwD,MAAM,GAAG,MAAMrD,WAAW,CAACwD,eAAZ,CAA4B;AAC7C7C,MAAAA,KAD6C;AAE7C2C,MAAAA,GAAG,EAAE,CAACzD,MAAM,CAAC4C,EAAR;AAFwC,KAA5B,CAArB;AAIA,WAAOY,MAAM,CAACE,KAAP,MAAkB,IAAzB;AACH,GATD;;AAWA,QAAME,YAAY,GAAG,OACjB9C,KADiB,EAEjBd,MAFiB,KAGhB;AACD,WAAO,MAAMG,WAAW,CAAC0D,oBAAZ,CAAiC;AAC1C/C,MAAAA,KAD0C;AAE1C2C,MAAAA,GAAG,EAAE,CAACzD,MAAM,CAAC4C,EAAR;AAFqC,KAAjC,CAAb;AAIH,GARD;;AAUA,QAAMkB,QAAQ,GAAG,OAAOhD,KAAP,EAAwBd,MAAxB,KAA4E;AACzF,WAAOG,WAAW,CAACwD,eAAZ,CAA4B;AAC/B7C,MAAAA,KAD+B;AAE/B2C,MAAAA,GAAG,EAAEzD,MAAM,CAACyD;AAFmB,KAA5B,CAAP;AAIH,GALD;;AAOA,QAAMM,cAAc,GAAG,OACnBjD,KADmB,EAEnBd,MAFmB,KAGlB;AACD,WAAOG,WAAW,CAACwC,0BAAZ,CAAuC;AAC1C7B,MAAAA,KAD0C;AAE1C2C,MAAAA,GAAG,EAAEzD,MAAM,CAACyD;AAF8B,KAAvC,CAAP;AAIH,GARD;;AAUA,QAAMO,iBAAiB,GAAG,OACtBlD,KADsB,EAEtBd,MAFsB,KAGrB;AACD,WAAOG,WAAW,CAACoD,6BAAZ,CAA0C;AAC7CzC,MAAAA,KAD6C;AAE7C2C,MAAAA,GAAG,EAAEzD,MAAM,CAACyD;AAFiC,KAA1C,CAAP;AAIH,GARD;;AAUA,QAAMQ,mBAAmB,GAAG,OACxBnD,KADwB,EAExBd,MAFwB,KAGvB;AACD,UAAM;AAAEkE,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAqBrD,KAA3B;AACA,UAAM;AAAEsD,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAuBrE,MAA7B;AACA,UAAMsE,WAA2B,GAAG;AAChCrE,MAAAA,MADgC;AAEhCsB,MAAAA,YAAY,EAAE,8BAAmB;AAC7B2C,QAAAA,MAD6B;AAE7BC,QAAAA,MAF6B;AAG7BvB,QAAAA,EAAE,EAAEwB;AAHyB,OAAnB,CAFkB;AAOhCrB,MAAAA,OAAO,EAAE;AACLwB,QAAAA,EAAE,EAAG,OAAM,sBAAQF,OAAR,CAAiB,EADvB;;AAEL;AAChB;AACA;AACgBG,QAAAA,OAAO,EAAE,CACL;AACIC,UAAAA,IAAI,EAAE,MADV;AAEIC,UAAAA,EAAE,EAAE9E,UAAU;AAFlB,SADK,EAKL;AACI6E,UAAAA,IAAI,EAAE,SADV;AAEIF,UAAAA,EAAE,EAAEF;AAFR,SALK,CALJ;AAeLM,QAAAA,OAAO,EAAE;AAfJ;AAPuB,KAApC;;AA0BA,QAAI;AACA,YAAMnB,MAAM,GAAG,MAAM,qBAAmBc,WAAnB,CAArB;AAEA,aAAO,0BAAYrE,MAAZ,EAAoBuD,MAApB,CAAP;AACH,KAJD,CAIE,OAAOvB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,gDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,4BAFT,kCAIKpC,MAJL;AAKEqC,QAAAA,KAAK,EAAEJ,EALT;AAMEV,QAAAA,YAAY,EAAE+C,WAAW,CAAC/C,YAN5B;AAOEwB,QAAAA,OAAO,EAAEuB,WAAW,CAACvB,OAPvB;AAQEjC,QAAAA;AARF,SAAN;AAWH;AACJ,GAjDD;;AAmDA,QAAM8D,IAAI,GAAG,OAAO9D,KAAP,EAAwBd,MAAxB,KAAwE;AACjF,UAAM;AACF6E,MAAAA,KAAK,EAAEC,YAAY,GAAG,EADpB;AAEFC,MAAAA,KAAK,EAAEC,YAFL;AAGFC,MAAAA,KAHE;AAIFC,MAAAA,IAJE;AAKFC,MAAAA,MALE;AAMFC,MAAAA;AANE,QAOFpF,MAPJ;AAQA,UAAM6E,KAAK,GAAGC,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,KAArC,GAA6C,KAA7C,GAAqDA,YAAnE;AAEA,UAAMtE,IAAI,GAAGwE,YAAY,CAACK,SAAb,GAAyB,GAAzB,GAA+B,GAA5C;AAEA,UAAMvC,cAA8B,GAAG;AACnC7C,MAAAA,MADmC;AAEnCsB,MAAAA,YAAY,EAAE,iCAAsBT,KAAtB,EAA6BN,IAA7B,CAFqB;AAGnCuC,MAAAA,OAAO,EAAE;AACLuC,QAAAA,KAAK,EAAE,MADF;AAELtC,QAAAA,GAAG,EAAE;AAFA;AAH0B,KAAvC;AAQA,QAAIC,OAAO,GAAG,EAAd;;AACA,QAAI;AACAA,MAAAA,OAAO,GAAG,MAAM,qBAASH,cAAT,CAAhB;AACH,KAFD,CAEE,OAAOb,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4B,qBAA5B,EAAmD;AACrDE,QAAAA,KAAK,EAAEJ,EAD8C;AAErDV,QAAAA,YAAY,EAAEuB,cAAc,CAACvB,YAFwB;AAGrDwB,QAAAA,OAAO,EAAED,cAAc,CAACC;AAH6B,OAAnD,CAAN;AAKH;;AACD,QAAIE,OAAO,CAACsC,MAAR,KAAmB,CAAvB,EAA0B;AACtB,aAAO;AACHC,QAAAA,YAAY,EAAE,KADX;AAEHC,QAAAA,UAAU,EAAE,CAFT;AAGHC,QAAAA,MAAM,EAAE,IAHL;AAIHlE,QAAAA,KAAK,EAAE;AAJJ,OAAP;AAMH;;AACD,UAAMuD,KAAiC,qBAChCC,YADgC,CAAvC;;AAGA,WAAOD,KAAK,CAAC,WAAD,CAAZ;AACA,WAAOA,KAAK,CAAC,QAAD,CAAZ;AACA;AACR;AACA;AACA;;AACQ,UAAMY,WAAW,GAAG,6BAAiB;AACjCzF,MAAAA,OADiC;AAEjCY,MAAAA;AAFiC,KAAjB,CAApB;AAIA;AACR;AACA;AACA;;AACQ,UAAM8E,aAAa,GAAG,MAAM,wBAAY;AACpCpE,MAAAA,KAAK,EAAEyB,OAD6B;AAEpC8B,MAAAA,KAFoC;AAGpC7E,MAAAA,OAHoC;AAIpCiF,MAAAA,MAAM,EAAEQ,WAJ4B;AAKpC1E,MAAAA,WAAW,EAAEJ,8BAA8B,CAACC,KAAD,CALP;AAMpC+E,MAAAA,cAAc,EAAE;AACZC,QAAAA,IAAI,EAAEV,MADM;AAEZD,QAAAA,MAAM,EAAEA,MAAM,IAAI;AAFN;AANoB,KAAZ,CAA5B;AAYA,UAAMM,UAAU,GAAGG,aAAa,CAACL,MAAjC;AACA;AACR;AACA;AACA;;AACQ,UAAMQ,WAAW,GAAG,2BAAe;AAC/BvE,MAAAA,KAAK,EAAEoE,aADwB;AAE/BV,MAAAA,IAF+B;AAG/BC,MAAAA,MAAM,EAAEQ;AAHuB,KAAf,CAApB;AAMA,UAAMK,KAAK,GAAGC,QAAQ,CAAC,0BAAahB,KAAb,KAAuB,GAAxB,CAAR,IAAwC,CAAtD;AACA,UAAMO,YAAY,GAAGC,UAAU,GAAGO,KAAK,GAAGnB,KAA1C;AACA,UAAMqB,GAAG,GAAGrB,KAAK,GAAGY,UAAU,GAAGO,KAAb,GAAqBnB,KAA7B,GAAqCsB,SAArC,GAAiDH,KAAK,GAAGnB,KAArE;AACA,UAAMuB,WAAW,GAAGL,WAAW,CAACM,KAAZ,CAAkBL,KAAlB,EAAyBE,GAAzB,CAApB;AACA;AACR;AACA;AACA;;AACQ,UAAMR,MAAM,GAAGD,UAAU,GAAGO,KAAK,GAAGnB,KAArB,GAA6B,0BAAc,GAAEmB,KAAK,GAAGnB,KAAM,EAA9B,CAA7B,GAAgE,IAA/E;AACA,WAAO;AACHW,MAAAA,YADG;AAEHC,MAAAA,UAFG;AAGHC,MAAAA,MAHG;AAIHlE,MAAAA,KAAK,EAAE,2BAAavB,MAAb,EAAqBmG,WAArB;AAJJ,KAAP;AAMH,GA9FD;;AAgGA,QAAME,GAAG,GAAG,OAAOxF,KAAP,EAAwBd,MAAxB,KAAuE;AAC/E,UAAM;AAAEwB,MAAAA;AAAF,QAAY,MAAMoD,IAAI,CAAC9D,KAAD,kCACrBd,MADqB;AAExB6E,MAAAA,KAAK,EAAE;AAFiB,OAA5B;AAIA,WAAOrD,KAAK,CAACkC,KAAN,MAAiB,IAAxB;AACH,GAND;;AAQA,QAAM6C,cAAc,GAAG,OACnBzF,KADmB,EAEnBd,MAFmB,KAGlB;AACD,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BtB,MAAhC;AAEA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AAEA;AACR;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEIM,MAAAA,IAAI,EAAEhC,UAAU,EAFpB;AAGI8B,MAAAA,EAAE,EAAEH,YAHR;AAIII,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB,CAJR;AAKIQ,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,OADU,CAAd;AAWA;AACR;AACA;;AACQ,UAAMqB,kBAAkB,GAAG,MAAMC,0BAA0B,CAAC7B,KAAD,EAAQO,KAAR,CAA3D;;AAEA,QAAIqB,kBAAkB,IAAIA,kBAAkB,CAACE,EAAnB,KAA0BvB,KAAK,CAACuB,EAA1D,EAA8D;AAC1DpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,SADJ;AAUH;;AAED,QAAI;AACA,YAAM,+BAAc;AAChBU,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGH,KARD,CAQE,OAAOmB,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,8CADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;AACIf,QAAAA;AADJ,OAHE,CAAN;AAOH;;AACD,WAAOA,KAAP;AACH,GA5DD;;AA8DA,QAAMmF,aAAa,GAAG,OAClB1F,KADkB,EAElBd,MAFkB,KAGjB;AACD,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BtB,MAAhC;AAEA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AACA;AACR;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEIM,MAAAA,IAAI,EAAEhC,UAAU,EAFpB;AAGI8B,MAAAA,EAAE,EAAEH,YAHR;AAIII,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB,CAJR;AAKIQ,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,OADU,CAAd;AAWA;AACR;AACA;;AACQ,UAAMqB,kBAAkB,GAAG,MAAMC,0BAA0B,CAAC7B,KAAD,EAAQO,KAAR,CAA3D;;AAEA,QAAIqB,kBAAkB,IAAIA,kBAAkB,CAACE,EAAnB,KAA0BvB,KAAK,CAACuB,EAA1D,EAA8D;AAC1DpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,SADJ;AAUH;;AAED,QAAI;AACA,YAAM,+BAAc;AAChBU,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGA,aAAOO,KAAP;AACH,KATD,CASE,OAAOY,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,yCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,sBAFT,EAGF;AACIf,QAAAA,KADJ;AAEIC,QAAAA;AAFJ,OAHE,CAAN;AAQH;AACJ,GA5DD;;AA8DA,QAAMmF,OAAO,GAAG,OAAO3F,KAAP,EAAwBd,MAAxB,KAA2E;AACvF,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BtB,MAAhC;AAEA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AAEA;AACR;AACA;;AACQ,UAAMqB,kBAAkB,GAAG,MAAMC,0BAA0B,CAAC7B,KAAD,EAAQO,KAAR,CAA3D;AACA,UAAMiC,qBAAqB,GAAG,MAAMC,6BAA6B,CAACzC,KAAD,EAAQO,KAAR,CAAjE;AACA;AACR;AACA;AACA;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB,CAHR;AAIIO,MAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKIiC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,OADU,EASVpB,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,mCAHR;AAIIC,MAAAA,IAAI,EAAE9B,mBAAmB,EAJ7B;AAKI+B,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,OATU,CAAd;;AAkBA,QAAIqB,kBAAkB,IAAIrB,KAAK,CAACuB,EAAN,KAAaF,kBAAkB,CAACE,EAA1D,EAA8D;AAC1DpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,SADJ;AAUH;;AACD,QAAIiC,qBAAqB,IAAIA,qBAAqB,CAACV,EAAtB,KAA6BvB,KAAK,CAACuB,EAAhE,EAAoE;AAChEpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACO6B,qBADP;AAEI5B,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,iCAAsB2B,qBAAtB,CAHR;AAII1B,QAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKI8G,QAAAA,MAAM,EAAEC,4BAAqBC,WALjC;AAMI/E,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CANb;AAOIgB,QAAAA,OAAO,EAAE,4BAAiBwB,qBAAjB;AAPb,SADJ;AAWH;;AAED,QAAI;AACA,YAAM,+BAAc;AAChBvB,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGA,aAAOO,KAAP;AACH,KATD,CASE,OAAOY,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,yCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,eAFT,EAGF;AACIf,QAAAA,KADJ;AAEIqB,QAAAA,kBAFJ;AAGIY,QAAAA;AAHJ,OAHE,CAAN;AASH;AACJ,GAjFD;;AAmFA,QAAMuD,SAAS,GAAG,OAAO/F,KAAP,EAAwBd,MAAxB,KAA6E;AAC3F,UAAM;AAAEqB,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAA0BtB,MAAhC;AAEA,UAAMuB,YAAY,GAAG,8BAAmBF,KAAnB,CAArB;AACA;AACR;AACA;AACA;AACA;AACA;;AACQ,UAAMG,KAAK,GAAG,CACVvB,MAAM,CAACmD,WAAP,CAAmB;AACf1B,MAAAA,EAAE,EAAEH,YADW;AAEfI,MAAAA,EAAE,EAAE;AAFW,KAAnB,CADU,EAKV1B,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,MAAAA,EAAE,EAAEH,YAFR;AAGII,MAAAA,EAAE,EAAE,iCAAsBN,KAAtB,CAHR;AAIIO,MAAAA,IAAI,EAAEhC,UAAU,EAJpB;AAKIiC,MAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,MAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,OALU,CAAd;AAeA;AACR;AACA;;AACQ,UAAMqB,kBAAkB,GAAG,MAAMC,0BAA0B,CAAC7B,KAAD,EAAQO,KAAR,CAA3D;;AAEA,QAAIqB,kBAAkB,IAAIrB,KAAK,CAACuB,EAAN,KAAaF,kBAAkB,CAACE,EAA1D,EAA8D;AAC1DpB,MAAAA,KAAK,CAACiB,IAAN,CACIxC,MAAM,CAACwB,QAAP,iCACOH,YADP;AAEII,QAAAA,EAAE,EAAEH,YAFR;AAGII,QAAAA,EAAE,EAAE,gCAHR;AAIIC,QAAAA,IAAI,EAAE/B,gBAAgB,EAJ1B;AAKIgC,QAAAA,OAAO,EAAE,iCAAsBf,KAAtB,EAA6B,GAA7B,CALb;AAMIgB,QAAAA,OAAO,EAAE,4BAAiBT,KAAjB;AANb,SADJ;AAUH;;AAED,QAAI;AACA,YAAM,+BAAc;AAChBU,QAAAA,KAAK,EAAE9B,MAAM,CAAC8B,KADE;AAEhBP,QAAAA;AAFgB,OAAd,CAAN;AAIArB,MAAAA,WAAW,CAAC6B,QAAZ,CAAqB;AACjBlB,QAAAA;AADiB,OAArB;AAGA,aAAOQ,YAAP;AACH,KATD,CASE,OAAOW,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,oCADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,iBAFT,EAGF;AACIf,QAAAA,KADJ;AAEIC,QAAAA;AAFJ,OAHE,CAAN;AAQH;AACJ,GA9DD;;AAgEA,SAAO;AACHH,IAAAA,MADG;AAEHmB,IAAAA,kBAFG;AAGHE,IAAAA,MAHG;AAIHsE,IAAAA,MAAM,EAAEjE,WAJL;AAKHQ,IAAAA,cALG;AAMHY,IAAAA,mBANG;AAOHD,IAAAA,iBAPG;AAQHD,IAAAA,cARG;AASHD,IAAAA,QATG;AAUHH,IAAAA,eAVG;AAWHJ,IAAAA,6BAXG;AAYHZ,IAAAA,0BAZG;AAaH2D,IAAAA,GAbG;AAcH1C,IAAAA,YAdG;AAeH2C,IAAAA,cAfG;AAgBHC,IAAAA,aAhBG;AAiBHC,IAAAA,OAjBG;AAkBH7B,IAAAA,IAlBG;AAmBHiC,IAAAA;AAnBG,GAAP;AAqBH,CAzzBM","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperations,\n CmsEntryStorageOperationsCreateParams,\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryStorageOperationsDeleteParams,\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryStorageOperationsGetByIdsParams,\n CmsEntryStorageOperationsGetLatestByIdsParams,\n CmsEntryStorageOperationsGetLatestRevisionParams,\n CmsEntryStorageOperationsGetParams,\n CmsEntryStorageOperationsGetPreviousRevisionParams,\n CmsEntryStorageOperationsGetPublishedByIdsParams,\n CmsEntryStorageOperationsGetRevisionParams,\n CmsEntryStorageOperationsGetRevisionsParams,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsPublishParams,\n CmsEntryStorageOperationsRequestChangesParams,\n CmsEntryStorageOperationsRequestReviewParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsModel,\n CONTENT_ENTRY_STATUS\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { filterItems, buildModelFields, sortEntryItems, FilterItemFromStorage } from \"./utils\";\nimport {\n createGSIPartitionKey,\n createGSISortKey,\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport {\n queryAll,\n QueryAllParams,\n queryOne,\n QueryOneParams\n} from \"@webiny/db-dynamodb/utils/query\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils/cursor\";\nimport { zeroPad } from \"@webiny/utils/zeroPad\";\nimport { StorageTransformPlugin } from \"@webiny/api-headless-cms\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nconst createLatestType = (): string => {\n return `${createType()}.l`;\n};\nconst createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const storageTransformPlugins = plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n .reduce((collection, plugin) => {\n collection[plugin.fieldType] = plugin;\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n const createStorageTransformCallable = (model: CmsModel): FilterItemFromStorage => {\n return (field, value) => {\n const plugin: StorageTransformPlugin = storageTransformPlugins[field.type];\n if (!plugin) {\n return value;\n }\n return plugin.fromStorage({\n model,\n field,\n value,\n getStoragePlugin(fieldType: string): StorageTransformPlugin {\n return storageTransformPlugins[fieldType] || storageTransformPlugins[\"*\"];\n },\n plugins\n });\n };\n };\n\n const create = async (model: CmsModel, args: CmsEntryStorageOperationsCreateParams) => {\n const { entry, storageEntry } = args;\n\n const partitionKey = createPartitionKey(entry);\n /**\n * We need to:\n * - create new main entry item\n * - create new or update latest entry item\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n return storageEntry;\n };\n\n const createRevisionFrom = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry, storageEntry, latestEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n latestEntry,\n entry,\n storageEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n };\n\n const update = async (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams) => {\n const { entry, storageEntry } = params;\n const partitionKey = createPartitionKey(entry);\n\n const items = [];\n /**\n * We need to:\n * - update the current entry\n * - update the latest entry if the current entry is the latest one\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n\n /**\n * We need the latest entry to update it as well if neccessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry\n }\n );\n }\n };\n\n const deleteEntry = async (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => {\n const { entry } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(entry),\n options: {\n gte: \" \"\n }\n };\n\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all records.\",\n ex.code || \"LOAD_ALL_RECORDS_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n const items = records.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the entry.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n const partitionKey = createPartitionKey(entry);\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n /**\n * If revision we are deleting is the published one as well, we need to delete those records as well.\n */\n if (publishedStorageEntry && entry.id === publishedStorageEntry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (latestStorageEntry) {\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entry,\n latestEntry\n });\n }\n };\n\n const getLatestRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n const getPublishedRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisionById = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const result = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisions = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n return await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n };\n\n const getByIds = async (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => {\n return dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n };\n\n const getLatestByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n return dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPublishedByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n return dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPreviousRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { tenant, locale } = model;\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n return cleanupItem(entity, result);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get previous version of given entry.\",\n ex.code || \"GET_PREVIOUS_VERSION_ERROR\",\n {\n ...params,\n error: ex,\n partitionKey: queryParams.partitionKey,\n options: queryParams.options,\n model\n }\n );\n }\n };\n\n const list = async (model: CmsModel, params: CmsEntryStorageOperationsListParams) => {\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort,\n fields,\n search\n } = params;\n const limit = initialLimit <= 0 || initialLimit >= 10000 ? 10000 : initialLimit;\n\n const type = initialWhere.published ? \"P\" : \"L\";\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createGSIPartitionKey(model, type),\n options: {\n index: \"GSI1\",\n gte: \" \"\n }\n };\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(ex.message, \"QUERY_ENTRIES_ERROR\", {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n });\n }\n if (records.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n delete where[\"published\"];\n delete where[\"latest\"];\n /**\n * We need a object containing field, transformers and paths.\n * Just build it here and pass on into other methods that require it to avoid mapping multiple times.\n */\n const modelFields = buildModelFields({\n plugins,\n model\n });\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = await filterItems({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fromStorage: createStorageTransformCallable(model),\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedItems = sortEntryItems({\n items: filteredItems,\n sort,\n fields: modelFields\n });\n\n const start = parseInt(decodeCursor(after) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const slicedItems = sortedItems.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = totalCount > start + limit ? encodeCursor(`${start + limit}`) : null;\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: cleanupItems(entity, slicedItems)\n };\n };\n\n const get = async (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const requestChanges = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestChangesParams\n ) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\n\n /**\n * We need to:\n * - update the existing entry\n * - update latest version - if existing entry is the latest version\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request changes one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the request changes batch.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry\n }\n );\n }\n return entry;\n };\n\n const requestReview = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestReviewParams\n ) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\n /**\n * We need to:\n * - update existing entry\n * - update latest entry - if existing entry is the latest entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request review one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute request review batch.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n const publish = async (model: CmsModel, params: CmsEntryStorageOperationsPublishParams) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\n\n /**\n * We need the latest and published entries to see if something needs to be updated along side the publishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - latest sort key - if entry updated is actually latest\n * - previous published entry to unpublished status - if any previously published entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n items.push(\n entity.putBatch({\n ...publishedStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(publishedStorageEntry),\n TYPE: createType(),\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(publishedStorageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n };\n\n const unpublish = async (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey(entry);\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update latest entry status - if entry being unpublished is latest\n */\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the unpublishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n requestChanges,\n requestReview,\n publish,\n list,\n unpublish\n };\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["createType","createLatestType","createPublishedType","createEntriesStorageOperations","params","entity","plugins","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","type","reduce","collection","plugin","fieldType","createStorageTransformCallable","model","field","value","fromStorage","getStoragePlugin","create","args","entry","storageEntry","partitionKey","id","locale","tenant","isPublished","status","locked","items","putBatch","PK","SK","TYPE","GSI1_PK","GSI1_SK","push","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","update","latestStorageEntry","getLatestRevisionByEntryId","deleteEntry","queryAllParams","options","gte","records","map","item","deleteBatch","deleteRevision","latestEntry","publishedStorageEntry","getPublishedRevisionByEntryId","result","ids","shift","getRevisionById","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","filters","attr","eq","reverse","list","limit","initialLimit","where","initialWhere","after","sort","fields","search","published","index","length","hasMoreItems","totalCount","cursor","modelFields","filteredItems","fullTextSearch","term","sortedItems","start","parseInt","end","undefined","slicedItems","slice","get","requestChanges","requestReview","publish","CONTENT_ENTRY_STATUS","UNPUBLISHED","unpublish","delete"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperations,\n CmsEntryStorageOperationsCreateParams,\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryStorageOperationsDeleteParams,\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryStorageOperationsGetByIdsParams,\n CmsEntryStorageOperationsGetLatestByIdsParams,\n CmsEntryStorageOperationsGetLatestRevisionParams,\n CmsEntryStorageOperationsGetParams,\n CmsEntryStorageOperationsGetPreviousRevisionParams,\n CmsEntryStorageOperationsGetPublishedByIdsParams,\n CmsEntryStorageOperationsGetRevisionParams,\n CmsEntryStorageOperationsGetRevisionsParams,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsPublishParams,\n CmsEntryStorageOperationsRequestChangesParams,\n CmsEntryStorageOperationsRequestReviewParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsModel,\n CONTENT_ENTRY_STATUS\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { filterItems, buildModelFields, sortEntryItems, FilterItemFromStorage } from \"./utils\";\nimport {\n createGSIPartitionKey,\n createGSISortKey,\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport {\n queryAll,\n QueryAllParams,\n queryOne,\n QueryOneParams\n} from \"@webiny/db-dynamodb/utils/query\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils/cursor\";\nimport { zeroPad } from \"@webiny/utils/zeroPad\";\nimport { StorageTransformPlugin } from \"@webiny/api-headless-cms\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nconst createLatestType = (): string => {\n return `${createType()}.l`;\n};\nconst createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const storageTransformPlugins = plugins\n .byType<StorageTransformPlugin>(StorageTransformPlugin.type)\n .reduce((collection, plugin) => {\n collection[plugin.fieldType] = plugin;\n return collection;\n }, {} as Record<string, StorageTransformPlugin>);\n\n const createStorageTransformCallable = (model: CmsModel): FilterItemFromStorage => {\n return (field, value) => {\n const plugin: StorageTransformPlugin = storageTransformPlugins[field.type];\n if (!plugin) {\n return value;\n }\n return plugin.fromStorage({\n model,\n field,\n value,\n getStoragePlugin(fieldType: string): StorageTransformPlugin {\n return storageTransformPlugins[fieldType] || storageTransformPlugins[\"*\"];\n },\n plugins\n });\n };\n };\n\n const create = async (model: CmsModel, args: CmsEntryStorageOperationsCreateParams) => {\n const { entry, storageEntry } = args;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n\n const locked = isPublished ? true : entry.locked;\n /**\n * We need to:\n * - create new main entry item\n * - create new or update latest entry item\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n\n /**\n * We need to create published entry if\n */\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n return storageEntry;\n };\n\n const createRevisionFrom = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n ];\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n };\n\n const update = async (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams) => {\n const { entry, storageEntry } = params;\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const items = [];\n /**\n * We need to:\n * - update the current entry\n * - update the latest entry if the current entry is the latest one\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createRevisionSortKey(storageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n }\n\n /**\n * We need the latest entry to update it as well if neccessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry\n }\n );\n }\n };\n\n const deleteEntry = async (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => {\n const { entry } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not load all records.\",\n ex.code || \"LOAD_ALL_RECORDS_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n const items = records.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the entry.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n /**\n * If revision we are deleting is the published one as well, we need to delete those records as well.\n */\n if (publishedStorageEntry && entry.id === publishedStorageEntry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (latestStorageEntry) {\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entry,\n latestEntry\n });\n }\n };\n\n const getLatestRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n const getPublishedRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisionById = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const result = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisions = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n return await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n };\n\n const getByIds = async (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => {\n return dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n };\n\n const getLatestByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n return dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPublishedByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n return dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPreviousRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant: model.tenant,\n locale: model.locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n return cleanupItem(entity, result);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get previous version of given entry.\",\n ex.code || \"GET_PREVIOUS_VERSION_ERROR\",\n {\n ...params,\n error: ex,\n partitionKey: queryParams.partitionKey,\n options: queryParams.options,\n model\n }\n );\n }\n };\n\n const list = async (model: CmsModel, params: CmsEntryStorageOperationsListParams) => {\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort,\n fields,\n search\n } = params;\n const limit = initialLimit <= 0 || initialLimit >= 10000 ? 10000 : initialLimit;\n\n const type = initialWhere.published ? \"P\" : \"L\";\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createGSIPartitionKey(model, type),\n options: {\n index: \"GSI1\",\n gte: \" \"\n }\n };\n let records = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(ex.message, \"QUERY_ENTRIES_ERROR\", {\n error: ex,\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n });\n }\n if (records.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n const where: Partial<CmsEntryListWhere> = {\n ...initialWhere\n };\n delete where[\"published\"];\n delete where[\"latest\"];\n /**\n * We need a object containing field, transformers and paths.\n * Just build it here and pass on into other methods that require it to avoid mapping multiple times.\n */\n const modelFields = buildModelFields({\n plugins,\n model\n });\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = await filterItems({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fromStorage: createStorageTransformCallable(model),\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedItems = sortEntryItems({\n items: filteredItems,\n sort,\n fields: modelFields\n });\n\n const start = parseInt(decodeCursor(after) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const slicedItems = sortedItems.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = totalCount > start + limit ? encodeCursor(`${start + limit}`) : null;\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: cleanupItems(entity, slicedItems)\n };\n };\n\n const get = async (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const requestChanges = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestChangesParams\n ) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n /**\n * We need to:\n * - update the existing entry\n * - update latest version - if existing entry is the latest version\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request changes one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the request changes batch.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry\n }\n );\n }\n return entry;\n };\n\n const requestReview = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestReviewParams\n ) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n /**\n * We need to:\n * - update existing entry\n * - update latest entry - if existing entry is the latest entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request review one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute request review batch.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n const publish = async (model: CmsModel, params: CmsEntryStorageOperationsPublishParams) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n /**\n * We need the latest and published entries to see if something needs to be updated along side the publishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - latest sort key - if entry updated is actually latest\n * - previous published entry to unpublished status - if any previously published entry\n */\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n items.push(\n entity.putBatch({\n ...publishedStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(publishedStorageEntry),\n TYPE: createType(),\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(publishedStorageEntry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n };\n\n const unpublish = async (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams) => {\n const { entry, storageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update latest entry status - if entry being unpublished is latest\n */\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the unpublishing one.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry && entry.id === latestStorageEntry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(entry)\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n requestChanges,\n requestReview,\n publish,\n list,\n unpublish\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-ddb",
3
- "version": "5.26.0",
3
+ "version": "5.27.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-headless-cms",
@@ -22,11 +22,11 @@
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
24
  "@babel/runtime": "7.16.7",
25
- "@webiny/api-headless-cms": "5.26.0",
26
- "@webiny/db-dynamodb": "5.26.0",
27
- "@webiny/error": "5.26.0",
28
- "@webiny/handler-db": "5.26.0",
29
- "@webiny/utils": "5.26.0",
25
+ "@webiny/api-headless-cms": "5.27.0",
26
+ "@webiny/db-dynamodb": "5.27.0",
27
+ "@webiny/error": "5.27.0",
28
+ "@webiny/handler-db": "5.27.0",
29
+ "@webiny/utils": "5.27.0",
30
30
  "aws-sdk": "2.1066.0",
31
31
  "dataloader": "2.0.0",
32
32
  "dot-prop": "5.3.0",
@@ -40,9 +40,9 @@
40
40
  "@babel/preset-env": "^7.16.4",
41
41
  "@babel/preset-flow": "^7.16.0",
42
42
  "@types/jsonpack": "^1.1.0",
43
- "@webiny/cli": "^5.26.0",
44
- "@webiny/plugins": "^5.26.0",
45
- "@webiny/project-utils": "^5.26.0",
43
+ "@webiny/cli": "^5.27.0",
44
+ "@webiny/plugins": "^5.27.0",
45
+ "@webiny/project-utils": "^5.27.0",
46
46
  "jest": "^26.6.3",
47
47
  "jest-dynalite": "^3.2.0",
48
48
  "jest-environment-node": "^26.6.2",
@@ -57,5 +57,5 @@
57
57
  "build": "yarn webiny run build",
58
58
  "watch": "yarn webiny run watch"
59
59
  },
60
- "gitHead": "4d66d3dbd7e6da045d23be4f2e247d1269aa2004"
60
+ "gitHead": "0f2b0b65639d2e1a79cf9189c8fe5cea2c32d302"
61
61
  }