@webiny/api-headless-cms-ddb 5.40.5-beta.0 → 5.40.6-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  import { CmsEntryFieldFilterPlugin } from "../../../../plugins/CmsEntryFieldFilterPlugin";
2
- export declare const createDefaultFilterCreate: () => CmsEntryFieldFilterPlugin;
2
+ export declare const createDefaultFilterCreate: () => CmsEntryFieldFilterPlugin<any>;
@@ -1 +1 @@
1
- export declare const createFilterCreatePlugins: () => import("../../../..").CmsEntryFieldFilterPlugin[];
1
+ export declare const createFilterCreatePlugins: () => import("../../../..").CmsEntryFieldFilterPlugin<import("@webiny/api/types").GenericRecord<import("@webiny/api/types").GenericRecordKey, any> | null | undefined>[];
@@ -1,2 +1,2 @@
1
1
  import { CmsEntryFieldFilterPlugin } from "../../../../plugins/CmsEntryFieldFilterPlugin";
2
- export declare const objectFilterCreate: () => CmsEntryFieldFilterPlugin;
2
+ export declare const objectFilterCreate: () => CmsEntryFieldFilterPlugin<any>;
@@ -1,2 +1,3 @@
1
1
  import { CmsEntryFieldFilterPlugin } from "../../../../plugins/CmsEntryFieldFilterPlugin";
