@webiny/api-headless-cms-ddb-es 5.17.4-beta.1 → 5.18.0-beta.2

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 (170) hide show
  1. package/configurations.d.ts +5 -17
  2. package/configurations.js +9 -38
  3. package/definitions/entry.d.ts +6 -11
  4. package/definitions/entry.js +17 -14
  5. package/definitions/entryElasticsearch.d.ts +8 -0
  6. package/definitions/entryElasticsearch.js +46 -0
  7. package/definitions/group.d.ts +8 -0
  8. package/definitions/group.js +74 -0
  9. package/definitions/model.d.ts +7 -6
  10. package/definitions/model.js +45 -20
  11. package/definitions/settings.d.ts +8 -0
  12. package/definitions/settings.js +62 -0
  13. package/definitions/system.d.ts +8 -0
  14. package/definitions/system.js +50 -0
  15. package/definitions/table.d.ts +7 -3
  16. package/definitions/table.js +12 -29
  17. package/definitions/tableElasticsearch.d.ts +7 -3
  18. package/definitions/tableElasticsearch.js +12 -29
  19. package/dynamoDb/index.d.ts +1 -1
  20. package/dynamoDb/index.js +4 -3
  21. package/dynamoDb/storage/date.d.ts +2 -2
  22. package/dynamoDb/storage/date.js +17 -17
  23. package/dynamoDb/storage/longText.d.ts +7 -0
  24. package/dynamoDb/storage/longText.js +83 -0
  25. package/dynamoDb/storage/richText.d.ts +2 -2
  26. package/dynamoDb/storage/richText.js +69 -67
  27. package/elasticsearch/index.d.ts +1 -1
  28. package/elasticsearch/index.js +1 -2
  29. package/elasticsearch/indexing/dateTimeIndexing.js +1 -2
  30. package/elasticsearch/indexing/defaultFieldIndexing.js +1 -2
  31. package/elasticsearch/indexing/index.js +4 -3
  32. package/elasticsearch/indexing/longTextIndexing.d.ts +3 -0
  33. package/elasticsearch/indexing/longTextIndexing.js +36 -0
  34. package/elasticsearch/indexing/numberIndexing.js +1 -2
  35. package/elasticsearch/indexing/objectIndexing.js +32 -27
  36. package/elasticsearch/indexing/richTextIndexing.js +1 -2
  37. package/elasticsearch/search/index.js +1 -2
  38. package/elasticsearch/search/refSearch.js +1 -2
  39. package/elasticsearch/search/timeSearch.js +1 -2
  40. package/helpers/createElasticsearchQueryBody.d.ts +5 -4
  41. package/helpers/createElasticsearchQueryBody.js +89 -44
  42. package/helpers/entryIndexHelpers.d.ts +14 -12
  43. package/helpers/entryIndexHelpers.js +63 -58
  44. package/helpers/fields.d.ts +11 -10
  45. package/helpers/fields.js +4 -5
  46. package/helpers/index.js +1 -2
  47. package/helpers/operatorPluginsList.d.ts +2 -2
  48. package/helpers/operatorPluginsList.js +3 -4
  49. package/helpers/searchPluginsList.d.ts +2 -2
  50. package/helpers/searchPluginsList.js +3 -4
  51. package/helpers/transformValueForSearch.d.ts +4 -5
  52. package/helpers/transformValueForSearch.js +3 -6
  53. package/index.d.ts +2 -2
  54. package/index.js +154 -12
  55. package/operations/entry/dataLoaders.d.ts +38 -14
  56. package/operations/entry/dataLoaders.js +193 -125
  57. package/operations/entry/elasticsearchFields.d.ts +2 -0
  58. package/operations/entry/elasticsearchFields.js +32 -0
  59. package/operations/entry/fields.d.ts +2 -2
  60. package/operations/entry/fields.js +1 -2
  61. package/operations/entry/index.d.ts +13 -3
  62. package/operations/entry/index.js +1148 -15
  63. package/operations/entry/keys.d.ts +12 -0
  64. package/operations/entry/keys.js +40 -0
  65. package/operations/group/index.d.ts +8 -0
  66. package/operations/group/index.js +202 -0
  67. package/operations/model/index.d.ts +8 -3
  68. package/operations/model/index.js +196 -17
  69. package/operations/settings/index.d.ts +6 -3
  70. package/operations/settings/index.js +132 -16
  71. package/operations/system/createElasticsearchTemplate.d.ts +5 -0
  72. package/operations/system/createElasticsearchTemplate.js +62 -0
  73. package/operations/system/index.d.ts +6 -3
  74. package/operations/system/index.js +93 -17
  75. package/package.json +15 -14
  76. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.d.ts +17 -0
  77. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js +24 -0
  78. package/plugins/CmsEntryElasticsearchFieldPlugin.d.ts +9 -1
  79. package/plugins/CmsEntryElasticsearchFieldPlugin.js +9 -3
  80. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.d.ts +17 -0
  81. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js +24 -0
  82. package/plugins/CmsEntryElasticsearchSortModifierPlugin.d.ts +17 -0
  83. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js +24 -0
  84. package/types.d.ts +61 -80
  85. package/types.js +55 -1
  86. package/upgrades/index.js +1 -2
  87. package/upgrades/utils.js +1 -2
  88. package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +2 -2
  89. package/upgrades/v5.0.0/cleanDatabaseRecord.js +1 -2
  90. package/upgrades/v5.0.0/createOldVersionIndiceName.js +1 -2
  91. package/upgrades/v5.0.0/entryValueFixer.d.ts +3 -3
  92. package/upgrades/v5.0.0/entryValueFixer.js +3 -4
  93. package/upgrades/v5.0.0/fieldFinder.d.ts +4 -4
  94. package/upgrades/v5.0.0/fieldFinder.js +1 -2
  95. package/upgrades/v5.0.0/helpers.js +1 -2
  96. package/upgrades/v5.0.0/index.js +1 -2
  97. package/upgrades/v5.8.0/index.js +3 -3
  98. package/configurations.js.map +0 -1
  99. package/definitions/elasticsearchEntry.d.ts +0 -13
  100. package/definitions/elasticsearchEntry.js +0 -43
  101. package/definitions/elasticsearchEntry.js.map +0 -1
  102. package/definitions/entry.js.map +0 -1
  103. package/definitions/index.d.ts +0 -17
  104. package/definitions/index.js +0 -28
  105. package/definitions/index.js.map +0 -1
  106. package/definitions/model.js.map +0 -1
  107. package/definitions/table.js.map +0 -1
  108. package/definitions/tableElasticsearch.js.map +0 -1
  109. package/dynamoDb/index.js.map +0 -1
  110. package/dynamoDb/storage/date.js.map +0 -1
  111. package/dynamoDb/storage/richText.js.map +0 -1
  112. package/elasticsearch/index.js.map +0 -1
  113. package/elasticsearch/indexing/dateTimeIndexing.js.map +0 -1
  114. package/elasticsearch/indexing/defaultFieldIndexing.js.map +0 -1
  115. package/elasticsearch/indexing/index.js.map +0 -1
  116. package/elasticsearch/indexing/numberIndexing.js.map +0 -1
  117. package/elasticsearch/indexing/objectIndexing.js.map +0 -1
  118. package/elasticsearch/indexing/richTextIndexing.js.map +0 -1
  119. package/elasticsearch/search/index.js.map +0 -1
  120. package/elasticsearch/search/refSearch.js.map +0 -1
  121. package/elasticsearch/search/timeSearch.js.map +0 -1
  122. package/helpers/createElasticsearchQueryBody.js.map +0 -1
  123. package/helpers/entryIndexHelpers.js.map +0 -1
  124. package/helpers/fields.js.map +0 -1
  125. package/helpers/index.js.map +0 -1
  126. package/helpers/operatorPluginsList.js.map +0 -1
  127. package/helpers/searchPluginsList.js.map +0 -1
  128. package/helpers/transformValueForSearch.js.map +0 -1
  129. package/index.js.map +0 -1
  130. package/operations/entry/CmsContentEntryDynamoElastic.d.ts +0 -54
  131. package/operations/entry/CmsContentEntryDynamoElastic.js +0 -1128
  132. package/operations/entry/CmsContentEntryDynamoElastic.js.map +0 -1
  133. package/operations/entry/dataLoaders.js.map +0 -1
  134. package/operations/entry/fields.js.map +0 -1
  135. package/operations/entry/index.js.map +0 -1
  136. package/operations/model/CmsContentModelDynamoElastic.d.ts +0 -18
  137. package/operations/model/CmsContentModelDynamoElastic.js +0 -180
  138. package/operations/model/CmsContentModelDynamoElastic.js.map +0 -1
  139. package/operations/model/index.js.map +0 -1
  140. package/operations/modelGroup/CmsContentModelGroupDynamoElastic.d.ts +0 -40
  141. package/operations/modelGroup/CmsContentModelGroupDynamoElastic.js +0 -193
  142. package/operations/modelGroup/CmsContentModelGroupDynamoElastic.js.map +0 -1
  143. package/operations/modelGroup/index.d.ts +0 -3
  144. package/operations/modelGroup/index.js +0 -26
  145. package/operations/modelGroup/index.js.map +0 -1
  146. package/operations/settings/CmsSettingsDynamoElastic.d.ts +0 -14
  147. package/operations/settings/CmsSettingsDynamoElastic.js +0 -127
  148. package/operations/settings/CmsSettingsDynamoElastic.js.map +0 -1
  149. package/operations/settings/index.js.map +0 -1
  150. package/operations/system/CmsSystemDynamoElastic.d.ts +0 -14
  151. package/operations/system/CmsSystemDynamoElastic.js +0 -101
  152. package/operations/system/CmsSystemDynamoElastic.js.map +0 -1
  153. package/operations/system/CmsSystemInstallationPlugin.d.ts +0 -11
  154. package/operations/system/CmsSystemInstallationPlugin.js +0 -78
  155. package/operations/system/CmsSystemInstallationPlugin.js.map +0 -1
  156. package/operations/system/index.js.map +0 -1
  157. package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +0 -1
  158. package/types.js.map +0 -1
  159. package/upgrades/index.js.map +0 -1
  160. package/upgrades/utils.js.map +0 -1
  161. package/upgrades/v5.0.0/cleanDatabaseRecord.js.map +0 -1
  162. package/upgrades/v5.0.0/createOldVersionIndiceName.js.map +0 -1
  163. package/upgrades/v5.0.0/entryValueFixer.js.map +0 -1
  164. package/upgrades/v5.0.0/fieldFinder.js.map +0 -1
  165. package/upgrades/v5.0.0/helpers.js.map +0 -1
  166. package/upgrades/v5.0.0/index.js.map +0 -1
  167. package/upgrades/v5.8.0/index.js.map +0 -1
  168. package/utils.d.ts +0 -3
  169. package/utils.js +0 -42
  170. package/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/CmsContentEntryDynamoElastic.ts"],"names":["TYPE_ENTRY","TYPE_ENTRY_LATEST","TYPE_ENTRY_PUBLISHED","getEntryData","context","entry","TYPE","__type","getESLatestEntryData","latest","getESPublishedEntryData","published","CmsContentEntryDynamoElastic","esClient","_esClient","ctx","elasticsearch","WebinyError","partitionKey","constructor","_dataLoaders","DataLoadersHandler","create","model","args","db","storageEntry","esEntry","index","esIndex","configurations","es","esLatestData","batch","data","PK","getPartitionKey","id","SK","getSortKeyRevision","version","getSortKeyLatest","esDb","execute","ex","message","code","error","createRevisionFrom","originalEntry","primaryKey","update","query","delete","dbItems","read","$gte","esDbItems","Promise","all","items","map","item","deleteRevision","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","esConfig","publishedStorageEntry","getPublishedRevisionByEntryId","getSortKeyPublished","get","list","limit","length","shift","body","parentPath","response","search","hits","total","entries","_source","hasMoreItems","pop","cursor","sort","totalCount","value","latestStorageEntry","getLatestRevisionByEntryId","esDoc","savedOn","clearAllEntryRevisions","publish","readBatch","latestESEntryData","publishedESEntryData","previouslyPublishedStorageEntry","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","latestEsEntryDataDecompressed","PUBLISHED","locked","publishedOn","preparedEntryData","esData","unpublish","requestChanges","requestReview","getAllRevisionsByIds","ids","getAllEntryRevisions","getByIds","getRevisionById","getPublishedByIds","getLatestByIds","getRevisions","getSingleDynamoDbItem","entryId","getPreviousRevision","$lt","includes","split"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCloneDeep from \"lodash.clonedeep\";\nimport lodashOmit from \"lodash.omit\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsContentEntry,\n CmsContentEntryStorageOperations,\n CmsContentEntryStorageOperationsCreateArgs,\n CmsContentEntryStorageOperationsCreateRevisionFromArgs,\n CmsContentEntryStorageOperationsDeleteArgs,\n CmsContentEntryStorageOperationsDeleteRevisionArgs,\n CmsContentEntryStorageOperationsGetArgs,\n CmsContentEntryStorageOperationsListArgs,\n CmsContentEntryStorageOperationsListResponse,\n CmsContentEntryStorageOperationsPublishArgs,\n CmsContentEntryStorageOperationsRequestChangesArgs,\n CmsContentEntryStorageOperationsRequestReviewArgs,\n CmsContentEntryStorageOperationsUnpublishArgs,\n CmsContentEntryStorageOperationsUpdateArgs,\n CmsContentModel,\n CmsContext,\n CONTENT_ENTRY_STATUS\n} from \"@webiny/api-headless-cms/types\";\nimport configurations from \"../../configurations\";\nimport { zeroPad } from \"@webiny/api-headless-cms/utils\";\nimport {\n createElasticsearchQueryBody,\n extractEntriesFromIndex,\n prepareEntryToIndex\n} from \"../../helpers\";\nimport { createBasePartitionKey, paginateBatch } from \"~/utils\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { ElasticsearchContext } from \"@webiny/api-elasticsearch/types\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\nimport { compress, decompress } from \"@webiny/api-elasticsearch/compression\";\n\nexport const TYPE_ENTRY = \"cms.entry\";\nexport const TYPE_ENTRY_LATEST = TYPE_ENTRY + \".l\";\nexport const TYPE_ENTRY_PUBLISHED = TYPE_ENTRY + \".p\";\n\nconst getEntryData = (context: CmsContext, entry: CmsContentEntry) => {\n return {\n ...lodashOmit(entry, [\"PK\", \"SK\", \"published\", \"latest\"]),\n TYPE: TYPE_ENTRY,\n __type: TYPE_ENTRY\n };\n};\n\nconst getESLatestEntryData = async (context: CmsContext, entry: CmsContentEntry) => {\n return compress(context, {\n ...getEntryData(context, entry),\n latest: true,\n TYPE: TYPE_ENTRY_LATEST,\n __type: TYPE_ENTRY_LATEST\n });\n};\n\nconst getESPublishedEntryData = async (context: CmsContext, entry: CmsContentEntry) => {\n return compress(context, {\n ...getEntryData(context, entry),\n published: true,\n TYPE: TYPE_ENTRY_PUBLISHED,\n __type: TYPE_ENTRY_PUBLISHED\n });\n};\n\ninterface ElasticsearchTableItem {\n PK: string;\n SK: string;\n index: string;\n data: any;\n}\n\ninterface ConstructorArgs {\n context: CmsContext;\n}\n\n/**\n * This implementation is not a general driver to fetch from DDB/Elastic.\n * Use some other implementation for general-use purpose.\n */\nexport default class CmsContentEntryDynamoElastic implements CmsContentEntryStorageOperations {\n private readonly context: CmsContext;\n private readonly _dataLoaders: DataLoadersHandler;\n private _esClient: Client;\n\n private get esClient(): Client {\n if (this._esClient) {\n return this._esClient;\n }\n const ctx = this.context as Partial<ElasticsearchContext>;\n if (!ctx.elasticsearch) {\n throw new WebinyError(\"Missing Elasticsearch client on the context\");\n }\n this._esClient = ctx.elasticsearch as Client;\n return this._esClient;\n }\n\n private get partitionKey(): string {\n return `${createBasePartitionKey(this.context)}#CME`;\n }\n\n public constructor({ context }: ConstructorArgs) {\n this.context = context;\n this._dataLoaders = new DataLoadersHandler(context, this);\n }\n\n public async create(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsCreateArgs\n ): Promise<CmsContentEntry> {\n const { db } = this.context;\n\n const { entry, storageEntry } = args;\n\n // const storageEntry = await entryToStorageTransform(this.context, model, data);\n\n const esEntry = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const { index: esIndex } = configurations.es(this.context, model);\n\n const esLatestData = await getESLatestEntryData(this.context, esEntry);\n const batch = db\n .batch()\n /**\n * Create main entry item\n */\n .create({\n ...configurations.db(),\n data: {\n PK: this.getPartitionKey(entry.id),\n SK: this.getSortKeyRevision(entry.version),\n TYPE: TYPE_ENTRY,\n ...storageEntry\n }\n })\n /**\n * Create \"latest\" entry item\n */\n .create({\n ...configurations.db(),\n data: {\n PK: this.getPartitionKey(entry.id),\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n ...storageEntry\n }\n })\n .create({\n ...configurations.esDb(),\n data: {\n PK: this.getPartitionKey(entry.id),\n SK: this.getSortKeyLatest(),\n index: esIndex,\n data: esLatestData\n }\n });\n\n try {\n await batch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry,\n storageEntry,\n esEntry\n }\n );\n }\n\n return storageEntry;\n }\n\n public async createRevisionFrom(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsCreateRevisionFromArgs\n ) {\n const { db } = this.context;\n\n const { originalEntry, entry, storageEntry } = args;\n\n const esEntry = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n const { index: esIndex } = configurations.es(this.context, model);\n\n const primaryKey = this.getPartitionKey(storageEntry.id);\n const batch = db.batch();\n\n const esLatestData = await getESLatestEntryData(this.context, esEntry);\n batch\n /**\n * Create main entry item\n */\n .create({\n ...configurations.db(),\n data: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(storageEntry.version),\n TYPE: TYPE_ENTRY,\n ...getEntryData(this.context, storageEntry)\n }\n })\n /**\n * Update \"latest\" entry item\n */\n .update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n ...getEntryData(this.context, storageEntry)\n }\n })\n /**\n * Update the \"latest\" entry item in the Elasticsearch\n */\n .update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: esIndex,\n data: esLatestData\n }\n });\n try {\n await batch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n originalEntry,\n entry,\n storageEntry,\n esEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n }\n\n public async delete(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsDeleteArgs\n ): Promise<void> {\n const { db } = this.context;\n const { entry } = args;\n\n const primaryKey = this.getPartitionKey(entry.id);\n\n const [dbItems] = await db.read<CmsContentEntry>({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: { $gte: \" \" }\n }\n });\n /**\n * Load ES entries to delete\n */\n const [esDbItems] = await db.read<CmsContentEntry>({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: { $gte: \" \" }\n }\n });\n\n /**\n * Delete all items from DB and ES DB\n */\n await Promise.all([\n paginateBatch(dbItems, 25, async items => {\n await db\n .batch()\n .delete(\n ...items.map((item: any) => ({\n ...configurations.db(),\n query: {\n PK: item.PK,\n SK: item.SK\n }\n }))\n )\n .execute();\n }),\n paginateBatch(esDbItems, 25, async items => {\n await db\n .batch()\n .delete(\n ...items.map((item: any) => ({\n ...configurations.esDb(),\n query: {\n PK: item.PK,\n SK: item.SK\n }\n }))\n )\n .execute();\n })\n ]);\n }\n\n public async deleteRevision(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsDeleteRevisionArgs\n ): Promise<void> {\n const { db } = this.context;\n const { entryToDelete, entryToSetAsLatest, storageEntryToSetAsLatest } = args;\n\n const primaryKey = this.getPartitionKey(entryToDelete.id);\n const esConfig = configurations.es(this.context, model);\n /**\n * We need published entry to delete it if necessary.\n */\n const publishedStorageEntry = await this.getPublishedRevisionByEntryId(\n model,\n entryToDelete.id\n );\n /**\n * We need to delete all existing records of the given entry revision.\n */\n const batch = db.batch();\n /**\n * Delete records of given entry revision.\n */\n batch.delete({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(entryToDelete.id)\n }\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 && entryToDelete.id === publishedStorageEntry.id) {\n batch\n .delete({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n })\n .delete({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n });\n }\n if (entryToSetAsLatest) {\n const esEntry = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntryToSetAsLatest)\n });\n\n const esLatestData = await getESLatestEntryData(this.context, esEntry);\n /**\n * In the end we need to set the new latest entry\n */\n batch\n .update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n ...storageEntryToSetAsLatest,\n TYPE: TYPE_ENTRY_LATEST\n }\n })\n .update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: esConfig.index,\n data: esLatestData\n }\n });\n }\n try {\n await batch.execute();\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\n });\n }\n }\n\n public async get(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsGetArgs\n ): Promise<CmsContentEntry | null> {\n const { items } = await this.list(model, {\n ...(args || {}),\n limit: 1\n });\n if (items.length === 0) {\n return null;\n }\n return items.shift();\n }\n\n /**\n * Implemented search via the Elasticsearch.\n */\n public async list(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsListArgs\n ): Promise<CmsContentEntryStorageOperationsListResponse> {\n const limit = createLimit(args.limit, 50);\n const body = createElasticsearchQueryBody({\n model,\n args: {\n ...(args || {}),\n limit\n },\n context: this.context,\n parentPath: \"values\"\n });\n\n let response;\n const esConfig = configurations.es(this.context, model);\n try {\n response = await this.esClient.search({\n ...esConfig,\n body\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"ELASTICSEARCH_ERROR\", {\n error: ex,\n esConfig,\n body\n });\n }\n\n const { hits, total } = response.body.hits;\n const items = extractEntriesFromIndex({\n context: this.context,\n model,\n entries: hits.map(item => item._source)\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;\n return {\n hasMoreItems,\n totalCount: total.value,\n cursor,\n items\n };\n }\n\n public async update(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsUpdateArgs\n ): Promise<CmsContentEntry> {\n const {\n originalEntry,\n entry,\n storageEntry\n // latestEntry\n } = args;\n\n const { db } = this.context;\n\n const primaryKey = this.getPartitionKey(originalEntry.id);\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, originalEntry.id);\n\n const batch = db.batch();\n\n batch.update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(originalEntry.version)\n },\n data: {\n ...storageEntry,\n SK: this.getSortKeyRevision(originalEntry.version)\n }\n });\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n if (latestStorageEntry.id === originalEntry.id) {\n /**\n * First we update the regular DynamoDB table\n */\n batch.update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n ...storageEntry,\n TYPE: TYPE_ENTRY_LATEST,\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n }\n });\n /**\n * And then update the Elasticsearch table to propagate changes to the Elasticsearch\n */\n const esEntry = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n const esDoc = {\n ...esEntry,\n savedOn: storageEntry.savedOn\n };\n\n const { index: esIndex } = configurations.es(this.context, model);\n\n const esLatestData = await getESLatestEntryData(this.context, esDoc);\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: esIndex,\n data: esLatestData\n }\n });\n }\n try {\n await batch.execute();\n this._dataLoaders.clearAllEntryRevisions(model);\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n originalEntry,\n entry,\n storageEntry,\n latestStorageEntry\n }\n );\n }\n }\n\n public async publish(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsPublishArgs\n ): Promise<CmsContentEntry> {\n const { db } = this.context;\n const {\n entry,\n storageEntry\n // latestEntry,\n // publishedEntry\n } = args;\n\n /**\n * We need currently published entry to check if need to remove it.\n */\n const publishedStorageEntry = await this.getPublishedRevisionByEntryId(model, entry.id);\n\n const primaryKey = this.getPartitionKey(entry.id);\n\n const readBatch = db\n .batch()\n .read({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n }\n })\n .read({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n });\n let latestESEntryData: ElasticsearchTableItem | undefined;\n let publishedESEntryData: ElasticsearchTableItem | undefined;\n try {\n [[[latestESEntryData]], [[publishedESEntryData]]] = await readBatch.execute();\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 latest: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n published: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n }\n );\n }\n\n const batch = db.batch();\n\n batch.update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(entry.version)\n },\n data: {\n ...storageEntry,\n SK: this.getSortKeyRevision(entry.version)\n }\n });\n\n const es = configurations.es(this.context, model);\n\n if (publishedStorageEntry) {\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 [[previouslyPublishedStorageEntry]] = await db.read<CmsContentEntry>({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(publishedStorageEntry.version)\n }\n });\n\n previouslyPublishedStorageEntry.status = CONTENT_ENTRY_STATUS.UNPUBLISHED;\n\n batch\n .update({\n /**\n * Update currently published entry (unpublish it)\n */\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(publishedStorageEntry.version)\n },\n data: {\n ...previouslyPublishedStorageEntry,\n SK: this.getSortKeyRevision(publishedStorageEntry.version),\n savedOn: entry.savedOn\n }\n })\n .update({\n /**\n * Update the helper item in DB with the new published entry ID\n */\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n },\n data: {\n ...getEntryData(this.context, storageEntry),\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n });\n } else {\n batch.create({\n ...configurations.db(),\n data: {\n ...getEntryData(this.context, storageEntry),\n PK: primaryKey,\n SK: this.getSortKeyPublished(),\n TYPE: TYPE_ENTRY_PUBLISHED\n }\n });\n }\n\n /**\n * We need the latest entry to check if it neds to be updated as well in the Elasticsearch.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n /**\n * If we are publishing the latest revision, let's also update the latest revision's status in ES.\n */\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\n */\n const latestEsEntryDataDecompressed = await decompress(\n this.context,\n latestESEntryData.data\n );\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n ...latestESEntryData,\n SK: this.getSortKeyLatest(),\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 context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n /**\n * Update the published revision entry in ES.\n */\n const esLatestData = await getESPublishedEntryData(this.context, preparedEntryData);\n const esData = {\n PK: primaryKey,\n SK: this.getSortKeyPublished(),\n index: es.index,\n data: esLatestData\n };\n\n if (publishedESEntryData) {\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n },\n data: esData\n });\n } else {\n batch.create({\n ...configurations.esDb(),\n data: esData\n });\n }\n\n /**\n * Finally, execute batch\n */\n try {\n await batch.execute();\n this._dataLoaders.clearAllEntryRevisions(model, entry);\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n esData,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n }\n\n public async unpublish(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsUnpublishArgs\n ): Promise<CmsContentEntry> {\n const { db } = this.context;\n const { entry, storageEntry } = args;\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n const primaryKey = this.getPartitionKey(entry.id);\n\n const batch = db\n .batch()\n .delete({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n })\n .delete({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyPublished()\n }\n })\n .update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(entry.version)\n },\n data: {\n ...storageEntry,\n SK: this.getSortKeyRevision(entry.version)\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 es = configurations.es(this.context, model);\n\n const preparedEntryData = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(this.context, preparedEntryData);\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: es.index,\n data: esLatestData\n }\n });\n }\n\n try {\n await batch.execute();\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry\n }\n );\n }\n }\n\n public async requestChanges(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsRequestChangesArgs\n ): Promise<CmsContentEntry> {\n const { db } = this.context;\n const { entry, storageEntry, originalEntry } = args;\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n const primaryKey = this.getPartitionKey(entry.id);\n\n const batch = db.batch().update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(entry.version)\n },\n data: {\n ...storageEntry,\n SK: this.getSortKeyRevision(entry.version)\n }\n });\n\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n if (latestStorageEntry.id === entry.id) {\n const es = configurations.es(this.context, model);\n\n const preparedEntryData = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(this.context, preparedEntryData);\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: es.index,\n data: esLatestData\n }\n });\n }\n\n try {\n await batch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the request changes batch.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n originalEntry\n }\n );\n }\n return entry;\n }\n\n public async requestReview(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsRequestReviewArgs\n ): Promise<CmsContentEntry> {\n const { db } = this.context;\n const { entry, storageEntry, originalEntry } = args;\n\n /**\n * We need the latest entry to check if it needs to be updated.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n const primaryKey = this.getPartitionKey(entry.id);\n\n const batch = db.batch().update({\n ...configurations.db(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyRevision(entry.version)\n },\n data: {\n ...storageEntry,\n SK: this.getSortKeyRevision(entry.version)\n }\n });\n\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n if (latestStorageEntry.id === entry.id) {\n const es = configurations.es(this.context, model);\n\n const preparedEntryData = prepareEntryToIndex({\n context: this.context,\n model,\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(this.context, preparedEntryData);\n batch.update({\n ...configurations.esDb(),\n query: {\n PK: primaryKey,\n SK: this.getSortKeyLatest()\n },\n data: {\n PK: primaryKey,\n SK: this.getSortKeyLatest(),\n index: es.index,\n data: esLatestData\n }\n });\n }\n\n try {\n await batch.execute();\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute request review batch.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n }\n\n public async getAllRevisionsByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getAllEntryRevisions(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_ALL_REVISIONS_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getRevisionById(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getPublishedByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getPublishedRevisionByEntryId(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getLatestByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getLatestRevisionByEntryId(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getRevisions(model: CmsContentModel, id: string): Promise<CmsContentEntry[]> {\n try {\n return await this._dataLoaders.getAllEntryRevisions(model, [id]);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_ALL_REVISIONS_BY_IDS_ERROR\",\n {\n id\n }\n );\n }\n }\n\n public async getRevisionById(\n model: CmsContentModel,\n id: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n PK: this.getPartitionKey(id),\n SK: this.getSortKeyRevision(id)\n });\n }\n\n public async getPublishedRevisionByEntryId(\n model: CmsContentModel,\n entryId: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n PK: this.getPartitionKey(entryId),\n SK: this.getSortKeyPublished()\n });\n }\n\n public async getLatestRevisionByEntryId(\n model: CmsContentModel,\n entryId: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n PK: this.getPartitionKey(entryId),\n SK: this.getSortKeyLatest()\n });\n }\n\n public async getPreviousRevision(\n model: CmsContentModel,\n entryId: string,\n version: number\n ): Promise<CmsContentEntry | null> {\n const entry = await this.getSingleDynamoDbItem(\n {\n PK: this.getPartitionKey(entryId),\n SK: {\n $lt: this.getSortKeyRevision(version)\n }\n },\n {\n SK: -1\n }\n );\n /**\n * When there are no lower versions from the given one, it seems that random one is taken.\n * So just make sure that fetched entry version is not greater or equal to requested one.\n */\n if (!entry || entry.version >= version) {\n return null;\n }\n /**\n * We need this due to possibly getting latest or published if given revision does not exist\n */\n if ((entry as any).TYPE !== TYPE_ENTRY) {\n return null;\n }\n return entry;\n }\n\n private async getSingleDynamoDbItem(\n query: { PK: string; SK: string | object },\n sort?: { SK: -1 | 1 }\n ): Promise<CmsContentEntry | null> {\n const { db } = this.context;\n let entry;\n try {\n const [entries] = await db.read<CmsContentEntry>({\n ...configurations.db(),\n query,\n sort,\n limit: 1\n });\n if (entries.length === 0) {\n return null;\n }\n entry = entries.shift();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read from the DynamoDB.\",\n ex.code || \"DDB_READ_ERROR\",\n {\n query,\n sort\n }\n );\n }\n return entry;\n }\n\n public getPartitionKey(id: string): string {\n /**\n * If ID includes # it means it is composed of ID and VERSION.\n * We need ID only so extract it.\n */\n if (id.includes(\"#\")) {\n id = id.split(\"#\").shift();\n }\n return `${this.partitionKey}#${id}`;\n }\n\n /**\n * Gets a sort key in form of REV#version from:\n * id#0003\n * 0003\n * 3\n */\n public getSortKeyRevision(version: string | number) {\n if (typeof version === \"string\" && version.includes(\"#\") === true) {\n version = version.split(\"#\").pop();\n }\n return `REV#${zeroPad(version)}`;\n }\n\n public getSortKeyLatest(): string {\n return \"L\";\n }\n\n public getSortKeyPublished(): string {\n return \"P\";\n }\n}\n"],"file":"CmsContentEntryDynamoElastic.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/dataLoaders.ts"],"names":["batchLoadKeys","loadChunk","DataLoader","keys","keysChunks","promises","forEach","chunk","push","Promise","resolve","entriesChunks","all","reduce","current","items","concat","flattenResults","results","collection","getAllEntryRevisions","context","model","storageOperations","ids","id","entries","db","read","configurations","query","PK","getPartitionKey","SK","$beginsWith","getRevisionById","queries","partitionKey","sortKey","getSortKeyRevision","batch","Object","values","execute","then","map","result","filter","item","getPublishedRevisionByEntryId","getSortKeyPublished","getLatestRevisionByEntryId","getSortKeyLatest","dataLoaders","DataLoadersHandler","constructor","Map","_context","_storageOperations","loadMany","clearAllEntryRevisions","entry","clear","clearRevisionById","clearPublishedRevisionByEntryId","clearLatestRevisionByEntryId","getLoader","name","WebinyError","loaderKey","modelId","_loaders","has","set","get","loader","Array","isArray","acc","res","message","code","data","JSON","stringify","ex","clearAll"],"mappings":"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","sourcesContent":["import DataLoader from \"dataloader\";\nimport { CmsContentEntry, CmsContentModel, CmsContext } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\nimport CmsContentEntryDynamoElastic from \"./CmsContentEntryDynamoElastic\";\nimport lodashChunk from \"lodash.chunk\";\nimport configurations from \"../../configurations\";\n\n// Used in functions below. Ensures we are batch getting 100 keys at most.\nconst batchLoadKeys = loadChunk => {\n return new DataLoader<string, CmsContentEntry>(async keys => {\n // DynamoDB allows getting a maximum of 100 items in a single database call.\n // So, we are creating chunks that consist of a maximum of 100 keys.\n const keysChunks = lodashChunk(keys, 100);\n const promises = [];\n\n keysChunks.forEach(chunk => {\n promises.push(new Promise(resolve => resolve(loadChunk(chunk))));\n });\n\n const entriesChunks = await Promise.all(promises);\n return entriesChunks.reduce((current, items) => current.concat(items), []);\n });\n};\n\nconst flattenResults = (results: any[]): any[] => {\n return results.reduce((collection, items) => {\n collection.push(...items);\n return collection;\n }, []);\n};\n\nconst getAllEntryRevisions = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamoElastic\n) => {\n return new DataLoader<string, CmsContentEntry[]>(async ids => {\n const results = [];\n\n for (const id of ids) {\n const [entries] = await context.db.read({\n ...configurations.db(),\n query: {\n PK: storageOperations.getPartitionKey(id),\n SK: { $beginsWith: \"REV#\" }\n }\n });\n\n results.push(entries);\n }\n\n return results;\n });\n};\n\nconst getRevisionById = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamoElastic\n) => {\n return batchLoadKeys(keys => {\n const queries = keys.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n const sortKey = storageOperations.getSortKeyRevision(id);\n const keys = `${partitionKey}__${sortKey}`;\n if (collection[keys]) {\n return collection;\n }\n collection[keys] = {\n ...configurations.db(),\n query: {\n PK: storageOperations.getPartitionKey(id),\n SK: storageOperations.getSortKeyRevision(id)\n }\n };\n\n return collection;\n }, {});\n\n return context.db\n .batch()\n .read(...Object.values(queries))\n .execute()\n .then(results => results.map(result => result[0]))\n .then(results => {\n const items = flattenResults(results);\n return keys.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n const sortKey = storageOperations.getSortKeyRevision(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n });\n};\n\nconst getPublishedRevisionByEntryId = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamoElastic\n) => {\n return batchLoadKeys(keys => {\n const sortKey = storageOperations.getSortKeyPublished();\n const queries = keys.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = {\n ...configurations.db(),\n query: {\n PK: partitionKey,\n SK: sortKey\n }\n };\n return collection;\n }, {});\n\n return context.db\n .batch()\n .read(...Object.values(queries))\n .execute()\n .then(results => results.map(result => result[0]))\n .then(results => {\n const items = flattenResults(results);\n return keys.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n });\n};\n\nconst getLatestRevisionByEntryId = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamoElastic\n) => {\n return batchLoadKeys(keys => {\n const sortKey = storageOperations.getSortKeyLatest();\n const queries = keys.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = {\n ...configurations.db(),\n query: {\n PK: storageOperations.getPartitionKey(id),\n SK: sortKey\n }\n };\n return collection;\n }, {});\n\n return context.db\n .batch()\n .read(...Object.values(queries))\n .execute()\n .then(results => results.map(result => result[0]))\n .then(results => {\n const items = flattenResults(results);\n return keys.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n });\n};\n\nconst dataLoaders = {\n getAllEntryRevisions,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId\n};\n\nexport class DataLoadersHandler {\n private readonly _loaders: Map<string, DataLoader<any, any>> = new Map();\n private readonly _context: CmsContext;\n private readonly _storageOperations: CmsContentEntryDynamoElastic;\n\n public constructor(context: CmsContext, storageOperations: CmsContentEntryDynamoElastic) {\n this._context = context;\n this._storageOperations = storageOperations;\n }\n\n public async getAllEntryRevisions(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getAllEntryRevisions\", model, ids);\n }\n\n public clearAllEntryRevisions(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getAllEntryRevisions\", model, entry);\n }\n\n public async getRevisionById(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getRevisionById\", model, ids);\n }\n\n public clearRevisionById(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getRevisionById\", model, entry);\n }\n\n public async getPublishedRevisionByEntryId(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getPublishedRevisionByEntryId\", model, ids);\n }\n public clearPublishedRevisionByEntryId(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getPublishedRevisionByEntryId\", model, entry);\n }\n\n public async getLatestRevisionByEntryId(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getLatestRevisionByEntryId\", model, ids);\n }\n\n public clearLatestRevisionByEntryId(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getLatestRevisionByEntryId\", model, entry);\n }\n\n private getLoader(name: string, model: CmsContentModel): DataLoader<any, any> {\n if (!dataLoaders[name]) {\n throw new WebinyError(\"Unknown data loader.\", \"UNKNOWN_DATA_LOADER\", {\n name\n });\n }\n const loaderKey = `${name}-${model.modelId}`;\n if (!this._loaders.has(loaderKey)) {\n this._loaders.set(\n loaderKey,\n dataLoaders[name](this._context, model, this._storageOperations)\n );\n }\n return this._loaders.get(loaderKey);\n }\n\n private async loadMany(\n loader: string,\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n let results;\n try {\n results = await this.getLoader(loader, model).loadMany(ids);\n if (Array.isArray(results) === true) {\n return results.reduce((acc, res) => {\n if (Array.isArray(res) === false) {\n if (res?.message) {\n throw new WebinyError(res.message, res.code, {\n ...res,\n data: JSON.stringify(res.data || {})\n });\n }\n throw new WebinyError(\n \"Result from the data loader must be an array of arrays which contain requested items.\"\n );\n }\n acc.push(...res);\n return acc;\n }, []);\n }\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Data loader error.\",\n ex.code || \"DATA_LOADER_ERROR\",\n {\n loader,\n ids,\n model\n }\n );\n }\n throw new WebinyError(\n `Data loader did not return array of items or empty array.`,\n \"INVALID_DATA_LOADER_RESULT\",\n {\n loader,\n ids,\n results\n }\n );\n }\n /**\n * Helper to clear the cache for certain data loader.\n * If entry is passed then clear target key only.\n */\n private clear(name: string, model: CmsContentModel, entry?: CmsContentEntry): void {\n const loader = this.getLoader(name, model);\n if (!entry) {\n loader.clearAll();\n return;\n }\n loader.clear(entry.id);\n loader.clear(this._storageOperations.getPartitionKey(entry.id));\n }\n}\n"],"file":"dataLoaders.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/fields.ts"],"names":["fieldsWithKeywords","systemFields","createdBy","CmsEntryElasticsearchFieldPlugin","field","path","searchable","keyword","sortable","ownedBy","createdOn","unmappedType","savedOn","createElasticsearchFields","model","fields","reduce","fieldId","includes","type"],"mappings":";;;;;;;AACA;;AAEA,MAAMA,kBAAkB,GAAG,CAAC,MAAD,EAAS,WAAT,EAAsB,WAAtB,EAAmC,IAAnC,EAAyC,KAAzC,CAA3B;AAEA;AACA;AACA;;AACA,MAAMC,YAAY,GAAG;AACjBC,EAAAA,SAAS,EAAE,IAAIC,kEAAJ,CAAqC;AAC5CC,IAAAA,KAAK,EAAE,WADqC;AAE5CC,IAAAA,IAAI,EAAE,cAFsC;AAG5CC,IAAAA,UAAU,EAAE,IAHgC;AAI5CC,IAAAA,OAAO,EAAE,IAJmC;AAK5CC,IAAAA,QAAQ,EAAE;AALkC,GAArC,CADM;AAQjBC,EAAAA,OAAO,EAAE,IAAIN,kEAAJ,CAAqC;AAC1CC,IAAAA,KAAK,EAAE,SADmC;AAE1CC,IAAAA,IAAI,EAAE,YAFoC;AAG1CC,IAAAA,UAAU,EAAE,IAH8B;AAI1CC,IAAAA,OAAO,EAAE,IAJiC;AAK1CC,IAAAA,QAAQ,EAAE;AALgC,GAArC,CARQ;AAejBE,EAAAA,SAAS,EAAE,IAAIP,kEAAJ,CAAqC;AAC5CC,IAAAA,KAAK,EAAE,WADqC;AAE5CC,IAAAA,IAAI,EAAE,WAFsC;AAG5CC,IAAAA,UAAU,EAAE,IAHgC;AAI5CC,IAAAA,OAAO,EAAE,KAJmC;AAK5CC,IAAAA,QAAQ,EAAE,KALkC;AAM5CG,IAAAA,YAAY,EAAE;AAN8B,GAArC,CAfM;AAuBjBC,EAAAA,OAAO,EAAE,IAAIT,kEAAJ,CAAqC;AAC1CC,IAAAA,KAAK,EAAE,SADmC;AAE1CC,IAAAA,IAAI,EAAE,SAFoC;AAG1CC,IAAAA,UAAU,EAAE,IAH8B;AAI1CC,IAAAA,OAAO,EAAE,KAJiC;AAK1CC,IAAAA,QAAQ,EAAE,KALgC;AAM1CG,IAAAA,YAAY,EAAE;AAN4B,GAArC;AAvBQ,CAArB;;AAiCO,MAAME,yBAAyB,GAClCC,KADqC,IAEc;AACnD,SAAOA,KAAK,CAACC,MAAN,CAAaC,MAAb,CAAoB,CAACD,MAAD,EAASX,KAAT,KAAmB;AAC1CW,IAAAA,MAAM,CAACX,KAAK,CAACa,OAAP,CAAN,GAAwB,IAAId,kEAAJ,CAAqC;AACzDC,MAAAA,KAAK,EAAEA,KAAK,CAACa,OAD4C;AAEzDZ,MAAAA,IAAI,EAAG,UAASD,KAAK,CAACa,OAAQ,EAF2B;AAGzDX,MAAAA,UAAU,EAAE,IAH6C;AAIzDC,MAAAA,OAAO,EAAEP,kBAAkB,CAACkB,QAAnB,CAA4Bd,KAAK,CAACe,IAAlC;AAJgD,KAArC,CAAxB;AAOA,WAAOJ,MAAP;AACH,GATM,EASJd,YATI,CAAP;AAUH,CAbM","sourcesContent":["import { CmsContentModel } from \"@webiny/api-headless-cms/types\";\nimport { CmsEntryElasticsearchFieldPlugin } from \"~/plugins/CmsEntryElasticsearchFieldPlugin\";\n\nconst fieldsWithKeywords = [\"text\", \"long-text\", \"rich-text\", \"id\", \"ref\"];\n\n/**\n * We need to map entry system fields that have different paths, no keyword or not sortable.\n */\nconst systemFields = {\n createdBy: new CmsEntryElasticsearchFieldPlugin({\n field: \"createdBy\",\n path: \"createdBy.id\",\n searchable: true,\n keyword: true,\n sortable: false\n }),\n ownedBy: new CmsEntryElasticsearchFieldPlugin({\n field: \"ownedBy\",\n path: \"ownedBy.id\",\n searchable: true,\n keyword: true,\n sortable: false\n }),\n createdOn: new CmsEntryElasticsearchFieldPlugin({\n field: \"createdOn\",\n path: \"createdOn\",\n searchable: true,\n keyword: false,\n sortable: false,\n unmappedType: \"date\"\n }),\n savedOn: new CmsEntryElasticsearchFieldPlugin({\n field: \"savedOn\",\n path: \"savedOn\",\n searchable: true,\n keyword: false,\n sortable: false,\n unmappedType: \"date\"\n })\n};\n\nexport const createElasticsearchFields = (\n model: CmsContentModel\n): Record<string, CmsEntryElasticsearchFieldPlugin> => {\n return model.fields.reduce((fields, field) => {\n fields[field.fieldId] = new CmsEntryElasticsearchFieldPlugin({\n field: field.fieldId,\n path: `values.${field.fieldId}`,\n searchable: true,\n keyword: fieldsWithKeywords.includes(field.type)\n });\n\n return fields;\n }, systemFields);\n};\n"],"file":"fields.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/index.ts"],"names":["contentEntryStorageOperationsProvider","type","name","provide","context","CmsContentEntryDynamoElastic"],"mappings":";;;;;;;;;AAAA;;AAGA,MAAMA,qCAAqC,GAAG,OAAiD;AAC3FC,EAAAA,IAAI,EAAE,+CADqF;AAE3FC,EAAAA,IAAI,EAAE,kDAFqF;AAG3FC,EAAAA,OAAO,EAAE,OAAO;AAAEC,IAAAA;AAAF,GAAP,KAAuB;AAC5B,WAAO,IAAIC,qCAAJ,CAAiC;AACpCD,MAAAA;AADoC,KAAjC,CAAP;AAGH;AAP0F,CAAjD,CAA9C;;eAUeJ,qC","sourcesContent":["import CmsContentEntryDynamoElastic from \"./CmsContentEntryDynamoElastic\";\nimport { CmsContentEntryStorageOperationsProvider } from \"@webiny/api-headless-cms/types\";\n\nconst contentEntryStorageOperationsProvider = (): CmsContentEntryStorageOperationsProvider => ({\n type: \"cms-content-entry-storage-operations-provider\",\n name: \"cms-content-entry-storage-operations-ddb-es-crud\",\n provide: async ({ context }) => {\n return new CmsContentEntryDynamoElastic({\n context\n });\n }\n});\n\nexport default contentEntryStorageOperationsProvider;\n"],"file":"index.js"}
