@webiny/api-headless-cms-ddb-es 5.35.0 → 5.35.1
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.
- package/index.js +8 -6
- package/index.js.map +1 -1
- package/operations/entry/dataLoader/DataLoaderCache.d.ts +17 -0
- package/operations/entry/dataLoader/DataLoaderCache.js +43 -0
- package/operations/entry/dataLoader/DataLoaderCache.js.map +1 -0
- package/operations/entry/dataLoader/constants.d.ts +1 -0
- package/operations/entry/dataLoader/constants.js +9 -0
- package/operations/entry/dataLoader/constants.js.map +1 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.d.ts +8 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.js +23 -0
- package/operations/entry/dataLoader/createBatchScheduleFn.js.map +1 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.d.ts +4 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.js +43 -0
- package/operations/entry/dataLoader/getAllEntryRevisions.js.map +1 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.d.ts +4 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.js +53 -0
- package/operations/entry/dataLoader/getLatestRevisionByEntryId.js.map +1 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.d.ts +4 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js +53 -0
- package/operations/entry/dataLoader/getPublishedRevisionByEntryId.js.map +1 -0
- package/operations/entry/dataLoader/getRevisionById.d.ts +4 -0
- package/operations/entry/dataLoader/getRevisionById.js +63 -0
- package/operations/entry/dataLoader/getRevisionById.js.map +1 -0
- package/operations/entry/dataLoader/index.d.ts +8 -0
- package/operations/entry/dataLoader/index.js +38 -0
- package/operations/entry/dataLoader/index.js.map +1 -0
- package/operations/entry/dataLoader/types.d.ts +6 -0
- package/operations/entry/dataLoader/types.js +5 -0
- package/operations/entry/dataLoader/types.js.map +1 -0
- package/operations/entry/dataLoaders.d.ts +15 -36
- package/operations/entry/dataLoaders.js +43 -241
- package/operations/entry/dataLoaders.js.map +1 -1
- package/operations/entry/index.d.ts +1 -1
- package/operations/entry/index.js +88 -4
- package/operations/entry/index.js.map +1 -1
- package/package.json +33 -33
- package/types.d.ts +10 -1
- package/types.js.map +1 -1
- package/plugins/CmsEntryElasticsearchFieldPlugin.d.ts +0 -12
- package/plugins/CmsEntryElasticsearchFieldPlugin.js +0 -24
- package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getEntryData","input","output","getESLatestEntryData","plugins","entry","compress","latest","TYPE","createLatestRecordType","__type","getESPublishedEntryData","published","createPublishedRecordType","convertEntryKeysToStorage","params","model","values","convertValueKeyToStorage","fields","convertEntryKeysFromStorage","convertValueKeyFromStorage","createEntriesStorageOperations","entity","esEntity","elasticsearch","storageOperationsCmsModelPlugin","getStorageOperationsCmsModelPlugin","oneByType","StorageOperationsCmsModelPlugin","type","getStorageOperationsModel","plugin","getModel","dataLoaders","DataLoadersHandler","create","initialModel","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","createRecordType","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","createElasticsearchBody","after","decodeCursor","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 lodashCloneDeep from \"lodash/cloneDeep\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsEntry,\n CmsEntryStorageOperations,\n CmsModel,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { extractEntriesFromIndex, prepareEntryToIndex } from \"~/helpers\";\nimport { configurations } from \"~/configurations\";\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 {\n compress,\n createLimit,\n decodeCursor,\n decompress,\n encodeCursor\n} 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\";\nimport { createElasticsearchBody } from \"~/operations/entry/elasticsearch/body\";\nimport { createLatestRecordType, createPublishedRecordType, createRecordType } from \"./recordType\";\nimport { StorageOperationsCmsModelPlugin } from \"@webiny/api-headless-cms\";\n\nconst getEntryData = (input: CmsEntry): CmsEntry => {\n const output: any = {\n ...input\n };\n delete output[\"PK\"];\n delete output[\"SK\"];\n delete output[\"published\"];\n delete output[\"latest\"];\n\n return output;\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestRecordType(),\n __type: createLatestRecordType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedRecordType(),\n __type: createPublishedRecordType()\n });\n};\n\ninterface ConvertStorageEntryParams {\n entry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertEntryKeysToStorage = (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 convertEntryKeysFromStorage = (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 let storageOperationsCmsModelPlugin: StorageOperationsCmsModelPlugin | undefined;\n const getStorageOperationsCmsModelPlugin = () => {\n if (storageOperationsCmsModelPlugin) {\n return storageOperationsCmsModelPlugin;\n }\n storageOperationsCmsModelPlugin = plugins.oneByType<StorageOperationsCmsModelPlugin>(\n StorageOperationsCmsModelPlugin.type\n );\n return storageOperationsCmsModelPlugin;\n };\n\n const getStorageOperationsModel = (model: CmsModel): StorageOperationsCmsModel => {\n const plugin = getStorageOperationsCmsModelPlugin();\n return plugin.getModel(model);\n };\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create: CmsEntryStorageOperations[\"create\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const model = getStorageOperationsModel(initialModel);\n\n const isPublished = initialEntry.status === \"published\";\n const locked = isPublished ? true : initialEntry.locked;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n ...latestKeys,\n TYPE: createLatestRecordType()\n })\n ];\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\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: CmsEntryStorageOperations[\"createRevisionFrom\"] = async (\n initialModel,\n params\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestRecordType(),\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: CmsEntryStorageOperations[\"update\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\n })\n ];\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\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: createPublishedRecordType(),\n __type: createPublishedRecordType()\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: CmsEntryStorageOperations[\"delete\"] = async (initialModel, params) => {\n const { entry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const 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: CmsEntryStorageOperations[\"deleteRevision\"] = async (\n initialModel,\n params\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const { 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: createLatestRecordType()\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: CmsEntryStorageOperations[\"list\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\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?.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 = createElasticsearchBody({\n model,\n params: {\n ...params,\n limit,\n after: decodeCursor(params.after)\n },\n plugins\n });\n\n let response: ElasticsearchSearchResponse<CmsIndexEntry>;\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 convertEntryKeysFromStorage({\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: CmsEntryStorageOperations[\"get\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish: CmsEntryStorageOperations[\"publish\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\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 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: createRecordType(),\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: createPublishedRecordType()\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: await getESLatestEntryData(plugins, {\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 esPublishedData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esPublishedData\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: CmsEntryStorageOperations[\"unpublish\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\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: CmsEntryStorageOperations[\"getLatestRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getPublishedRevisionByEntryId: CmsEntryStorageOperations[\"getPublishedRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisionById: CmsEntryStorageOperations[\"getRevisionById\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisions: CmsEntryStorageOperations[\"getRevisions\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getByIds: CmsEntryStorageOperations[\"getByIds\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getLatestByIds: CmsEntryStorageOperations[\"getLatestByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPublishedByIds: CmsEntryStorageOperations[\"getPublishedByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPreviousRevision: CmsEntryStorageOperations[\"getPreviousRevision\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\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: createRecordType()\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 convertEntryKeysFromStorage({\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":"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"}
|
|
1
|
+
{"version":3,"names":["getEntryData","input","output","getESLatestEntryData","plugins","entry","compress","latest","TYPE","createLatestRecordType","__type","getESPublishedEntryData","published","createPublishedRecordType","convertEntryKeysToStorage","params","model","values","convertValueKeyToStorage","fields","convertEntryKeysFromStorage","convertValueKeyFromStorage","createEntriesStorageOperations","entity","esEntity","elasticsearch","storageOperationsCmsModelPlugin","getStorageOperationsCmsModelPlugin","oneByType","StorageOperationsCmsModelPlugin","type","getStorageOperationsModel","plugin","getModel","dataLoaders","DataLoadersHandler","create","initialModel","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","createRecordType","push","batchWriteAll","table","clearAll","ex","WebinyError","message","code","error","esItems","data","createRevisionFrom","put","update","latestStorageEntry","getLatestRevisionByEntryId","ids","publishedStorageEntry","getPublishedRevisionByEntryId","undefined","elasticsearchLatestData","elasticsearchPublishedData","length","deleteEntry","entryId","partitionKey","queryAll","options","gte","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","latestEntry","deleteMultipleEntries","entries","revisions","getAllEntryRevisions","revision","version","list","limit","createLimit","result","indices","exists","body","hasMoreItems","totalCount","cursor","createElasticsearchBody","after","decodeCursor","response","search","hits","total","extractEntriesFromIndex","_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","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","queryParams","lt","zeroPad","filters","attr","eq","reverse","queryOne","cleanupItem","delete"],"sources":["index.ts"],"sourcesContent":["import lodashCloneDeep from \"lodash/cloneDeep\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsEntry,\n CmsModel,\n CmsStorageEntry,\n CONTENT_ENTRY_STATUS,\n StorageOperationsCmsModel\n} from \"@webiny/api-headless-cms/types\";\nimport { extractEntriesFromIndex, prepareEntryToIndex } from \"~/helpers\";\nimport { configurations } from \"~/configurations\";\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 {\n compress,\n createLimit,\n decodeCursor,\n decompress,\n encodeCursor\n} 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 { CmsEntryStorageOperations, CmsIndexEntry } from \"~/types\";\nimport { createElasticsearchBody } from \"~/operations/entry/elasticsearch/body\";\nimport { createLatestRecordType, createPublishedRecordType, createRecordType } from \"./recordType\";\nimport { StorageOperationsCmsModelPlugin } from \"@webiny/api-headless-cms\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\n\nconst getEntryData = (input: CmsEntry): CmsEntry => {\n const output: any = {\n ...input\n };\n delete output[\"PK\"];\n delete output[\"SK\"];\n delete output[\"published\"];\n delete output[\"latest\"];\n\n return output;\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestRecordType(),\n __type: createLatestRecordType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedRecordType(),\n __type: createPublishedRecordType()\n });\n};\n\ninterface ConvertStorageEntryParams {\n entry: CmsStorageEntry;\n model: StorageOperationsCmsModel;\n}\nconst convertEntryKeysToStorage = (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 convertEntryKeysFromStorage = (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 let storageOperationsCmsModelPlugin: StorageOperationsCmsModelPlugin | undefined;\n const getStorageOperationsCmsModelPlugin = () => {\n if (storageOperationsCmsModelPlugin) {\n return storageOperationsCmsModelPlugin;\n }\n storageOperationsCmsModelPlugin = plugins.oneByType<StorageOperationsCmsModelPlugin>(\n StorageOperationsCmsModelPlugin.type\n );\n return storageOperationsCmsModelPlugin;\n };\n\n const getStorageOperationsModel = (model: CmsModel): StorageOperationsCmsModel => {\n const plugin = getStorageOperationsCmsModelPlugin();\n return plugin.getModel(model);\n };\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create: CmsEntryStorageOperations[\"create\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n\n const model = getStorageOperationsModel(initialModel);\n\n const isPublished = initialEntry.status === \"published\";\n const locked = isPublished ? true : initialEntry.locked;\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\n }),\n entity.putBatch({\n ...storageEntry,\n locked,\n ...latestKeys,\n TYPE: createLatestRecordType()\n })\n ];\n\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\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: CmsEntryStorageOperations[\"createRevisionFrom\"] = async (\n initialModel,\n params\n ) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestRecordType(),\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: CmsEntryStorageOperations[\"update\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\n })\n ];\n if (isPublished) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n locked,\n ...publishedKeys,\n TYPE: createPublishedRecordType()\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: createPublishedRecordType(),\n __type: createPublishedRecordType()\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: CmsEntryStorageOperations[\"delete\"] = async (initialModel, params) => {\n const { entry } = params;\n const id = entry.id || entry.entryId;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n 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 id\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 id\n }\n );\n }\n };\n\n const deleteRevision: CmsEntryStorageOperations[\"deleteRevision\"] = async (\n initialModel,\n params\n ) => {\n const { entry, latestEntry, latestStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const partitionKey = createPartitionKey({\n id: entry.id,\n locale: model.locale,\n tenant: model.tenant\n });\n\n const { 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: createLatestRecordType()\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 deleteMultipleEntries: CmsEntryStorageOperations[\"deleteMultipleEntries\"] = async (\n initialModel,\n params\n ) => {\n const { entries } = params;\n const model = getStorageOperationsModel(initialModel);\n /**\n * First we need all the revisions of the entries we want to delete.\n */\n const revisions = await dataLoaders.getAllEntryRevisions({\n model,\n ids: entries\n });\n /**\n * Then we need to construct the queries for all the revisions and entries.\n */\n const items: Record<string, DocumentClient.WriteRequest>[] = [];\n const esItems: Record<string, DocumentClient.WriteRequest>[] = [];\n for (const id of entries) {\n /**\n * Latest item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"L\"\n })\n );\n esItems.push(\n esEntity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"L\"\n })\n );\n /**\n * Published item.\n */\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"P\"\n })\n );\n esItems.push(\n esEntity.deleteBatch({\n PK: createPartitionKey({\n id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: \"P\"\n })\n );\n }\n /**\n * Exact revisions of all the entries\n */\n for (const revision of revisions) {\n items.push(\n entity.deleteBatch({\n PK: createPartitionKey({\n id: revision.id,\n locale: model.locale,\n tenant: model.tenant\n }),\n SK: createRevisionSortKey({\n version: revision.version\n })\n })\n );\n }\n\n await batchWriteAll({\n table: entity.table,\n items\n });\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n };\n\n const list: CmsEntryStorageOperations[\"list\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\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?.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 = createElasticsearchBody({\n model,\n params: {\n ...params,\n limit,\n after: decodeCursor(params.after)\n },\n plugins\n });\n\n let response: ElasticsearchSearchResponse<CmsIndexEntry>;\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 convertEntryKeysFromStorage({\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: CmsEntryStorageOperations[\"get\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish: CmsEntryStorageOperations[\"publish\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\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 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: createRecordType(),\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: createPublishedRecordType()\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: await getESLatestEntryData(plugins, {\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 esPublishedData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esPublishedData\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: CmsEntryStorageOperations[\"unpublish\"] = async (initialModel, params) => {\n const { entry: initialEntry, storageEntry: initialStorageEntry } = params;\n const model = getStorageOperationsModel(initialModel);\n\n const entry = convertEntryKeysToStorage({\n model,\n entry: initialEntry\n });\n const storageEntry = convertEntryKeysToStorage({\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: createRecordType()\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: CmsEntryStorageOperations[\"getLatestRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getPublishedRevisionByEntryId: CmsEntryStorageOperations[\"getPublishedRevisionByEntryId\"] =\n async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisionById: CmsEntryStorageOperations[\"getRevisionById\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const [entry] = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n if (!entry) {\n return null;\n }\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n };\n\n const getRevisions: CmsEntryStorageOperations[\"getRevisions\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getByIds: CmsEntryStorageOperations[\"getByIds\"] = async (initialModel, params) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getLatestByIds: CmsEntryStorageOperations[\"getLatestByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPublishedByIds: CmsEntryStorageOperations[\"getPublishedByIds\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\n\n const entries = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n\n return entries.map(entry => {\n return convertEntryKeysFromStorage({\n model,\n entry\n });\n });\n };\n\n const getPreviousRevision: CmsEntryStorageOperations[\"getPreviousRevision\"] = async (\n initialModel,\n params\n ) => {\n const model = getStorageOperationsModel(initialModel);\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: createRecordType()\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 convertEntryKeysFromStorage({\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 deleteMultipleEntries,\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 dataLoaders\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms-ddb-es",
|
|
3
|
-
"version": "5.35.
|
|
3
|
+
"version": "5.35.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"@webiny/api-headless-cms",
|
|
@@ -23,44 +23,44 @@
|
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@babel/runtime": "7.20.13",
|
|
26
|
-
"@webiny/api": "5.35.
|
|
27
|
-
"@webiny/api-elasticsearch": "5.35.
|
|
28
|
-
"@webiny/api-headless-cms": "5.35.
|
|
29
|
-
"@webiny/db-dynamodb": "5.35.
|
|
30
|
-
"@webiny/error": "5.35.
|
|
31
|
-
"@webiny/handler-db": "5.35.
|
|
32
|
-
"@webiny/plugins": "5.35.
|
|
33
|
-
"@webiny/utils": "5.35.
|
|
26
|
+
"@webiny/api": "^5.35.1",
|
|
27
|
+
"@webiny/api-elasticsearch": "^5.35.1",
|
|
28
|
+
"@webiny/api-headless-cms": "^5.35.1",
|
|
29
|
+
"@webiny/db-dynamodb": "^5.35.1",
|
|
30
|
+
"@webiny/error": "^5.35.1",
|
|
31
|
+
"@webiny/handler-db": "^5.35.1",
|
|
32
|
+
"@webiny/plugins": "^5.35.1",
|
|
33
|
+
"@webiny/utils": "^5.35.1",
|
|
34
34
|
"dataloader": "2.2.1",
|
|
35
35
|
"dynamodb-toolbox": "0.3.5",
|
|
36
36
|
"jsonpack": "1.1.5",
|
|
37
37
|
"lodash": "4.17.21"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@babel/cli": "
|
|
41
|
-
"@babel/core": "
|
|
42
|
-
"@babel/preset-env": "
|
|
40
|
+
"@babel/cli": "7.20.7",
|
|
41
|
+
"@babel/core": "7.20.12",
|
|
42
|
+
"@babel/preset-env": "7.20.2",
|
|
43
43
|
"@elastic/elasticsearch": "7.12.0",
|
|
44
|
-
"@types/jsonpack": "
|
|
45
|
-
"@webiny/api-dynamodb-to-elasticsearch": "^5.35.
|
|
46
|
-
"@webiny/api-i18n": "^5.35.
|
|
47
|
-
"@webiny/api-i18n-ddb": "^5.35.
|
|
48
|
-
"@webiny/api-security": "^5.35.
|
|
49
|
-
"@webiny/api-security-so-ddb": "^5.35.
|
|
50
|
-
"@webiny/api-tenancy": "^5.35.
|
|
51
|
-
"@webiny/api-tenancy-so-ddb": "^5.35.
|
|
52
|
-
"@webiny/cli": "^5.35.
|
|
53
|
-
"@webiny/handler": "^5.35.
|
|
54
|
-
"@webiny/handler-aws": "^5.35.
|
|
55
|
-
"@webiny/project-utils": "^5.35.
|
|
56
|
-
"jest": "
|
|
57
|
-
"jest-dynalite": "
|
|
58
|
-
"jest-environment-node": "
|
|
59
|
-
"mdbid": "
|
|
60
|
-
"prettier": "
|
|
61
|
-
"rimraf": "
|
|
62
|
-
"sinon": "
|
|
63
|
-
"ttypescript": "
|
|
44
|
+
"@types/jsonpack": "1.1.2",
|
|
45
|
+
"@webiny/api-dynamodb-to-elasticsearch": "^5.35.1",
|
|
46
|
+
"@webiny/api-i18n": "^5.35.1",
|
|
47
|
+
"@webiny/api-i18n-ddb": "^5.35.1",
|
|
48
|
+
"@webiny/api-security": "^5.35.1",
|
|
49
|
+
"@webiny/api-security-so-ddb": "^5.35.1",
|
|
50
|
+
"@webiny/api-tenancy": "^5.35.1",
|
|
51
|
+
"@webiny/api-tenancy-so-ddb": "^5.35.1",
|
|
52
|
+
"@webiny/cli": "^5.35.1",
|
|
53
|
+
"@webiny/handler": "^5.35.1",
|
|
54
|
+
"@webiny/handler-aws": "^5.35.1",
|
|
55
|
+
"@webiny/project-utils": "^5.35.1",
|
|
56
|
+
"jest": "28.1.3",
|
|
57
|
+
"jest-dynalite": "3.6.1",
|
|
58
|
+
"jest-environment-node": "27.5.1",
|
|
59
|
+
"mdbid": "1.0.0",
|
|
60
|
+
"prettier": "2.8.3",
|
|
61
|
+
"rimraf": "3.0.2",
|
|
62
|
+
"sinon": "9.2.4",
|
|
63
|
+
"ttypescript": "1.5.15",
|
|
64
64
|
"typescript": "4.7.4"
|
|
65
65
|
},
|
|
66
66
|
"publishConfig": {
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"build": "yarn webiny run build",
|
|
72
72
|
"watch": "yarn webiny run watch"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "d6a257ebbb9e7aeccfaa33a7f83301cf1919b082"
|
|
75
75
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Plugin, PluginCollection } from "@webiny/plugins/types";
|
|
2
|
-
import { CmsContext as BaseCmsContext, CmsEntry, CmsModel, CmsModelField, CmsModelFieldToGraphQLPlugin, HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import { CmsContext as BaseCmsContext, CmsEntry, CmsEntryStorageOperations as BaseCmsEntryStorageOperations, CmsModel, CmsModelField, CmsModelFieldToGraphQLPlugin, HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types";
|
|
3
3
|
import { DynamoDBTypes, TableConstructor } from "dynamodb-toolbox/dist/classes/Table";
|
|
4
4
|
import { DocumentClient } from "aws-sdk/clients/dynamodb";
|
|
5
5
|
import { EntityAttributeConfig, EntityCompositeAttributes } from "dynamodb-toolbox/dist/classes/Entity";
|
|
@@ -161,4 +161,13 @@ export interface StorageOperationsFactory {
|
|
|
161
161
|
export interface CmsContext extends BaseCmsContext {
|
|
162
162
|
[key: string]: any;
|
|
163
163
|
}
|
|
164
|
+
export interface CmsEntryStorageOperations extends BaseCmsEntryStorageOperations {
|
|
165
|
+
dataLoaders: DataLoadersHandlerInterface;
|
|
166
|
+
}
|
|
167
|
+
export interface DataLoadersHandlerInterfaceClearAllParams {
|
|
168
|
+
model: Pick<CmsModel, "tenant" | "locale">;
|
|
169
|
+
}
|
|
170
|
+
export interface DataLoadersHandlerInterface {
|
|
171
|
+
clearAll: (params?: DataLoadersHandlerInterfaceClearAllParams) => void;
|
|
172
|
+
}
|
|
164
173
|
export {};
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ENTITIES"],"sources":["types.ts"],"sourcesContent":["import { Plugin, PluginCollection } from \"@webiny/plugins/types\";\nimport {\n CmsContext as BaseCmsContext,\n CmsEntry,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin,\n HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations\n} from \"@webiny/api-headless-cms/types\";\nimport { DynamoDBTypes, TableConstructor } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport {\n EntityAttributeConfig,\n EntityCompositeAttributes\n} from \"dynamodb-toolbox/dist/classes/Entity\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\n/**\n * A definition of the entry that is being prepared for the Elasticsearch.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\nexport interface CmsIndexEntry extends CmsEntry {\n /**\n * Values that are not going to be indexed.\n */\n rawValues: Record<string, any>;\n /**\n * A first part of the ID, without the revision.\n * For example, we can search for all the revisions of the given entry.\n */\n primaryId: string;\n /**\n * Dev can add what ever keys they want and need. Just need to be careful not to break the entry.\n */\n [key: string]: any;\n}\n\n/**\n * Arguments for the method that is transforming content entry in its original form to the one we are storing to the Elasticsearch.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\ninterface CmsModelFieldToElasticsearchToParams {\n plugins: PluginsContainer;\n model: CmsModel;\n field: CmsModelField;\n /**\n * Raw value on the entry - before prepare for storage.\n */\n rawValue: any;\n /**\n * Value prepared for storage received from base api-headless-cms package.\n */\n value: any;\n getFieldIndexPlugin(fieldType: string): CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin(fieldType: string): CmsModelFieldToGraphQLPlugin;\n}\n\n/**\n * Arguments for the method that is transforming content entry from Elasticsearch into the original one.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\ninterface CmsModelFieldToElasticsearchFromParams {\n plugins: PluginsContainer;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n rawValue: any;\n getFieldIndexPlugin(fieldType: string): CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin(fieldType: string): CmsModelFieldToGraphQLPlugin;\n}\n\ninterface ToIndexValue {\n /**\n * Use this key to store value for indexing.\n */\n value?: any;\n /**\n * Use this key to tell ES that this value should not be indexed.\n */\n rawValue?: any;\n}\n\n/**\n * A plugin defining transformation of entry for Elasticsearch.\n *\n * @category Plugin\n * @category ContentModelField\n * @category CmsEntry\n * @category Elasticsearch\n */\nexport interface CmsModelFieldToElasticsearchPlugin extends Plugin {\n /**\n * A plugin type\n */\n type: \"cms-model-field-to-elastic-search\";\n /**\n * A unique identifier of the field type (text, number, json, myField, ...).\n *\n * ```ts\n * fieldType: \"myField\"\n * ```\n */\n fieldType: string;\n /**\n * If you need to define a type when building an Elasticsearch query.\n * Check [dateTimeIndexing](https://github.com/webiny/webiny-js/blob/3074165701b8b45e5fc6ac2444caace7d04ada66/packages/api-headless-cms/src/content/plugins/es/indexing/dateTimeIndexing.ts) plugin for usage example.\n *\n * ```ts\n * unmappedType: \"date\"\n * ```\n */\n unmappedType?: (field: Pick<CmsModelField, \"fieldId\" | \"type\">) => string;\n /**\n * This is meant to do some transformation of the entry, preferably only to fieldType it was defined for. Nothing is stopping you to do anything you want to other fields, but try to separate field transformations.\n * It returns `Partial<CmsContentIndexEntryType>`. Always return a top-level property of the entry since it is merged via spread operator.\n *\n * ```ts\n * toIndex({ value }) {\n * return {\n * value: value, // This will be stored and indexed\n * rawValue: JSON.stringify(value) // This will be stored but excluded from indexing\n * };\n * }\n * ```\n */\n toIndex?: (params: CmsModelFieldToElasticsearchToParams) => ToIndexValue;\n /**\n * This is meant to revert a transformation done in the `toIndex` method.\n * You have access to \"value\" or a \"rawValue\", depending on what you returned from `toIndex`.\n *\n * ```ts\n * fromIndex({ value, rawValue }) {\n * return JSON.parse(rawValue);\n * }\n * ```\n */\n fromIndex?: (params: CmsModelFieldToElasticsearchFromParams) => any;\n}\n\nexport type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;\n\nexport type Attributes = Record<string, AttributeDefinition>;\n\nexport enum ENTITIES {\n SYSTEM = \"CmsSystem\",\n SETTINGS = \"CmsSettings\",\n GROUPS = \"CmsGroups\",\n MODELS = \"CmsModels\",\n ENTRIES = \"CmsEntries\",\n ENTRIES_ES = \"CmsEntriesElasticsearch\"\n}\n\nexport interface TableModifier {\n (table: TableConstructor): TableConstructor;\n}\n\nexport interface StorageOperationsFactoryParams {\n documentClient: DocumentClient;\n elasticsearch: Client;\n table?: TableModifier;\n esTable?: TableModifier;\n attributes?: Record<ENTITIES, Attributes>;\n plugins?: PluginCollection;\n}\n\nexport interface HeadlessCmsStorageOperations extends BaseHeadlessCmsStorageOperations<CmsContext> {\n getTable: () => Table;\n getEsTable: () => Table;\n getEntities: () => Record<\n \"system\" | \"settings\" | \"groups\" | \"models\" | \"entries\" | \"entriesEs\",\n Entity<any>\n >;\n}\n\nexport interface StorageOperationsFactory {\n (params: StorageOperationsFactoryParams): HeadlessCmsStorageOperations;\n}\n\nexport interface CmsContext extends BaseCmsContext {\n [key: string]: any;\n}\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["ENTITIES"],"sources":["types.ts"],"sourcesContent":["import { Plugin, PluginCollection } from \"@webiny/plugins/types\";\nimport {\n CmsContext as BaseCmsContext,\n CmsEntry,\n CmsEntryStorageOperations as BaseCmsEntryStorageOperations,\n CmsModel,\n CmsModelField,\n CmsModelFieldToGraphQLPlugin,\n HeadlessCmsStorageOperations as BaseHeadlessCmsStorageOperations\n} from \"@webiny/api-headless-cms/types\";\nimport { DynamoDBTypes, TableConstructor } from \"dynamodb-toolbox/dist/classes/Table\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport {\n EntityAttributeConfig,\n EntityCompositeAttributes\n} from \"dynamodb-toolbox/dist/classes/Entity\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\n/**\n * A definition of the entry that is being prepared for the Elasticsearch.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\nexport interface CmsIndexEntry extends CmsEntry {\n /**\n * Values that are not going to be indexed.\n */\n rawValues: Record<string, any>;\n /**\n * A first part of the ID, without the revision.\n * For example, we can search for all the revisions of the given entry.\n */\n primaryId: string;\n /**\n * Dev can add what ever keys they want and need. Just need to be careful not to break the entry.\n */\n [key: string]: any;\n}\n\n/**\n * Arguments for the method that is transforming content entry in its original form to the one we are storing to the Elasticsearch.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\ninterface CmsModelFieldToElasticsearchToParams {\n plugins: PluginsContainer;\n model: CmsModel;\n field: CmsModelField;\n /**\n * Raw value on the entry - before prepare for storage.\n */\n rawValue: any;\n /**\n * Value prepared for storage received from base api-headless-cms package.\n */\n value: any;\n getFieldIndexPlugin(fieldType: string): CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin(fieldType: string): CmsModelFieldToGraphQLPlugin;\n}\n\n/**\n * Arguments for the method that is transforming content entry from Elasticsearch into the original one.\n *\n * @category Elasticsearch\n * @category CmsEntry\n */\ninterface CmsModelFieldToElasticsearchFromParams {\n plugins: PluginsContainer;\n model: CmsModel;\n field: CmsModelField;\n value: any;\n rawValue: any;\n getFieldIndexPlugin(fieldType: string): CmsModelFieldToElasticsearchPlugin;\n getFieldTypePlugin(fieldType: string): CmsModelFieldToGraphQLPlugin;\n}\n\ninterface ToIndexValue {\n /**\n * Use this key to store value for indexing.\n */\n value?: any;\n /**\n * Use this key to tell ES that this value should not be indexed.\n */\n rawValue?: any;\n}\n\n/**\n * A plugin defining transformation of entry for Elasticsearch.\n *\n * @category Plugin\n * @category ContentModelField\n * @category CmsEntry\n * @category Elasticsearch\n */\nexport interface CmsModelFieldToElasticsearchPlugin extends Plugin {\n /**\n * A plugin type\n */\n type: \"cms-model-field-to-elastic-search\";\n /**\n * A unique identifier of the field type (text, number, json, myField, ...).\n *\n * ```ts\n * fieldType: \"myField\"\n * ```\n */\n fieldType: string;\n /**\n * If you need to define a type when building an Elasticsearch query.\n * Check [dateTimeIndexing](https://github.com/webiny/webiny-js/blob/3074165701b8b45e5fc6ac2444caace7d04ada66/packages/api-headless-cms/src/content/plugins/es/indexing/dateTimeIndexing.ts) plugin for usage example.\n *\n * ```ts\n * unmappedType: \"date\"\n * ```\n */\n unmappedType?: (field: Pick<CmsModelField, \"fieldId\" | \"type\">) => string;\n /**\n * This is meant to do some transformation of the entry, preferably only to fieldType it was defined for. Nothing is stopping you to do anything you want to other fields, but try to separate field transformations.\n * It returns `Partial<CmsContentIndexEntryType>`. Always return a top-level property of the entry since it is merged via spread operator.\n *\n * ```ts\n * toIndex({ value }) {\n * return {\n * value: value, // This will be stored and indexed\n * rawValue: JSON.stringify(value) // This will be stored but excluded from indexing\n * };\n * }\n * ```\n */\n toIndex?: (params: CmsModelFieldToElasticsearchToParams) => ToIndexValue;\n /**\n * This is meant to revert a transformation done in the `toIndex` method.\n * You have access to \"value\" or a \"rawValue\", depending on what you returned from `toIndex`.\n *\n * ```ts\n * fromIndex({ value, rawValue }) {\n * return JSON.parse(rawValue);\n * }\n * ```\n */\n fromIndex?: (params: CmsModelFieldToElasticsearchFromParams) => any;\n}\n\nexport type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;\n\nexport type Attributes = Record<string, AttributeDefinition>;\n\nexport enum ENTITIES {\n SYSTEM = \"CmsSystem\",\n SETTINGS = \"CmsSettings\",\n GROUPS = \"CmsGroups\",\n MODELS = \"CmsModels\",\n ENTRIES = \"CmsEntries\",\n ENTRIES_ES = \"CmsEntriesElasticsearch\"\n}\n\nexport interface TableModifier {\n (table: TableConstructor): TableConstructor;\n}\n\nexport interface StorageOperationsFactoryParams {\n documentClient: DocumentClient;\n elasticsearch: Client;\n table?: TableModifier;\n esTable?: TableModifier;\n attributes?: Record<ENTITIES, Attributes>;\n plugins?: PluginCollection;\n}\n\nexport interface HeadlessCmsStorageOperations extends BaseHeadlessCmsStorageOperations<CmsContext> {\n getTable: () => Table;\n getEsTable: () => Table;\n getEntities: () => Record<\n \"system\" | \"settings\" | \"groups\" | \"models\" | \"entries\" | \"entriesEs\",\n Entity<any>\n >;\n}\n\nexport interface StorageOperationsFactory {\n (params: StorageOperationsFactoryParams): HeadlessCmsStorageOperations;\n}\n\nexport interface CmsContext extends BaseCmsContext {\n [key: string]: any;\n}\n\nexport interface CmsEntryStorageOperations extends BaseCmsEntryStorageOperations {\n dataLoaders: DataLoadersHandlerInterface;\n}\n\nexport interface DataLoadersHandlerInterfaceClearAllParams {\n model: Pick<CmsModel, \"tenant\" | \"locale\">;\n}\nexport interface DataLoadersHandlerInterface {\n clearAll: (params?: DataLoadersHandlerInterfaceClearAllParams) => void;\n}\n"],"mappings":";;;;;;AAoBA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IA6DYA,QAAQ;AAAA;AAAA,WAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;AAAA,GAARA,QAAQ,wBAARA,QAAQ"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ElasticsearchFieldPlugin, ElasticsearchFieldPluginParams as ElasticsearchFieldPluginParamsBaseParams } from "@webiny/api-elasticsearch";
|
|
2
|
-
export interface CmsEntryElasticsearchFieldPluginParams extends ElasticsearchFieldPluginParamsBaseParams {
|
|
3
|
-
/**
|
|
4
|
-
* If modelId is not passed, there is no filtering of plugins by it when plugin is applied during the runtime.
|
|
5
|
-
*/
|
|
6
|
-
modelId?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare class CmsEntryElasticsearchFieldPlugin extends ElasticsearchFieldPlugin {
|
|
9
|
-
static readonly type: string;
|
|
10
|
-
readonly modelId?: string;
|
|
11
|
-
constructor(params: CmsEntryElasticsearchFieldPluginParams);
|
|
12
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.CmsEntryElasticsearchFieldPlugin = void 0;
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
var _apiElasticsearch = require("@webiny/api-elasticsearch");
|
|
13
|
-
|
|
14
|
-
class CmsEntryElasticsearchFieldPlugin extends _apiElasticsearch.ElasticsearchFieldPlugin {
|
|
15
|
-
constructor(params) {
|
|
16
|
-
super(params);
|
|
17
|
-
(0, _defineProperty2.default)(this, "modelId", void 0);
|
|
18
|
-
this.modelId = params.modelId;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
exports.CmsEntryElasticsearchFieldPlugin = CmsEntryElasticsearchFieldPlugin;
|
|
24
|
-
(0, _defineProperty2.default)(CmsEntryElasticsearchFieldPlugin, "type", "elasticsearch.fieldDefinition.cms.entry");
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CmsEntryElasticsearchFieldPlugin","ElasticsearchFieldPlugin","constructor","params","modelId"],"sources":["CmsEntryElasticsearchFieldPlugin.ts"],"sourcesContent":["import {\n ElasticsearchFieldPlugin,\n ElasticsearchFieldPluginParams as ElasticsearchFieldPluginParamsBaseParams\n} from \"@webiny/api-elasticsearch\";\n\nexport interface CmsEntryElasticsearchFieldPluginParams\n extends ElasticsearchFieldPluginParamsBaseParams {\n /**\n * If modelId is not passed, there is no filtering of plugins by it when plugin is applied during the runtime.\n */\n modelId?: string;\n}\nexport class CmsEntryElasticsearchFieldPlugin extends ElasticsearchFieldPlugin {\n public static override readonly type: string = \"elasticsearch.fieldDefinition.cms.entry\";\n\n public readonly modelId?: string;\n\n public constructor(params: CmsEntryElasticsearchFieldPluginParams) {\n super(params);\n\n this.modelId = params.modelId;\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;;AAYO,MAAMA,gCAAN,SAA+CC,0CAA/C,CAAwE;EAKpEC,WAAW,CAACC,MAAD,EAAiD;IAC/D,MAAMA,MAAN;IAD+D;IAG/D,KAAKC,OAAL,GAAeD,MAAM,CAACC,OAAtB;EACH;;AAT0E;;;8BAAlEJ,gC,UACsC,yC"}
|