@webiny/api-headless-cms-ddb-es 0.0.0-mt-3 → 0.0.0-unstable.40876133bb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/configurations.d.ts +2 -2
  2. package/configurations.js +18 -7
  3. package/configurations.js.map +1 -0
  4. package/definitions/entry.d.ts +2 -2
  5. package/definitions/entry.js +6 -7
  6. package/definitions/entry.js.map +1 -0
  7. package/definitions/entryElasticsearch.d.ts +2 -2
  8. package/definitions/entryElasticsearch.js +3 -7
  9. package/definitions/entryElasticsearch.js.map +1 -0
  10. package/definitions/group.d.ts +2 -2
  11. package/definitions/group.js +3 -7
  12. package/definitions/group.js.map +1 -0
  13. package/definitions/model.d.ts +2 -2
  14. package/definitions/model.js +3 -7
  15. package/definitions/model.js.map +1 -0
  16. package/definitions/settings.d.ts +2 -2
  17. package/definitions/settings.js +3 -7
  18. package/definitions/settings.js.map +1 -0
  19. package/definitions/system.d.ts +2 -2
  20. package/definitions/system.js +3 -7
  21. package/definitions/system.js.map +1 -0
  22. package/definitions/table.d.ts +2 -2
  23. package/definitions/table.js.map +1 -0
  24. package/definitions/tableElasticsearch.d.ts +2 -2
  25. package/definitions/tableElasticsearch.js.map +1 -0
  26. package/dynamoDb/index.d.ts +1 -1
  27. package/dynamoDb/index.js +4 -6
  28. package/dynamoDb/index.js.map +1 -0
  29. package/dynamoDb/storage/date.d.ts +2 -3
  30. package/dynamoDb/storage/date.js +80 -46
  31. package/dynamoDb/storage/date.js.map +1 -0
  32. package/dynamoDb/storage/longText.d.ts +7 -4
  33. package/dynamoDb/storage/longText.js +72 -54
  34. package/dynamoDb/storage/longText.js.map +1 -0
  35. package/dynamoDb/storage/richText.d.ts +2 -3
  36. package/dynamoDb/storage/richText.js +85 -67
  37. package/dynamoDb/storage/richText.js.map +1 -0
  38. package/elasticsearch/createElasticsearchIndex.d.ts +9 -0
  39. package/elasticsearch/createElasticsearchIndex.js +60 -0
  40. package/elasticsearch/createElasticsearchIndex.js.map +1 -0
  41. package/elasticsearch/deleteElasticsearchIndex.d.ts +8 -0
  42. package/elasticsearch/deleteElasticsearchIndex.js +43 -0
  43. package/elasticsearch/deleteElasticsearchIndex.js.map +1 -0
  44. package/elasticsearch/index.d.ts +1 -1
  45. package/elasticsearch/index.js +1 -1
  46. package/elasticsearch/index.js.map +1 -0
  47. package/elasticsearch/indexing/dateTimeIndexing.js +15 -1
  48. package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -0
  49. package/elasticsearch/indexing/defaultFieldIndexing.js.map +1 -0
  50. package/elasticsearch/indexing/index.js +1 -1
  51. package/elasticsearch/indexing/index.js.map +1 -0
  52. package/elasticsearch/indexing/longTextIndexing.js.map +1 -0
  53. package/elasticsearch/indexing/numberIndexing.js.map +1 -0
  54. package/elasticsearch/indexing/objectIndexing.d.ts +9 -0
  55. package/elasticsearch/indexing/objectIndexing.js +32 -9
  56. package/elasticsearch/indexing/objectIndexing.js.map +1 -0
  57. package/elasticsearch/indexing/richTextIndexing.js.map +1 -0
  58. package/elasticsearch/indices/base.d.ts +2 -0
  59. package/elasticsearch/indices/base.js +15 -0
  60. package/elasticsearch/indices/base.js.map +1 -0
  61. package/elasticsearch/indices/index.d.ts +1 -0
  62. package/elasticsearch/indices/index.js +16 -0
  63. package/elasticsearch/indices/index.js.map +1 -0
  64. package/elasticsearch/indices/japanese.d.ts +2 -0
  65. package/elasticsearch/indices/japanese.js +16 -0
  66. package/elasticsearch/indices/japanese.js.map +1 -0
  67. package/elasticsearch/search/index.d.ts +2 -2
  68. package/elasticsearch/search/index.js +3 -5
  69. package/elasticsearch/search/index.js.map +1 -0
  70. package/elasticsearch/search/refSearch.d.ts +2 -3
  71. package/elasticsearch/search/refSearch.js +25 -16
  72. package/elasticsearch/search/refSearch.js.map +1 -0
  73. package/elasticsearch/search/timeSearch.d.ts +2 -3
  74. package/elasticsearch/search/timeSearch.js +22 -14
  75. package/elasticsearch/search/timeSearch.js.map +1 -0
  76. package/helpers/createElasticsearchQueryBody.js +320 -84
  77. package/helpers/createElasticsearchQueryBody.js.map +1 -0
  78. package/helpers/entryIndexHelpers.js +33 -18
  79. package/helpers/entryIndexHelpers.js.map +1 -0
  80. package/helpers/fields.d.ts +4 -62
  81. package/helpers/fields.js +39 -8
  82. package/helpers/fields.js.map +1 -0
  83. package/helpers/index.js.map +1 -0
  84. package/helpers/searchPluginsList.d.ts +2 -2
  85. package/helpers/searchPluginsList.js +1 -1
  86. package/helpers/searchPluginsList.js.map +1 -0
  87. package/helpers/transformValueForSearch.d.ts +5 -2
  88. package/helpers/transformValueForSearch.js +3 -0
  89. package/helpers/transformValueForSearch.js.map +1 -0
  90. package/index.d.ts +1 -0
  91. package/index.js +126 -29
  92. package/index.js.map +1 -0
  93. package/operations/entry/dataLoaders.d.ts +6 -2
  94. package/operations/entry/dataLoaders.js +31 -13
  95. package/operations/entry/dataLoaders.js.map +1 -0
  96. package/operations/entry/elasticsearchFields.js +6 -0
  97. package/operations/entry/elasticsearchFields.js.map +1 -0
  98. package/operations/entry/index.d.ts +2 -2
  99. package/operations/entry/index.js +445 -331
  100. package/operations/entry/index.js.map +1 -0
  101. package/operations/entry/keys.js.map +1 -0
  102. package/operations/group/index.d.ts +2 -2
  103. package/operations/group/index.js +8 -15
  104. package/operations/group/index.js.map +1 -0
  105. package/operations/model/index.d.ts +2 -2
  106. package/operations/model/index.js +38 -39
  107. package/operations/model/index.js.map +1 -0
  108. package/operations/settings/index.d.ts +2 -2
  109. package/operations/settings/index.js +7 -13
  110. package/operations/settings/index.js.map +1 -0
  111. package/operations/system/index.d.ts +2 -2
  112. package/operations/system/index.js +5 -11
  113. package/operations/system/index.js.map +1 -0
  114. package/package.json +24 -29
  115. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.d.ts +6 -3
  116. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js +3 -3
  117. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js.map +1 -0
  118. package/plugins/CmsEntryElasticsearchFieldPlugin.d.ts +3 -3
  119. package/plugins/CmsEntryElasticsearchFieldPlugin.js +3 -3
  120. package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +1 -0
  121. package/plugins/CmsEntryElasticsearchIndexPlugin.d.ts +4 -0
  122. package/plugins/CmsEntryElasticsearchIndexPlugin.js +17 -0
  123. package/plugins/CmsEntryElasticsearchIndexPlugin.js.map +1 -0
  124. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.d.ts +30 -0
  125. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.js +43 -0
  126. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.js.map +1 -0
  127. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.d.ts +3 -3
  128. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js +3 -3
  129. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js.map +1 -0
  130. package/plugins/CmsEntryElasticsearchSortModifierPlugin.d.ts +3 -3
  131. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js +3 -3
  132. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js.map +1 -0
  133. package/plugins/index.d.ts +6 -0
  134. package/plugins/index.js +83 -0
  135. package/plugins/index.js.map +1 -0
  136. package/types.d.ts +7 -34
  137. package/types.js +0 -13
  138. package/types.js.map +1 -0
  139. package/helpers/operatorPluginsList.d.ts +0 -7
  140. package/helpers/operatorPluginsList.js +0 -30
  141. package/operations/entry/fields.d.ts +0 -3
  142. package/operations/entry/fields.js +0 -60
  143. package/operations/system/createElasticsearchTemplate.d.ts +0 -5
  144. package/operations/system/createElasticsearchTemplate.js +0 -62
  145. package/upgrades/index.d.ts +0 -2
  146. package/upgrades/index.js +0 -16
  147. package/upgrades/utils.d.ts +0 -1
  148. package/upgrades/utils.js +0 -16
  149. package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +0 -6
  150. package/upgrades/v5.0.0/cleanDatabaseRecord.js +0 -16
  151. package/upgrades/v5.0.0/createOldVersionIndiceName.d.ts +0 -2
  152. package/upgrades/v5.0.0/createOldVersionIndiceName.js +0 -12
  153. package/upgrades/v5.0.0/entryValueFixer.d.ts +0 -4
  154. package/upgrades/v5.0.0/entryValueFixer.js +0 -124
  155. package/upgrades/v5.0.0/fieldFinder.d.ts +0 -6
  156. package/upgrades/v5.0.0/fieldFinder.js +0 -42
  157. package/upgrades/v5.0.0/helpers.d.ts +0 -4
  158. package/upgrades/v5.0.0/helpers.js +0 -57
  159. package/upgrades/v5.0.0/index.d.ts +0 -4
  160. package/upgrades/v5.0.0/index.js +0 -232
  161. package/upgrades/v5.8.0/index.d.ts +0 -4
  162. package/upgrades/v5.8.0/index.js +0 -426
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createType","createLatestType","createPublishedType","getEntryData","entry","lodashOmit","TYPE","__type","getESLatestEntryData","plugins","compress","latest","getESPublishedEntryData","published","convertToStorageEntry","params","model","values","convertValueKeyToStorage","fields","convertFromStorageEntry","convertValueKeyFromStorage","createEntriesStorageOperations","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","initialEntry","storageEntry","initialStorageEntry","isPublished","status","locked","esEntry","prepareEntryToIndex","lodashCloneDeep","index","esIndex","configurations","es","esLatestData","esPublishedData","revisionKeys","PK","createPartitionKey","id","locale","tenant","SK","createRevisionSortKey","latestKeys","createLatestSortKey","publishedKeys","createPublishedSortKey","items","putBatch","push","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","esItems","data","createRevisionFrom","put","update","latestStorageEntry","getLatestRevisionByEntryId","ids","publishedStorageEntry","getPublishedRevisionByEntryId","undefined","elasticsearchLatestData","elasticsearchPublishedData","length","deleteEntry","partitionKey","queryAll","options","gte","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","latestEntry","list","limit","createLimit","result","indices","exists","body","hasMoreItems","totalCount","cursor","createElasticsearchQueryBody","args","parentPath","response","search","hits","total","extractEntriesFromIndex","entries","_source","pop","encodeCursor","sort","value","get","shift","publish","latestEsEntry","getRecord","keys","previouslyPublishedEntry","getRevisionById","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","decompress","PUBLISHED","publishedOn","preparedEntryData","unpublish","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","entryId","version","queryParams","lt","zeroPad","filters","attr","eq","reverse","queryOne","cleanupItem","delete"],"sources":["index.ts"],"sourcesContent":["import {\n CmsEntry,\n CmsEntryStorageOperations,\n CmsEntryStorageOperationsCreateParams,\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryStorageOperationsDeleteParams,\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryStorageOperationsGetByIdsParams,\n CmsEntryStorageOperationsGetLatestByIdsParams,\n CmsEntryStorageOperationsGetLatestRevisionParams,\n CmsEntryStorageOperationsGetParams,\n CmsEntryStorageOperationsGetPreviousRevisionParams,\n CmsEntryStorageOperationsGetPublishedByIdsParams,\n CmsEntryStorageOperationsGetRevisionParams,\n CmsEntryStorageOperationsGetRevisionsParams,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsPublishParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport {\n createElasticsearchQueryBody,\n extractEntriesFromIndex,\n prepareEntryToIndex\n} from \"~/helpers\";\nimport { configurations } from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport lodashCloneDeep from \"lodash/cloneDeep\";\nimport lodashOmit from \"lodash/omit\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { DataLoadersHandler } from \"~/operations/entry/dataLoaders\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { queryAll, queryOne, QueryOneParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { createLimit, encodeCursor, compress, decompress } from \"@webiny/api-elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\nimport { CmsIndexEntry } from \"~/types\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nexport const createLatestType = (): string => {\n return `${createType()}.l`;\n};\nexport const createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\nconst getEntryData = (entry: CmsEntry) => {\n return {\n ...lodashOmit(entry, [\"PK\", \"SK\", \"published\", \"latest\"]),\n TYPE: createType(),\n __type: createType()\n };\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestType(),\n __type: createLatestType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedType(),\n __type: createPublishedType()\n });\n};\n\ninterface ConvertStorageEntryParams {\n entry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertToStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyToStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\nconst convertFromStorageEntry = (params: ConvertStorageEntryParams): CmsStorageEntry => {\n const { model, entry } = params;\n\n const values = model.convertValueKeyFromStorage({\n fields: model.fields,\n values: entry.values\n });\n return {\n ...entry,\n values\n };\n};\n\ninterface ElasticsearchDbRecord {\n index: string;\n data: Record<string, string>;\n}\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const isPublished = initialEntry.status === \"published\";\n const locked = isPublished ? true : initialEntry.locked;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({ ...entry, locked }),\n storageEntry: lodashCloneDeep({ ...storageEntry, locked })\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n const esPublishedData = await getESPublishedEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createType()\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n ...latestKeys,\n TYPE: createLatestType()\n })\n ];\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedType()\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 entry data into the DynamoDB table.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n\n const esItems = [\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\n })\n ];\n if (isPublished) {\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: esPublishedData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert entry data into the Elasticsearch DynamoDB table.\",\n ex.code || \"CREATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n esEntry\n }\n );\n }\n\n return initialStorageEntry;\n };\n\n const createRevisionFrom = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestType(),\n ...latestKeys\n })\n ];\n\n const { index } = configurations.es({\n model\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 in the DynamoDB table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n /**\n * Update the \"latest\" entry item in the Elasticsearch\n */\n try {\n await esEntity.put({\n ...latestKeys,\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update latest entry in the DynamoDB Elasticsearch table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n entry\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 = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUpdateParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n const isPublished = entry.status === \"published\";\n const locked = isPublished ? true : entry.locked;\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n locked,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedType()\n })\n );\n }\n\n const esItems = [];\n\n const { index: esIndex } = configurations.es({\n model\n });\n /**\n * Variable for the elasticsearch entry so we do not convert it more than once\n */\n let esEntry: CmsIndexEntry | undefined = undefined;\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData: any = null;\n if (latestStorageEntry?.id === entry.id) {\n /**\n * First we update the regular DynamoDB table\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestSortKey()\n })\n );\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\n\n esItems.push(\n esEntity.putBatch({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n })\n );\n }\n let elasticsearchPublishedData = null;\n if (isPublished && publishedStorageEntry?.id === entry.id) {\n if (!elasticsearchLatestData) {\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n if (!esEntry) {\n esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep({\n ...entry,\n locked\n }),\n storageEntry: lodashCloneDeep({\n ...storageEntry,\n locked\n })\n });\n }\n elasticsearchPublishedData = await getESPublishedEntryData(plugins, esEntry);\n } else {\n elasticsearchPublishedData = {\n ...elasticsearchLatestData,\n published: true,\n TYPE: createPublishedType(),\n __type: createPublishedType()\n };\n delete elasticsearchPublishedData.latest;\n }\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index: esIndex,\n data: elasticsearchPublishedData\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 update entry DynamoDB records.\",\n ex.code || \"UPDATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry\n }\n );\n }\n if (esItems.length === 0) {\n return initialStorageEntry;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch records.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const deleteEntry = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteParams\n ) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const items = await queryAll<CmsEntry>({\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const esItems = await queryAll<CmsEntry>({\n entity: esEntity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const deleteItems = items.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n const deleteEsItems = esItems.map(item => {\n return esEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items: deleteItems\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: deleteEsItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const { index } = configurations.es({\n model\n });\n /**\n * We need published entry to delete it if necessary.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n /**\n * We need to delete all existing records of the given entry revision.\n */\n const items = [\n /**\n * Delete records of given entry revision.\n */\n entity.deleteBatch({\n PK: partitionKey,\n SK: createRevisionSortKey(entry)\n })\n ];\n\n const esItems = [];\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?.id === entry.id) {\n items.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n esItems.push(\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n );\n }\n if (latestEntry && latestStorageEntry) {\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(latestEntry),\n storageEntry: lodashCloneDeep(latestStorageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n /**\n * In the end we need to set the new latest entry\n */\n items.push(\n entity.putBatch({\n ...latestStorageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write entry records to DynamoDB table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n\n if (esItems.length === 0) {\n return;\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not batch write entry records to DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entry,\n latestEntry,\n latestStorageEntry\n }\n );\n }\n };\n\n const list = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsListParams\n ) => {\n const limit = createLimit(params.limit, 50);\n const { index } = configurations.es({\n model\n });\n\n try {\n const result = await elasticsearch.indices.exists({\n index\n });\n if (!result || !result.body) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not determine if Elasticsearch index exists.\",\n \"ELASTICSEARCH_INDEX_CHECK_ERROR\",\n {\n error: ex,\n index\n }\n );\n }\n\n const body = createElasticsearchQueryBody({\n model,\n args: {\n ...params,\n limit\n },\n plugins,\n parentPath: \"values\"\n });\n\n let response: ElasticsearchSearchResponse;\n try {\n response = await elasticsearch.search({\n index,\n body\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"ELASTICSEARCH_ERROR\", {\n error: ex,\n index,\n body,\n model\n });\n }\n\n const { hits, total } = response.body.hits;\n\n const items = extractEntriesFromIndex({\n plugins,\n model,\n entries: hits.map(item => item._source)\n }).map(item => {\n return convertFromStorageEntry({\n model,\n entry: item\n });\n });\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n const cursor = items.length > 0 ? encodeCursor(hits[items.length - 1].sort) || null : null;\n return {\n hasMoreItems,\n totalCount: total.value,\n cursor,\n items\n };\n };\n\n const get = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetParams\n ) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsPublishParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need currently published entry to check if need to remove it.\n */\n const [publishedStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n const revisionKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createPublishedSortKey()\n };\n\n let latestEsEntry: ElasticsearchDbRecord | null = null;\n try {\n latestEsEntry = await getRecord<ElasticsearchDbRecord>({\n entity: esEntity,\n keys: latestKeys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read Elasticsearch latest or published data.\",\n ex.code || \"PUBLISH_BATCH_READ\",\n {\n error: ex,\n latestKeys: latestKeys,\n publishedKeys: publishedKeys\n }\n );\n }\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n const esItems = [];\n\n const { index } = configurations.es({\n model\n });\n\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n /**\n * If there is a `published` entry already, we need to set it to `unpublished`. We need to\n * execute two updates: update the previously published entry's status and the published entry record.\n * DynamoDB does not support `batchUpdate` - so here we load the previously published\n * entry's data to update its status within a batch operation. If, hopefully,\n * they introduce a true update batch operation, remove this `read` call.\n */\n const [previouslyPublishedEntry] = await dataLoaders.getRevisionById({\n model,\n ids: [publishedStorageEntry.id]\n });\n //\n // const previouslyPublishedEntry = convertToStorageEntry({\n // model,\n // entry: initialPreviouslyPublishedEntry\n // });\n\n items.push(\n /**\n * Update currently published entry (unpublish it)\n */\n entity.putBatch({\n ...previouslyPublishedEntry,\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n savedOn: entry.savedOn,\n TYPE: createType(),\n PK: createPartitionKey(publishedStorageEntry),\n SK: createRevisionSortKey(publishedStorageEntry)\n })\n );\n }\n /**\n * Update the helper item in DB with the new published entry\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...publishedKeys,\n TYPE: createPublishedType()\n })\n );\n\n /**\n * We need the latest entry to check if it needs to be updated as well in the Elasticsearch.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\n\n if (latestStorageEntry?.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...latestKeys\n })\n );\n }\n /**\n * If we are publishing the latest revision, let's also update the latest revision's status in ES.\n */\n if (latestEsEntry && latestStorageEntry?.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\n *\n * No need to transform it for the storage because it was fetched directly from the Elasticsearch table, where it sits transformed.\n */\n const latestEsEntryDataDecompressed: CmsEntry = (await decompress(\n plugins,\n latestEsEntry.data\n )) as any;\n\n esItems.push(\n esEntity.putBatch({\n index,\n PK: createPartitionKey(latestEsEntryDataDecompressed),\n SK: createLatestSortKey(),\n data: {\n ...latestEsEntryDataDecompressed,\n status: CONTENT_ENTRY_STATUS.PUBLISHED,\n locked: true,\n savedOn: entry.savedOn,\n publishedOn: entry.publishedOn\n }\n })\n );\n }\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n /**\n * Update the published revision entry in ES.\n */\n const esLatestData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esLatestData\n })\n );\n\n /**\n * Finally, execute regular table batch.\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 store publish entry records in DynamoDB table.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store publish entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"PUBLISH_ES_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const unpublish = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsUnpublishParams\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const entry = convertToStorageEntry({\n model,\n entry: initialEntry\n });\n const storageEntry = convertToStorageEntry({\n model,\n entry: initialStorageEntry\n });\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\n });\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: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n ];\n /**\n * If we are unpublishing the latest revision, let's also update the latest revision entry's status in ES.\n */\n if (latestStorageEntry?.id === entry.id) {\n const { index } = configurations.es({\n model\n });\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n /**\n * Finally, execute regular table batch.\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 store unpublished entry records in DynamoDB table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store unpublished entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n return initialStorageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n const getPublishedRevisionByEntryId = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const [entry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n\n const getRevisionById = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const [entry] = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n model,\n entry\n });\n };\n\n const getRevisions = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n const entries = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetByIdsParams\n ) => {\n const entries = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getLatestByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n const entries = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getPublishedByIds = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n const entries = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return entries.map(entry => {\n return convertFromStorageEntry({\n model,\n entry\n });\n });\n };\n\n const getPreviousRevision = async (\n model: StorageOperationsCmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { tenant, locale } = model;\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n const entry = cleanupItem(entity, result);\n\n if (!entry) {\n return null;\n }\n return convertFromStorageEntry({\n entry,\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 return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n get,\n publish,\n unpublish,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAuBA;;AAKA;;AACA;;AACA;;AACA;;AAIA;;AACA;;AACA;;AAMA;;AACA;;AACA;;AACA;;AACA;;AAIA,MAAMA,UAAU,GAAG,MAAc;EAC7B,OAAO,WAAP;AACH,CAFD;;AAGO,MAAMC,gBAAgB,GAAG,MAAc;EAC1C,OAAQ,GAAED,UAAU,EAAG,IAAvB;AACH,CAFM;;;;AAGA,MAAME,mBAAmB,GAAG,MAAc;EAC7C,OAAQ,GAAEF,UAAU,EAAG,IAAvB;AACH,CAFM;;;;AAIP,MAAMG,YAAY,GAAIC,KAAD,IAAqB;EACtC,mEACO,IAAAC,aAAA,EAAWD,KAAX,EAAkB,CAAC,IAAD,EAAO,IAAP,EAAa,WAAb,EAA0B,QAA1B,CAAlB,CADP;IAEIE,IAAI,EAAEN,UAAU,EAFpB;IAGIO,MAAM,EAAEP,UAAU;EAHtB;AAKH,CAND;;AAQA,MAAMQ,oBAAoB,GAAG,OAAOC,OAAP,EAAkCL,KAAlC,KAAsD;EAC/E,OAAO,IAAAM,0BAAA,EAASD,OAAT,8DACAN,YAAY,CAACC,KAAD,CADZ;IAEHO,MAAM,EAAE,IAFL;IAGHL,IAAI,EAAEL,gBAAgB,EAHnB;IAIHM,MAAM,EAAEN,gBAAgB;EAJrB,GAAP;AAMH,CAPD;;AASA,MAAMW,uBAAuB,GAAG,OAAOH,OAAP,EAAkCL,KAAlC,KAAsD;EAClF,OAAO,IAAAM,0BAAA,EAASD,OAAT,8DACAN,YAAY,CAACC,KAAD,CADZ;IAEHS,SAAS,EAAE,IAFR;IAGHP,IAAI,EAAEJ,mBAAmB,EAHtB;IAIHK,MAAM,EAAEL,mBAAmB;EAJxB,GAAP;AAMH,CAPD;;AAaA,MAAMY,qBAAqB,GAAIC,MAAD,IAAwD;EAClF,MAAM;IAAEC,KAAF;IAASZ;EAAT,IAAmBW,MAAzB;EAEA,MAAME,MAAM,GAAGD,KAAK,CAACE,wBAAN,CAA+B;IAC1CC,MAAM,EAAEH,KAAK,CAACG,MAD4B;IAE1CF,MAAM,EAAEb,KAAK,CAACa;EAF4B,CAA/B,CAAf;EAIA,mEACOb,KADP;IAEIa;EAFJ;AAIH,CAXD;;AAaA,MAAMG,uBAAuB,GAAIL,MAAD,IAAwD;EACpF,MAAM;IAAEC,KAAF;IAASZ;EAAT,IAAmBW,MAAzB;EAEA,MAAME,MAAM,GAAGD,KAAK,CAACK,0BAAN,CAAiC;IAC5CF,MAAM,EAAEH,KAAK,CAACG,MAD8B;IAE5CF,MAAM,EAAEb,KAAK,CAACa;EAF8B,CAAjC,CAAf;EAIA,mEACOb,KADP;IAEIa;EAFJ;AAIH,CAXD;;AAwBO,MAAMK,8BAA8B,GACvCP,MAD0C,IAEd;EAC5B,MAAM;IAAEQ,MAAF;IAAUC,QAAV;IAAoBC,aAApB;IAAmChB;EAAnC,IAA+CM,MAArD;EAEA,MAAMW,WAAW,GAAG,IAAIC,+BAAJ,CAAuB;IACvCJ;EADuC,CAAvB,CAApB;;EAIA,MAAMK,MAAM,GAAG,OACXZ,KADW,EAEXD,MAFW,KAGV;IACD,MAAM;MAAEX,KAAK,EAAEyB,YAAT;MAAuBC,YAAY,EAAEC;IAArC,IAA6DhB,MAAnE;IACA,MAAMiB,WAAW,GAAGH,YAAY,CAACI,MAAb,KAAwB,WAA5C;IACA,MAAMC,MAAM,GAAGF,WAAW,GAAG,IAAH,GAAUH,YAAY,CAACK,MAAjD;IAEA,MAAM9B,KAAK,GAAGU,qBAAqB,CAAC;MAChCE,KADgC;MAEhCZ,KAAK,EAAEyB;IAFyB,CAAD,CAAnC;IAIA,MAAMC,YAAY,GAAGhB,qBAAqB,CAAC;MACvCE,KADuC;MAEvCZ,KAAK,EAAE2B;IAFgC,CAAD,CAA1C;IAKA,MAAMI,OAAO,GAAG,IAAAC,4BAAA,EAAoB;MAChC3B,OADgC;MAEhCO,KAFgC;MAGhCZ,KAAK,EAAE,IAAAiC,kBAAA,8DAAqBjC,KAArB;QAA4B8B;MAA5B,GAHyB;MAIhCJ,YAAY,EAAE,IAAAO,kBAAA,8DAAqBP,YAArB;QAAmCI;MAAnC;IAJkB,CAApB,CAAhB;;IAOA,MAAM;MAAEI,KAAK,EAAEC;IAAT,IAAqBC,8BAAA,CAAeC,EAAf,CAAkB;MACzCzB;IADyC,CAAlB,CAA3B;;IAIA,MAAM0B,YAAY,GAAG,MAAMlC,oBAAoB,CAACC,OAAD,EAAU0B,OAAV,CAA/C;IACA,MAAMQ,eAAe,GAAG,MAAM/B,uBAAuB,CAACH,OAAD,EAAU0B,OAAV,CAArD;IAEA,MAAMS,YAAY,GAAG;MACjBC,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADa;MAMjBC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB;IANa,CAArB;IASA,MAAMgD,UAAU,GAAG;MACfP,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADW;MAMfC,EAAE,EAAE,IAAAG,yBAAA;IANW,CAAnB;IASA,MAAMC,aAAa,GAAG;MAClBT,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADc;MAMlBC,EAAE,EAAE,IAAAK,4BAAA;IANc,CAAtB;IASA,MAAMC,KAAK,GAAG,CACVjC,MAAM,CAACkC,QAAP,yFACO3B,YADP;MAEII;IAFJ,GAGOU,YAHP;MAIItC,IAAI,EAAEN,UAAU;IAJpB,GADU,EAOVuB,MAAM,CAACkC,QAAP,yFACO3B,YADP;MAEII;IAFJ,GAGOkB,UAHP;MAII9C,IAAI,EAAEL,gBAAgB;IAJ1B,GAPU,CAAd;;IAeA,IAAI+B,WAAJ,EAAiB;MACbwB,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,yFACO3B,YADP;QAEII;MAFJ,GAGOoB,aAHP;QAIIhD,IAAI,EAAEJ,mBAAmB;MAJ7B,GADJ;IAQH;;IAED,IAAI;MACA,MAAM,IAAAyD,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAIA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,sDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGI0B;MAHJ,CAHE,CAAN;IASH;;IAED,MAAMqC,OAAO,GAAG,CACZ3C,QAAQ,CAACiC,QAAT,6DACOL,UADP;MAEId,KAAK,EAAEC,OAFX;MAGI6B,IAAI,EAAE1B;IAHV,GADY,CAAhB;;IAOA,IAAIV,WAAJ,EAAiB;MACbmC,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,6DACOH,aADP;QAEIhB,KAAK,EAAEC,OAFX;QAGI6B,IAAI,EAAEzB;MAHV,GADJ;IAOH;;IAED,IAAI;MACA,MAAM,IAAAgB,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEW;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,oEADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGI+B;MAHJ,CAHE,CAAN;IASH;;IAED,OAAOJ,mBAAP;EACH,CA3ID;;EA6IA,MAAMsC,kBAAkB,GAAG,OACvBrD,KADuB,EAEvBD,MAFuB,KAGtB;IACD,MAAM;MAAEX,KAAK,EAAEyB,YAAT;MAAuBC,YAAY,EAAEC;IAArC,IAA6DhB,MAAnE;IAEA,MAAMX,KAAK,GAAGU,qBAAqB,CAAC;MAChCE,KADgC;MAEhCZ,KAAK,EAAEyB;IAFyB,CAAD,CAAnC;IAIA,MAAMC,YAAY,GAAGhB,qBAAqB,CAAC;MACvCE,KADuC;MAEvCZ,KAAK,EAAE2B;IAFgC,CAAD,CAA1C;IAKA,MAAMa,YAAY,GAAG;MACjBC,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADa;MAMjBC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB;IANa,CAArB;IAQA,MAAMgD,UAAU,GAAG;MACfP,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADW;MAMfC,EAAE,EAAE,IAAAG,yBAAA;IANW,CAAnB;IASA,MAAMlB,OAAO,GAAG,IAAAC,4BAAA,EAAoB;MAChC3B,OADgC;MAEhCO,KAFgC;MAGhCZ,KAAK,EAAE,IAAAiC,kBAAA,EAAgBjC,KAAhB,CAHyB;MAIhC0B,YAAY,EAAE,IAAAO,kBAAA,EAAgBP,YAAhB;IAJkB,CAApB,CAAhB;IAOA,MAAMY,YAAY,GAAG,MAAMlC,oBAAoB,CAACC,OAAD,EAAU0B,OAAV,CAA/C;IAEA,MAAMqB,KAAK,GAAG,CACVjC,MAAM,CAACkC,QAAP,6DACO3B,YADP;MAEIxB,IAAI,EAAEN,UAAU;IAFpB,GAGO4C,YAHP,EADU,EAMVrB,MAAM,CAACkC,QAAP,6DACO3B,YADP;MAEIxB,IAAI,EAAEL,gBAAgB;IAF1B,GAGOmD,UAHP,EANU,CAAd;;IAaA,MAAM;MAAEd;IAAF,IAAYE,8BAAA,CAAeC,EAAf,CAAkB;MAChCzB;IADgC,CAAlB,CAAlB;;IAGA,IAAI;MACA,MAAM,IAAA2C,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAIA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,mEADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGI0B;MAHJ,CAHE,CAAN;IASH;IACD;AACR;AACA;;;IACQ,IAAI;MACA,MAAMN,QAAQ,CAAC8C,GAAT,6DACClB,UADD;QAEFd,KAFE;QAGF8B,IAAI,EAAE1B;MAHJ,GAAN;IAKH,CAND,CAME,OAAOoB,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,oEADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D;MAFJ,CAHE,CAAN;IAQH;IACD;AACR;AACA;;;IACQ,OAAO2B,mBAAP;EACH,CAnGD;;EAqGA,MAAMwC,MAAM,GAAG,OACXvD,KADW,EAEXD,MAFW,KAGV;IACD,MAAM;MAAEX,KAAK,EAAEyB,YAAT;MAAuBC,YAAY,EAAEC;IAArC,IAA6DhB,MAAnE;IAEA,MAAMX,KAAK,GAAGU,qBAAqB,CAAC;MAChCE,KADgC;MAEhCZ,KAAK,EAAEyB;IAFyB,CAAD,CAAnC;IAIA,MAAMC,YAAY,GAAGhB,qBAAqB,CAAC;MACvCE,KADuC;MAEvCZ,KAAK,EAAE2B;IAFgC,CAAD,CAA1C;IAKA,MAAMC,WAAW,GAAG5B,KAAK,CAAC6B,MAAN,KAAiB,WAArC;IACA,MAAMC,MAAM,GAAGF,WAAW,GAAG,IAAH,GAAU5B,KAAK,CAAC8B,MAA1C;IAEA,MAAMU,YAAY,GAAG;MACjBC,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADa;MAMjBC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB;IANa,CAArB;IAQA,MAAMgD,UAAU,GAAG;MACfP,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADW;MAMfC,EAAE,EAAE,IAAAG,yBAAA;IANW,CAAnB;IASA,MAAMC,aAAa,GAAG;MAClBT,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADc;MAMlBC,EAAE,EAAE,IAAAK,4BAAA;IANc,CAAtB;IASA;AACR;AACA;;IACQ,MAAM,CAACiB,kBAAD,IAAuB,MAAM9C,WAAW,CAAC+C,0BAAZ,CAAuC;MACtEzD,KADsE;MAEtE0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFiE,CAAvC,CAAnC;IAKA,MAAM,CAAC4B,qBAAD,IAA0B,MAAMjD,WAAW,CAACkD,6BAAZ,CAA0C;MAC5E5D,KAD4E;MAE5E0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFuE,CAA1C,CAAtC;IAKA,MAAMS,KAAK,GAAG,CACVjC,MAAM,CAACkC,QAAP,yFACO3B,YADP;MAEII;IAFJ,GAGOU,YAHP;MAIItC,IAAI,EAAEN,UAAU;IAJpB,GADU,CAAd;;IAQA,IAAIgC,WAAJ,EAAiB;MACbwB,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,yFACO3B,YADP;QAEII;MAFJ,GAGOoB,aAHP;QAIIhD,IAAI,EAAEJ,mBAAmB;MAJ7B,GADJ;IAQH;;IAED,MAAMiE,OAAO,GAAG,EAAhB;;IAEA,MAAM;MAAE7B,KAAK,EAAEC;IAAT,IAAqBC,8BAAA,CAAeC,EAAf,CAAkB;MACzCzB;IADyC,CAAlB,CAA3B;IAGA;AACR;AACA;;;IACQ,IAAImB,OAAkC,GAAG0C,SAAzC;IACA;AACR;AACA;;IACQ,IAAIC,uBAA4B,GAAG,IAAnC;;IACA,IAAI,CAAAN,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEzB,EAApB,MAA2B3C,KAAK,CAAC2C,EAArC,EAAyC;MACrC;AACZ;AACA;MACYS,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,yFACO3B,YADP,GAEOsB,UAFP;QAGI9C,IAAI,EAAE,IAAA+C,yBAAA;MAHV,GADJ;MAOA;AACZ;AACA;;MACYlB,OAAO,GAAG,IAAAC,4BAAA,EAAoB;QAC1B3B,OAD0B;QAE1BO,KAF0B;QAG1BZ,KAAK,EAAE,IAAAiC,kBAAA,8DACAjC,KADA;UAEH8B;QAFG,GAHmB;QAO1BJ,YAAY,EAAE,IAAAO,kBAAA,8DACPP,YADO;UAEVI;QAFU;MAPY,CAApB,CAAV;MAaA4C,uBAAuB,GAAG,MAAMtE,oBAAoB,CAACC,OAAD,EAAU0B,OAAV,CAApD;MAEAgC,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,6DACOL,UADP;QAEId,KAAK,EAAEC,OAFX;QAGI6B,IAAI,EAAEU;MAHV,GADJ;IAOH;;IACD,IAAIC,0BAA0B,GAAG,IAAjC;;IACA,IAAI/C,WAAW,IAAI,CAAA2C,qBAAqB,SAArB,IAAAA,qBAAqB,WAArB,YAAAA,qBAAqB,CAAE5B,EAAvB,MAA8B3C,KAAK,CAAC2C,EAAvD,EAA2D;MACvD,IAAI,CAAC+B,uBAAL,EAA8B;QAC1B;AAChB;AACA;QACgB,IAAI,CAAC3C,OAAL,EAAc;UACVA,OAAO,GAAG,IAAAC,4BAAA,EAAoB;YAC1B3B,OAD0B;YAE1BO,KAF0B;YAG1BZ,KAAK,EAAE,IAAAiC,kBAAA,8DACAjC,KADA;cAEH8B;YAFG,GAHmB;YAO1BJ,YAAY,EAAE,IAAAO,kBAAA,8DACPP,YADO;cAEVI;YAFU;UAPY,CAApB,CAAV;QAYH;;QACD6C,0BAA0B,GAAG,MAAMnE,uBAAuB,CAACH,OAAD,EAAU0B,OAAV,CAA1D;MACH,CAnBD,MAmBO;QACH4C,0BAA0B,+DACnBD,uBADmB;UAEtBjE,SAAS,EAAE,IAFW;UAGtBP,IAAI,EAAEJ,mBAAmB,EAHH;UAItBK,MAAM,EAAEL,mBAAmB;QAJL,EAA1B;QAMA,OAAO6E,0BAA0B,CAACpE,MAAlC;MACH;;MACDwD,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,6DACOH,aADP;QAEIhB,KAAK,EAAEC,OAFX;QAGI6B,IAAI,EAAEW;MAHV,GADJ;IAOH;;IACD,IAAI;MACA,MAAM,IAAApB,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAIA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0CADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGI0B;MAHJ,CAHE,CAAN;IASH;;IACD,IAAIqC,OAAO,CAACa,MAAR,KAAmB,CAAvB,EAA0B;MACtB,OAAOjD,mBAAP;IACH;;IAED,IAAI;MACA,MAAM,IAAA4B,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEW;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,wDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D;MAFJ,CAHE,CAAN;IAQH;;IACD,OAAO2B,mBAAP;EACH,CA3MD;;EA6MA,MAAMkD,WAAW,GAAG,OAChBjE,KADgB,EAEhBD,MAFgB,KAGf;IACD,MAAM;MAAEX;IAAF,IAAYW,MAAlB;IAEA,MAAMmE,YAAY,GAAG,IAAApC,wBAAA,EAAmB;MACpCC,EAAE,EAAE3C,KAAK,CAAC2C,EAD0B;MAEpCC,MAAM,EAAEhC,KAAK,CAACgC,MAFsB;MAGpCC,MAAM,EAAEjC,KAAK,CAACiC;IAHsB,CAAnB,CAArB;IAMA,MAAMO,KAAK,GAAG,MAAM,IAAA2B,eAAA,EAAmB;MACnC5D,MADmC;MAEnC2D,YAFmC;MAGnCE,OAAO,EAAE;QACLC,GAAG,EAAE;MADA;IAH0B,CAAnB,CAApB;IAQA,MAAMlB,OAAO,GAAG,MAAM,IAAAgB,eAAA,EAAmB;MACrC5D,MAAM,EAAEC,QAD6B;MAErC0D,YAFqC;MAGrCE,OAAO,EAAE;QACLC,GAAG,EAAE;MADA;IAH4B,CAAnB,CAAtB;IAQA,MAAMC,WAAW,GAAG9B,KAAK,CAAC+B,GAAN,CAAUC,IAAI,IAAI;MAClC,OAAOjE,MAAM,CAACkE,WAAP,CAAmB;QACtB5C,EAAE,EAAE2C,IAAI,CAAC3C,EADa;QAEtBK,EAAE,EAAEsC,IAAI,CAACtC;MAFa,CAAnB,CAAP;IAIH,CALmB,CAApB;IAOA,MAAMwC,aAAa,GAAGvB,OAAO,CAACoB,GAAR,CAAYC,IAAI,IAAI;MACtC,OAAOhE,QAAQ,CAACiE,WAAT,CAAqB;QACxB5C,EAAE,EAAE2C,IAAI,CAAC3C,EADe;QAExBK,EAAE,EAAEsC,IAAI,CAACtC;MAFe,CAArB,CAAP;IAIH,CALqB,CAAtB;;IAOA,IAAI;MACA,MAAM,IAAAS,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ,KAAK,EAAE8B;MAFS,CAAd,CAAN;MAIA5D,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,qDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D;MAFJ,CAHE,CAAN;IAQH;;IAED,IAAI;MACA,MAAM,IAAAuD,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEkC;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAO5B,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,mEADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D;MAFJ,CAHE,CAAN;IAQH;EACJ,CA5ED;;EA8EA,MAAMuF,cAAc,GAAG,OACnB3E,KADmB,EAEnBD,MAFmB,KAGlB;IACD,MAAM;MAAEX,KAAF;MAASwF,WAAT;MAAsBpB;IAAtB,IAA6CzD,MAAnD;IAEA,MAAMmE,YAAY,GAAG,IAAApC,wBAAA,EAAmB;MACpCC,EAAE,EAAE3C,KAAK,CAAC2C,EAD0B;MAEpCC,MAAM,EAAEhC,KAAK,CAACgC,MAFsB;MAGpCC,MAAM,EAAEjC,KAAK,CAACiC;IAHsB,CAAnB,CAArB;;IAMA,MAAM;MAAEX;IAAF,IAAYE,8BAAA,CAAeC,EAAf,CAAkB;MAChCzB;IADgC,CAAlB,CAAlB;IAGA;AACR;AACA;;;IACQ,MAAM,CAAC2D,qBAAD,IAA0B,MAAMjD,WAAW,CAACkD,6BAAZ,CAA0C;MAC5E5D,KAD4E;MAE5E0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFuE,CAA1C,CAAtC;IAIA;AACR;AACA;;IACQ,MAAMS,KAAK,GAAG;IACV;AACZ;AACA;IACYjC,MAAM,CAACkE,WAAP,CAAmB;MACf5C,EAAE,EAAEqC,YADW;MAEfhC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB;IAFW,CAAnB,CAJU,CAAd;IAUA,MAAM+D,OAAO,GAAG,EAAhB;IAEA;AACR;AACA;;IACQ,IAAI,CAAAQ,qBAAqB,SAArB,IAAAA,qBAAqB,WAArB,YAAAA,qBAAqB,CAAE5B,EAAvB,MAA8B3C,KAAK,CAAC2C,EAAxC,EAA4C;MACxCS,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkE,WAAP,CAAmB;QACf5C,EAAE,EAAEqC,YADW;QAEfhC,EAAE,EAAE,IAAAK,4BAAA;MAFW,CAAnB,CADJ;MAMAY,OAAO,CAACT,IAAR,CACInC,MAAM,CAACkE,WAAP,CAAmB;QACf5C,EAAE,EAAEqC,YADW;QAEfhC,EAAE,EAAE,IAAAK,4BAAA;MAFW,CAAnB,CADJ;IAMH;;IACD,IAAIqC,WAAW,IAAIpB,kBAAnB,EAAuC;MACnC,MAAMrC,OAAO,GAAG,IAAAC,4BAAA,EAAoB;QAChC3B,OADgC;QAEhCO,KAFgC;QAGhCZ,KAAK,EAAE,IAAAiC,kBAAA,EAAgBuD,WAAhB,CAHyB;QAIhC9D,YAAY,EAAE,IAAAO,kBAAA,EAAgBmC,kBAAhB;MAJkB,CAApB,CAAhB;MAOA,MAAM9B,YAAY,GAAG,MAAMlC,oBAAoB,CAACC,OAAD,EAAU0B,OAAV,CAA/C;MACA;AACZ;AACA;;MACYqB,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,6DACOe,kBADP;QAEI3B,EAAE,EAAEqC,YAFR;QAGIhC,EAAE,EAAE,IAAAG,yBAAA,GAHR;QAII/C,IAAI,EAAEL,gBAAgB;MAJ1B,GADJ;MAQAkE,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,CAAkB;QACdZ,EAAE,EAAEqC,YADU;QAEdhC,EAAE,EAAE,IAAAG,yBAAA,GAFU;QAGdf,KAHc;QAId8B,IAAI,EAAE1B;MAJQ,CAAlB,CADJ;IAQH;;IAED,IAAI;MACA,MAAM,IAAAiB,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAKA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CATD,CASE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,wDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,uBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGIwF,WAHJ;QAIIpB;MAJJ,CAHE,CAAN;IAUH;;IAED,IAAIL,OAAO,CAACa,MAAR,KAAmB,CAAvB,EAA0B;MACtB;IACH;;IAED,IAAI;MACA,MAAM,IAAArB,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEW;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IACI,sEAFF,EAGFF,EAAE,CAACG,IAAH,IAAW,uBAHT,EAIF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGIwF,WAHJ;QAIIpB;MAJJ,CAJE,CAAN;IAWH;EACJ,CAhID;;EAkIA,MAAMqB,IAAI,GAAG,OACT7E,KADS,EAETD,MAFS,KAGR;IACD,MAAM+E,KAAK,GAAG,IAAAC,6BAAA,EAAYhF,MAAM,CAAC+E,KAAnB,EAA0B,EAA1B,CAAd;;IACA,MAAM;MAAExD;IAAF,IAAYE,8BAAA,CAAeC,EAAf,CAAkB;MAChCzB;IADgC,CAAlB,CAAlB;;IAIA,IAAI;MACA,MAAMgF,MAAM,GAAG,MAAMvE,aAAa,CAACwE,OAAd,CAAsBC,MAAtB,CAA6B;QAC9C5D;MAD8C,CAA7B,CAArB;;MAGA,IAAI,CAAC0D,MAAD,IAAW,CAACA,MAAM,CAACG,IAAvB,EAA6B;QACzB,OAAO;UACHC,YAAY,EAAE,KADX;UAEHC,UAAU,EAAE,CAFT;UAGHC,MAAM,EAAE,IAHL;UAIH9C,KAAK,EAAE;QAJJ,CAAP;MAMH;IACJ,CAZD,CAYE,OAAOM,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,iCAFE,EAGF;QACIG,KAAK,EAAEJ,EADX;QAEIxB;MAFJ,CAHE,CAAN;IAQH;;IAED,MAAM6D,IAAI,GAAG,IAAAI,qCAAA,EAA6B;MACtCvF,KADsC;MAEtCwF,IAAI,8DACGzF,MADH;QAEA+E;MAFA,EAFkC;MAMtCrF,OANsC;MAOtCgG,UAAU,EAAE;IAP0B,CAA7B,CAAb;IAUA,IAAIC,QAAJ;;IACA,IAAI;MACAA,QAAQ,GAAG,MAAMjF,aAAa,CAACkF,MAAd,CAAqB;QAClCrE,KADkC;QAElC6D;MAFkC,CAArB,CAAjB;IAIH,CALD,CAKE,OAAOrC,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CAAgBD,EAAE,CAACE,OAAnB,EAA4BF,EAAE,CAACG,IAAH,IAAW,qBAAvC,EAA8D;QAChEC,KAAK,EAAEJ,EADyD;QAEhExB,KAFgE;QAGhE6D,IAHgE;QAIhEnF;MAJgE,CAA9D,CAAN;IAMH;;IAED,MAAM;MAAE4F,IAAF;MAAQC;IAAR,IAAkBH,QAAQ,CAACP,IAAT,CAAcS,IAAtC;IAEA,MAAMpD,KAAK,GAAG,IAAAsD,gCAAA,EAAwB;MAClCrG,OADkC;MAElCO,KAFkC;MAGlC+F,OAAO,EAAEH,IAAI,CAACrB,GAAL,CAASC,IAAI,IAAIA,IAAI,CAACwB,OAAtB;IAHyB,CAAxB,EAIXzB,GAJW,CAIPC,IAAI,IAAI;MACX,OAAOpE,uBAAuB,CAAC;QAC3BJ,KAD2B;QAE3BZ,KAAK,EAAEoF;MAFoB,CAAD,CAA9B;IAIH,CATa,CAAd;IAWA,MAAMY,YAAY,GAAG5C,KAAK,CAACwB,MAAN,GAAec,KAApC;;IACA,IAAIM,YAAJ,EAAkB;MACd;AACZ;AACA;MACY5C,KAAK,CAACyD,GAAN;IACH;IACD;AACR;AACA;AACA;;;IACQ,MAAMX,MAAM,GAAG9C,KAAK,CAACwB,MAAN,GAAe,CAAf,GAAmB,IAAAkC,8BAAA,EAAaN,IAAI,CAACpD,KAAK,CAACwB,MAAN,GAAe,CAAhB,CAAJ,CAAuBmC,IAApC,KAA6C,IAAhE,GAAuE,IAAtF;IACA,OAAO;MACHf,YADG;MAEHC,UAAU,EAAEQ,KAAK,CAACO,KAFf;MAGHd,MAHG;MAIH9C;IAJG,CAAP;EAMH,CAxFD;;EA0FA,MAAM6D,GAAG,GAAG,OACRrG,KADQ,EAERD,MAFQ,KAGP;IACD,MAAM;MAAEyC;IAAF,IAAY,MAAMqC,IAAI,CAAC7E,KAAD,8DACrBD,MADqB;MAExB+E,KAAK,EAAE;IAFiB,GAA5B;IAIA,OAAOtC,KAAK,CAAC8D,KAAN,MAAiB,IAAxB;EACH,CATD;;EAWA,MAAMC,OAAO,GAAG,OACZvG,KADY,EAEZD,MAFY,KAGX;IACD,MAAM;MAAEX,KAAK,EAAEyB,YAAT;MAAuBC,YAAY,EAAEC;IAArC,IAA6DhB,MAAnE;IAEA,MAAMX,KAAK,GAAGU,qBAAqB,CAAC;MAChCE,KADgC;MAEhCZ,KAAK,EAAEyB;IAFyB,CAAD,CAAnC;IAIA,MAAMC,YAAY,GAAGhB,qBAAqB,CAAC;MACvCE,KADuC;MAEvCZ,KAAK,EAAE2B;IAFgC,CAAD,CAA1C;IAKA;AACR;AACA;;IACQ,MAAM,CAAC4C,qBAAD,IAA0B,MAAMjD,WAAW,CAACkD,6BAAZ,CAA0C;MAC5E5D,KAD4E;MAE5E0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFuE,CAA1C,CAAtC;IAKA,MAAMH,YAAY,GAAG;MACjBC,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADa;MAMjBC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB;IANa,CAArB;IAQA,MAAMgD,UAAU,GAAG;MACfP,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADW;MAMfC,EAAE,EAAE,IAAAG,yBAAA;IANW,CAAnB;IAQA,MAAMC,aAAa,GAAG;MAClBT,EAAE,EAAE,IAAAC,wBAAA,EAAmB;QACnBC,EAAE,EAAE3C,KAAK,CAAC2C,EADS;QAEnBC,MAAM,EAAEhC,KAAK,CAACgC,MAFK;QAGnBC,MAAM,EAAEjC,KAAK,CAACiC;MAHK,CAAnB,CADc;MAMlBC,EAAE,EAAE,IAAAK,4BAAA;IANc,CAAtB;IASA,IAAIiE,aAA2C,GAAG,IAAlD;;IACA,IAAI;MACAA,aAAa,GAAG,MAAM,IAAAC,QAAA,EAAiC;QACnDlG,MAAM,EAAEC,QAD2C;QAEnDkG,IAAI,EAAEtE;MAF6C,CAAjC,CAAtB;IAIH,CALD,CAKE,OAAOU,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,wDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,oBAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEIV,UAAU,EAAEA,UAFhB;QAGIE,aAAa,EAAEA;MAHnB,CAHE,CAAN;IASH;;IAED,MAAME,KAAK,GAAG,CACVjC,MAAM,CAACkC,QAAP,yFACO3B,YADP,GAEOc,YAFP;MAGItC,IAAI,EAAEN,UAAU;IAHpB,GADU,CAAd;IAOA,MAAMmE,OAAO,GAAG,EAAhB;;IAEA,MAAM;MAAE7B;IAAF,IAAYE,8BAAA,CAAeC,EAAf,CAAkB;MAChCzB;IADgC,CAAlB,CAAlB;;IAIA,IAAI2D,qBAAqB,IAAIA,qBAAqB,CAAC5B,EAAtB,KAA6B3C,KAAK,CAAC2C,EAAhE,EAAoE;MAChE;AACZ;AACA;AACA;AACA;AACA;AACA;MACY,MAAM,CAAC4E,wBAAD,IAA6B,MAAMjG,WAAW,CAACkG,eAAZ,CAA4B;QACjE5G,KADiE;QAEjE0D,GAAG,EAAE,CAACC,qBAAqB,CAAC5B,EAAvB;MAF4D,CAA5B,CAAzC,CARgE,CAYhE;MACA;MACA;MACA;MACA;;MAEAS,KAAK,CAACE,IAAN;MACI;AAChB;AACA;MACgBnC,MAAM,CAACkC,QAAP,6DACOkE,wBADP;QAEI1F,MAAM,EAAE4F,2BAAA,CAAqBC,WAFjC;QAGIC,OAAO,EAAE3H,KAAK,CAAC2H,OAHnB;QAIIzH,IAAI,EAAEN,UAAU,EAJpB;QAKI6C,EAAE,EAAE,IAAAC,wBAAA,EAAmB6B,qBAAnB,CALR;QAMIzB,EAAE,EAAE,IAAAC,2BAAA,EAAsBwB,qBAAtB;MANR,GAJJ;IAaH;IACD;AACR;AACA;;;IACQnB,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,yFACO3B,YADP,GAEOwB,aAFP;MAGIhD,IAAI,EAAEJ,mBAAmB;IAH7B,GADJ;IAQA;AACR;AACA;;IACQ,MAAM,CAACsE,kBAAD,IAAuB,MAAM9C,WAAW,CAAC+C,0BAAZ,CAAuC;MACtEzD,KADsE;MAEtE0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFiE,CAAvC,CAAnC;;IAKA,IAAI,CAAAyB,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEzB,EAApB,MAA2B3C,KAAK,CAAC2C,EAArC,EAAyC;MACrCS,KAAK,CAACE,IAAN,CACInC,MAAM,CAACkC,QAAP,6DACO3B,YADP,GAEOsB,UAFP,EADJ;IAMH;IACD;AACR;AACA;;;IACQ,IAAIoE,aAAa,IAAI,CAAAhD,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEzB,EAApB,MAA2B3C,KAAK,CAAC2C,EAAtD,EAA0D;MACtD;AACZ;AACA;AACA;AACA;MACY,MAAMiF,6BAAuC,GAAI,MAAM,IAAAC,4BAAA,EACnDxH,OADmD,EAEnD+G,aAAa,CAACpD,IAFqC,CAAvD;MAKAD,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,CAAkB;QACdnB,KADc;QAEdO,EAAE,EAAE,IAAAC,wBAAA,EAAmBkF,6BAAnB,CAFU;QAGd9E,EAAE,EAAE,IAAAG,yBAAA,GAHU;QAIde,IAAI,8DACG4D,6BADH;UAEA/F,MAAM,EAAE4F,2BAAA,CAAqBK,SAF7B;UAGAhG,MAAM,EAAE,IAHR;UAIA6F,OAAO,EAAE3H,KAAK,CAAC2H,OAJf;UAKAI,WAAW,EAAE/H,KAAK,CAAC+H;QALnB;MAJU,CAAlB,CADJ;IAcH;;IAED,MAAMC,iBAAiB,GAAG,IAAAhG,4BAAA,EAAoB;MAC1C3B,OAD0C;MAE1CO,KAF0C;MAG1CZ,KAAK,EAAE,IAAAiC,kBAAA,EAAgBjC,KAAhB,CAHmC;MAI1C0B,YAAY,EAAE,IAAAO,kBAAA,EAAgBP,YAAhB;IAJ4B,CAApB,CAA1B;IAMA;AACR;AACA;;IACQ,MAAMY,YAAY,GAAG,MAAM9B,uBAAuB,CAACH,OAAD,EAAU2H,iBAAV,CAAlD;IAEAjE,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,6DACOH,aADP;MAEIhB,KAFJ;MAGI8B,IAAI,EAAE1B;IAHV,GADJ;IAQA;AACR;AACA;;IACQ,IAAI;MACA,MAAM,IAAAiB,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAIA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0DADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,eAFT,EAGF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGIoE,kBAHJ;QAIIG;MAJJ,CAHE,CAAN;IAUH;IACD;AACR;AACA;;;IACQ,IAAI;MACA,MAAM,IAAAhB,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEW;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IACI,wEAFF,EAGFF,EAAE,CAACG,IAAH,IAAW,kBAHT,EAIF;QACIC,KAAK,EAAEJ,EADX;QAEI1D,KAFJ;QAGIoE,kBAHJ;QAIIG;MAJJ,CAJE,CAAN;IAWH;;IACD,OAAO5C,mBAAP;EACH,CAxOD;;EA0OA,MAAMsG,SAAS,GAAG,OACdrH,KADc,EAEdD,MAFc,KAGb;IACD,MAAM;MAAEX,KAAK,EAAEyB,YAAT;MAAuBC,YAAY,EAAEC;IAArC,IAA6DhB,MAAnE;IAEA,MAAMX,KAAK,GAAGU,qBAAqB,CAAC;MAChCE,KADgC;MAEhCZ,KAAK,EAAEyB;IAFyB,CAAD,CAAnC;IAIA,MAAMC,YAAY,GAAGhB,qBAAqB,CAAC;MACvCE,KADuC;MAEvCZ,KAAK,EAAE2B;IAFgC,CAAD,CAA1C;IAKA;AACR;AACA;;IACQ,MAAM,CAACyC,kBAAD,IAAuB,MAAM9C,WAAW,CAAC+C,0BAAZ,CAAuC;MACtEzD,KADsE;MAEtE0D,GAAG,EAAE,CAACtE,KAAK,CAAC2C,EAAP;IAFiE,CAAvC,CAAnC;IAKA,MAAMmC,YAAY,GAAG,IAAApC,wBAAA,EAAmB;MACpCC,EAAE,EAAE3C,KAAK,CAAC2C,EAD0B;MAEpCC,MAAM,EAAEhC,KAAK,CAACgC,MAFsB;MAGpCC,MAAM,EAAEjC,KAAK,CAACiC;IAHsB,CAAnB,CAArB;IAMA,MAAMO,KAAK,GAAG,CACVjC,MAAM,CAACkE,WAAP,CAAmB;MACf5C,EAAE,EAAEqC,YADW;MAEfhC,EAAE,EAAE,IAAAK,4BAAA;IAFW,CAAnB,CADU,EAKVhC,MAAM,CAACkC,QAAP,6DACO3B,YADP;MAEIe,EAAE,EAAEqC,YAFR;MAGIhC,EAAE,EAAE,IAAAC,2BAAA,EAAsB/C,KAAtB,CAHR;MAIIE,IAAI,EAAEN,UAAU;IAJpB,GALU,CAAd;IAaA,MAAMmE,OAAO,GAAG,CACZ3C,QAAQ,CAACiE,WAAT,CAAqB;MACjB5C,EAAE,EAAEqC,YADa;MAEjBhC,EAAE,EAAE,IAAAK,4BAAA;IAFa,CAArB,CADY,CAAhB;IAMA;AACR;AACA;;IACQ,IAAI,CAAAiB,kBAAkB,SAAlB,IAAAA,kBAAkB,WAAlB,YAAAA,kBAAkB,CAAEzB,EAApB,MAA2B3C,KAAK,CAAC2C,EAArC,EAAyC;MACrC,MAAM;QAAET;MAAF,IAAYE,8BAAA,CAAeC,EAAf,CAAkB;QAChCzB;MADgC,CAAlB,CAAlB;;MAIA,MAAMoH,iBAAiB,GAAG,IAAAhG,4BAAA,EAAoB;QAC1C3B,OAD0C;QAE1CO,KAF0C;QAG1CZ,KAAK,EAAE,IAAAiC,kBAAA,EAAgBjC,KAAhB,CAHmC;QAI1C0B,YAAY,EAAE,IAAAO,kBAAA,EAAgBP,YAAhB;MAJ4B,CAApB,CAA1B;MAOA,MAAMY,YAAY,GAAG,MAAMlC,oBAAoB,CAACC,OAAD,EAAU2H,iBAAV,CAA/C;MACAjE,OAAO,CAACT,IAAR,CACIlC,QAAQ,CAACiC,QAAT,CAAkB;QACdZ,EAAE,EAAEqC,YADU;QAEdhC,EAAE,EAAE,IAAAG,yBAAA,GAFU;QAGdf,KAHc;QAId8B,IAAI,EAAE1B;MAJQ,CAAlB,CADJ;IAQH;IAED;AACR;AACA;;;IACQ,IAAI;MACA,MAAM,IAAAiB,yBAAA,EAAc;QAChBC,KAAK,EAAErC,MAAM,CAACqC,KADE;QAEhBJ;MAFgB,CAAd,CAAN;MAIA9B,WAAW,CAACmC,QAAZ,CAAqB;QACjB7C;MADiB,CAArB;IAGH,CARD,CAQE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,8DADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,iBAFT,EAGF;QACI7D,KADJ;QAEI0B;MAFJ,CAHE,CAAN;IAQH;IACD;AACR;AACA;;;IACQ,IAAI;MACA,MAAM,IAAA6B,yBAAA,EAAc;QAChBC,KAAK,EAAEpC,QAAQ,CAACoC,KADA;QAEhBJ,KAAK,EAAEW;MAFS,CAAd,CAAN;IAIH,CALD,CAKE,OAAOL,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IACI,4EAFF,EAGFF,EAAE,CAACG,IAAH,IAAW,iBAHT,EAIF;QACI7D,KADJ;QAEI0B;MAFJ,CAJE,CAAN;IASH;;IACD,OAAOC,mBAAP;EACH,CAnHD;;EAqHA,MAAM0C,0BAA0B,GAAG,OAC/BzD,KAD+B,EAE/BD,MAF+B,KAG9B;IACD,MAAM,CAACX,KAAD,IAAU,MAAMsB,WAAW,CAAC+C,0BAAZ,CAAuC;MACzDzD,KADyD;MAEzD0D,GAAG,EAAE,CAAC3D,MAAM,CAACgC,EAAR;IAFoD,CAAvC,CAAtB;;IAIA,IAAI,CAAC3C,KAAL,EAAY;MACR,OAAO,IAAP;IACH;;IACD,OAAOgB,uBAAuB,CAAC;MAC3BJ,KAD2B;MAE3BZ;IAF2B,CAAD,CAA9B;EAIH,CAfD;;EAgBA,MAAMwE,6BAA6B,GAAG,OAClC5D,KADkC,EAElCD,MAFkC,KAGjC;IACD,MAAM,CAACX,KAAD,IAAU,MAAMsB,WAAW,CAACkD,6BAAZ,CAA0C;MAC5D5D,KAD4D;MAE5D0D,GAAG,EAAE,CAAC3D,MAAM,CAACgC,EAAR;IAFuD,CAA1C,CAAtB;;IAIA,IAAI,CAAC3C,KAAL,EAAY;MACR,OAAO,IAAP;IACH;;IACD,OAAOgB,uBAAuB,CAAC;MAC3BJ,KAD2B;MAE3BZ;IAF2B,CAAD,CAA9B;EAIH,CAfD;;EAiBA,MAAMwH,eAAe,GAAG,OACpB5G,KADoB,EAEpBD,MAFoB,KAGnB;IACD,MAAM,CAACX,KAAD,IAAU,MAAMsB,WAAW,CAACkG,eAAZ,CAA4B;MAC9C5G,KAD8C;MAE9C0D,GAAG,EAAE,CAAC3D,MAAM,CAACgC,EAAR;IAFyC,CAA5B,CAAtB;;IAIA,IAAI,CAAC3C,KAAL,EAAY;MACR,OAAO,IAAP;IACH;;IACD,OAAOgB,uBAAuB,CAAC;MAC3BJ,KAD2B;MAE3BZ;IAF2B,CAAD,CAA9B;EAIH,CAfD;;EAiBA,MAAMkI,YAAY,GAAG,OACjBtH,KADiB,EAEjBD,MAFiB,KAGhB;IACD,MAAMgG,OAAO,GAAG,MAAMrF,WAAW,CAAC6G,oBAAZ,CAAiC;MACnDvH,KADmD;MAEnD0D,GAAG,EAAE,CAAC3D,MAAM,CAACgC,EAAR;IAF8C,CAAjC,CAAtB;IAKA,OAAOgE,OAAO,CAACxB,GAAR,CAAYnF,KAAK,IAAI;MACxB,OAAOgB,uBAAuB,CAAC;QAC3BJ,KAD2B;QAE3BZ;MAF2B,CAAD,CAA9B;IAIH,CALM,CAAP;EAMH,CAfD;;EAiBA,MAAMoI,QAAQ,GAAG,OACbxH,KADa,EAEbD,MAFa,KAGZ;IACD,MAAMgG,OAAO,GAAG,MAAMrF,WAAW,CAACkG,eAAZ,CAA4B;MAC9C5G,KAD8C;MAE9C0D,GAAG,EAAE3D,MAAM,CAAC2D;IAFkC,CAA5B,CAAtB;IAIA,OAAOqC,OAAO,CAACxB,GAAR,CAAYnF,KAAK,IAAI;MACxB,OAAOgB,uBAAuB,CAAC;QAC3BJ,KAD2B;QAE3BZ;MAF2B,CAAD,CAA9B;IAIH,CALM,CAAP;EAMH,CAdD;;EAgBA,MAAMqI,cAAc,GAAG,OACnBzH,KADmB,EAEnBD,MAFmB,KAGlB;IACD,MAAMgG,OAAO,GAAG,MAAMrF,WAAW,CAAC+C,0BAAZ,CAAuC;MACzDzD,KADyD;MAEzD0D,GAAG,EAAE3D,MAAM,CAAC2D;IAF6C,CAAvC,CAAtB;IAIA,OAAOqC,OAAO,CAACxB,GAAR,CAAYnF,KAAK,IAAI;MACxB,OAAOgB,uBAAuB,CAAC;QAC3BJ,KAD2B;QAE3BZ;MAF2B,CAAD,CAA9B;IAIH,CALM,CAAP;EAMH,CAdD;;EAgBA,MAAMsI,iBAAiB,GAAG,OACtB1H,KADsB,EAEtBD,MAFsB,KAGrB;IACD,MAAMgG,OAAO,GAAG,MAAMrF,WAAW,CAACkD,6BAAZ,CAA0C;MAC5D5D,KAD4D;MAE5D0D,GAAG,EAAE3D,MAAM,CAAC2D;IAFgD,CAA1C,CAAtB;IAKA,OAAOqC,OAAO,CAACxB,GAAR,CAAYnF,KAAK,IAAI;MACxB,OAAOgB,uBAAuB,CAAC;QAC3BJ,KAD2B;QAE3BZ;MAF2B,CAAD,CAA9B;IAIH,CALM,CAAP;EAMH,CAfD;;EAiBA,MAAMuI,mBAAmB,GAAG,OACxB3H,KADwB,EAExBD,MAFwB,KAGvB;IACD,MAAM;MAAEkC,MAAF;MAAUD;IAAV,IAAqBhC,KAA3B;IACA,MAAM;MAAE4H,OAAF;MAAWC;IAAX,IAAuB9H,MAA7B;IACA,MAAM+H,WAA2B,GAAG;MAChCvH,MADgC;MAEhC2D,YAAY,EAAE,IAAApC,wBAAA,EAAmB;QAC7BG,MAD6B;QAE7BD,MAF6B;QAG7BD,EAAE,EAAE6F;MAHyB,CAAnB,CAFkB;MAOhCxD,OAAO,EAAE;QACL2D,EAAE,EAAG,OAAM,IAAAC,cAAA,EAAQH,OAAR,CAAiB,EADvB;;QAEL;AAChB;AACA;QACgBI,OAAO,EAAE,CACL;UACIC,IAAI,EAAE,MADV;UAEIC,EAAE,EAAEnJ,UAAU;QAFlB,CADK,EAKL;UACIkJ,IAAI,EAAE,SADV;UAEIH,EAAE,EAAEF;QAFR,CALK,CALJ;QAeLO,OAAO,EAAE;MAfJ;IAPuB,CAApC;;IA0BA,IAAI;MACA,MAAMpD,MAAM,GAAG,MAAM,IAAAqD,eAAA,EAAmBP,WAAnB,CAArB;MAEA,MAAM1I,KAAK,GAAG,IAAAkJ,oBAAA,EAAY/H,MAAZ,EAAoByE,MAApB,CAAd;;MAEA,IAAI,CAAC5F,KAAL,EAAY;QACR,OAAO,IAAP;MACH;;MACD,OAAOgB,uBAAuB,CAAC;QAC3BhB,KAD2B;QAE3BY;MAF2B,CAAD,CAA9B;IAIH,CAZD,CAYE,OAAO8C,EAAP,EAAW;MACT,MAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,gDADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,4BAFT,8DAIKlD,MAJL;QAKEmD,KAAK,EAAEJ,EALT;QAMEoB,YAAY,EAAE4D,WAAW,CAAC5D,YAN5B;QAOEE,OAAO,EAAE0D,WAAW,CAAC1D,OAPvB;QAQEpE;MARF,GAAN;IAWH;EACJ,CAzDD;;EA2DA,OAAO;IACHY,MADG;IAEHyC,kBAFG;IAGHE,MAHG;IAIHgF,MAAM,EAAEtE,WAJL;IAKHU,cALG;IAMH0B,GANG;IAOHE,OAPG;IAQHc,SARG;IASHxC,IATG;IAUHpB,0BAVG;IAWHG,6BAXG;IAYHgD,eAZG;IAaHU,YAbG;IAcHE,QAdG;IAeHC,cAfG;IAgBHC,iBAhBG;IAiBHC;EAjBG,CAAP;AAmBH,CA9xCM"}
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPartitionKey","params","tenant","locale","id","initialId","parseIdentifier","createRevisionSortKey","zeroPad","version","createLatestSortKey","createPublishedSortKey"],"sources":["keys.ts"],"sourcesContent":["import { parseIdentifier, zeroPad } from \"@webiny/utils\";\n\nexport interface PartitionKeyParams {\n id: string;\n tenant: string;\n locale: string;\n}\nexport const createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale, id: initialId } = params;\n const { id } = parseIdentifier(initialId);\n return `T#${tenant}#L#${locale}#CMS#CME#${id}`;\n};\n\nexport interface SortKeyParams {\n version: number;\n}\nexport const createRevisionSortKey = (params: SortKeyParams): string => {\n return `REV#${zeroPad(params.version)}`;\n};\n\nexport const createLatestSortKey = (): string => {\n return \"L\";\n};\n\nexport const createPublishedSortKey = (): string => {\n return \"P\";\n};\n"],"mappings":";;;;;;;AAAA;;AAOO,MAAMA,kBAAkB,GAAIC,MAAD,IAAwC;EACtE,MAAM;IAAEC,MAAF;IAAUC,MAAV;IAAkBC,EAAE,EAAEC;EAAtB,IAAoCJ,MAA1C;EACA,MAAM;IAAEG;EAAF,IAAS,IAAAE,sBAAA,EAAgBD,SAAhB,CAAf;EACA,OAAQ,KAAIH,MAAO,MAAKC,MAAO,YAAWC,EAAG,EAA7C;AACH,CAJM;;;;AASA,MAAMG,qBAAqB,GAAIN,MAAD,IAAmC;EACpE,OAAQ,OAAM,IAAAO,cAAA,EAAQP,MAAM,CAACQ,OAAf,CAAwB,EAAtC;AACH,CAFM;;;;AAIA,MAAMC,mBAAmB,GAAG,MAAc;EAC7C,OAAO,GAAP;AACH,CAFM;;;;AAIA,MAAMC,sBAAsB,GAAG,MAAc;EAChD,OAAO,GAAP;AACH,CAFM"}
@@ -1,8 +1,8 @@
1
1
  import { CmsGroupStorageOperations } from "@webiny/api-headless-cms/types";
2
2
  import { Entity } from "dynamodb-toolbox";
3
3
  import { PluginsContainer } from "@webiny/plugins";
4
- export interface Params {
4
+ export interface CreateGroupsStorageOperationsParams {
5
5
  entity: Entity<any>;
6
6
  plugins: PluginsContainer;
7
7
  }
8
- export declare const createGroupsStorageOperations: (params: Params) => CmsGroupStorageOperations;
8
+ export declare const createGroupsStorageOperations: (params: CreateGroupsStorageOperationsParams) => CmsGroupStorageOperations;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createGroupsStorageOperations = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _error = _interopRequireDefault(require("@webiny/error"));
13
13
 
@@ -23,10 +23,6 @@ var _ValueFilterPlugin = require("@webiny/db-dynamodb/plugins/definitions/ValueF
23
23
 
24
24
  var _sort = require("@webiny/db-dynamodb/utils/sort");
25
25
 
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
-
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
-
30
26
  const createPartitionKey = params => {
31
27
  const {
32
28
  tenant,
@@ -71,7 +67,7 @@ const createGroupsStorageOperations = params => {
71
67
  const keys = createKeys(group);
72
68
 
73
69
  try {
74
- await entity.put(_objectSpread(_objectSpread({}, group), {}, {
70
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
75
71
  TYPE: createType()
76
72
  }, keys));
77
73
  return group;
@@ -86,13 +82,12 @@ const createGroupsStorageOperations = params => {
86
82
 
87
83
  const update = async params => {
88
84
  const {
89
- group,
90
- original
85
+ group
91
86
  } = params;
92
87
  const keys = createKeys(group);
93
88
 
94
89
  try {
95
- await entity.put(_objectSpread(_objectSpread({}, group), {}, {
90
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, group), {}, {
96
91
  TYPE: createType()
97
92
  }, keys));
98
93
  return group;
@@ -100,7 +95,6 @@ const createGroupsStorageOperations = params => {
100
95
  throw new _error.default(ex.message || "Could not update group.", ex.code || "UPDATE_GROUP_ERROR", {
101
96
  error: ex,
102
97
  group,
103
- original,
104
98
  keys
105
99
  });
106
100
  }
@@ -135,7 +129,7 @@ const createGroupsStorageOperations = params => {
135
129
  });
136
130
  return (0, _cleanup.cleanupItem)(entity, group);
137
131
  } catch (ex) {
138
- throw new _error.default(ex.message || "Could not get group.", ex.code || "GET_GROUP_ERROR", _objectSpread(_objectSpread({
132
+ throw new _error.default(ex.message || "Could not get group.", ex.code || "GET_GROUP_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({
139
133
  error: ex
140
134
  }, params), {}, {
141
135
  keys
@@ -160,7 +154,7 @@ const createGroupsStorageOperations = params => {
160
154
  try {
161
155
  records = await (0, _query.queryAll)(queryAllParams);
162
156
  } catch (ex) {
163
- throw new _error.default(ex.message || "Could not list groups.", ex.code || "LIST_GROUP_ERROR", _objectSpread(_objectSpread({
157
+ throw new _error.default(ex.message || "Could not list groups.", ex.code || "LIST_GROUP_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({
164
158
  error: ex
165
159
  }, params), {}, {
166
160
  sort,
@@ -168,8 +162,7 @@ const createGroupsStorageOperations = params => {
168
162
  }));
169
163
  }
170
164
 
171
- const where = _objectSpread({}, initialWhere);
172
-
165
+ const where = (0, _objectSpread2.default)({}, initialWhere);
173
166
  delete where["tenant"];
174
167
  delete where["locale"];
175
168
  const filteredItems = (0, _filter.filterItems)({
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPartitionKey","params","tenant","locale","createSortKeys","id","createKeys","PK","SK","createType","createGroupsStorageOperations","entity","plugins","filteringPlugins","byType","ValueFilterPlugin","type","length","WebinyError","create","group","keys","put","TYPE","ex","message","code","error","update","deleteGroup","delete","get","getRecord","cleanupItem","list","sort","where","initialWhere","queryAllParams","partitionKey","options","gte","records","queryAll","filteredItems","filterItems","items","fields","sortItems"],"sources":["index.ts"],"sourcesContent":["import {\n CmsGroup,\n CmsGroupStorageOperations,\n CmsGroupStorageOperationsCreateParams,\n CmsGroupStorageOperationsDeleteParams,\n CmsGroupStorageOperationsGetParams,\n CmsGroupStorageOperationsListParams,\n CmsGroupStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CMG`;\n};\n\ninterface SortKeyParams {\n id: string;\n}\nconst createSortKeys = (params: SortKeyParams): string => {\n const { id } = params;\n return id;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKeys(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.group\";\n};\n\nexport interface CreateGroupsStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createGroupsStorageOperations = (\n params: CreateGroupsStorageOperationsParams\n): CmsGroupStorageOperations => {\n const { entity, plugins } = params;\n\n const filteringPlugins = plugins.byType<ValueFilterPlugin>(ValueFilterPlugin.type);\n if (filteringPlugins.length === 0) {\n throw new WebinyError(\n \"DynamoDB filtering plugins not loaded.\",\n \"MISSING_DYNAMODB_FILTERING_PLUGINS\"\n );\n }\n\n const create = async (params: CmsGroupStorageOperationsCreateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create group.\",\n ex.code || \"CREATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const update = async (params: CmsGroupStorageOperationsUpdateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update group.\",\n ex.code || \"UPDATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const deleteGroup = async (params: CmsGroupStorageOperationsDeleteParams) => {\n const { group } = params;\n // TODO make sure that group has locale and tenant on it - add it in the crud just in case\n const keys = createKeys(group);\n\n try {\n await entity.delete(keys);\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete group.\",\n ex.code || \"DELETE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const get = async (params: CmsGroupStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const group = await getRecord<CmsGroup>({\n entity,\n keys\n });\n\n return cleanupItem(entity, group);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get group.\",\n ex.code || \"GET_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n keys\n }\n );\n }\n };\n const list = async (params: CmsGroupStorageOperationsListParams) => {\n const { sort, where: initialWhere } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(initialWhere),\n options: {\n gte: \" \"\n }\n };\n\n let records: CmsGroup[] = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list groups.\",\n ex.code || \"LIST_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n sort,\n where: initialWhere\n }\n );\n }\n\n const where: Partial<CmsGroupStorageOperationsListParams[\"where\"]> = {\n ...initialWhere\n };\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n const filteredItems = filterItems({\n items: records,\n where,\n fields: [],\n plugins\n });\n\n if (!sort || sort.length === 0 || filteredItems.length === 0) {\n return filteredItems;\n }\n return sortItems({\n items: filteredItems,\n sort,\n fields: []\n });\n };\n\n return {\n create,\n update,\n delete: deleteGroup,\n get,\n list\n };\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { CmsModelStorageOperations } from "@webiny/api-headless-cms/types";
2
2
  import { Entity } from "dynamodb-toolbox";
3
3
  import { Client } from "@elastic/elasticsearch";
4
- export interface Params {
4
+ export interface CreateModelsStorageOperationsParams {
5
5
  entity: Entity<any>;
6
6
  elasticsearch: Client;
7
7
  }
8
- export declare const createModelsStorageOperations: (params: Params) => CmsModelStorageOperations;
8
+ export declare const createModelsStorageOperations: (params: CreateModelsStorageOperationsParams) => CmsModelStorageOperations;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createModelsStorageOperations = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
- var _configurations = _interopRequireDefault(require("../../configurations"));
12
+ var _configurations = require("../../configurations");
13
13
 
14
14
  var _error = _interopRequireDefault(require("@webiny/error"));
15
15
 
@@ -19,10 +19,6 @@ var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
19
19
 
20
20
  var _query = require("@webiny/db-dynamodb/utils/query");
21
21
 
22
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
23
-
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
-
26
22
  const createPartitionKey = params => {
27
23
  const {
28
24
  tenant,
@@ -59,35 +55,15 @@ const createModelsStorageOperations = params => {
59
55
 
60
56
  const {
61
57
  index
62
- } = _configurations.default.es({
58
+ } = _configurations.configurations.es({
63
59
  model
64
60
  });
65
61
 
66
- try {
67
- const {
68
- body: exists
69
- } = await elasticsearch.indices.exists({
70
- index
71
- });
72
-
73
- if (!exists) {
74
- await elasticsearch.indices.create({
75
- index
76
- });
77
- }
78
- } catch (ex) {
79
- throw new _error.default("Could not create Elasticsearch indice.", "ELASTICSEARCH_INDICE_CREATE_ERROR", {
80
- error: ex,
81
- index,
82
- model
83
- });
84
- }
85
-
86
62
  const keys = createKeys(model);
87
63
  let error;
88
64
 
89
65
  try {
90
- await entity.put(_objectSpread(_objectSpread(_objectSpread({}, model), keys), {}, {
66
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _cleanup.cleanupItem)(entity, model)), keys), {}, {
91
67
  TYPE: createType()
92
68
  }));
93
69
  return model;
@@ -101,10 +77,11 @@ const createModelsStorageOperations = params => {
101
77
 
102
78
  try {
103
79
  await elasticsearch.indices.delete({
104
- index
80
+ index,
81
+ ignore_unavailable: true
105
82
  });
106
83
  } catch (ex) {
107
- throw new _error.default(`Could not delete elasticsearch index "${index}" after model record failed to be created.`, "DELETE_MODEL_INDICE_ERROR", {
84
+ throw new _error.default(`Could not delete elasticsearch index "${index}" after model record failed to be created.`, "DELETE_MODEL_INDEX_ERROR", {
108
85
  dynamodbError: error,
109
86
  elasticsearchError: ex
110
87
  });
@@ -115,21 +92,19 @@ const createModelsStorageOperations = params => {
115
92
 
116
93
  const update = async params => {
117
94
  const {
118
- original,
119
95
  model
120
96
  } = params;
121
97
  const keys = createKeys(model);
122
98
 
123
99
  try {
124
- await entity.put(_objectSpread(_objectSpread(_objectSpread({}, model), keys), {}, {
100
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _cleanup.cleanupItem)(entity, model)), keys), {}, {
125
101
  TYPE: createType()
126
102
  }));
127
103
  return model;
128
104
  } catch (ex) {
129
- throw new _error.default(ex.messatge || "Could not update model.", ex.code || "MODEL_UPDATE_ERROR", {
105
+ throw new _error.default(ex.message || "Could not update model.", ex.code || "MODEL_UPDATE_ERROR", {
130
106
  error: ex,
131
107
  model,
132
- original,
133
108
  keys
134
109
  });
135
110
  }
@@ -141,16 +116,40 @@ const createModelsStorageOperations = params => {
141
116
  } = params;
142
117
  const keys = createKeys(model);
143
118
 
119
+ const {
120
+ index
121
+ } = _configurations.configurations.es({
122
+ model
123
+ });
124
+
144
125
  try {
145
126
  await entity.delete(keys);
146
- return model;
147
127
  } catch (ex) {
148
- throw new _error.default(ex.messatge || "Could not delete model.", ex.code || "MODEL_DELETE_ERROR", {
128
+ throw new _error.default(ex.message || "Could not delete model.", ex.code || "MODEL_DELETE_ERROR", {
149
129
  error: ex,
150
130
  model,
151
131
  keys
152
132
  });
153
133
  }
134
+ /**
135
+ * Always delete the model index after deleting the model.
136
+ */
137
+
138
+
139
+ try {
140
+ await elasticsearch.indices.delete({
141
+ index,
142
+ ignore_unavailable: true
143
+ });
144
+ } catch (ex) {
145
+ throw new _error.default(`Could not delete elasticsearch index "${index}" after model record delete.`, "DELETE_MODEL_INDEX_ERROR", {
146
+ error: ex,
147
+ index,
148
+ model
149
+ });
150
+ }
151
+
152
+ return model;
154
153
  };