@@ -1,18 +0,0 @@
1
- import { CmsContentModel, CmsContentModelStorageOperations, CmsContentModelStorageOperationsCreateArgs, CmsContentModelStorageOperationsDeleteArgs, CmsContentModelStorageOperationsGetArgs, CmsContentModelStorageOperationsUpdateArgs, CmsContext } from "@webiny/api-headless-cms/types";
2
- interface ConstructorArgs {
3
- context: CmsContext;
4
- }
5
- export default class CmsContentModelDynamoElastic implements CmsContentModelStorageOperations {
6
- private readonly _context;
7
- private _esClient;
8
- private get esClient();
9
- private get context();
10
- private get partitionKey();
11
- constructor({ context }: ConstructorArgs);
12
- create({ data }: CmsContentModelStorageOperationsCreateArgs): Promise<CmsContentModel>;
13
- delete({ model }: CmsContentModelStorageOperationsDeleteArgs): Promise<boolean>;
14
- get({ id }: CmsContentModelStorageOperationsGetArgs): Promise<CmsContentModel | null>;
15
- list(): Promise<CmsContentModel[]>;
16
- update({ model, data }: CmsContentModelStorageOperationsUpdateArgs): Promise<CmsContentModel>;
17
- }
18
- export {};
@@ -1,180 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _error = _interopRequireDefault(require("@webiny/error"));
13
-
14
- var _configurations = _interopRequireDefault(require("../../configurations"));
15
-
16
- var _utils = require("../../utils");
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
- class CmsContentModelDynamoElastic {
23
- get esClient() {
24
- if (this._esClient) {
25
- return this._esClient;
26
- }
27
-
28
- const ctx = this.context;
29
-
30
- if (!ctx.elasticsearch) {
31
- throw new _error.default("Missing Elasticsearch client on the context");
32
- }
33
-
34
- this._esClient = ctx.elasticsearch;
35
- return this._esClient;
36
- }
37
-
38
- get context() {
39
- return this._context;
40
- }
41
-
42
- get partitionKey() {
43
- return `${(0, _utils.createBasePartitionKey)(this.context)}#CM`;
44
- }
45
-
46
- constructor({
47
- context
48
- }) {
49
- (0, _defineProperty2.default)(this, "_context", void 0);
50
- (0, _defineProperty2.default)(this, "_esClient", void 0);
51
- this._context = context;
52
- }
53
-
54
- async create({
55
- data
56
- }) {
57
- const {
58
- db
59
- } = this.context;
60
-
61
- const esIndex = _configurations.default.es(this.context, data);
62
-
63
- try {
64
- const {
65
- body: exists
66
- } = await this.esClient.indices.exists(esIndex);
67
-
68
- if (!exists) {
69
- await this.esClient.indices.create(esIndex);
70
- }
71
- } catch (ex) {
72
- throw new _error.default("Could not create Elasticsearch indice.", "ELASTICSEARCH_INDICE_CREATE_ERROR", {
73
- error: ex,
74
- esIndex
75
- });
76
- }
77
-
78
- let ex;
79
-
80
- try {
81
- await db.create(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
82
- data: _objectSpread({
83
- PK: this.partitionKey,
84
- SK: data.modelId,
85
- TYPE: "cms.model",
86
- webinyVersion: this.context.WEBINY_VERSION
87
- }, data)
88
- }));
89
- return data;
90
- } catch (e) {
91
- ex = e;
92
- }
93
-
94
- try {
95
- await this.esClient.indices.delete(esIndex);
96
- } catch {}
97
-
98
- throw ex;
99
- }
100
-
101
- async delete({
102
- model
103
- }) {
104
- const {
105
- db
106
- } = this.context;
107
- await db.delete(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
108
- query: {
109
- PK: this.partitionKey,
110
- SK: model.modelId
111
- }
112
- }));
113
-
114
- const esIndex = _configurations.default.es(this.context, model);
115
-
116
- try {
117
- await this.esClient.indices.delete(esIndex);
118
- } catch (ex) {
119
- throw new _error.default("Could not delete Elasticsearch indice.", "ELASTICSEARCH_INDICE_DELETE_ERROR", {
120
- error: ex,
121
- esIndex
122
- });
123
- }
124
-
125
- return true;
126
- }
127
-
128
- async get({
129
- id
130
- }) {
131
- const {
132
- db
133
- } = this.context;
134
- const [[model]] = await db.read(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
135
- query: {
136
- PK: this.partitionKey,
137
- SK: id
138
- }
139
- }));
140
- return model || null;
141
- }
142
-
143
- async list() {
144
- const {
145
- db
146
- } = this.context;
147
- const [models] = await db.read(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
148
- query: {
149
- PK: this.partitionKey,
150
- SK: {
151
- $gt: " "
152
- }
153
- }
154
- }));
155
- return models;
156
- }
157
-
158
- async update({
159
- model,
160
- data
161
- }) {
162
- const {
163
- db
164
- } = this.context;
165
- await db.update(_objectSpread(_objectSpread({}, _configurations.default.db()), {}, {
166
- query: {
167
- PK: this.partitionKey,
168
- SK: model.modelId
169
- },
170
- data: _objectSpread(_objectSpread({}, data), {}, {
171
- webinyVersion: this.context.WEBINY_VERSION
172
- })
173
- }));
174
- return _objectSpread(_objectSpread({}, model), data);
175
- }
176
-
177
- }
178
-
179
- exports.default = CmsContentModelDynamoElastic;
180
- //# sourceMappingURL=CmsContentModelDynamoElastic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/model/CmsContentModelDynamoElastic.ts"],"names":["CmsContentModelDynamoElastic","esClient","_esClient","ctx","context","elasticsearch","WebinyError","_context","partitionKey","constructor","create","data","db","esIndex","configurations","es","body","exists","indices","ex","error","PK","SK","modelId","TYPE","webinyVersion","WEBINY_VERSION","e","delete","model","query","get","id","read","list","models","$gt","update"],"mappings":"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","sourcesContent":["import {\n CmsContentModel,\n CmsContentModelStorageOperations,\n CmsContentModelStorageOperationsCreateArgs,\n CmsContentModelStorageOperationsDeleteArgs,\n CmsContentModelStorageOperationsGetArgs,\n CmsContentModelStorageOperationsUpdateArgs,\n CmsContext\n} from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\nimport configurations from \"../../configurations\";\nimport { createBasePartitionKey } from \"../../utils\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { ElasticsearchContext } from \"@webiny/api-elasticsearch/types\";\n\ninterface ConstructorArgs {\n context: CmsContext;\n}\nexport default class CmsContentModelDynamoElastic implements CmsContentModelStorageOperations {\n private readonly _context: CmsContext;\n private _esClient: Client;\n\n private get esClient(): Client {\n if (this._esClient) {\n return this._esClient;\n }\n const ctx = this.context as Partial<ElasticsearchContext>;\n if (!ctx.elasticsearch) {\n throw new WebinyError(\"Missing Elasticsearch client on the context\");\n }\n this._esClient = ctx.elasticsearch as Client;\n return this._esClient;\n }\n\n private get context(): CmsContext {\n return this._context;\n }\n\n private get partitionKey(): string {\n return `${createBasePartitionKey(this.context)}#CM`;\n }\n\n public constructor({ context }: ConstructorArgs) {\n this._context = context;\n }\n\n public async create({\n data\n }: CmsContentModelStorageOperationsCreateArgs): Promise<CmsContentModel> {\n const { db } = this.context;\n\n const esIndex = configurations.es(this.context, data);\n try {\n const { body: exists } = await this.esClient.indices.exists(esIndex);\n if (!exists) {\n await this.esClient.indices.create(esIndex);\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not create Elasticsearch indice.\",\n \"ELASTICSEARCH_INDICE_CREATE_ERROR\",\n {\n error: ex,\n esIndex\n }\n );\n }\n let ex;\n try {\n await db.create({\n ...configurations.db(),\n data: {\n PK: this.partitionKey,\n SK: data.modelId,\n TYPE: \"cms.model\",\n webinyVersion: this.context.WEBINY_VERSION,\n ...data\n }\n });\n return data;\n } catch (e) {\n ex = e;\n }\n try {\n await this.esClient.indices.delete(esIndex);\n } catch {}\n\n throw ex;\n }\n\n public async delete({ model }: CmsContentModelStorageOperationsDeleteArgs): Promise<boolean> {\n const { db } = this.context;\n await db.delete({\n ...configurations.db(),\n query: {\n PK: this.partitionKey,\n SK: model.modelId\n }\n });\n const esIndex = configurations.es(this.context, model);\n try {\n await this.esClient.indices.delete(esIndex);\n } catch (ex) {\n throw new WebinyError(\n \"Could not delete Elasticsearch indice.\",\n \"ELASTICSEARCH_INDICE_DELETE_ERROR\",\n {\n error: ex,\n esIndex\n }\n );\n }\n return true;\n }\n public async get({\n id\n }: CmsContentModelStorageOperationsGetArgs): Promise<CmsContentModel | null> {\n const { db } = this.context;\n\n const [[model]] = await db.read<CmsContentModel>({\n ...configurations.db(),\n query: {\n PK: this.partitionKey,\n SK: id\n }\n });\n\n return model || null;\n }\n public async list(): Promise<CmsContentModel[]> {\n const { db } = this.context;\n const [models] = await db.read<CmsContentModel>({\n ...configurations.db(),\n query: {\n PK: this.partitionKey,\n SK: {\n $gt: \" \"\n }\n }\n });\n\n return models;\n }\n\n public async update({\n model,\n data\n }: CmsContentModelStorageOperationsUpdateArgs): Promise<CmsContentModel> {\n const { db } = this.context;\n await db.update({\n ...configurations.db(),\n query: {\n PK: this.partitionKey,\n SK: model.modelId\n },\n data: {\n ...data,\n webinyVersion: this.context.WEBINY_VERSION\n }\n });\n\n return {\n ...model,\n ...data\n };\n }\n}\n"],"file":"CmsContentModelDynamoElastic.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/model/index.ts"],"names":["contentModelStorageOperationsProvider","type","name","provide","context","CmsContentModelDynamoElastic"],"mappings":";;;;;;;;;AAAA;;AAGA,MAAMA,qCAAqC,GAAG,OAAiD;AAC3FC,EAAAA,IAAI,EAAE,+CADqF;AAE3FC,EAAAA,IAAI,EAAE,kDAFqF;AAG3FC,EAAAA,OAAO,EAAE,OAAO;AAAEC,IAAAA;AAAF,GAAP,KAAuB;AAC5B,WAAO,IAAIC,qCAAJ,CAAiC;AACpCD,MAAAA;AADoC,KAAjC,CAAP;AAGH;AAP0F,CAAjD,CAA9C;;eAUeJ,qC","sourcesContent":["import CmsContentModelDynamoElastic from \"./CmsContentModelDynamoElastic\";\nimport { CmsContentModelStorageOperationsProvider } from \"@webiny/api-headless-cms/types\";\n\nconst contentModelStorageOperationsProvider = (): CmsContentModelStorageOperationsProvider => ({\n type: \"cms-content-model-storage-operations-provider\",\n name: \"cms-content-model-storage-operations-ddb-es-crud\",\n provide: async ({ context }) => {\n return new CmsContentModelDynamoElastic({\n context\n });\n }\n});\n\nexport default contentModelStorageOperationsProvider;\n"],"file":"index.js"}
@@ -1,40 +0,0 @@
1
- import { CmsContentModelGroup, CmsContentModelGroupStorageOperations, CmsContentModelGroupStorageOperationsCreateArgs, CmsContentModelGroupStorageOperationsDeleteArgs, CmsContentModelGroupStorageOperationsGetArgs, CmsContentModelGroupStorageOperationsListArgs, CmsContentModelGroupStorageOperationsUpdateArgs, CmsContext } from "@webiny/api-headless-cms/types";
2
- interface ConstructorArgs {
3
- context: CmsContext;
4
- }
5
- export default class CmsContentModelGroupDynamoElastic implements CmsContentModelGroupStorageOperations {
6
- private readonly _context;
7
- private get context();
8
- private get partitionKey();
9
- constructor({ context }: ConstructorArgs);
10
- create({ data }: CmsContentModelGroupStorageOperationsCreateArgs): Promise<{
11
- webinyVersion: string;
12
- id: string;
13
- name: string;
14
- slug: string;
15
- locale?: string;
16
- description?: string;
17
- icon?: string;
18
- createdBy?: import("@webiny/api-headless-cms/types").CreatedBy;
19
- createdOn?: Date;
20
- savedOn?: Date;
21
- PK: string;
22
- SK: string;
23
- TYPE: string;
24
- }>;
25
- delete({ group }: CmsContentModelGroupStorageOperationsDeleteArgs): Promise<boolean>;
26
- get({ id }: CmsContentModelGroupStorageOperationsGetArgs): Promise<CmsContentModelGroup>;
27
- list({ where, limit }: CmsContentModelGroupStorageOperationsListArgs): Promise<CmsContentModelGroup[]>;
28
- update({ group, data }: CmsContentModelGroupStorageOperationsUpdateArgs): Promise<{
29
- id: string;
30
- name: string;
31
- slug: string;
32
- locale?: string;
33
- description?: string;
34
- icon?: string;
35
- createdBy?: import("@webiny/api-headless-cms/types").CreatedBy;
36
- createdOn?: Date;
37
- savedOn?: Date;
38
- }>;
39
- }
40
- export {};