2
- export declare const createRefFilterCreate: () => CmsEntryFieldFilterPlugin;
2
+ import { GenericRecord } from "@webiny/api/types";
3
+ export declare const createRefFilterCreate: () => CmsEntryFieldFilterPlugin<GenericRecord<import("@webiny/api/types").GenericRecordKey, any> | null | undefined>;
@@ -14,11 +14,16 @@ const createRefFilterCreate = () => {
14
14
  fieldType: "ref",
15
15
  create: params => {
16
16
  const {
17
- value,
18
17
  valueFilterPlugins,
19
18
  transformValuePlugins,
20
19
  field
21
20
  } = params;
21
+ let value = params.value;
22
+ if (!value) {
23
+ value = {
24
+ entryId: null
25
+ };
26
+ }
22
27
  const propertyFilters = Object.keys(value);
23
28
  if (propertyFilters.length === 0) {
24
29
  return null;
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_CmsEntryFieldFilterPlugin","_where","_transform","createRefFilterCreate","plugin","CmsEntryFieldFilterPlugin","fieldType","create","params","value","valueFilterPlugins","transformValuePlugins","field","propertyFilters","Object","keys","length","filters","propertyFilter","whereParams","extractWhereParams","fieldId","propertyId","operation","propertyOperation","negate","transformValuePlugin","type","transformValueCallable","transform","filterPlugin","WebinyError","paths","createPath","push","path","join","fieldPathId","parents","map","f","compareValue","transformValue","name","exports"],"sources":["refFilterCreate.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsEntryFieldFilterPlugin,\n CmsEntryFieldFilterPluginCreateResponse\n} from \"~/plugins/CmsEntryFieldFilterPlugin\";\nimport { extractWhereParams } from \"~/operations/entry/filtering/where\";\nimport { transformValue } from \"~/operations/entry/filtering/transform\";\n\nexport const createRefFilterCreate = () => {\n const plugin = new CmsEntryFieldFilterPlugin({\n fieldType: \"ref\",\n create: params => {\n const { value, valueFilterPlugins, transformValuePlugins, field } = params;\n const propertyFilters = Object.keys(value);\n if (propertyFilters.length === 0) {\n return null;\n }\n\n const filters: CmsEntryFieldFilterPluginCreateResponse[] = [];\n\n for (const propertyFilter of propertyFilters) {\n const whereParams = extractWhereParams(propertyFilter);\n if (!whereParams) {\n continue;\n }\n const { fieldId: propertyId, operation: propertyOperation, negate } = whereParams;\n\n const transformValuePlugin = transformValuePlugins[field.type];\n\n const transformValueCallable = (value: any) => {\n if (!transformValuePlugin) {\n return value;\n }\n return transformValuePlugin.transform({\n field,\n value\n });\n };\n\n const filterPlugin = valueFilterPlugins[propertyOperation];\n if (!filterPlugin) {\n throw new WebinyError(\n `Missing operation filter for \"${propertyOperation}\".`,\n \"MISSING_OPERATION_FILTER\"\n );\n }\n\n const paths = [\n field.createPath({\n field\n }),\n propertyId\n ];\n\n filters.push({\n field,\n path: paths.join(\".\"),\n fieldPathId: [...field.parents.map(f => f.fieldId), field.fieldId].join(\".\"),\n plugin: filterPlugin,\n negate,\n compareValue: transformValue({\n value: value[propertyFilter],\n transform: transformValueCallable\n }),\n transformValue: transformValueCallable\n });\n }\n\n return filters;\n }\n });\n\n plugin.name = `headless-cms.ddb.filter.ref`;\n\n return plugin;\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAEO,MAAMI,qBAAqB,GAAGA,CAAA,KAAM;EACvC,MAAMC,MAAM,GAAG,IAAIC,oDAAyB,CAAC;IACzCC,SAAS,EAAE,KAAK;IAChBC,MAAM,EAAEC,MAAM,IAAI;MACd,MAAM;QAAEC,KAAK;QAAEC,kBAAkB;QAAEC,qBAAqB;QAAEC;MAAM,CAAC,GAAGJ,MAAM;MAC1E,MAAMK,eAAe,GAAGC,MAAM,CAACC,IAAI,CAACN,KAAK,CAAC;MAC1C,IAAII,eAAe,CAACG,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI;MACf;MAEA,MAAMC,OAAkD,GAAG,EAAE;MAE7D,KAAK,MAAMC,cAAc,IAAIL,eAAe,EAAE;QAC1C,MAAMM,WAAW,GAAG,IAAAC,yBAAkB,EAACF,cAAc,CAAC;QACtD,IAAI,CAACC,WAAW,EAAE;UACd;QACJ;QACA,MAAM;UAAEE,OAAO,EAAEC,UAAU;UAAEC,SAAS,EAAEC,iBAAiB;UAAEC;QAAO,CAAC,GAAGN,WAAW;QAEjF,MAAMO,oBAAoB,GAAGf,qBAAqB,CAACC,KAAK,CAACe,IAAI,CAAC;QAE9D,MAAMC,sBAAsB,GAAInB,KAAU,IAAK;UAC3C,IAAI,CAACiB,oBAAoB,EAAE;YACvB,OAAOjB,KAAK;UAChB;UACA,OAAOiB,oBAAoB,CAACG,SAAS,CAAC;YAClCjB,KAAK;YACLH;UACJ,CAAC,CAAC;QACN,CAAC;QAED,MAAMqB,YAAY,GAAGpB,kBAAkB,CAACc,iBAAiB,CAAC;QAC1D,IAAI,CAACM,YAAY,EAAE;UACf,MAAM,IAAIC,cAAW,CAChB,iCAAgCP,iBAAkB,IAAG,EACtD,0BACJ,CAAC;QACL;QAEA,MAAMQ,KAAK,GAAG,CACVpB,KAAK,CAACqB,UAAU,CAAC;UACbrB;QACJ,CAAC,CAAC,EACFU,UAAU,CACb;QAEDL,OAAO,CAACiB,IAAI,CAAC;UACTtB,KAAK;UACLuB,IAAI,EAAEH,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;UACrBC,WAAW,EAAE,CAAC,GAAGzB,KAAK,CAAC0B,OAAO,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACnB,OAAO,CAAC,EAAET,KAAK,CAACS,OAAO,CAAC,CAACe,IAAI,CAAC,GAAG,CAAC;UAC5EhC,MAAM,EAAE0B,YAAY;UACpBL,MAAM;UACNgB,YAAY,EAAE,IAAAC,yBAAc,EAAC;YACzBjC,KAAK,EAAEA,KAAK,CAACS,cAAc,CAAC;YAC5BW,SAAS,EAAED;UACf,CAAC,CAAC;UACFc,cAAc,EAAEd;QACpB,CAAC,CAAC;MACN;MAEA,OAAOX,OAAO;IAClB;EACJ,CAAC,CAAC;EAEFb,MAAM,CAACuC,IAAI,GAAI,6BAA4B;EAE3C,OAAOvC,MAAM;AACjB,CAAC;AAACwC,OAAA,CAAAzC,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_CmsEntryFieldFilterPlugin","_where","_transform","createRefFilterCreate","plugin","CmsEntryFieldFilterPlugin","fieldType","create","params","valueFilterPlugins","transformValuePlugins","field","value","entryId","propertyFilters","Object","keys","length","filters","propertyFilter","whereParams","extractWhereParams","fieldId","propertyId","operation","propertyOperation","negate","transformValuePlugin","type","transformValueCallable","transform","filterPlugin","WebinyError","paths","createPath","push","path","join","fieldPathId","parents","map","f","compareValue","transformValue","name","exports"],"sources":["refFilterCreate.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsEntryFieldFilterPlugin,\n CmsEntryFieldFilterPluginCreateResponse\n} from \"~/plugins/CmsEntryFieldFilterPlugin\";\nimport { extractWhereParams } from \"~/operations/entry/filtering/where\";\nimport { transformValue } from \"~/operations/entry/filtering/transform\";\nimport { GenericRecord } from \"@webiny/api/types\";\n\nexport const createRefFilterCreate = () => {\n const plugin = new CmsEntryFieldFilterPlugin<GenericRecord | null | undefined>({\n fieldType: \"ref\",\n create: params => {\n const { valueFilterPlugins, transformValuePlugins, field } = params;\n let value = params.value;\n if (!value) {\n value = {\n entryId: null\n };\n }\n const propertyFilters = Object.keys(value);\n if (propertyFilters.length === 0) {\n return null;\n }\n const filters: CmsEntryFieldFilterPluginCreateResponse[] = [];\n\n for (const propertyFilter of propertyFilters) {\n const whereParams = extractWhereParams(propertyFilter);\n if (!whereParams) {\n continue;\n }\n const { fieldId: propertyId, operation: propertyOperation, negate } = whereParams;\n\n const transformValuePlugin = transformValuePlugins[field.type];\n\n const transformValueCallable = (value: any) => {\n if (!transformValuePlugin) {\n return value;\n }\n return transformValuePlugin.transform({\n field,\n value\n });\n };\n\n const filterPlugin = valueFilterPlugins[propertyOperation];\n if (!filterPlugin) {\n throw new WebinyError(\n `Missing operation filter for \"${propertyOperation}\".`,\n \"MISSING_OPERATION_FILTER\"\n );\n }\n\n const paths = [\n field.createPath({\n field\n }),\n propertyId\n ];\n\n filters.push({\n field,\n path: paths.join(\".\"),\n fieldPathId: [...field.parents.map(f => f.fieldId), field.fieldId].join(\".\"),\n plugin: filterPlugin,\n negate,\n compareValue: transformValue({\n value: value[propertyFilter],\n transform: transformValueCallable\n }),\n transformValue: transformValueCallable\n });\n }\n\n return filters;\n }\n });\n\n plugin.name = `headless-cms.ddb.filter.ref`;\n\n return plugin;\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAGO,MAAMI,qBAAqB,GAAGA,CAAA,KAAM;EACvC,MAAMC,MAAM,GAAG,IAAIC,oDAAyB,CAAmC;IAC3EC,SAAS,EAAE,KAAK;IAChBC,MAAM,EAAEC,MAAM,IAAI;MACd,MAAM;QAAEC,kBAAkB;QAAEC,qBAAqB;QAAEC;MAAM,CAAC,GAAGH,MAAM;MACnE,IAAII,KAAK,GAAGJ,MAAM,CAACI,KAAK;MACxB,IAAI,CAACA,KAAK,EAAE;QACRA,KAAK,GAAG;UACJC,OAAO,EAAE;QACb,CAAC;MACL;MACA,MAAMC,eAAe,GAAGC,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC;MAC1C,IAAIE,eAAe,CAACG,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI;MACf;MACA,MAAMC,OAAkD,GAAG,EAAE;MAE7D,KAAK,MAAMC,cAAc,IAAIL,eAAe,EAAE;QAC1C,MAAMM,WAAW,GAAG,IAAAC,yBAAkB,EAACF,cAAc,CAAC;QACtD,IAAI,CAACC,WAAW,EAAE;UACd;QACJ;QACA,MAAM;UAAEE,OAAO,EAAEC,UAAU;UAAEC,SAAS,EAAEC,iBAAiB;UAAEC;QAAO,CAAC,GAAGN,WAAW;QAEjF,MAAMO,oBAAoB,GAAGjB,qBAAqB,CAACC,KAAK,CAACiB,IAAI,CAAC;QAE9D,MAAMC,sBAAsB,GAAIjB,KAAU,IAAK;UAC3C,IAAI,CAACe,oBAAoB,EAAE;YACvB,OAAOf,KAAK;UAChB;UACA,OAAOe,oBAAoB,CAACG,SAAS,CAAC;YAClCnB,KAAK;YACLC;UACJ,CAAC,CAAC;QACN,CAAC;QAED,MAAMmB,YAAY,GAAGtB,kBAAkB,CAACgB,iBAAiB,CAAC;QAC1D,IAAI,CAACM,YAAY,EAAE;UACf,MAAM,IAAIC,cAAW,CAChB,iCAAgCP,iBAAkB,IAAG,EACtD,0BACJ,CAAC;QACL;QAEA,MAAMQ,KAAK,GAAG,CACVtB,KAAK,CAACuB,UAAU,CAAC;UACbvB;QACJ,CAAC,CAAC,EACFY,UAAU,CACb;QAEDL,OAAO,CAACiB,IAAI,CAAC;UACTxB,KAAK;UACLyB,IAAI,EAAEH,KAAK,CAACI,IAAI,CAAC,GAAG,CAAC;UACrBC,WAAW,EAAE,CAAC,GAAG3B,KAAK,CAAC4B,OAAO,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACnB,OAAO,CAAC,EAAEX,KAAK,CAACW,OAAO,CAAC,CAACe,IAAI,CAAC,GAAG,CAAC;UAC5EjC,MAAM,EAAE2B,YAAY;UACpBL,MAAM;UACNgB,YAAY,EAAE,IAAAC,yBAAc,EAAC;YACzB/B,KAAK,EAAEA,KAAK,CAACO,cAAc,CAAC;YAC5BW,SAAS,EAAED;UACf,CAAC,CAAC;UACFc,cAAc,EAAEd;QACpB,CAAC,CAAC;MACN;MAEA,OAAOX,OAAO;IAClB;EACJ,CAAC,CAAC;EAEFd,MAAM,CAACwC,IAAI,GAAI,6BAA4B;EAE3C,OAAOxC,MAAM;AACjB,CAAC;AAACyC,OAAA,CAAA1C,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -186,8 +186,10 @@ const createEntriesStorageOperations = params => {
186
186
  /**
187
187
  * We need to:
188
188
  * - create the main entry item
189
- * - update the last entry item to a current one
190
- * - update the published entry item to a current one (if the entry is published)
189
+ * - update the latest entry item to the current one
190
+ * - if the entry's status was set to "published":
191
+ * - update the published entry item to the current one
192
+ * - unpublish previously published revision (if any)
191
193
  */
192
194
  const items = [entity.putBatch({
193
195
  ...storageEntry,
@@ -214,6 +216,23 @@ const createEntriesStorageOperations = params => {
214
216
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "P"),
215
217
  GSI1_SK: (0, _keys.createGSISortKey)(storageEntry)
216
218
  }));
219
+
220
+ // Unpublish previously published revision (if any).
221
+ const [publishedRevisionStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({
222
+ model,
223
+ ids: [entry.id]
224
+ });
225
+ if (publishedRevisionStorageEntry) {
226
+ items.push(entity.putBatch({
227
+ ...publishedRevisionStorageEntry,
228
+ PK: partitionKey,
229
+ SK: (0, _keys.createRevisionSortKey)(publishedRevisionStorageEntry),
230
+ TYPE: createType(),
231
+ status: _types.CONTENT_ENTRY_STATUS.UNPUBLISHED,
232
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
233
+ GSI1_SK: (0, _keys.createGSISortKey)(publishedRevisionStorageEntry)
234
+ }));
235
+ }
217
236
  }
218
237
  try {
219
238
  await (0, _batchWrite.batchWriteAll)({
@@ -624,7 +643,7 @@ const createEntriesStorageOperations = params => {
624
643
  // Do an update on the latest revision. We need to update the latest revision's
625
644
  // entry-level meta fields to match the previous revision's entry-level meta fields.
626
645
  items.push(entity.putBatch({
627
- ...initialLatestStorageEntry,
646
+ ...latestStorageEntry,
628
647
  PK: partitionKey,
629
648
  SK: (0, _keys.createRevisionSortKey)(initialLatestStorageEntry),
630
649
  TYPE: createType(),
@@ -955,7 +974,7 @@ const createEntriesStorageOperations = params => {
955
974
  * Although we do not need a cursor here, we will use it as such to keep it standardized.
956
975
  * Number is simply encoded.
957
976
  */
958
- const cursor = totalCount > start + limit ? (0, _cursor.encodeCursor)(`${start + limit}`) : null;
977
+ const cursor = (0, _cursor.encodeCursor)(`${start + limit}`);
959
978
  return {
960
979
  hasMoreItems,
961
980
  totalCount,
@@ -989,18 +1008,18 @@ const createEntriesStorageOperations = params => {
989
1008
  * We need the latest and published entries to see if something needs to be updated alongside the publishing one.
990
1009
  */
991
1010
  const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);
1011
+ if (!initialLatestStorageEntry) {
1012
+ throw new _error.default(`Could not publish entry. Could not load latest ("L") record.`, "PUBLISH_ERROR", {
1013
+ entry
1014
+ });
1015
+ }
992
1016
  const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);
993
1017
  const storageEntry = convertToStorageEntry({
994
1018
  model,
995
1019
  storageEntry: initialStorageEntry
996
1020
  });
997
- /**
998
- * We need to update:
999
- * - current entry revision sort key
1000
- * - published sort key
1001
- * - the latest sort key - if entry updated is actually latest
1002
- * - previous published entry to unpublished status - if any previously published entry
1003
- */
1021
+
1022
+ // 1. Update REV# and P records with new data.
1004
1023
  const items = [entity.putBatch({
1005
1024
  ...storageEntry,
1006
1025
  PK: partitionKey,
@@ -1016,65 +1035,96 @@ const createEntriesStorageOperations = params => {
1016
1035
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "P"),
1017
1036
  GSI1_SK: (0, _keys.createGSISortKey)(entry)
1018
1037
  })];
1019
- if (initialLatestStorageEntry) {
1020
- const publishingLatestRevision = entry.id === initialLatestStorageEntry.id;
1021
- if (publishingLatestRevision) {
1022
- // We want to update current latest record because of the status (`status: 'published'`) update.
1023
- items.push(entity.putBatch({
1024
- ...storageEntry,
1025
- PK: partitionKey,
1026
- SK: (0, _keys.createLatestSortKey)(),
1027
- TYPE: createLatestType(),
1028
- GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "L"),
1029
- GSI1_SK: (0, _keys.createGSISortKey)(entry)
1030
- }));
1031
- } else {
1032
- const latestStorageEntry = convertToStorageEntry({
1033
- storageEntry: initialLatestStorageEntry,
1034
- model
1035
- });
1036
1038
 
1037
- // If the published revision is not the latest one, we still need to
1038
- // update the latest record with the new values of entry-level meta fields.
1039
- const updatedEntryLevelMetaFields = (0, _constants.pickEntryMetaFields)(entry, _constants.isEntryLevelEntryMetaField);
1039
+ // 2. When it comes to the latest record, we need to perform a couple of different
1040
+ // updates, based on whether the entry being published is the latest revision or not.
1041
+ const publishedRevisionId = initialPublishedStorageEntry?.id;
1042
+ const publishingLatestRevision = entry.id === initialLatestStorageEntry.id;
1043
+ if (publishingLatestRevision) {
1044
+ // 2.1 If we're publishing the latest revision, we first need to update the L record.
1045
+ items.push(entity.putBatch({
1046
+ ...storageEntry,
1047
+ PK: partitionKey,
1048
+ SK: (0, _keys.createLatestSortKey)(),
1049
+ TYPE: createLatestType(),
1050
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "L"),
1051
+ GSI1_SK: (0, _keys.createGSISortKey)(entry)
1052
+ }));
1040
1053
 
1041
- // 1. Update actual revision record.
1054
+ // 2.2 Additionally, if we have a previously published entry, we need to mark it as unpublished.
1055
+ if (publishedRevisionId && publishedRevisionId !== entry.id) {
1056
+ const publishedStorageEntry = convertToStorageEntry({
1057
+ storageEntry: initialPublishedStorageEntry,
1058
+ model
1059
+ });
1042
1060
  items.push(entity.putBatch({
1043
- ...latestStorageEntry,
1044
- ...updatedEntryLevelMetaFields,
1061
+ ...publishedStorageEntry,
1045
1062
  PK: partitionKey,
1046
- SK: (0, _keys.createRevisionSortKey)(latestStorageEntry),
1063
+ SK: (0, _keys.createRevisionSortKey)(publishedStorageEntry),
1047
1064
  TYPE: createType(),
1065
+ status: _types.CONTENT_ENTRY_STATUS.UNPUBLISHED,
1048
1066
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
1049
- GSI1_SK: (0, _keys.createGSISortKey)(latestStorageEntry)
1050
- }));
1051
-
1052
- // 2. Update latest record.
1053
- items.push(entity.putBatch({
1054
- ...latestStorageEntry,
1055
- ...updatedEntryLevelMetaFields,
1056
- PK: partitionKey,
1057
- SK: (0, _keys.createLatestSortKey)(),
1058
- TYPE: createLatestType(),
1059
- GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "L"),
1060
- GSI1_SK: (0, _keys.createGSISortKey)(latestStorageEntry)
1067
+ GSI1_SK: (0, _keys.createGSISortKey)(publishedStorageEntry)
1061
1068
  }));
1062
1069
  }
1063
- }
1064
- if (initialPublishedStorageEntry && initialPublishedStorageEntry.id !== entry.id) {
1065
- const publishedStorageEntry = convertToStorageEntry({
1066
- storageEntry: initialPublishedStorageEntry,
1070
+ } else {
1071
+ // 2.3 If the published revision is not the latest one, the situation is a bit
1072
+ // more complex. We first need to update the L and REV# records with the new
1073
+ // values of *only entry-level* meta fields.
1074
+ const updatedEntryLevelMetaFields = (0, _constants.pickEntryMetaFields)(entry, _constants.isEntryLevelEntryMetaField);
1075
+ const latestStorageEntry = convertToStorageEntry({
1076
+ storageEntry: initialLatestStorageEntry,
1067
1077
  model
1068
1078
  });
1079
+
1080
+ // 2.3.1 Update L record. Apart from updating the entry-level meta fields, we also need
1081
+ // to change the status from "published" to "unpublished" (if the status is set to "published").
1082
+ let latestRevisionStatus = latestStorageEntry.status;
1083
+ if (latestRevisionStatus === _types.CONTENT_ENTRY_STATUS.PUBLISHED) {
1084
+ latestRevisionStatus = _types.CONTENT_ENTRY_STATUS.UNPUBLISHED;
1085
+ }
1086
+ const latestStorageEntryFields = {
1087
+ ...latestStorageEntry,
1088
+ ...updatedEntryLevelMetaFields,
1089
+ status: latestRevisionStatus
1090
+ };
1091
+ items.push(entity.putBatch({
1092
+ ...latestStorageEntryFields,
1093
+ PK: partitionKey,
1094
+ SK: (0, _keys.createLatestSortKey)(),
1095
+ TYPE: createLatestType(),
1096
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "L"),
1097
+ GSI1_SK: (0, _keys.createGSISortKey)(latestStorageEntry)
1098
+ }));
1099
+
1100
+ // 2.3.2 Update REV# record.
1069
1101
  items.push(entity.putBatch({
1070
- ...publishedStorageEntry,
1102
+ ...latestStorageEntryFields,
1071
1103
  PK: partitionKey,
1072
- SK: (0, _keys.createRevisionSortKey)(publishedStorageEntry),
1104
+ SK: (0, _keys.createRevisionSortKey)(latestStorageEntry),
1073
1105
  TYPE: createType(),
1074
- status: _types.CONTENT_ENTRY_STATUS.UNPUBLISHED,
1075
1106
  GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
1076
- GSI1_SK: (0, _keys.createGSISortKey)(publishedStorageEntry)
1107
+ GSI1_SK: (0, _keys.createGSISortKey)(latestStorageEntry)
1077
1108
  }));
1109
+
1110
+ // 2.3.3 Finally, if we got a published entry, but it wasn't the latest one, we need to take
1111
+ // an extra step and mark it as unpublished.
1112
+ const publishedRevisionDifferentFromLatest = publishedRevisionId && publishedRevisionId !== latestStorageEntry.id;
1113
+ if (publishedRevisionDifferentFromLatest) {
1114
+ const publishedStorageEntry = convertToStorageEntry({
1115
+ storageEntry: initialPublishedStorageEntry,
1116
+ model
1117
+ });
1118
+ items.push(entity.putBatch({
1119
+ ...publishedStorageEntry,
1120
+ PK: partitionKey,
1121
+ SK: (0, _keys.createRevisionSortKey)(publishedStorageEntry),
1122
+ TYPE: createType(),
1123
+ status: _types.CONTENT_ENTRY_STATUS.UNPUBLISHED,
1124
+ GSI1_PK: (0, _keys.createGSIPartitionKey)(model, "A"),
1125
+ GSI1_SK: (0, _keys.createGSISortKey)(publishedStorageEntry)
1126
+ }));
1127
+ }
1078
1128
  }
1079
1129
  try {
1080
1130
  await (0, _batchWrite.batchWriteAll)({
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_dataLoaders","_types","_keys","_batchWrite","_query","_cleanup","_cursor","_zeroPad","_apiHeadlessCms","_createFields","_filtering","_constants","createType","createLatestType","createPublishedType","convertToStorageEntry","params","model","storageEntry","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","MAX_LIST_LIMIT","createEntriesStorageOperations","entity","plugins","storageOperationsCmsModelPlugin","getStorageOperationsCmsModelPlugin","oneByType","StorageOperationsCmsModelPlugin","type","getStorageOperationsModel","plugin","getModel","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","reduce","collection","fieldType","createStorageTransformCallable","field","value","fromStorage","getStoragePlugin","create","initialModel","entry","initialStorageEntry","partitionKey","createPartitionKey","id","locale","tenant","isPublished","status","locked","items","putBatch","PK","SK","createRevisionSortKey","TYPE","GSI1_PK","createGSIPartitionKey","GSI1_SK","createGSISortKey","createLatestSortKey","push","createPublishedSortKey","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","update","latestStorageEntry","getLatestRevisionByEntryId","updatingLatestRevision","updatedEntryLevelMetaFields","pickEntryMetaFields","isEntryLevelEntryMetaField","move","folderId","queryAllParams","options","gte","records","queryAll","map","item","location","from","data","moveToBin","updatedDeletedMetaFields","isDeletedEntryMetaField","record","wbyDeleted","binOriginalFolderId","deleteEntry","entryId","deleteBatch","restoreFromBin","updatedRestoredMetaFields","isRestoredEntryMetaField","deleteRevision","latestEntry","initialLatestStorageEntry","publishedStorageEntry","getPublishedRevisionByEntryId","deleteMultipleEntries","entries","revisions","getAllEntryRevisions","ids","revision","version","shift","getRevisionById","getRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","queryParams","lt","zeroPad","filters","attr","eq","reverse","result","queryOne","cleanupItem","list","limit","initialLimit","where","initialWhere","after","sort","sortBy","search","published","index","storageEntries","length","hasMoreItems","totalCount","cursor","modelFields","createFields","Promise","all","fieldId","filteredItems","filter","fullTextSearch","term","sortedItems","start","parseInt","decodeCursor","end","undefined","slicedItems","slice","encodeCursor","cleanupItems","get","publish","initialPublishedStorageEntry","publishingLatestRevision","CONTENT_ENTRY_STATUS","UNPUBLISHED","unpublish","unpublishingLatestRevision","getUniqueFieldValues","find","f","fieldValue","Array","isArray","count","Object","a","b","delete","exports"],"sources":["index.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryUniqueValue,\n CmsModel,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"@webiny/db-dynamodb/toolbox\";\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 DbItem,\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 { StorageOperationsCmsModelPlugin, StorageTransformPlugin } from \"@webiny/api-headless-cms\";\nimport { FilterItemFromStorage } from \"./filtering/types\";\nimport { createFields } from \"~/operations/entry/filtering/createFields\";\nimport { filter, sort } from \"~/operations/entry/filtering\";\nimport { WriteRequest } from \"@webiny/aws-sdk/client-dynamodb\";\nimport { CmsEntryStorageOperations } from \"~/types\";\nimport {\n isDeletedEntryMetaField,\n isEntryLevelEntryMetaField,\n isRestoredEntryMetaField,\n pickEntryMetaFields\n} from \"@webiny/api-headless-cms/constants\";\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\ninterface ConvertStorageEntryParams {\n storageEntry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\n\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst MAX_LIST_LIMIT = 10000;\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\n\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n let storageOperationsCmsModelPlugin: StorageOperationsCmsModelPlugin | undefined;\n const getStorageOperationsCmsModelPlugin = () => {\n if (storageOperationsCmsModelPlugin) {\n return storageOperationsCmsModelPlugin;\n }\n storageOperationsCmsModelPlugin = plugins.oneByType<StorageOperationsCmsModelPlugin>(\n StorageOperationsCmsModelPlugin.type\n );\n return storageOperationsCmsModelPlugin;\n };\n\n const getStorageOperationsModel = (model: CmsModel): StorageOperationsCmsModel => {\n const plugin = getStorageOperationsCmsModelPlugin();\n return plugin.getModel(model);\n };\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 = (\n model: StorageOperationsCmsModel\n ): 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: CmsEntryStorageOperations[\"create\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - create new main entry item\n * - create new or update the 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 initialStorageEntry;\n };\n\n const createRevisionFrom: CmsEntryStorageOperations[\"createRevisionFrom\"] = async (\n initialModel,\n params\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n * - update the published entry item to a current one (if the entry is published)\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\n const isPublished = entry.status === \"published\";\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\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 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 initialStorageEntry;\n };\n\n const update: CmsEntryStorageOperations[\"update\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 const locked = isPublished ? true : entry.locked;\n\n const items = [];\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\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 necessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry) {\n const updatingLatestRevision = latestStorageEntry.id === entry.id;\n if (updatingLatestRevision) {\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 } else {\n /**\n * If not updating latest revision, we still want to update the latest revision's\n * entry-level meta fields to match the current revision's entry-level meta fields.\n */\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n /**\n * First we update the regular DynamoDB table. Two updates are needed:\n * - one for the actual revision record\n * - one for the latest record\n */\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\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 move: CmsEntryStorageOperations[\"move\"] = async (initialModel, id, folderId) => {\n /**\n * We need to:\n * - load all the revisions of the entry, including published and latest\n * - update all the revisions (published and latest ) of the entry with new folderId\n */\n const model = getStorageOperationsModel(initialModel);\n /**\n * First we need to load all the revisions and published / latest entry.\n */\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n const records = await queryAll<CmsEntry>(queryAllParams);\n /**\n * Then create the batch writes for the DynamoDB, with the updated folderId.\n */\n const items = records.map(item => {\n return entity.putBatch({\n ...item,\n location: {\n ...item.location,\n folderId\n }\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw WebinyError.from(ex, {\n message: \"Could not move records to a new folder.\",\n data: {\n id,\n folderId\n }\n });\n }\n };\n\n const moveToBin: CmsEntryStorageOperations[\"moveToBin\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n /**\n * First we need to load all the revisions and published / latest entries.\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: DbItem<CmsEntry>[] = [];\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 id: entry.id\n }\n );\n }\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n\n /**\n * Let's pick the `deleted` meta fields from the storage entry.\n */\n const updatedDeletedMetaFields = pickEntryMetaFields(storageEntry, isDeletedEntryMetaField);\n\n /**\n * Then create the batch writes for the DynamoDB, with the updated data.\n */\n const items = records.map(record => {\n return entity.putBatch({\n ...record,\n ...updatedDeletedMetaFields,\n wbyDeleted: storageEntry.wbyDeleted,\n location: storageEntry.location,\n binOriginalFolderId: storageEntry.binOriginalFolderId\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not move the entry to the bin.\",\n ex.code || \"MOVE_ENTRY_TO_BIN_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n };\n\n const deleteEntry: CmsEntryStorageOperations[\"delete\"] = async (initialModel, params) => {\n const { entry } = params;\n const id = entry.id || entry.entryId;\n const model = getStorageOperationsModel(initialModel);\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n\n let records: DbItem<CmsEntry>[] = [];\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 id\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 id\n }\n );\n }\n };\n\n const restoreFromBin: CmsEntryStorageOperations[\"restoreFromBin\"] = async (\n initialModel,\n params\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n /**\n * First we need to load all the revisions and published / latest entries.\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: DbItem<CmsEntry>[] = [];\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 id: entry.id\n }\n );\n }\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n\n /**\n * Let's pick the `restored` meta fields from the storage entry.\n */\n const updatedRestoredMetaFields = pickEntryMetaFields(\n storageEntry,\n isRestoredEntryMetaField\n );\n\n const items = records.map(record => {\n return entity.putBatch({\n ...record,\n ...updatedRestoredMetaFields,\n wbyDeleted: storageEntry.wbyDeleted,\n location: storageEntry.location,\n binOriginalFolderId: storageEntry.binOriginalFolderId\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not restore the entry from the bin.\",\n ex.code || \"RESTORE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n };\n\n const deleteRevision: CmsEntryStorageOperations[\"deleteRevision\"] = async (\n initialModel,\n params\n ) => {\n const { entry, latestEntry, latestStorageEntry: initialLatestStorageEntry } = params;\n\n const model = getStorageOperationsModel(initialModel);\n\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\n if (initialLatestStorageEntry) {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\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 // Do an update on the latest revision. We need to update the latest revision's\n // entry-level meta fields to match the previous revision's entry-level meta fields.\n items.push(\n entity.putBatch({\n ...initialLatestStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(initialLatestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(initialLatestStorageEntry)\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 deleteMultipleEntries: CmsEntryStorageOperations[\"deleteMultipleEntries\"] = async (\n initialModel,\n params\n ) => {\n const { entries } = params;\n const model = getStorageOperationsModel(initialModel);\n /**\n * First we need all the revisions of the entries we want to delete.\n */\n const revisions = await dataLoaders.getAllEntryRevisions({\n model,\n ids: entries\n });\n /**\n * Then we need to construct the queries for all the revisions and entries.\n */\n const items: Record<string, WriteRequest>[] = [];\n for (const id of entries) {\n /**\n * Latest item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"L\"\n })\n );\n /**\n * Published item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"P\"\n })\n );\n }\n /**\n * Exact revisions of all the entries\n */\n for (const revision of revisions) {\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id: revision.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey({\n version: revision.version\n })\n })\n );\n }\n\n await batchWriteAll({\n table: entity.table,\n items\n });\n };\n\n const getLatestRevisionByEntryId: CmsEntryStorageOperations[\"getLatestRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n const getPublishedRevisionByEntryId: CmsEntryStorageOperations[\"getPublishedRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisionById: CmsEntryStorageOperations[\"getRevisionById\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisions: CmsEntryStorageOperations[\"getRevisions\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getByIds: CmsEntryStorageOperations[\"getByIds\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getLatestByIds: CmsEntryStorageOperations[\"getLatestByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPublishedByIds: CmsEntryStorageOperations[\"getPublishedByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPreviousRevision: CmsEntryStorageOperations[\"getPreviousRevision\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\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 const storageEntry = cleanupItem(entity, result);\n if (!storageEntry) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry,\n model\n });\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: CmsEntryStorageOperations[\"list\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort: sortBy,\n fields,\n search\n } = params;\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : 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 storageEntries: CmsStorageEntry[] = [];\n try {\n storageEntries = await queryAll<CmsStorageEntry>(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 (storageEntries.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 an 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 = createFields({\n plugins,\n fields: model.fields\n });\n\n const fromStorage = createStorageTransformCallable(model);\n /**\n * Let's transform records from storage ones to regular ones, so we do not need to do it later.\n *\n * This is always being done, but at least its in parallel.\n */\n const records = await Promise.all(\n storageEntries.map(async storageEntry => {\n const entry = convertFromStorageEntry({\n storageEntry,\n model\n });\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(\n field,\n entry.values[field.fieldId]\n );\n }\n\n return entry as CmsEntry;\n })\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 = filter({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n\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 = sort({\n model,\n plugins,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"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: CmsEntryStorageOperations[\"get\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish: CmsEntryStorageOperations[\"publish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 alongside the publishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - the 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\n if (initialLatestStorageEntry) {\n const publishingLatestRevision = entry.id === initialLatestStorageEntry.id;\n\n if (publishingLatestRevision) {\n // We want to update current latest record because of the status (`status: 'published'`) update.\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 } else {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n\n // If the published revision is not the latest one, we still need to\n // update the latest record with the new values of entry-level meta fields.\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n // 1. Update actual revision record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n // 2. Update latest record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n }\n\n if (initialPublishedStorageEntry && initialPublishedStorageEntry.id !== entry.id) {\n const publishedStorageEntry = convertToStorageEntry({\n storageEntry: initialPublishedStorageEntry,\n model\n });\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 initialStorageEntry;\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: initialLatestStorageEntry,\n publishedStorageEntry: initialPublishedStorageEntry\n }\n );\n }\n };\n\n const unpublish: CmsEntryStorageOperations[\"unpublish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update the 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 alongside the unpublishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (initialLatestStorageEntry) {\n const unpublishingLatestRevision = entry.id === initialLatestStorageEntry.id;\n if (unpublishingLatestRevision) {\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 } else {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n\n // If the unpublished revision is not the latest one, we still need to\n // update the latest record with the new values of entry-level meta fields.\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n // 1. Update actual revision record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n // 2. Update latest record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\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 const getUniqueFieldValues: CmsEntryStorageOperations[\"getUniqueFieldValues\"] = async (\n model,\n params\n ) => {\n const { where, fieldId } = params;\n\n const field = model.fields.find(f => f.fieldId === fieldId);\n if (!field) {\n throw new WebinyError(\n `Could not find field with given \"fieldId\" value.`,\n \"FIELD_NOT_FOUND\",\n {\n fieldId\n }\n );\n }\n\n const { items } = await list(model, {\n where,\n limit: MAX_LIST_LIMIT\n });\n\n const result: Record<string, CmsEntryUniqueValue> = {};\n for (const item of items) {\n const fieldValue = item.values[field.fieldId] as string[] | string | undefined;\n if (!fieldValue) {\n continue;\n }\n const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n if (values.length === 0) {\n continue;\n }\n for (const value of values) {\n result[value] = {\n value,\n count: (result[value]?.count || 0) + 1\n };\n }\n }\n\n return Object.values(result)\n .sort((a, b) => (a.value > b.value ? 1 : b.value > a.value ? -1 : 0))\n .sort((a, b) => b.count - a.count);\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n move,\n delete: deleteEntry,\n moveToBin,\n restoreFromBin,\n deleteRevision,\n deleteMultipleEntries,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n publish,\n list,\n unpublish,\n dataLoaders,\n getUniqueFieldValues\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAUA,IAAAG,KAAA,GAAAH,OAAA;AAQA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAOA,IAAAM,QAAA,GAAAN,OAAA;AAEA,IAAAO,OAAA,GAAAP,OAAA;AACA,IAAAQ,QAAA,GAAAR,OAAA;AACA,IAAAS,eAAA,GAAAT,OAAA;AAEA,IAAAU,aAAA,GAAAV,OAAA;AACA,IAAAW,UAAA,GAAAX,OAAA;AAGA,IAAAY,UAAA,GAAAZ,OAAA;AAOA,MAAMa,UAAU,GAAGA,CAAA,KAAc;EAC7B,OAAO,WAAW;AACtB,CAAC;AACD,MAAMC,gBAAgB,GAAGA,CAAA,KAAc;EACnC,OAAQ,GAAED,UAAU,CAAC,CAAE,IAAG;AAC9B,CAAC;AACD,MAAME,mBAAmB,GAAGA,CAAA,KAAc;EACtC,OAAQ,GAAEF,UAAU,CAAC,CAAE,IAAG;AAC9B,CAAC;AAOD,MAAMG,qBAAqB,GAAIC,MAAiC,IAAsB;EAClF,MAAM;IAAEC,KAAK;IAAEC;EAAa,CAAC,GAAGF,MAAM;EAEtC,MAAMG,MAAM,GAAGF,KAAK,CAACG,wBAAwB,CAAC;IAC1CC,MAAM,EAAEJ,KAAK,CAACI,MAAM;IACpBF,MAAM,EAAED,YAAY,CAACC;EACzB,CAAC,CAAC;EACF,OAAO;IACH,GAAGD,YAAY;IACfC;EACJ,CAAC;AACL,CAAC;AAED,MAAMG,uBAAuB,GAAIN,MAAiC,IAAsB;EACpF,MAAM;IAAEC,KAAK;IAAEC;EAAa,CAAC,GAAGF,MAAM;EAEtC,MAAMG,MAAM,GAAGF,KAAK,CAACM,0BAA0B,CAAC;IAC5CF,MAAM,EAAEJ,KAAK,CAACI,MAAM;IACpBF,MAAM,EAAED,YAAY,CAACC;EACzB,CAAC,CAAC;EACF,OAAO;IACH,GAAGD,YAAY;IACfC;EACJ,CAAC;AACL,CAAC;AAED,MAAMK,cAAc,GAAG,KAAK;AAOrB,MAAMC,8BAA8B,GACvCT,MAA4C,IAChB;EAC5B,MAAM;IAAEU,MAAM;IAAEC;EAAQ,CAAC,GAAGX,MAAM;EAElC,IAAIY,+BAA4E;EAChF,MAAMC,kCAAkC,GAAGA,CAAA,KAAM;IAC7C,IAAID,+BAA+B,EAAE;MACjC,OAAOA,+BAA+B;IAC1C;IACAA,+BAA+B,GAAGD,OAAO,CAACG,SAAS,CAC/CC,+CAA+B,CAACC,IACpC,CAAC;IACD,OAAOJ,+BAA+B;EAC1C,CAAC;EAED,MAAMK,yBAAyB,GAAIhB,KAAe,IAAgC;IAC9E,MAAMiB,MAAM,GAAGL,kCAAkC,CAAC,CAAC;IACnD,OAAOK,MAAM,CAACC,QAAQ,CAAClB,KAAK,CAAC;EACjC,CAAC;EAED,MAAMmB,WAAW,GAAG,IAAIC,+BAAkB,CAAC;IACvCX;EACJ,CAAC,CAAC;EAEF,MAAMY,uBAAuB,GAAGX,OAAO,CAClCY,MAAM,CAAyBC,sCAAsB,CAACR,IAAI,CAAC,CAC3DS,MAAM,CAAC,CAACC,UAAU,EAAER,MAAM,KAAK;IAC5BQ,UAAU,CAACR,MAAM,CAACS,SAAS,CAAC,GAAGT,MAAM;IACrC,OAAOQ,UAAU;EACrB,CAAC,EAAE,CAAC,CAA2C,CAAC;EAEpD,MAAME,8BAA8B,GAChC3B,KAAgC,IACR;IACxB,OAAO,CAAC4B,KAAK,EAAEC,KAAK,KAAK;MACrB,MAAMZ,MAA8B,GAAGI,uBAAuB,CAACO,KAAK,CAACb,IAAI,CAAC;MAC1E,IAAI,CAACE,MAAM,EAAE;QACT,OAAOY,KAAK;MAChB;MACA,OAAOZ,MAAM,CAACa,WAAW,CAAC;QACtB9B,KAAK;QACL4B,KAAK;QACLC,KAAK;QACLE,gBAAgBA,CAACL,SAAiB,EAA0B;UACxD,OAAOL,uBAAuB,CAACK,SAAS,CAAC,IAAIL,uBAAuB,CAAC,GAAG,CAAC;QAC7E,CAAC;QACDX;MACJ,CAAC,CAAC;IACN,CAAC;EACL,CAAC;EAED,MAAMsB,MAA2C,GAAG,MAAAA,CAAOC,YAAY,EAAElC,MAAM,KAAK;IAChF,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;IAEF,MAAMC,WAAW,GAAGP,KAAK,CAACQ,MAAM,KAAK,WAAW;IAEhD,MAAMC,MAAM,GAAGF,WAAW,GAAG,IAAI,GAAGP,KAAK,CAACS,MAAM;IAEhD,MAAM1C,YAAY,GAAGH,qBAAqB,CAAC;MACvCE,KAAK;MACLC,YAAY,EAAEkC;IAClB,CAAC,CAAC;IACF;AACR;AACA;AACA;AACA;IACQ,MAAMS,KAAK,GAAG,CACVnC,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf0C,MAAM;MACNG,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACd,KAAK,CAAC;MAChCe,IAAI,EAAEtD,UAAU,CAAC,CAAC;MAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;IAC1C,CAAC,CAAC,EACFQ,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf0C,MAAM;MACNG,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;MACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;MACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;IAC1C,CAAC,CAAC,CACL;;IAED;AACR;AACA;IACQ,IAAIwC,WAAW,EAAE;MACbG,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAG5C,YAAY;QACf0C,MAAM;QACNG,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC,CAAC;QAC5BP,IAAI,EAAErD,gBAAgB,CAAC,CAAC;QACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;MAC1C,CAAC,CACL,CAAC;IACL;IAEA,IAAI;MACA,MAAM,IAAAwD,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0CAA0C,EACxDF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIC,KAAK,EAAEJ,EAAE;QACT1B;MACJ,CACJ,CAAC;IACL;IAEA,OAAOC,mBAAmB;EAC9B,CAAC;EAED,MAAM8B,kBAAmE,GAAG,MAAAA,CACxEhC,YAAY,EACZlC,MAAM,KACL;IACD,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;IAEF,MAAMvC,YAAY,GAAGH,qBAAqB,CAAC;MACvCG,YAAY,EAAEkC,mBAAmB;MACjCnC;IACJ,CAAC,CAAC;;IAEF;AACR;AACA;AACA;AACA;AACA;IACQ,MAAM4C,KAAK,GAAG,CACVnC,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf6C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAAC/C,YAAY,CAAC;MACvCgD,IAAI,EAAEtD,UAAU,CAAC,CAAC;MAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;IAC1C,CAAC,CAAC,EACFQ,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf6C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;MACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;MACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;IAC1C,CAAC,CAAC,CACL;IAED,MAAMwC,WAAW,GAAGP,KAAK,CAACQ,MAAM,KAAK,WAAW;IAChD,IAAID,WAAW,EAAE;MACbG,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAG5C,YAAY;QACf6C,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC,CAAC;QAC5BP,IAAI,EAAEpD,mBAAmB,CAAC,CAAC;QAC3BqD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;MAC1C,CAAC,CACL,CAAC;IACL;IAEA,IAAI;MACA,MAAM,IAAAwD,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6CAA6C,EAC3DF,EAAE,CAACG,IAAI,IAAI,uBAAuB,EAClC;QACIC,KAAK,EAAEJ,EAAE;QACT1B,KAAK;QACLjC;MACJ,CACJ,CAAC;IACL;IACA;AACR;AACA;IACQ,OAAOkC,mBAAmB;EAC9B,CAAC;EAED,MAAM+B,MAA2C,GAAG,MAAAA,CAAOjC,YAAY,EAAElC,MAAM,KAAK;IAChF,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;IAEF,MAAMC,WAAW,GAAGP,KAAK,CAACQ,MAAM,KAAK,WAAW;IAChD,MAAMC,MAAM,GAAGF,WAAW,GAAG,IAAI,GAAGP,KAAK,CAACS,MAAM;IAEhD,MAAMC,KAAK,GAAG,EAAE;IAEhB,MAAM3C,YAAY,GAAGH,qBAAqB,CAAC;MACvCE,KAAK;MACLC,YAAY,EAAEkC;IAClB,CAAC,CAAC;IACF;AACR;AACA;AACA;AACA;IACQS,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf0C,MAAM;MACNG,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAAC/C,YAAY,CAAC;MACvCgD,IAAI,EAAEtD,UAAU,CAAC,CAAC;MAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;IAC1C,CAAC,CACL,CAAC;IAED,IAAIwC,WAAW,EAAE;MACbG,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAG5C,YAAY;QACf0C,MAAM;QACNG,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC,CAAC;QAC5BP,IAAI,EAAEpD,mBAAmB,CAAC,CAAC;QAC3BqD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACpD,YAAY;MAC1C,CAAC,CACL,CAAC;IACL;;IAEA;AACR;AACA;IACQ,MAAMkE,kBAAkB,GAAG,MAAMC,0BAA0B,CAACpE,KAAK,EAAEkC,KAAK,CAAC;IAEzE,IAAIiC,kBAAkB,EAAE;MACpB,MAAME,sBAAsB,GAAGF,kBAAkB,CAAC7B,EAAE,KAAKJ,KAAK,CAACI,EAAE;MACjE,IAAI+B,sBAAsB,EAAE;QACxBzB,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAG5C,YAAY;UACf0C,MAAM;UACNG,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;QACnC,CAAC,CACL,CAAC;MACL,CAAC,MAAM;QACH;AAChB;AACA;AACA;QACgB,MAAMoC,2BAA2B,GAAG,IAAAC,8BAAmB,EACnDrC,KAAK,EACLsC,qCACJ,CAAC;;QAED;AAChB;AACA;AACA;AACA;QACgB5B,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACmB,kBAAkB,CAAC;UAC7ClB,IAAI,EAAEtD,UAAU,CAAC,CAAC;UAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;QAEDvB,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;MACL;IACJ;IAEA,IAAI;MACA,MAAM,IAAAV,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;MACF,OAAOmC,mBAAmB;IAC9B,CAAC,CAAC,OAAOyB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,yBAAyB,EACvCF,EAAE,CAACG,IAAI,IAAI,cAAc,EACzB;QACIC,KAAK,EAAEJ,EAAE;QACT1B,KAAK;QACLiC;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMM,IAAuC,GAAG,MAAAA,CAAOxC,YAAY,EAAEK,EAAE,EAAEoC,QAAQ,KAAK;IAClF;AACR;AACA;AACA;AACA;IACQ,MAAM1E,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IACrD;AACR;AACA;IACQ,MAAM0C,cAA8B,GAAG;MACnClE,MAAM;MACN2B,YAAY,EAAE,IAAAC,wBAAkB,EAAC;QAC7BC,EAAE;QACFC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;QACpBC,MAAM,EAAExC,KAAK,CAACwC;MAClB,CAAC,CAAC;MACFoC,OAAO,EAAE;QACLC,GAAG,EAAE;MACT;IACJ,CAAC;IACD,MAAMC,OAAO,GAAG,MAAM,IAAAC,eAAQ,EAAWJ,cAAc,CAAC;IACxD;AACR;AACA;IACQ,MAAM/B,KAAK,GAAGkC,OAAO,CAACE,GAAG,CAACC,IAAI,IAAI;MAC9B,OAAOxE,MAAM,CAACoC,QAAQ,CAAC;QACnB,GAAGoC,IAAI;QACPC,QAAQ,EAAE;UACN,GAAGD,IAAI,CAACC,QAAQ;UAChBR;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;IACF;AACR;AACA;IACQ,IAAI;MACA,MAAM,IAAAjB,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOgB,EAAE,EAAE;MACT,MAAMC,cAAW,CAACsB,IAAI,CAACvB,EAAE,EAAE;QACvBE,OAAO,EAAE,yCAAyC;QAClDsB,IAAI,EAAE;UACF9C,EAAE;UACFoC;QACJ;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAED,MAAMW,SAAiD,GAAG,MAAAA,CAAOpD,YAAY,EAAElC,MAAM,KAAK;IACtF,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;;IAErD;AACR;AACA;IACQ,MAAM0C,cAA8B,GAAG;MACnClE,MAAM;MACN2B,YAAY,EAAE,IAAAC,wBAAkB,EAAC;QAC7BC,EAAE,EAAEJ,KAAK,CAACI,EAAE;QACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;QACpBC,MAAM,EAAExC,KAAK,CAACwC;MAClB,CAAC,CAAC;MACFoC,OAAO,EAAE;QACLC,GAAG,EAAE;MACT;IACJ,CAAC;IAED,IAAIC,OAA2B,GAAG,EAAE;IACpC,IAAI;MACAA,OAAO,GAAG,MAAM,IAAAC,eAAQ,EAACJ,cAAc,CAAC;IAC5C,CAAC,CAAC,OAAOf,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6BAA6B,EAC3CF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIC,KAAK,EAAEJ,EAAE;QACTtB,EAAE,EAAEJ,KAAK,CAACI;MACd,CACJ,CAAC;IACL;IAEA,MAAMrC,YAAY,GAAGH,qBAAqB,CAAC;MACvCE,KAAK;MACLC,YAAY,EAAEkC;IAClB,CAAC,CAAC;;IAEF;AACR;AACA;IACQ,MAAMmD,wBAAwB,GAAG,IAAAf,8BAAmB,EAACtE,YAAY,EAAEsF,kCAAuB,CAAC;;IAE3F;AACR;AACA;IACQ,MAAM3C,KAAK,GAAGkC,OAAO,CAACE,GAAG,CAACQ,MAAM,IAAI;MAChC,OAAO/E,MAAM,CAACoC,QAAQ,CAAC;QACnB,GAAG2C,MAAM;QACT,GAAGF,wBAAwB;QAC3BG,UAAU,EAAExF,YAAY,CAACwF,UAAU;QACnCP,QAAQ,EAAEjF,YAAY,CAACiF,QAAQ;QAC/BQ,mBAAmB,EAAEzF,YAAY,CAACyF;MACtC,CAAC,CAAC;IACN,CAAC,CAAC;IACF;AACR;AACA;IACQ,IAAI;MACA,MAAM,IAAAjC,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOgB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,sCAAsC,EACpDF,EAAE,CAACG,IAAI,IAAI,yBAAyB,EACpC;QACIC,KAAK,EAAEJ,EAAE;QACT1B,KAAK;QACLjC;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAM0F,WAAgD,GAAG,MAAAA,CAAO1D,YAAY,EAAElC,MAAM,KAAK;IACrF,MAAM;MAAEmC;IAAM,CAAC,GAAGnC,MAAM;IACxB,MAAMuC,EAAE,GAAGJ,KAAK,CAACI,EAAE,IAAIJ,KAAK,CAAC0D,OAAO;IACpC,MAAM5F,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAM0C,cAA8B,GAAG;MACnClE,MAAM;MACN2B,YAAY,EAAE,IAAAC,wBAAkB,EAAC;QAC7BC,EAAE;QACFC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;QACpBC,MAAM,EAAExC,KAAK,CAACwC;MAClB,CAAC,CAAC;MACFoC,OAAO,EAAE;QACLC,GAAG,EAAE;MACT;IACJ,CAAC;IAED,IAAIC,OAA2B,GAAG,EAAE;IACpC,IAAI;MACAA,OAAO,GAAG,MAAM,IAAAC,eAAQ,EAACJ,cAAc,CAAC;IAC5C,CAAC,CAAC,OAAOf,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6BAA6B,EAC3CF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIC,KAAK,EAAEJ,EAAE;QACTtB;MACJ,CACJ,CAAC;IACL;IACA,MAAMM,KAAK,GAAGkC,OAAO,CAACE,GAAG,CAACC,IAAI,IAAI;MAC9B,OAAOxE,MAAM,CAACoF,WAAW,CAAC;QACtB/C,EAAE,EAAEmC,IAAI,CAACnC,EAAE;QACXC,EAAE,EAAEkC,IAAI,CAAClC;MACb,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,IAAI;MACA,MAAM,IAAAU,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6BAA6B,EAC3CF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIC,KAAK,EAAEJ,EAAE;QACTxB,YAAY,EAAEuC,cAAc,CAACvC,YAAY;QACzCE;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMwD,cAA2D,GAAG,MAAAA,CAChE7D,YAAY,EACZlC,MAAM,KACL;IACD,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;;IAErD;AACR;AACA;IACQ,MAAM0C,cAA8B,GAAG;MACnClE,MAAM;MACN2B,YAAY,EAAE,IAAAC,wBAAkB,EAAC;QAC7BC,EAAE,EAAEJ,KAAK,CAACI,EAAE;QACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;QACpBC,MAAM,EAAExC,KAAK,CAACwC;MAClB,CAAC,CAAC;MACFoC,OAAO,EAAE;QACLC,GAAG,EAAE;MACT;IACJ,CAAC;IAED,IAAIC,OAA2B,GAAG,EAAE;IACpC,IAAI;MACAA,OAAO,GAAG,MAAM,IAAAC,eAAQ,EAACJ,cAAc,CAAC;IAC5C,CAAC,CAAC,OAAOf,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6BAA6B,EAC3CF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIC,KAAK,EAAEJ,EAAE;QACTtB,EAAE,EAAEJ,KAAK,CAACI;MACd,CACJ,CAAC;IACL;IAEA,MAAMrC,YAAY,GAAGH,qBAAqB,CAAC;MACvCE,KAAK;MACLC,YAAY,EAAEkC;IAClB,CAAC,CAAC;;IAEF;AACR;AACA;IACQ,MAAM4D,yBAAyB,GAAG,IAAAxB,8BAAmB,EACjDtE,YAAY,EACZ+F,mCACJ,CAAC;IAED,MAAMpD,KAAK,GAAGkC,OAAO,CAACE,GAAG,CAACQ,MAAM,IAAI;MAChC,OAAO/E,MAAM,CAACoC,QAAQ,CAAC;QACnB,GAAG2C,MAAM;QACT,GAAGO,yBAAyB;QAC5BN,UAAU,EAAExF,YAAY,CAACwF,UAAU;QACnCP,QAAQ,EAAEjF,YAAY,CAACiF,QAAQ;QAC/BQ,mBAAmB,EAAEzF,YAAY,CAACyF;MACtC,CAAC,CAAC;IACN,CAAC,CAAC;IACF;AACR;AACA;IACQ,IAAI;MACA,MAAM,IAAAjC,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MAEFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;MAEF,OAAOmC,mBAAmB;IAC9B,CAAC,CAAC,OAAOyB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,2CAA2C,EACzDF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIC,KAAK,EAAEJ,EAAE;QACT1B,KAAK;QACLjC;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMgG,cAA2D,GAAG,MAAAA,CAChEhE,YAAY,EACZlC,MAAM,KACL;IACD,MAAM;MAAEmC,KAAK;MAAEgE,WAAW;MAAE/B,kBAAkB,EAAEgC;IAA0B,CAAC,GAAGpG,MAAM;IAEpF,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;IAEF,MAAMI,KAAK,GAAG,CACVnC,MAAM,CAACoF,WAAW,CAAC;MACf/C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACd,KAAK;IACnC,CAAC,CAAC,CACL;IAED,MAAMkE,qBAAqB,GAAG,MAAMC,6BAA6B,CAACrG,KAAK,EAAEkC,KAAK,CAAC;;IAE/E;AACR;AACA;IACQ,IAAIkE,qBAAqB,IAAIlE,KAAK,CAACI,EAAE,KAAK8D,qBAAqB,CAAC9D,EAAE,EAAE;MAChEM,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoF,WAAW,CAAC;QACf/C,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC;MAC/B,CAAC,CACL,CAAC;IACL;IAEA,IAAI2C,yBAAyB,EAAE;MAC3B,MAAMhC,kBAAkB,GAAGrE,qBAAqB,CAAC;QAC7CG,YAAY,EAAEkG,yBAAyB;QACvCnG;MACJ,CAAC,CAAC;MACF4C,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAGsB,kBAAkB;QACrBrB,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;QACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;QACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;MAChD,CAAC,CACL,CAAC;;MAED;MACA;MACAvB,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAGsD,yBAAyB;QAC5BrD,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACmD,yBAAyB,CAAC;QACpDlD,IAAI,EAAEtD,UAAU,CAAC,CAAC;QAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAAC8C,yBAAyB;MACvD,CAAC,CACL,CAAC;IACL;IACA,IAAI;MACA,MAAM,IAAA1C,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CAACD,EAAE,CAACE,OAAO,EAAEF,EAAE,CAACG,IAAI,EAAE;QACvCC,KAAK,EAAEJ,EAAE;QACT1B,KAAK;QACLgE;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAED,MAAMI,qBAAyE,GAAG,MAAAA,CAC9ErE,YAAY,EACZlC,MAAM,KACL;IACD,MAAM;MAAEwG;IAAQ,CAAC,GAAGxG,MAAM;IAC1B,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IACrD;AACR;AACA;IACQ,MAAMuE,SAAS,GAAG,MAAMrF,WAAW,CAACsF,oBAAoB,CAAC;MACrDzG,KAAK;MACL0G,GAAG,EAAEH;IACT,CAAC,CAAC;IACF;AACR;AACA;IACQ,MAAM3D,KAAqC,GAAG,EAAE;IAChD,KAAK,MAAMN,EAAE,IAAIiE,OAAO,EAAE;MACtB;AACZ;AACA;MACY3D,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoF,WAAW,CAAC;QACf/C,EAAE,EAAE,IAAAT,wBAAkB,EAAC;UACnBC,EAAE;UACFC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;UACpBC,MAAM,EAAExC,KAAK,CAACwC;QAClB,CAAC,CAAC;QACFO,EAAE,EAAE;MACR,CAAC,CACL,CAAC;MACD;AACZ;AACA;MACYH,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoF,WAAW,CAAC;QACf/C,EAAE,EAAE,IAAAT,wBAAkB,EAAC;UACnBC,EAAE;UACFC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;UACpBC,MAAM,EAAExC,KAAK,CAACwC;QAClB,CAAC,CAAC;QACFO,EAAE,EAAE;MACR,CAAC,CACL,CAAC;IACL;IACA;AACR;AACA;IACQ,KAAK,MAAM4D,QAAQ,IAAIH,SAAS,EAAE;MAC9B5D,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoF,WAAW,CAAC;QACf/C,EAAE,EAAE,IAAAT,wBAAkB,EAAC;UACnBC,EAAE,EAAEqE,QAAQ,CAACrE,EAAE;UACfC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;UACpBC,MAAM,EAAExC,KAAK,CAACwC;QAClB,CAAC,CAAC;QACFO,EAAE,EAAE,IAAAC,2BAAqB,EAAC;UACtB4D,OAAO,EAAED,QAAQ,CAACC;QACtB,CAAC;MACL,CAAC,CACL,CAAC;IACL;IAEA,MAAM,IAAAnD,yBAAa,EAAC;MAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;MACnBd;IACJ,CAAC,CAAC;EACN,CAAC;EAED,MAAMwB,0BAAmF,GACrF,MAAAA,CAAOnC,YAAY,EAAElC,MAAM,KAAK;IAC5B,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAACiD,0BAA0B,CAAC;MACvDpE,KAAK;MACL0G,GAAG,EAAE,CAAC3G,MAAM,CAACuC,EAAE;IACnB,CAAC,CAAC;IACF,MAAM2C,IAAI,GAAGrC,KAAK,CAACiE,KAAK,CAAC,CAAC,IAAI,IAAI;IAClC,IAAI,CAAC5B,IAAI,EAAE;MACP,OAAO,IAAI;IACf;IACA,OAAO5E,uBAAuB,CAAC;MAC3BJ,YAAY,EAAEgF,IAAI;MAClBjF;IACJ,CAAC,CAAC;EACN,CAAC;EACL,MAAMqG,6BAAyF,GAC3F,MAAAA,CAAOpE,YAAY,EAAElC,MAAM,KAAK;IAC5B,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAACkF,6BAA6B,CAAC;MAC1DrG,KAAK;MACL0G,GAAG,EAAE,CAAC3G,MAAM,CAACuC,EAAE;IACnB,CAAC,CAAC;IACF,MAAM2C,IAAI,GAAGrC,KAAK,CAACiE,KAAK,CAAC,CAAC,IAAI,IAAI;IAClC,IAAI,CAAC5B,IAAI,EAAE;MACP,OAAO,IAAI;IACf;IACA,OAAO5E,uBAAuB,CAAC;MAC3BJ,YAAY,EAAEgF,IAAI;MAClBjF;IACJ,CAAC,CAAC;EACN,CAAC;EAEL,MAAM8G,eAA6D,GAAG,MAAAA,CAClE7E,YAAY,EACZlC,MAAM,KACL;IACD,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAAC2F,eAAe,CAAC;MAC5C9G,KAAK;MACL0G,GAAG,EAAE,CAAC3G,MAAM,CAACuC,EAAE;IACnB,CAAC,CAAC;IACF,MAAM2C,IAAI,GAAGrC,KAAK,CAACiE,KAAK,CAAC,CAAC,IAAI,IAAI;IAClC,IAAI,CAAC5B,IAAI,EAAE;MACP,OAAO,IAAI;IACf;IACA,OAAO5E,uBAAuB,CAAC;MAC3BJ,YAAY,EAAEgF,IAAI;MAClBjF;IACJ,CAAC,CAAC;EACN,CAAC;EAED,MAAM+G,YAAuD,GAAG,MAAAA,CAC5D9E,YAAY,EACZlC,MAAM,KACL;IACD,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAACsF,oBAAoB,CAAC;MACjDzG,KAAK;MACL0G,GAAG,EAAE,CAAC3G,MAAM,CAACuC,EAAE;IACnB,CAAC,CAAC;IAEF,OAAOM,KAAK,CAACoC,GAAG,CAACC,IAAI,IAAI;MACrB,OAAO5E,uBAAuB,CAAC;QAC3BJ,YAAY,EAAEgF,IAAI;QAClBjF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAMgH,QAA+C,GAAG,MAAAA,CAAO/E,YAAY,EAAElC,MAAM,KAAK;IACpF,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAAC2F,eAAe,CAAC;MAC5C9G,KAAK;MACL0G,GAAG,EAAE3G,MAAM,CAAC2G;IAChB,CAAC,CAAC;IAEF,OAAO9D,KAAK,CAACoC,GAAG,CAACC,IAAI,IAAI;MACrB,OAAO5E,uBAAuB,CAAC;QAC3BJ,YAAY,EAAEgF,IAAI;QAClBjF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAMiH,cAA2D,GAAG,MAAAA,CAChEhF,YAAY,EACZlC,MAAM,KACL;IACD,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAACiD,0BAA0B,CAAC;MACvDpE,KAAK;MACL0G,GAAG,EAAE3G,MAAM,CAAC2G;IAChB,CAAC,CAAC;IAEF,OAAO9D,KAAK,CAACoC,GAAG,CAACC,IAAI,IAAI;MACrB,OAAO5E,uBAAuB,CAAC;QAC3BJ,YAAY,EAAEgF,IAAI;QAClBjF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAMkH,iBAAiE,GAAG,MAAAA,CACtEjF,YAAY,EACZlC,MAAM,KACL;IACD,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMW,KAAK,GAAG,MAAMzB,WAAW,CAACkF,6BAA6B,CAAC;MAC1DrG,KAAK;MACL0G,GAAG,EAAE3G,MAAM,CAAC2G;IAChB,CAAC,CAAC;IAEF,OAAO9D,KAAK,CAACoC,GAAG,CAACC,IAAI,IAAI;MACrB,OAAO5E,uBAAuB,CAAC;QAC3BJ,YAAY,EAAEgF,IAAI;QAClBjF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,MAAMmH,mBAAqE,GAAG,MAAAA,CAC1ElF,YAAY,EACZlC,MAAM,KACL;IACD,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAM;MAAE2D,OAAO;MAAEgB;IAAQ,CAAC,GAAG7G,MAAM;IACnC,MAAMqH,WAA2B,GAAG;MAChC3G,MAAM;MACN2B,YAAY,EAAE,IAAAC,wBAAkB,EAAC;QAC7BG,MAAM,EAAExC,KAAK,CAACwC,MAAM;QACpBD,MAAM,EAAEvC,KAAK,CAACuC,MAAM;QACpBD,EAAE,EAAEsD;MACR,CAAC,CAAC;MACFhB,OAAO,EAAE;QACLyC,EAAE,EAAG,OAAM,IAAAC,gBAAO,EAACV,OAAO,CAAE,EAAC;QAC7B;AAChB;AACA;QACgBW,OAAO,EAAE,CACL;UACIC,IAAI,EAAE,MAAM;UACZC,EAAE,EAAE9H,UAAU,CAAC;QACnB,CAAC,EACD;UACI6H,IAAI,EAAE,SAAS;UACfH,EAAE,EAAET;QACR,CAAC,CACJ;QACDc,OAAO,EAAE;MACb;IACJ,CAAC;IAED,IAAI;MACA,MAAMC,MAAM,GAAG,MAAM,IAAAC,eAAQ,EAAWR,WAAW,CAAC;MAEpD,MAAMnH,YAAY,GAAG,IAAA4H,oBAAW,EAACpH,MAAM,EAAEkH,MAAM,CAAC;MAChD,IAAI,CAAC1H,YAAY,EAAE;QACf,OAAO,IAAI;MACf;MACA,OAAOI,uBAAuB,CAAC;QAC3BJ,YAAY;QACZD;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,gDAAgD,EAC9DF,EAAE,CAACG,IAAI,IAAI,4BAA4B,EACvC;QACI,GAAGhE,MAAM;QACTiE,KAAK,EAAEJ,EAAE;QACTxB,YAAY,EAAEgF,WAAW,CAAChF,YAAY;QACtCwC,OAAO,EAAEwC,WAAW,CAACxC,OAAO;QAC5B5E;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAM8H,IAAuC,GAAG,MAAAA,CAAO7F,YAAY,EAAElC,MAAM,KAAK;IAC5E,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAM;MACF8F,KAAK,EAAEC,YAAY,GAAG,EAAE;MACxBC,KAAK,EAAEC,YAAY;MACnBC,KAAK;MACLC,IAAI,EAAEC,MAAM;MACZjI,MAAM;MACNkI;IACJ,CAAC,GAAGvI,MAAM;IACV,MAAMgI,KAAK,GACPC,YAAY,IAAI,CAAC,IAAIA,YAAY,IAAIzH,cAAc,GAAGA,cAAc,GAAGyH,YAAY;IAEvF,MAAMjH,IAAI,GAAGmH,YAAY,CAACK,SAAS,GAAG,GAAG,GAAG,GAAG;IAE/C,MAAM5D,cAA8B,GAAG;MACnClE,MAAM;MACN2B,YAAY,EAAE,IAAAe,2BAAqB,EAACnD,KAAK,EAAEe,IAAI,CAAC;MAChD6D,OAAO,EAAE;QACL4D,KAAK,EAAE,MAAM;QACb3D,GAAG,EAAE;MACT;IACJ,CAAC;IACD,IAAI4D,cAAiC,GAAG,EAAE;IAC1C,IAAI;MACAA,cAAc,GAAG,MAAM,IAAA1D,eAAQ,EAAkBJ,cAAc,CAAC;IACpE,CAAC,CAAC,OAAOf,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CAACD,EAAE,CAACE,OAAO,EAAE,qBAAqB,EAAE;QACrDE,KAAK,EAAEJ,EAAE;QACTxB,YAAY,EAAEuC,cAAc,CAACvC,YAAY;QACzCwC,OAAO,EAAED,cAAc,CAACC;MAC5B,CAAC,CAAC;IACN;IACA,IAAI6D,cAAc,CAACC,MAAM,KAAK,CAAC,EAAE;MAC7B,OAAO;QACHC,YAAY,EAAE,KAAK;QACnBC,UAAU,EAAE,CAAC;QACbC,MAAM,EAAE,IAAI;QACZjG,KAAK,EAAE;MACX,CAAC;IACL;IACA,MAAMqF,KAAiC,GAAG;MACtC,GAAGC;IACP,CAAC;IACD,OAAOD,KAAK,CAAC,WAAW,CAAC;IACzB,OAAOA,KAAK,CAAC,QAAQ,CAAC;IACtB;AACR;AACA;AACA;IACQ,MAAMa,WAAW,GAAG,IAAAC,0BAAY,EAAC;MAC7BrI,OAAO;MACPN,MAAM,EAAEJ,KAAK,CAACI;IAClB,CAAC,CAAC;IAEF,MAAM0B,WAAW,GAAGH,8BAA8B,CAAC3B,KAAK,CAAC;IACzD;AACR;AACA;AACA;AACA;IACQ,MAAM8E,OAAO,GAAG,MAAMkE,OAAO,CAACC,GAAG,CAC7BR,cAAc,CAACzD,GAAG,CAAC,MAAM/E,YAAY,IAAI;MACrC,MAAMiC,KAAK,GAAG7B,uBAAuB,CAAC;QAClCJ,YAAY;QACZD;MACJ,CAAC,CAAC;MAEF,KAAK,MAAM4B,KAAK,IAAI5B,KAAK,CAACI,MAAM,EAAE;QAC9B8B,KAAK,CAAChC,MAAM,CAAC0B,KAAK,CAACsH,OAAO,CAAC,GAAG,MAAMpH,WAAW,CAC3CF,KAAK,EACLM,KAAK,CAAChC,MAAM,CAAC0B,KAAK,CAACsH,OAAO,CAC9B,CAAC;MACL;MAEA,OAAOhH,KAAK;IAChB,CAAC,CACL,CAAC;IACD;AACR;AACA;AACA;IACQ,MAAMiH,aAAa,GAAG,IAAAC,iBAAM,EAAC;MACzBxG,KAAK,EAAEkC,OAAO;MACdmD,KAAK;MACLvH,OAAO;MACPN,MAAM,EAAE0I,WAAW;MACnBO,cAAc,EAAE;QACZC,IAAI,EAAEhB,MAAM;QACZlI,MAAM,EAAEA,MAAM,IAAI;MACtB;IACJ,CAAC,CAAC;IAEF,MAAMwI,UAAU,GAAGO,aAAa,CAACT,MAAM;;IAEvC;AACR;AACA;AACA;IACQ,MAAMa,WAAW,GAAG,IAAAnB,eAAI,EAAC;MACrBpI,KAAK;MACLU,OAAO;MACPkC,KAAK,EAAEuG,aAAa;MACpBf,IAAI,EAAEC,MAAM;MACZjI,MAAM,EAAE0I;IACZ,CAAC,CAAC;IAEF,MAAMU,KAAK,GAAGC,QAAQ,CAAE,IAAAC,oBAAY,EAACvB,KAAK,CAAC,IAAe,GAAG,CAAC,IAAI,CAAC;IACnE,MAAMQ,YAAY,GAAGC,UAAU,GAAGY,KAAK,GAAGzB,KAAK;IAC/C,MAAM4B,GAAG,GAAG5B,KAAK,GAAGa,UAAU,GAAGY,KAAK,GAAGzB,KAAK,GAAG6B,SAAS,GAAGJ,KAAK,GAAGzB,KAAK;IAC1E,MAAM8B,WAAW,GAAGN,WAAW,CAACO,KAAK,CAACN,KAAK,EAAEG,GAAG,CAAC;IACjD;AACR;AACA;AACA;IACQ,MAAMd,MAAM,GAAGD,UAAU,GAAGY,KAAK,GAAGzB,KAAK,GAAG,IAAAgC,oBAAY,EAAE,GAAEP,KAAK,GAAGzB,KAAM,EAAC,CAAC,GAAG,IAAI;IACnF,OAAO;MACHY,YAAY;MACZC,UAAU;MACVC,MAAM;MACNjG,KAAK,EAAE,IAAAoH,qBAAY,EAACvJ,MAAM,EAAEoJ,WAAW;IAC3C,CAAC;EACL,CAAC;EAED,MAAMI,GAAqC,GAAG,MAAAA,CAAOhI,YAAY,EAAElC,MAAM,KAAK;IAC1E,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAM;MAAEW;IAAM,CAAC,GAAG,MAAMkF,IAAI,CAAC9H,KAAK,EAAE;MAChC,GAAGD,MAAM;MACTgI,KAAK,EAAE;IACX,CAAC,CAAC;IACF,OAAOnF,KAAK,CAACiE,KAAK,CAAC,CAAC,IAAI,IAAI;EAChC,CAAC;EAED,MAAMqD,OAA6C,GAAG,MAAAA,CAAOjI,YAAY,EAAElC,MAAM,KAAK;IAClF,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;;IAEF;AACR;AACA;IACQ,MAAM2D,yBAAyB,GAAG,MAAM/B,0BAA0B,CAACpE,KAAK,EAAEkC,KAAK,CAAC;IAChF,MAAMiI,4BAA4B,GAAG,MAAM9D,6BAA6B,CAACrG,KAAK,EAAEkC,KAAK,CAAC;IAEtF,MAAMjC,YAAY,GAAGH,qBAAqB,CAAC;MACvCE,KAAK;MACLC,YAAY,EAAEkC;IAClB,CAAC,CAAC;IACF;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,MAAMS,KAAK,GAAG,CACVnC,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf6C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACd,KAAK,CAAC;MAChCe,IAAI,EAAEtD,UAAU,CAAC,CAAC;MAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;IACnC,CAAC,CAAC,EACFzB,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf6C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC,CAAC;MAC5BP,IAAI,EAAEpD,mBAAmB,CAAC,CAAC;MAC3BqD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;IACnC,CAAC,CAAC,CACL;IAED,IAAIiE,yBAAyB,EAAE;MAC3B,MAAMiE,wBAAwB,GAAGlI,KAAK,CAACI,EAAE,KAAK6D,yBAAyB,CAAC7D,EAAE;MAE1E,IAAI8H,wBAAwB,EAAE;QAC1B;QACAxH,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAG5C,YAAY;UACf6C,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;QACnC,CAAC,CACL,CAAC;MACL,CAAC,MAAM;QACH,MAAMiC,kBAAkB,GAAGrE,qBAAqB,CAAC;UAC7CG,YAAY,EAAEkG,yBAAyB;UACvCnG;QACJ,CAAC,CAAC;;QAEF;QACA;QACA,MAAMsE,2BAA2B,GAAG,IAAAC,8BAAmB,EACnDrC,KAAK,EACLsC,qCACJ,CAAC;;QAED;QACA5B,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACmB,kBAAkB,CAAC;UAC7ClB,IAAI,EAAEtD,UAAU,CAAC,CAAC;UAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;;QAED;QACAvB,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;MACL;IACJ;IAEA,IAAIgG,4BAA4B,IAAIA,4BAA4B,CAAC7H,EAAE,KAAKJ,KAAK,CAACI,EAAE,EAAE;MAC9E,MAAM8D,qBAAqB,GAAGtG,qBAAqB,CAAC;QAChDG,YAAY,EAAEkK,4BAA4B;QAC1CnK;MACJ,CAAC,CAAC;MACF4C,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;QACZ,GAAGuD,qBAAqB;QACxBtD,EAAE,EAAEV,YAAY;QAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACoD,qBAAqB,CAAC;QAChDnD,IAAI,EAAEtD,UAAU,CAAC,CAAC;QAClB+C,MAAM,EAAE2H,2BAAoB,CAACC,WAAW;QACxCpH,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;QAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAAC+C,qBAAqB;MACnD,CAAC,CACL,CAAC;IACL;IAEA,IAAI;MACA,MAAM,IAAA3C,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;MACF,OAAOmC,mBAAmB;IAC9B,CAAC,CAAC,OAAOyB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,yCAAyC,EACvDF,EAAE,CAACG,IAAI,IAAI,eAAe,EAC1B;QACI7B,KAAK;QACLiC,kBAAkB,EAAEgC,yBAAyB;QAC7CC,qBAAqB,EAAE+D;MAC3B,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMI,SAAiD,GAAG,MAAAA,CAAOtI,YAAY,EAAElC,MAAM,KAAK;IACtF,MAAM;MAAEmC,KAAK;MAAEjC,YAAY,EAAEkC;IAAoB,CAAC,GAAGpC,MAAM;IAC3D,MAAMC,KAAK,GAAGgB,yBAAyB,CAACiB,YAAY,CAAC;IAErD,MAAMG,YAAY,GAAG,IAAAC,wBAAkB,EAAC;MACpCC,EAAE,EAAEJ,KAAK,CAACI,EAAE;MACZC,MAAM,EAAEvC,KAAK,CAACuC,MAAM;MACpBC,MAAM,EAAExC,KAAK,CAACwC;IAClB,CAAC,CAAC;IAEF,MAAMvC,YAAY,GAAGH,qBAAqB,CAAC;MACvCG,YAAY,EAAEkC,mBAAmB;MACjCnC;IACJ,CAAC,CAAC;IACF;AACR;AACA;AACA;AACA;AACA;IACQ,MAAM4C,KAAK,GAAG,CACVnC,MAAM,CAACoF,WAAW,CAAC;MACf/C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAS,4BAAsB,EAAC;IAC/B,CAAC,CAAC,EACF/C,MAAM,CAACoC,QAAQ,CAAC;MACZ,GAAG5C,YAAY;MACf6C,EAAE,EAAEV,YAAY;MAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACd,KAAK,CAAC;MAChCe,IAAI,EAAEtD,UAAU,CAAC,CAAC;MAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;MAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;IACnC,CAAC,CAAC,CACL;;IAED;AACR;AACA;IACQ,MAAMiE,yBAAyB,GAAG,MAAM/B,0BAA0B,CAACpE,KAAK,EAAEkC,KAAK,CAAC;IAEhF,IAAIiE,yBAAyB,EAAE;MAC3B,MAAMqE,0BAA0B,GAAGtI,KAAK,CAACI,EAAE,KAAK6D,yBAAyB,CAAC7D,EAAE;MAC5E,IAAIkI,0BAA0B,EAAE;QAC5B5H,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAG5C,YAAY;UACf6C,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACnB,KAAK;QACnC,CAAC,CACL,CAAC;MACL,CAAC,MAAM;QACH,MAAMiC,kBAAkB,GAAGrE,qBAAqB,CAAC;UAC7CG,YAAY,EAAEkG,yBAAyB;UACvCnG;QACJ,CAAC,CAAC;;QAEF;QACA;QACA,MAAMsE,2BAA2B,GAAG,IAAAC,8BAAmB,EACnDrC,KAAK,EACLsC,qCACJ,CAAC;;QAED;QACA5B,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAC,2BAAqB,EAACmB,kBAAkB,CAAC;UAC7ClB,IAAI,EAAEtD,UAAU,CAAC,CAAC;UAClBuD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;;QAED;QACAvB,KAAK,CAACW,IAAI,CACN9C,MAAM,CAACoC,QAAQ,CAAC;UACZ,GAAGsB,kBAAkB;UACrB,GAAGG,2BAA2B;UAC9BxB,EAAE,EAAEV,YAAY;UAChBW,EAAE,EAAE,IAAAO,yBAAmB,EAAC,CAAC;UACzBL,IAAI,EAAErD,gBAAgB,CAAC,CAAC;UACxBsD,OAAO,EAAE,IAAAC,2BAAqB,EAACnD,KAAK,EAAE,GAAG,CAAC;UAC1CoD,OAAO,EAAE,IAAAC,sBAAgB,EAACc,kBAAkB;QAChD,CAAC,CACL,CAAC;MACL;IACJ;IAEA,IAAI;MACA,MAAM,IAAAV,yBAAa,EAAC;QAChBC,KAAK,EAAEjD,MAAM,CAACiD,KAAK;QACnBd;MACJ,CAAC,CAAC;MACFzB,WAAW,CAACwC,QAAQ,CAAC;QACjB3D;MACJ,CAAC,CAAC;MACF,OAAOmC,mBAAmB;IAC9B,CAAC,CAAC,OAAOyB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,oCAAoC,EAClDF,EAAE,CAACG,IAAI,IAAI,iBAAiB,EAC5B;QACI7B,KAAK;QACLjC;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMwK,oBAAuE,GAAG,MAAAA,CAC5EzK,KAAK,EACLD,MAAM,KACL;IACD,MAAM;MAAEkI,KAAK;MAAEiB;IAAQ,CAAC,GAAGnJ,MAAM;IAEjC,MAAM6B,KAAK,GAAG5B,KAAK,CAACI,MAAM,CAACsK,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACzB,OAAO,KAAKA,OAAO,CAAC;IAC3D,IAAI,CAACtH,KAAK,EAAE;MACR,MAAM,IAAIiC,cAAW,CAChB,kDAAiD,EAClD,iBAAiB,EACjB;QACIqF;MACJ,CACJ,CAAC;IACL;IAEA,MAAM;MAAEtG;IAAM,CAAC,GAAG,MAAMkF,IAAI,CAAC9H,KAAK,EAAE;MAChCiI,KAAK;MACLF,KAAK,EAAExH;IACX,CAAC,CAAC;IAEF,MAAMoH,MAA2C,GAAG,CAAC,CAAC;IACtD,KAAK,MAAM1C,IAAI,IAAIrC,KAAK,EAAE;MACtB,MAAMgI,UAAU,GAAG3F,IAAI,CAAC/E,MAAM,CAAC0B,KAAK,CAACsH,OAAO,CAAkC;MAC9E,IAAI,CAAC0B,UAAU,EAAE;QACb;MACJ;MACA,MAAM1K,MAAM,GAAG2K,KAAK,CAACC,OAAO,CAACF,UAAU,CAAC,GAAGA,UAAU,GAAG,CAACA,UAAU,CAAC;MACpE,IAAI1K,MAAM,CAACwI,MAAM,KAAK,CAAC,EAAE;QACrB;MACJ;MACA,KAAK,MAAM7G,KAAK,IAAI3B,MAAM,EAAE;QACxByH,MAAM,CAAC9F,KAAK,CAAC,GAAG;UACZA,KAAK;UACLkJ,KAAK,EAAE,CAACpD,MAAM,CAAC9F,KAAK,CAAC,EAAEkJ,KAAK,IAAI,CAAC,IAAI;QACzC,CAAC;MACL;IACJ;IAEA,OAAOC,MAAM,CAAC9K,MAAM,CAACyH,MAAM,CAAC,CACvBS,IAAI,CAAC,CAAC6C,CAAC,EAAEC,CAAC,KAAMD,CAAC,CAACpJ,KAAK,GAAGqJ,CAAC,CAACrJ,KAAK,GAAG,CAAC,GAAGqJ,CAAC,CAACrJ,KAAK,GAAGoJ,CAAC,CAACpJ,KAAK,GAAG,CAAC,CAAC,GAAG,CAAE,CAAC,CACpEuG,IAAI,CAAC,CAAC6C,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACH,KAAK,GAAGE,CAAC,CAACF,KAAK,CAAC;EAC1C,CAAC;EAED,OAAO;IACH/I,MAAM;IACNiC,kBAAkB;IAClBC,MAAM;IACNO,IAAI;IACJ0G,MAAM,EAAExF,WAAW;IACnBN,SAAS;IACTS,cAAc;IACdG,cAAc;IACdK,qBAAqB;IACrBa,mBAAmB;IACnBD,iBAAiB;IACjBD,cAAc;IACdD,QAAQ;IACRF,eAAe;IACfT,6BAA6B;IAC7BjC,0BAA0B;IAC1B6F,GAAG;IACHlD,YAAY;IACZmD,OAAO;IACPpC,IAAI;IACJyC,SAAS;IACTpJ,WAAW;IACXsJ;EACJ,CAAC;AACL,CAAC;AAACW,OAAA,CAAA5K,8BAAA,GAAAA,8BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_dataLoaders","_types","_keys","_batchWrite","_query","_cleanup","_cursor","_zeroPad","_apiHeadlessCms","_createFields","_filtering","_constants","createType","createLatestType","createPublishedType","convertToStorageEntry","params","model","storageEntry","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","MAX_LIST_LIMIT","createEntriesStorageOperations","entity","plugins","storageOperationsCmsModelPlugin","getStorageOperationsCmsModelPlugin","oneByType","StorageOperationsCmsModelPlugin","type","getStorageOperationsModel","plugin","getModel","dataLoaders","DataLoadersHandler","storageTransformPlugins","byType","StorageTransformPlugin","reduce","collection","fieldType","createStorageTransformCallable","field","value","fromStorage","getStoragePlugin","create","initialModel","entry","initialStorageEntry","partitionKey","createPartitionKey","id","locale","tenant","isPublished","status","locked","items","putBatch","PK","SK","createRevisionSortKey","TYPE","GSI1_PK","createGSIPartitionKey","GSI1_SK","createGSISortKey","createLatestSortKey","push","createPublishedSortKey","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","createRevisionFrom","publishedRevisionStorageEntry","getPublishedRevisionByEntryId","ids","CONTENT_ENTRY_STATUS","UNPUBLISHED","update","latestStorageEntry","getLatestRevisionByEntryId","updatingLatestRevision","updatedEntryLevelMetaFields","pickEntryMetaFields","isEntryLevelEntryMetaField","move","folderId","queryAllParams","options","gte","records","queryAll","map","item","location","from","data","moveToBin","updatedDeletedMetaFields","isDeletedEntryMetaField","record","wbyDeleted","binOriginalFolderId","deleteEntry","entryId","deleteBatch","restoreFromBin","updatedRestoredMetaFields","isRestoredEntryMetaField","deleteRevision","latestEntry","initialLatestStorageEntry","publishedStorageEntry","deleteMultipleEntries","entries","revisions","getAllEntryRevisions","revision","version","shift","getRevisionById","getRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","queryParams","lt","zeroPad","filters","attr","eq","reverse","result","queryOne","cleanupItem","list","limit","initialLimit","where","initialWhere","after","sort","sortBy","search","published","index","storageEntries","length","hasMoreItems","totalCount","cursor","modelFields","createFields","Promise","all","fieldId","filteredItems","filter","fullTextSearch","term","sortedItems","start","parseInt","decodeCursor","end","undefined","slicedItems","slice","encodeCursor","cleanupItems","get","publish","initialPublishedStorageEntry","publishedRevisionId","publishingLatestRevision","latestRevisionStatus","PUBLISHED","latestStorageEntryFields","publishedRevisionDifferentFromLatest","unpublish","unpublishingLatestRevision","getUniqueFieldValues","find","f","fieldValue","Array","isArray","count","Object","a","b","delete","exports"],"sources":["index.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryUniqueValue,\n CmsModel,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"@webiny/db-dynamodb/toolbox\";\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 DbItem,\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 { StorageOperationsCmsModelPlugin, StorageTransformPlugin } from \"@webiny/api-headless-cms\";\nimport { FilterItemFromStorage } from \"./filtering/types\";\nimport { createFields } from \"~/operations/entry/filtering/createFields\";\nimport { filter, sort } from \"~/operations/entry/filtering\";\nimport { WriteRequest } from \"@webiny/aws-sdk/client-dynamodb\";\nimport { CmsEntryStorageOperations } from \"~/types\";\nimport {\n isDeletedEntryMetaField,\n isEntryLevelEntryMetaField,\n isRestoredEntryMetaField,\n pickEntryMetaFields\n} from \"@webiny/api-headless-cms/constants\";\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\ninterface ConvertStorageEntryParams {\n storageEntry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\n\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, storageEntry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: storageEntry.values\n });\n return {\n ...storageEntry,\n values\n };\n};\n\nconst MAX_LIST_LIMIT = 10000;\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\n\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, plugins } = params;\n\n let storageOperationsCmsModelPlugin: StorageOperationsCmsModelPlugin | undefined;\n const getStorageOperationsCmsModelPlugin = () => {\n if (storageOperationsCmsModelPlugin) {\n return storageOperationsCmsModelPlugin;\n }\n storageOperationsCmsModelPlugin = plugins.oneByType<StorageOperationsCmsModelPlugin>(\n StorageOperationsCmsModelPlugin.type\n );\n return storageOperationsCmsModelPlugin;\n };\n\n const getStorageOperationsModel = (model: CmsModel): StorageOperationsCmsModel => {\n const plugin = getStorageOperationsCmsModelPlugin();\n return plugin.getModel(model);\n };\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 = (\n model: StorageOperationsCmsModel\n ): 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: CmsEntryStorageOperations[\"create\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n /**\n * We need to:\n * - create new main entry item\n * - create new or update the 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 initialStorageEntry;\n };\n\n const createRevisionFrom: CmsEntryStorageOperations[\"createRevisionFrom\"] = async (\n initialModel,\n params\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n\n /**\n * We need to:\n * - create the main entry item\n * - update the latest entry item to the current one\n * - if the entry's status was set to \"published\":\n * - update the published entry item to the current one\n * - unpublish previously published revision (if any)\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\n const isPublished = entry.status === \"published\";\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createPublishedSortKey(),\n TYPE: createPublishedType(),\n GSI1_PK: createGSIPartitionKey(model, \"P\"),\n GSI1_SK: createGSISortKey(storageEntry)\n })\n );\n\n // Unpublish previously published revision (if any).\n const [publishedRevisionStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId(\n {\n model,\n ids: [entry.id]\n }\n );\n\n if (publishedRevisionStorageEntry) {\n items.push(\n entity.putBatch({\n ...publishedRevisionStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(publishedRevisionStorageEntry),\n TYPE: createType(),\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(publishedRevisionStorageEntry)\n })\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 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 initialStorageEntry;\n };\n\n const update: CmsEntryStorageOperations[\"update\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 const locked = isPublished ? true : entry.locked;\n\n const items = [];\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\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 necessary.\n */\n const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (latestStorageEntry) {\n const updatingLatestRevision = latestStorageEntry.id === entry.id;\n if (updatingLatestRevision) {\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 } else {\n /**\n * If not updating latest revision, we still want to update the latest revision's\n * entry-level meta fields to match the current revision's entry-level meta fields.\n */\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n /**\n * First we update the regular DynamoDB table. Two updates are needed:\n * - one for the actual revision record\n * - one for the latest record\n */\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\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 move: CmsEntryStorageOperations[\"move\"] = async (initialModel, id, folderId) => {\n /**\n * We need to:\n * - load all the revisions of the entry, including published and latest\n * - update all the revisions (published and latest ) of the entry with new folderId\n */\n const model = getStorageOperationsModel(initialModel);\n /**\n * First we need to load all the revisions and published / latest entry.\n */\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n const records = await queryAll<CmsEntry>(queryAllParams);\n /**\n * Then create the batch writes for the DynamoDB, with the updated folderId.\n */\n const items = records.map(item => {\n return entity.putBatch({\n ...item,\n location: {\n ...item.location,\n folderId\n }\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw WebinyError.from(ex, {\n message: \"Could not move records to a new folder.\",\n data: {\n id,\n folderId\n }\n });\n }\n };\n\n const moveToBin: CmsEntryStorageOperations[\"moveToBin\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n /**\n * First we need to load all the revisions and published / latest entries.\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: DbItem<CmsEntry>[] = [];\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 id: entry.id\n }\n );\n }\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n\n /**\n * Let's pick the `deleted` meta fields from the storage entry.\n */\n const updatedDeletedMetaFields = pickEntryMetaFields(storageEntry, isDeletedEntryMetaField);\n\n /**\n * Then create the batch writes for the DynamoDB, with the updated data.\n */\n const items = records.map(record => {\n return entity.putBatch({\n ...record,\n ...updatedDeletedMetaFields,\n wbyDeleted: storageEntry.wbyDeleted,\n location: storageEntry.location,\n binOriginalFolderId: storageEntry.binOriginalFolderId\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not move the entry to the bin.\",\n ex.code || \"MOVE_ENTRY_TO_BIN_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n };\n\n const deleteEntry: CmsEntryStorageOperations[\"delete\"] = async (initialModel, params) => {\n const { entry } = params;\n const id = entry.id || entry.entryId;\n const model = getStorageOperationsModel(initialModel);\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n options: {\n gte: \" \"\n }\n };\n\n let records: DbItem<CmsEntry>[] = [];\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 id\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 id\n }\n );\n }\n };\n\n const restoreFromBin: CmsEntryStorageOperations[\"restoreFromBin\"] = async (\n initialModel,\n params\n ) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n /**\n * First we need to load all the revisions and published / latest entries.\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: DbItem<CmsEntry>[] = [];\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 id: entry.id\n }\n );\n }\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n\n /**\n * Let's pick the `restored` meta fields from the storage entry.\n */\n const updatedRestoredMetaFields = pickEntryMetaFields(\n storageEntry,\n isRestoredEntryMetaField\n );\n\n const items = records.map(record => {\n return entity.putBatch({\n ...record,\n ...updatedRestoredMetaFields,\n wbyDeleted: storageEntry.wbyDeleted,\n location: storageEntry.location,\n binOriginalFolderId: storageEntry.binOriginalFolderId\n });\n });\n /**\n * And finally write it...\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n\n return initialStorageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not restore the entry from the bin.\",\n ex.code || \"RESTORE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n };\n\n const deleteRevision: CmsEntryStorageOperations[\"deleteRevision\"] = async (\n initialModel,\n params\n ) => {\n const { entry, latestEntry, latestStorageEntry: initialLatestStorageEntry } = params;\n\n const model = getStorageOperationsModel(initialModel);\n\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\n if (initialLatestStorageEntry) {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\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 // Do an update on the latest revision. We need to update the latest revision's\n // entry-level meta fields to match the previous revision's entry-level meta fields.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(initialLatestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(initialLatestStorageEntry)\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 deleteMultipleEntries: CmsEntryStorageOperations[\"deleteMultipleEntries\"] = async (\n initialModel,\n params\n ) => {\n const { entries } = params;\n const model = getStorageOperationsModel(initialModel);\n /**\n * First we need all the revisions of the entries we want to delete.\n */\n const revisions = await dataLoaders.getAllEntryRevisions({\n model,\n ids: entries\n });\n /**\n * Then we need to construct the queries for all the revisions and entries.\n */\n const items: Record<string, WriteRequest>[] = [];\n for (const id of entries) {\n /**\n * Latest item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"L\"\n })\n );\n /**\n * Published item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"P\"\n })\n );\n }\n /**\n * Exact revisions of all the entries\n */\n for (const revision of revisions) {\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id: revision.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey({\n version: revision.version\n })\n })\n );\n }\n\n await batchWriteAll({\n table: entity.table,\n items\n });\n };\n\n const getLatestRevisionByEntryId: CmsEntryStorageOperations[\"getLatestRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n const getPublishedRevisionByEntryId: CmsEntryStorageOperations[\"getPublishedRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisionById: CmsEntryStorageOperations[\"getRevisionById\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n const item = items.shift() || null;\n if (!item) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n };\n\n const getRevisions: CmsEntryStorageOperations[\"getRevisions\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getByIds: CmsEntryStorageOperations[\"getByIds\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getLatestByIds: CmsEntryStorageOperations[\"getLatestByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPublishedByIds: CmsEntryStorageOperations[\"getPublishedByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const items = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return items.map(item => {\n return convertFromStorageEntry({\n storageEntry: item,\n model\n });\n });\n };\n\n const getPreviousRevision: CmsEntryStorageOperations[\"getPreviousRevision\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\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 const storageEntry = cleanupItem(entity, result);\n if (!storageEntry) {\n return null;\n }\n return convertFromStorageEntry({\n storageEntry,\n model\n });\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: CmsEntryStorageOperations[\"list\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const {\n limit: initialLimit = 10,\n where: initialWhere,\n after,\n sort: sortBy,\n fields,\n search\n } = params;\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : 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 storageEntries: CmsStorageEntry[] = [];\n try {\n storageEntries = await queryAll<CmsStorageEntry>(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 (storageEntries.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 an 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 = createFields({\n plugins,\n fields: model.fields\n });\n\n const fromStorage = createStorageTransformCallable(model);\n /**\n * Let's transform records from storage ones to regular ones, so we do not need to do it later.\n *\n * This is always being done, but at least its in parallel.\n */\n const records = await Promise.all(\n storageEntries.map(async storageEntry => {\n const entry = convertFromStorageEntry({\n storageEntry,\n model\n });\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(\n field,\n entry.values[field.fieldId]\n );\n }\n\n return entry as CmsEntry;\n })\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 = filter({\n items: records,\n where,\n plugins,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: fields || []\n }\n });\n\n const totalCount = filteredItems.length;\n\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 = sort({\n model,\n plugins,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"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 = encodeCursor(`${start + limit}`);\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: cleanupItems(entity, slicedItems)\n };\n };\n\n const get: CmsEntryStorageOperations[\"get\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish: CmsEntryStorageOperations[\"publish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\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 alongside the publishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n if (!initialLatestStorageEntry) {\n throw new WebinyError(\n `Could not publish entry. Could not load latest (\"L\") record.`,\n \"PUBLISH_ERROR\",\n { entry }\n );\n }\n\n const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);\n\n const storageEntry = convertToStorageEntry({\n model,\n storageEntry: initialStorageEntry\n });\n\n // 1. Update REV# and P records with new data.\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\n // 2. When it comes to the latest record, we need to perform a couple of different\n // updates, based on whether the entry being published is the latest revision or not.\n const publishedRevisionId = initialPublishedStorageEntry?.id;\n const publishingLatestRevision = entry.id === initialLatestStorageEntry.id;\n\n if (publishingLatestRevision) {\n // 2.1 If we're publishing the latest revision, we first need to update the L record.\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 // 2.2 Additionally, if we have a previously published entry, we need to mark it as unpublished.\n if (publishedRevisionId && publishedRevisionId !== entry.id) {\n const publishedStorageEntry = convertToStorageEntry({\n storageEntry: initialPublishedStorageEntry,\n model\n });\n\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 } else {\n // 2.3 If the published revision is not the latest one, the situation is a bit\n // more complex. We first need to update the L and REV# records with the new\n // values of *only entry-level* meta fields.\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n\n // 2.3.1 Update L record. Apart from updating the entry-level meta fields, we also need\n // to change the status from \"published\" to \"unpublished\" (if the status is set to \"published\").\n let latestRevisionStatus = latestStorageEntry.status;\n if (latestRevisionStatus === CONTENT_ENTRY_STATUS.PUBLISHED) {\n latestRevisionStatus = CONTENT_ENTRY_STATUS.UNPUBLISHED;\n }\n\n const latestStorageEntryFields = {\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n status: latestRevisionStatus\n };\n\n items.push(\n entity.putBatch({\n ...latestStorageEntryFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n // 2.3.2 Update REV# record.\n items.push(\n entity.putBatch({\n ...latestStorageEntryFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n // 2.3.3 Finally, if we got a published entry, but it wasn't the latest one, we need to take\n // an extra step and mark it as unpublished.\n const publishedRevisionDifferentFromLatest =\n publishedRevisionId && publishedRevisionId !== latestStorageEntry.id;\n if (publishedRevisionDifferentFromLatest) {\n const publishedStorageEntry = convertToStorageEntry({\n storageEntry: initialPublishedStorageEntry,\n model\n });\n\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\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\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: initialLatestStorageEntry,\n publishedStorageEntry: initialPublishedStorageEntry\n }\n );\n }\n };\n\n const unpublish: CmsEntryStorageOperations[\"unpublish\"] = async (initialModel, params) => {\n const { entry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const storageEntry = convertToStorageEntry({\n storageEntry: initialStorageEntry,\n model\n });\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update the 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 alongside the unpublishing one.\n */\n const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);\n\n if (initialLatestStorageEntry) {\n const unpublishingLatestRevision = entry.id === initialLatestStorageEntry.id;\n if (unpublishingLatestRevision) {\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 } else {\n const latestStorageEntry = convertToStorageEntry({\n storageEntry: initialLatestStorageEntry,\n model\n });\n\n // If the unpublished revision is not the latest one, we still need to\n // update the latest record with the new values of entry-level meta fields.\n const updatedEntryLevelMetaFields = pickEntryMetaFields(\n entry,\n isEntryLevelEntryMetaField\n );\n\n // 1. Update actual revision record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createRevisionSortKey(latestStorageEntry),\n TYPE: createType(),\n GSI1_PK: createGSIPartitionKey(model, \"A\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n\n // 2. Update latest record.\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n ...updatedEntryLevelMetaFields,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType(),\n GSI1_PK: createGSIPartitionKey(model, \"L\"),\n GSI1_SK: createGSISortKey(latestStorageEntry)\n })\n );\n }\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n return initialStorageEntry;\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 const getUniqueFieldValues: CmsEntryStorageOperations[\"getUniqueFieldValues\"] = async (\n model,\n params\n ) => {\n const { where, fieldId } = params;\n\n const field = model.fields.find(f => f.fieldId === fieldId);\n if (!field) {\n throw new WebinyError(\n `Could not find field with given \"fieldId\" value.`,\n \"FIELD_NOT_FOUND\",\n {\n fieldId\n }\n );\n }\n\n const { items } = await list(model, {\n where,\n limit: MAX_LIST_LIMIT\n });\n\n const result: Record<string, CmsEntryUniqueValue> = {};\n for (const item of items) {\n const fieldValue = item.values[field.fieldId] as string[] | string | undefined;\n if (!fieldValue) {\n continue;\n }\n const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n if (values.length === 0) {\n continue;\n }\n for (const value of values) {\n result[value] = {\n value,\n count: (result[value]?.count || 0) + 1\n };\n }\n }\n\n return Object.values(result)\n .sort((a, b) => (a.value > b.value ? 1 : b.value > a.value ? -1 : 0))\n .sort((a, b) => b.count - a.count);\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n move,\n delete: deleteEntry,\n moveToBin,\n restoreFromBin,\n deleteRevision,\n deleteMultipleEntries,\n getPreviousRevision,\n getPublishedByIds,\n getLatestByIds,\n getByIds,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId,\n get,\n getRevisions,\n publish,\n list,\n unpublish,\n dataLoaders,\n getUniqueFieldValues\n };\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-ddb",
3
- "version": "5.40.5-beta.0",
3
+ "version": "5.40.6-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-headless-cms",
@@ -23,12 +23,13 @@
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
25
  "@babel/runtime": "7.24.1",
26
- "@webiny/api-headless-cms": "5.40.5-beta.0",
27
- "@webiny/aws-sdk": "5.40.5-beta.0",
28
- "@webiny/db-dynamodb": "5.40.5-beta.0",
29
- "@webiny/error": "5.40.5-beta.0",
30
- "@webiny/handler-db": "5.40.5-beta.0",
31
- "@webiny/utils": "5.40.5-beta.0",
26
+ "@webiny/api": "5.40.6-beta.0",
27
+ "@webiny/api-headless-cms": "5.40.6-beta.0",
28
+ "@webiny/aws-sdk": "5.40.6-beta.0",
29
+ "@webiny/db-dynamodb": "5.40.6-beta.0",
30
+ "@webiny/error": "5.40.6-beta.0",
31
+ "@webiny/handler-db": "5.40.6-beta.0",
32
+ "@webiny/utils": "5.40.6-beta.0",
32
33
  "dataloader": "2.2.1",
33
34
  "dot-prop": "6.0.1",
34
35
  "jsonpack": "1.1.5",
@@ -39,9 +40,9 @@
39
40
  "@babel/core": "7.24.3",
40
41
  "@babel/preset-env": "7.24.3",
41
42
  "@types/jsonpack": "1.1.2",
42
- "@webiny/cli": "5.40.5-beta.0",
43
- "@webiny/plugins": "5.40.5-beta.0",
44
- "@webiny/project-utils": "5.40.5-beta.0",
43
+ "@webiny/cli": "5.40.6-beta.0",
44
+ "@webiny/plugins": "5.40.6-beta.0",
45
+ "@webiny/project-utils": "5.40.6-beta.0",
45
46
  "jest": "29.7.0",
46
47
  "jest-dynalite": "3.6.1",
47
48
  "ttypescript": "1.5.15",
@@ -55,5 +56,5 @@
55
56
  "build": "yarn webiny run build",
56
57
  "watch": "yarn webiny run watch"
57
58
  },
58
- "gitHead": "f67778732392ed88f28da869ddacbf08a98cdec6"
59
+ "gitHead": "c0bf7d9bfe72b0689b29c84506f3168515a78517"
59
60
  }
@@ -6,13 +6,13 @@ import { CmsFieldFilterValueTransformPlugin } from "../types";
6
6
  * This plugin is used to create the filter.
7
7
  * Internally we have default one + the one for the reference field - because it is actually an object when filtering.
8
8
  */
9
- interface CmsEntryFieldFilterPluginParams {
9
+ interface CmsEntryFieldFilterPluginParams<T = any> {
10
10
  fieldType: string;
11
- create: (params: CmsEntryFieldFilterPluginCreateParams) => null | CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[];
11
+ create: (params: CmsEntryFieldFilterPluginCreateParams<T>) => null | CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[];
12
12
  }
13
- interface CmsEntryFieldFilterPluginCreateParams {
13
+ interface CmsEntryFieldFilterPluginCreateParams<T = any> {
14
14
  key: string;
15
- value: any;
15
+ value: T;
16
16
  field: Field;
17
17
  fields: Record<string, Field>;
18
18
  operation: string;
@@ -32,12 +32,12 @@ export interface CmsEntryFieldFilterPluginCreateResponse {
32
32
  compareValue: any;
33
33
  transformValue: <I = any, O = any>(value: I) => O;
34
34
  }
35
- export declare class CmsEntryFieldFilterPlugin extends Plugin {
35
+ export declare class CmsEntryFieldFilterPlugin<T = any> extends Plugin {
36
36
  static readonly type: string;
37
37
  static readonly ALL: string;
38
38
  private readonly config;
39
39
  readonly fieldType: string;
40
- constructor(config: CmsEntryFieldFilterPluginParams);
41
- create(params: CmsEntryFieldFilterPluginCreateParams): CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[] | null;
40
+ constructor(config: CmsEntryFieldFilterPluginParams<T>);
41
+ create(params: CmsEntryFieldFilterPluginCreateParams<T>): CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[] | null;
42
42
  }
43
43
  export {};
@@ -1 +1 @@
1
- {"version":3,"names":["_plugins","require","CmsEntryFieldFilterPlugin","Plugin","type","ALL","constructor","config","fieldType","create","params","exports"],"sources":["CmsEntryFieldFilterPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { Field } from \"~/operations/entry/filtering/types\";\nimport { CmsFieldFilterValueTransformPlugin } from \"~/types\";\n\n/**\n * This plugin is used to create the filter.\n * Internally we have default one + the one for the reference field - because it is actually an object when filtering.\n */\n\ninterface CmsEntryFieldFilterPluginParams {\n fieldType: string;\n create: (\n params: CmsEntryFieldFilterPluginCreateParams\n ) => null | CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[];\n}\n\ninterface CmsEntryFieldFilterPluginCreateParams {\n key: string;\n value: any;\n field: Field;\n fields: Record<string, Field>;\n operation: string;\n valueFilterPlugins: Record<string, ValueFilterPlugin>;\n transformValuePlugins: Record<string, CmsFieldFilterValueTransformPlugin>;\n getFilterCreatePlugin: (type: string) => CmsEntryFieldFilterPlugin;\n negate: boolean;\n compareValue: any;\n transformValue: <I = any, O = any>(value: I) => O;\n}\n\nexport interface CmsEntryFieldFilterPluginCreateResponse {\n field: Field;\n path: string;\n fieldPathId: string;\n plugin: ValueFilterPlugin;\n negate: boolean;\n compareValue: any;\n transformValue: <I = any, O = any>(value: I) => O;\n}\n\nexport class CmsEntryFieldFilterPlugin extends Plugin {\n public static override readonly type: string = \"cms.dynamodb.entry.field.filter\";\n public static readonly ALL: string = \"*\";\n\n private readonly config: CmsEntryFieldFilterPluginParams;\n\n public readonly fieldType: string;\n\n public constructor(config: CmsEntryFieldFilterPluginParams) {\n super();\n this.config = config;\n this.fieldType = this.config.fieldType;\n }\n\n public create(params: CmsEntryFieldFilterPluginCreateParams) {\n return this.config.create(params);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAKA;AACA;AACA;AACA;;AAiCO,MAAMC,yBAAyB,SAASC,eAAM,CAAC;EAClD,OAAgCC,IAAI,GAAW,iCAAiC;EAChF,OAAuBC,GAAG,GAAW,GAAG;EAMjCC,WAAWA,CAACC,MAAuC,EAAE;IACxD,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI,CAACD,MAAM,CAACC,SAAS;EAC1C;EAEOC,MAAMA,CAACC,MAA6C,EAAE;IACzD,OAAO,IAAI,CAACH,MAAM,CAACE,MAAM,CAACC,MAAM,CAAC;EACrC;AACJ;AAACC,OAAA,CAAAT,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_plugins","require","CmsEntryFieldFilterPlugin","Plugin","type","ALL","constructor","config","fieldType","create","params","exports"],"sources":["CmsEntryFieldFilterPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { Field } from \"~/operations/entry/filtering/types\";\nimport { CmsFieldFilterValueTransformPlugin } from \"~/types\";\n\n/**\n * This plugin is used to create the filter.\n * Internally we have default one + the one for the reference field - because it is actually an object when filtering.\n */\n\ninterface CmsEntryFieldFilterPluginParams<T = any> {\n fieldType: string;\n create: (\n params: CmsEntryFieldFilterPluginCreateParams<T>\n ) => null | CmsEntryFieldFilterPluginCreateResponse | CmsEntryFieldFilterPluginCreateResponse[];\n}\n\ninterface CmsEntryFieldFilterPluginCreateParams<T = any> {\n key: string;\n value: T;\n field: Field;\n fields: Record<string, Field>;\n operation: string;\n valueFilterPlugins: Record<string, ValueFilterPlugin>;\n transformValuePlugins: Record<string, CmsFieldFilterValueTransformPlugin>;\n getFilterCreatePlugin: (type: string) => CmsEntryFieldFilterPlugin;\n negate: boolean;\n compareValue: any;\n transformValue: <I = any, O = any>(value: I) => O;\n}\n\nexport interface CmsEntryFieldFilterPluginCreateResponse {\n field: Field;\n path: string;\n fieldPathId: string;\n plugin: ValueFilterPlugin;\n negate: boolean;\n compareValue: any;\n transformValue: <I = any, O = any>(value: I) => O;\n}\n\nexport class CmsEntryFieldFilterPlugin<T = any> extends Plugin {\n public static override readonly type: string = \"cms.dynamodb.entry.field.filter\";\n public static readonly ALL: string = \"*\";\n\n private readonly config: CmsEntryFieldFilterPluginParams<T>;\n\n public readonly fieldType: string;\n\n public constructor(config: CmsEntryFieldFilterPluginParams<T>) {\n super();\n this.config = config;\n this.fieldType = this.config.fieldType;\n }\n\n public create(params: CmsEntryFieldFilterPluginCreateParams<T>) {\n return this.config.create(params);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAKA;AACA;AACA;AACA;;AAiCO,MAAMC,yBAAyB,SAAkBC,eAAM,CAAC;EAC3D,OAAgCC,IAAI,GAAW,iCAAiC;EAChF,OAAuBC,GAAG,GAAW,GAAG;EAMjCC,WAAWA,CAACC,MAA0C,EAAE;IAC3D,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI,CAACD,MAAM,CAACC,SAAS;EAC1C;EAEOC,MAAMA,CAACC,MAAgD,EAAE;IAC5D,OAAO,IAAI,CAACH,MAAM,CAACE,MAAM,CAACC,MAAM,CAAC;EACrC;AACJ;AAACC,OAAA,CAAAT,yBAAA,GAAAA,yBAAA","ignoreList":[]}