155
154
 
156
155
  const get = async params => {
@@ -163,7 +162,7 @@ const createModelsStorageOperations = params => {
163
162
  });
164
163
  return (0, _cleanup.cleanupItem)(entity, item);
165
164
  } catch (ex) {
166
- throw new _error.default(ex.messatge || "Could not get model.", ex.code || "MODEL_GET_ERROR", {
165
+ throw new _error.default(ex.message || "Could not get model.", ex.code || "MODEL_GET_ERROR", {
167
166
  error: ex,
168
167
  keys
169
168
  });
@@ -186,7 +185,7 @@ const createModelsStorageOperations = params => {
186
185
  const items = await (0, _query.queryAll)(queryAllParams);
187
186
  return (0, _cleanup.cleanupItems)(entity, items);
188
187
  } catch (ex) {
189
- throw new _error.default(ex.messatge || "Could not list models.", ex.code || "MODEL_LIST_ERROR", {
188
+ throw new _error.default(ex.message || "Could not list models.", ex.code || "MODEL_LIST_ERROR", {
190
189
  error: ex,
191
190
  partitionKey: queryAllParams.partitionKey
192
191
  });
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPartitionKey","params","tenant","locale","createSortKey","modelId","createKeys","PK","SK","createType","createModelsStorageOperations","entity","elasticsearch","create","model","index","configurations","es","keys","error","put","cleanupItem","TYPE","ex","indices","delete","ignore_unavailable","WebinyError","dynamodbError","elasticsearchError","update","message","code","deleteModel","get","item","getRecord","list","where","queryAllParams","partitionKey","options","gte","items","queryAll","cleanupItems"],"sources":["index.ts"],"sourcesContent":["import {\n CmsModel,\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { configurations } from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\n\ninterface PartitionKeysParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeysParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CM`;\n};\n\ninterface SortKeyParams {\n modelId: string;\n}\nconst createSortKey = (params: SortKeyParams): string => {\n return params.modelId;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeysParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.model\";\n};\n\nexport interface CreateModelsStorageOperationsParams {\n entity: Entity<any>;\n elasticsearch: Client;\n}\nexport const createModelsStorageOperations = (\n params: CreateModelsStorageOperationsParams\n): CmsModelStorageOperations => {\n const { entity, elasticsearch } = params;\n\n const create = async (params: CmsModelStorageOperationsCreateParams) => {\n const { model } = params;\n\n const { index } = configurations.es({\n model\n });\n\n const keys = createKeys(model);\n\n let error;\n try {\n await entity.put({\n ...cleanupItem(entity, model),\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n error = ex;\n }\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index,\n ignore_unavailable: true\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record failed to be created.`,\n \"DELETE_MODEL_INDEX_ERROR\",\n {\n dynamodbError: error,\n elasticsearchError: ex\n }\n );\n }\n throw error;\n };\n\n const update = async (params: CmsModelStorageOperationsUpdateParams) => {\n const { model } = params;\n\n const keys = createKeys(model);\n\n try {\n await entity.put({\n ...cleanupItem(entity, model),\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update model.\",\n ex.code || \"MODEL_UPDATE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams) => {\n const { model } = params;\n const keys = createKeys(model);\n\n const { index } = configurations.es({\n model\n });\n\n try {\n await entity.delete(keys);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete model.\",\n ex.code || \"MODEL_DELETE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n /**\n * Always delete the model index after deleting the model.\n */\n try {\n await elasticsearch.indices.delete({\n index,\n ignore_unavailable: true\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record delete.`,\n \"DELETE_MODEL_INDEX_ERROR\",\n {\n error: ex,\n index,\n model\n }\n );\n }\n\n return model;\n };\n\n const get = async (params: CmsModelStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const item = await getRecord<CmsModel>({\n entity,\n keys\n });\n return cleanupItem(entity, item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get model.\",\n ex.code || \"MODEL_GET_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n const list = async (params: CmsModelStorageOperationsListParams) => {\n const { where } = params;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(where),\n options: {\n gte: \" \"\n }\n };\n try {\n const items = await queryAll<CmsModel>(queryAllParams);\n\n return cleanupItems(entity, items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list models.\",\n ex.code || \"MODEL_LIST_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey\n }\n );\n }\n };\n\n return {\n create,\n update,\n delete: deleteModel,\n get,\n list\n };\n};\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { CmsSettingsStorageOperations } from "@webiny/api-headless-cms/types";
2
2
  import { Entity } from "dynamodb-toolbox";
3
- export interface Params {
3
+ export interface CreateSettingsStorageOperationsParams {
4
4
  entity: Entity<any>;
5
5
  }
6
- export declare const createSettingsStorageOperations: (params: Params) => CmsSettingsStorageOperations;
6
+ export declare const createSettingsStorageOperations: (params: CreateSettingsStorageOperationsParams) => CmsSettingsStorageOperations;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.createSettingsStorageOperations = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
11
 
12
12
  var _get = require("@webiny/db-dynamodb/utils/get");
13
13
 
@@ -15,12 +15,8 @@ var _error = _interopRequireDefault(require("@webiny/error"));
15
15
 
16
16
  var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
17
17
 
18
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
19
-
20
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
21
-
22
18
  const convertToDbData = settings => {
23
- return _objectSpread(_objectSpread({}, settings), {}, {
19
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
24
20
  contentModelLastChange: settings.contentModelLastChange.toISOString()
25
21
  });
26
22
  };
@@ -38,7 +34,7 @@ const convertFromDbData = settings => {
38
34
  contentModelLastChange = new Date();
39
35
  }
40
36
 
41
- return _objectSpread(_objectSpread({}, settings), {}, {
37
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
42
38
  contentModelLastChange
43
39
  });
44
40
  };
@@ -74,7 +70,7 @@ const createSettingsStorageOperations = params => {
74
70
  const dbSettings = convertToDbData(settings);
75
71
 
76
72
  try {
77
- await entity.put(_objectSpread(_objectSpread({}, dbSettings), keys));
73
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, dbSettings), keys));
78
74
  return settings;
79
75
  } catch (ex) {
80
76
  throw new _error.default(ex.message || "Could not create settings.", ex.code || "CREATE_SETTINGS_ERROR", {
@@ -88,21 +84,19 @@ const createSettingsStorageOperations = params => {
88
84
 
89
85
  const update = async params => {
90
86
  const {
91
- settings,
92
- original
87
+ settings
93
88
  } = params;
94
89
  const keys = createKeys(settings);
95
90
  const dbSettings = convertToDbData(settings);
96
91
 
97
92
  try {
98
- await entity.put(_objectSpread(_objectSpread({}, dbSettings), keys));
93
+ await entity.put((0, _objectSpread2.default)((0, _objectSpread2.default)({}, dbSettings), keys));
99
94
  return settings;
100
95
  } catch (ex) {
101
96
  throw new _error.default(ex.message || "Could not update settings.", ex.code || "UPDATE_SETTINGS_ERROR", {
102
97
  error: ex,
103
98
  settings,
104
99
  dbSettings,
105
- original,
106
100
  keys
107
101
  });
108
102
  }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["convertToDbData","settings","contentModelLastChange","toISOString","convertFromDbData","Date","createPartitionKey","tenant","locale","createSortKey","createKeys","params","PK","SK","createSettingsStorageOperations","entity","create","keys","dbSettings","put","ex","WebinyError","message","code","error","update","get","record","getRecord","cleanupItem"],"sources":["index.ts"],"sourcesContent":["import {\n CmsSettings,\n CmsSettingsStorageOperations,\n CmsSettingsStorageOperationsCreateParams,\n CmsSettingsStorageOperationsGetParams,\n CmsSettingsStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport WebinyError from \"@webiny/error\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\n\ninterface CmsSettingsDb extends Omit<CmsSettings, \"contentModelLastChange\"> {\n contentModelLastChange: string;\n}\n\nconst convertToDbData = (settings: CmsSettings): CmsSettingsDb => {\n return {\n ...settings,\n contentModelLastChange: settings.contentModelLastChange.toISOString()\n };\n};\n\nconst convertFromDbData = (settings?: CmsSettingsDb): CmsSettings | null => {\n if (!settings) {\n return null;\n }\n let contentModelLastChange;\n try {\n contentModelLastChange = new Date(settings.contentModelLastChange);\n } catch {\n contentModelLastChange = new Date();\n }\n return {\n ...settings,\n contentModelLastChange\n };\n};\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\n\nconst createPartitionKey = ({ tenant, locale }: PartitionKeyParams): string => {\n return `T#${tenant}#L#${locale}#CMS#SETTINGS`;\n};\n\nconst createSortKey = (): string => {\n return \"settings\";\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey()\n };\n};\n\nexport interface CreateSettingsStorageOperationsParams {\n entity: Entity<any>;\n}\n\nexport const createSettingsStorageOperations = (\n params: CreateSettingsStorageOperationsParams\n): CmsSettingsStorageOperations => {\n const { entity } = params;\n\n const create = async (params: CmsSettingsStorageOperationsCreateParams) => {\n const { settings } = params;\n const keys = createKeys(settings);\n\n const dbSettings: CmsSettingsDb = convertToDbData(settings);\n\n try {\n await entity.put({\n ...dbSettings,\n ...keys\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create settings.\",\n ex.code || \"CREATE_SETTINGS_ERROR\",\n {\n error: ex,\n settings,\n dbSettings,\n keys\n }\n );\n }\n };\n\n const update = async (params: CmsSettingsStorageOperationsUpdateParams) => {\n const { settings } = params;\n\n const keys = createKeys(settings);\n\n const dbSettings: CmsSettingsDb = convertToDbData(settings);\n\n try {\n await entity.put({\n ...dbSettings,\n ...keys\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update settings.\",\n ex.code || \"UPDATE_SETTINGS_ERROR\",\n {\n error: ex,\n settings,\n dbSettings,\n keys\n }\n );\n }\n };\n\n const get = async (params: CmsSettingsStorageOperationsGetParams) => {\n const keys = createKeys(params);\n try {\n const record = await getRecord<CmsSettingsDb>({\n entity,\n keys\n });\n if (!record) {\n return null;\n }\n const settings = cleanupItem(entity, record) as CmsSettingsDb;\n return convertFromDbData(settings);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get settings.\",\n ex.code || \"GET_SETTINGS_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n return {\n create,\n get,\n update\n };\n};\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { CmsSystemStorageOperations } from "@webiny/api-headless-cms/types";
2
2
  import { Entity } from "dynamodb-toolbox";
3
- export interface Params {
3
+ export interface CreateSystemStorageOperationsParams {
4
4
  entity: Entity<any>;
5
5
  }
6
- export declare const createSystemStorageOperations: (params: Params) => CmsSystemStorageOperations;
6
+ export declare const createSystemStorageOperations: (params: CreateSystemStorageOperationsParams) => CmsSystemStorageOperations;