@webiny/api-headless-cms-ddb-es 5.24.0 → 5.25.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 (69) hide show
  1. package/configurations.js.map +1 -0
  2. package/definitions/entry.js.map +1 -0
  3. package/definitions/entryElasticsearch.js.map +1 -0
  4. package/definitions/group.js.map +1 -0
  5. package/definitions/model.js.map +1 -0
  6. package/definitions/settings.js.map +1 -0
  7. package/definitions/system.js.map +1 -0
  8. package/definitions/table.js.map +1 -0
  9. package/definitions/tableElasticsearch.js.map +1 -0
  10. package/dynamoDb/index.js.map +1 -0
  11. package/dynamoDb/storage/date.js.map +1 -0
  12. package/dynamoDb/storage/longText.js +1 -0
  13. package/dynamoDb/storage/longText.js.map +1 -0
  14. package/dynamoDb/storage/richText.js +13 -2
  15. package/dynamoDb/storage/richText.js.map +1 -0
  16. package/elasticsearch/index.js.map +1 -0
  17. package/elasticsearch/indexing/dateTimeIndexing.js.map +1 -0
  18. package/elasticsearch/indexing/defaultFieldIndexing.js.map +1 -0
  19. package/elasticsearch/indexing/index.js.map +1 -0
  20. package/elasticsearch/indexing/longTextIndexing.js.map +1 -0
  21. package/elasticsearch/indexing/numberIndexing.js.map +1 -0
  22. package/elasticsearch/indexing/objectIndexing.js +16 -2
  23. package/elasticsearch/indexing/objectIndexing.js.map +1 -0
  24. package/elasticsearch/indexing/richTextIndexing.js.map +1 -0
  25. package/elasticsearch/search/index.js.map +1 -0
  26. package/elasticsearch/search/refSearch.js.map +1 -0
  27. package/elasticsearch/search/timeSearch.js +3 -1
  28. package/elasticsearch/search/timeSearch.js.map +1 -0
  29. package/helpers/createElasticsearchQueryBody.js +9 -8
  30. package/helpers/createElasticsearchQueryBody.js.map +1 -0
  31. package/helpers/entryIndexHelpers.js.map +1 -0
  32. package/helpers/fields.js.map +1 -0
  33. package/helpers/index.js.map +1 -0
  34. package/helpers/operatorPluginsList.js.map +1 -0
  35. package/helpers/searchPluginsList.js.map +1 -0
  36. package/helpers/transformValueForSearch.js.map +1 -0
  37. package/index.js.map +1 -0
  38. package/operations/entry/dataLoaders.d.ts +4 -0
  39. package/operations/entry/dataLoaders.js +10 -0
  40. package/operations/entry/dataLoaders.js.map +1 -0
  41. package/operations/entry/elasticsearchFields.js.map +1 -0
  42. package/operations/entry/fields.js.map +1 -0
  43. package/operations/entry/index.js +7 -27
  44. package/operations/entry/index.js.map +1 -0
  45. package/operations/entry/keys.js.map +1 -0
  46. package/operations/group/index.js.map +1 -0
  47. package/operations/model/index.js.map +1 -0
  48. package/operations/settings/index.js.map +1 -0
  49. package/operations/system/createElasticsearchTemplate.js.map +1 -0
  50. package/operations/system/index.js.map +1 -0
  51. package/package.json +17 -17
  52. package/plugins/CmsEntryElasticsearchBodyModifierPlugin.js.map +1 -0
  53. package/plugins/CmsEntryElasticsearchFieldPlugin.d.ts +2 -2
  54. package/plugins/CmsEntryElasticsearchFieldPlugin.js.map +1 -0
  55. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.d.ts +1 -1
  56. package/plugins/CmsEntryElasticsearchQueryBuilderValueSearchPlugin.js.map +1 -0
  57. package/plugins/CmsEntryElasticsearchQueryModifierPlugin.js.map +1 -0
  58. package/plugins/CmsEntryElasticsearchSortModifierPlugin.js.map +1 -0
  59. package/types.js.map +1 -0
  60. package/upgrades/index.js.map +1 -0
  61. package/upgrades/utils.js.map +1 -0
  62. package/upgrades/v5.0.0/cleanDatabaseRecord.d.ts +3 -3
  63. package/upgrades/v5.0.0/cleanDatabaseRecord.js.map +1 -0
  64. package/upgrades/v5.0.0/createOldVersionIndiceName.js.map +1 -0
  65. package/upgrades/v5.0.0/entryValueFixer.js.map +1 -0
  66. package/upgrades/v5.0.0/fieldFinder.js.map +1 -0
  67. package/upgrades/v5.0.0/helpers.js.map +1 -0
  68. package/upgrades/v5.0.0/index.js.map +1 -0
  69. package/upgrades/v5.8.0/index.js.map +1 -0
@@ -80,6 +80,11 @@ const getRevisionById = params => {
80
80
  const {
81
81
  version
82
82
  } = (0, _utils.parseIdentifier)(id);
83
+
84
+ if (!version) {
85
+ return collection;
86
+ }
87
+
83
88
  const sortKey = (0, _keys.createRevisionSortKey)({
84
89
  version
85
90
  });
@@ -251,6 +256,11 @@ class DataLoadersHandler {
251
256
  clearLatestRevisionByEntryId(params) {
252
257
  this.clear("getLatestRevisionByEntryId", params);
253
258
  }
259
+ /**
260
+ * TODO @ts-refactor
261
+ * Maybe pass on the generics to DataLoader definition?
262
+ */
263
+
254
264
 
255
265
  getLoader(name, params) {
256
266
  if (!dataLoaders[name]) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["dataLoaders.ts"],"names":["getAllEntryRevisions","params","entity","model","tenant","locale","DataLoader","ids","results","id","queryAllParams","partitionKey","options","beginsWith","items","map","getRevisionById","queries","reduce","collection","version","sortKey","keys","getBatch","PK","SK","records","table","Object","values","filter","item","getPublishedRevisionByEntryId","publishedKey","entryId","getLatestRevisionByEntryId","latestKey","dataLoaders","loaderNames","DataLoadersHandler","constructor","Map","loadMany","clearAllEntryRevisions","clear","clearRevisionById","clearPublishedRevisionByEntryId","clearLatestRevisionByEntryId","getLoader","name","WebinyError","loaderKey","modelId","loaders","has","set","get","loader","Array","isArray","acc","res","message","code","data","JSON","stringify","push","ex","error","clearAll","entry"],"mappings":"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","sourcesContent":["import DataLoader from \"dataloader\";\nimport { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"./keys\";\nimport { cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { batchReadAll } from \"@webiny/db-dynamodb/utils/batchRead\";\n\nconst getAllEntryRevisions = (params: LoaderParams) => {\n const { entity, model } = params;\n const { tenant, locale } = model;\n return new DataLoader<string, CmsEntry[]>(async (ids: readonly string[]) => {\n const results: Record<string, CmsEntry[]> = {};\n for (const id of ids) {\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale,\n id\n }),\n options: {\n beginsWith: \"REV#\"\n }\n };\n const items = await queryAll<CmsEntry>(queryAllParams);\n\n results[id] = cleanupItems(entity, items);\n }\n\n return ids.map(id => {\n return results[id] || [];\n });\n });\n};\n\nconst getRevisionById = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n return new DataLoader<string, CmsEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n const { version } = parseIdentifier(id);\n if (!version) {\n return collection;\n }\n const sortKey = createRevisionSortKey({\n version\n });\n const keys = `${partitionKey}__${sortKey}`;\n if (collection[keys]) {\n return collection;\n }\n\n collection[keys] = entity.getBatch({\n PK: partitionKey,\n SK: sortKey\n });\n\n return collection;\n /**\n * We use any because there is no type for the return type.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n return items.filter(item => {\n return id === item.id;\n });\n });\n });\n};\n\nconst getPublishedRevisionByEntryId = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n const publishedKey = createPublishedSortKey();\n\n return new DataLoader<string, CmsEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = entity.getBatch({\n PK: partitionKey,\n SK: publishedKey\n });\n return collection;\n /**\n * We use any because there is no type for the return type.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return items.filter(item => {\n return entryId === item.entryId;\n });\n });\n });\n};\n\nconst getLatestRevisionByEntryId = (params: LoaderParams) => {\n const { entity, model } = params;\n const { locale, tenant } = model;\n\n const latestKey = createLatestSortKey();\n\n return new DataLoader<string, CmsEntry[]>(async (ids: readonly string[]) => {\n const queries = ids.reduce((collection, id) => {\n const partitionKey = createPartitionKey({\n tenant,\n locale,\n id\n });\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = entity.getBatch({\n PK: partitionKey,\n SK: latestKey\n });\n return collection;\n /**\n * We use any because there is no type for the return type.\n */\n }, {} as Record<string, any>);\n\n const records = await batchReadAll<CmsEntry>({\n table: entity.table,\n items: Object.values(queries)\n });\n const items = cleanupItems(entity, records);\n\n return ids.map(id => {\n const { id: entryId } = parseIdentifier(id);\n return items.filter(item => {\n return entryId === item.entryId;\n });\n });\n });\n};\n\nconst dataLoaders: Record<Loaders, any> = {\n getAllEntryRevisions,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId\n};\n\nexport interface GetAllEntryRevisionsParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetRevisionByIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetPublishedRevisionByEntryIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\nexport interface GetLatestRevisionByEntryIdParams {\n ids: readonly string[];\n model: CmsModel;\n}\n\ninterface LoaderParams {\n entity: Entity<any>;\n model: CmsModel;\n}\n\ninterface GetLoaderParams {\n model: CmsModel;\n}\n\ninterface ClearLoaderParams {\n model: CmsModel;\n entry?: CmsEntry;\n}\n\ntype Loaders =\n | \"getAllEntryRevisions\"\n | \"getRevisionById\"\n | \"getPublishedRevisionByEntryId\"\n | \"getLatestRevisionByEntryId\";\n\nconst loaderNames = Object.keys(dataLoaders) as Loaders[];\n\nexport interface DataLoadersHandlerParams {\n entity: Entity<any>;\n}\nexport class DataLoadersHandler {\n private readonly loaders: Map<string, DataLoader<any, any>> = new Map();\n private readonly entity: Entity<any>;\n\n public constructor(params: DataLoadersHandlerParams) {\n this.entity = params.entity;\n }\n\n public async getAllEntryRevisions(params: GetAllEntryRevisionsParams): Promise<CmsEntry[]> {\n return await this.loadMany(\"getAllEntryRevisions\", params, params.ids);\n }\n\n public clearAllEntryRevisions(params: ClearLoaderParams): void {\n this.clear(\"getAllEntryRevisions\", params);\n }\n\n public async getRevisionById(params: GetRevisionByIdParams): Promise<CmsEntry[]> {\n return await this.loadMany(\"getRevisionById\", params, params.ids);\n }\n\n public clearRevisionById(params: ClearLoaderParams): void {\n this.clear(\"getRevisionById\", params);\n }\n\n public async getPublishedRevisionByEntryId(\n params: GetPublishedRevisionByEntryIdParams\n ): Promise<CmsEntry[]> {\n return await this.loadMany(\"getPublishedRevisionByEntryId\", params, params.ids);\n }\n public clearPublishedRevisionByEntryId(params: ClearLoaderParams): void {\n this.clear(\"getPublishedRevisionByEntryId\", params);\n }\n\n public async getLatestRevisionByEntryId(\n params: GetLatestRevisionByEntryIdParams\n ): Promise<CmsEntry[]> {\n return await this.loadMany(\"getLatestRevisionByEntryId\", params, params.ids);\n }\n\n public clearLatestRevisionByEntryId(params: ClearLoaderParams): void {\n this.clear(\"getLatestRevisionByEntryId\", params);\n }\n /**\n * TODO @ts-refactor\n * Maybe pass on the generics to DataLoader definition?\n */\n private getLoader(name: Loaders, params: GetLoaderParams): DataLoader<any, any> {\n if (!dataLoaders[name]) {\n throw new WebinyError(\"Unknown data loader.\", \"UNKNOWN_DATA_LOADER\", {\n name\n });\n }\n const { model } = params;\n const { tenant, locale } = model;\n const loaderKey = `${name}-${tenant}-${locale}-${model.modelId}`;\n if (!this.loaders.has(loaderKey)) {\n this.loaders.set(\n loaderKey,\n dataLoaders[name]({\n ...params,\n entity: this.entity\n })\n );\n }\n return this.loaders.get(loaderKey) as DataLoader<any, any>;\n }\n\n private async loadMany(\n loader: Loaders,\n params: GetLoaderParams,\n ids: readonly string[]\n ): Promise<CmsEntry[]> {\n let results;\n try {\n results = await this.getLoader(loader, params).loadMany(ids);\n if (Array.isArray(results) === true) {\n return results.reduce((acc, res) => {\n if (Array.isArray(res) === false) {\n if (res && 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 \"DATA_LOADER_RESULTS_ERROR\",\n {\n ...params,\n loader\n }\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 error: ex,\n ...params,\n loader,\n ids\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 public clearAll(params: Omit<ClearLoaderParams, \"entry\">): void {\n for (const name of loaderNames) {\n const loader = this.getLoader(name, params);\n loader.clearAll();\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: Loaders, params: ClearLoaderParams): void {\n const { entry } = params;\n const loader = this.getLoader(name, params);\n if (!entry) {\n loader.clearAll();\n return;\n }\n loader.clear(entry.id);\n const { tenant, locale } = params.model;\n loader.clear(\n createPartitionKey({\n tenant,\n locale,\n id: entry.id\n })\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["elasticsearchFields.ts"],"names":["elasticsearchFields","CmsEntryElasticsearchFieldPlugin","field","unmappedType","path","ALL"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,mBAAmB,GAAG,CAC/B,IAAIC,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,WAD0B;AAEjCC,EAAAA,YAAY,EAAE;AAFmB,CAArC,CAD+B,EAK/B,IAAIF,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,SAD0B;AAEjCC,EAAAA,YAAY,EAAE;AAFmB,CAArC,CAL+B,EAS/B,IAAIF,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,aAD0B;AAEjCC,EAAAA,YAAY,EAAE;AAFmB,CAArC,CAT+B,EAa/B,IAAIF,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,SAD0B;AAEjCE,EAAAA,IAAI,EAAE;AAF2B,CAArC,CAb+B,EAiB/B,IAAIH,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,WAD0B;AAEjCE,EAAAA,IAAI,EAAE;AAF2B,CAArC,CAjB+B,EAqB/B,IAAIH,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAE,SAD0B;AAEjCE,EAAAA,IAAI,EAAE;AAF2B,CAArC,CArB+B;AAyB/B;AACJ;AACA;AACI,IAAIH,kEAAJ,CAAqC;AACjCC,EAAAA,KAAK,EAAED,mEAAiCI;AADP,CAArC,CA5B+B,CAA5B","sourcesContent":["import { CmsEntryElasticsearchFieldPlugin } from \"~/plugins/CmsEntryElasticsearchFieldPlugin\";\n\nexport const elasticsearchFields = [\n new CmsEntryElasticsearchFieldPlugin({\n field: \"createdOn\",\n unmappedType: \"date\"\n }),\n new CmsEntryElasticsearchFieldPlugin({\n field: \"savedOn\",\n unmappedType: \"date\"\n }),\n new CmsEntryElasticsearchFieldPlugin({\n field: \"publishedOn\",\n unmappedType: \"date\"\n }),\n new CmsEntryElasticsearchFieldPlugin({\n field: \"ownedBy\",\n path: \"ownedBy.id\"\n }),\n new CmsEntryElasticsearchFieldPlugin({\n field: \"createdBy\",\n path: \"createdBy.id\"\n }),\n new CmsEntryElasticsearchFieldPlugin({\n field: \"version\",\n path: \"version\"\n }),\n /**\n * Always add the ALL fields plugin because of the keyword/path build.\n */\n new CmsEntryElasticsearchFieldPlugin({\n field: CmsEntryElasticsearchFieldPlugin.ALL\n })\n];\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["fields.ts"],"names":["fieldsWithKeywords","systemFields","createdBy","CmsEntryElasticsearchFieldPlugin","field","path","searchable","keyword","sortable","ownedBy","createdOn","unmappedType","savedOn","version","createElasticsearchFields","model","fields","reduce","fieldId","includes","type"],"mappings":";;;;;;;AAEA;;AAFA;AAIA,MAAMA,kBAAkB,GAAG,CAAC,MAAD,EAAS,WAAT,EAAsB,WAAtB,EAAmC,IAAnC,EAAyC,KAAzC,CAA3B;AAEA;AACA;AACA;;AACA,MAAMC,YAA8D,GAAG;AACnEC,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,CADwD;AAQnEC,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,CAR0D;AAenEE,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,CAfwD;AAuBnEC,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,CAvB0D;AA+BnEE,EAAAA,OAAO,EAAE,IAAIV,kEAAJ,CAAqC;AAC1CC,IAAAA,KAAK,EAAE,SADmC;AAE1CC,IAAAA,IAAI,EAAE,SAFoC;AAG1CG,IAAAA,QAAQ,EAAE,IAHgC;AAI1CF,IAAAA,UAAU,EAAE,IAJ8B;AAK1CC,IAAAA,OAAO,EAAE,KALiC;AAM1CI,IAAAA,YAAY,EAAE;AAN4B,GAArC;AA/B0D,CAAvE;;AAyCO,MAAMG,yBAAyB,GAClCC,KADqC,IAEc;AACnD,SAAOA,KAAK,CAACC,MAAN,CAAaC,MAAb,CAAoB,CAACD,MAAD,EAASZ,KAAT,KAAmB;AAC1CY,IAAAA,MAAM,CAACZ,KAAK,CAACc,OAAP,CAAN,GAAwB,IAAIf,kEAAJ,CAAqC;AACzDC,MAAAA,KAAK,EAAEA,KAAK,CAACc,OAD4C;AAEzDb,MAAAA,IAAI,EAAG,UAASD,KAAK,CAACc,OAAQ,EAF2B;AAGzDZ,MAAAA,UAAU,EAAE,IAH6C;AAIzDC,MAAAA,OAAO,EAAEP,kBAAkB,CAACmB,QAAnB,CAA4Bf,KAAK,CAACgB,IAAlC;AAJgD,KAArC,CAAxB;AAOA,WAAOJ,MAAP;AACH,GATM,EASJf,YATI,CAAP;AAUH,CAbM","sourcesContent":["// TODO @bruno Verify that this file is required?\nimport { CmsModel } 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: Record<string, CmsEntryElasticsearchFieldPlugin> = {\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 version: new CmsEntryElasticsearchFieldPlugin({\n field: \"version\",\n path: \"version\",\n sortable: true,\n searchable: true,\n keyword: false,\n unmappedType: \"number\"\n })\n};\n\nexport const createElasticsearchFields = (\n model: CmsModel\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"]}
@@ -438,7 +438,7 @@ const createEntriesStorageOperations = params => {
438
438
  }));
439
439
  }
440
440
 
441
- if (entryToSetAsLatest) {
441
+ if (entryToSetAsLatest && storageEntryToSetAsLatest) {
442
442
  const esEntry = (0, _helpers.prepareEntryToIndex)({
443
443
  plugins,
444
444
  model,
@@ -574,7 +574,7 @@ const createEntriesStorageOperations = params => {
574
574
  */
575
575
 
576
576
 
577
- const cursor = items.length > 0 ? (0, _cursors.encodeCursor)(hits[items.length - 1].sort) : null;
577
+ const cursor = items.length > 0 ? (0, _cursors.encodeCursor)(hits[items.length - 1].sort) || null : null;
578
578
  return {
579
579
  hasMoreItems,
580
580
  totalCount: total.value,
@@ -589,12 +589,7 @@ const createEntriesStorageOperations = params => {
589
589
  } = await list(model, _objectSpread(_objectSpread({}, params), {}, {
590
590
  limit: 1
591
591
  }));
592
-
593
- if (items.length === 0) {
594
- return null;
595
- }
596
-
597
- return items.shift();
592
+ return items.shift() || null;
598
593
  };
599
594
 
600
595
  const publish = async (model, params) => {
@@ -692,7 +687,7 @@ const createEntriesStorageOperations = params => {
692
687
  * If we are publishing the latest revision, let's also update the latest revision's status in ES.
693
688
  */
694
689
 
695
- if (latestStorageEntry && latestStorageEntry.id === entry.id) {
690
+ if (latestEsEntry && latestStorageEntry && latestStorageEntry.id === entry.id) {
696
691
  /**
697
692
  * Need to decompress the data from Elasticsearch DynamoDB table.
698
693
  */
@@ -1031,12 +1026,7 @@ const createEntriesStorageOperations = params => {
1031
1026
  model,
1032
1027
  ids: [params.id]
1033
1028
  });
1034
-
1035
- if (result.length === 0) {
1036
- return null;
1037
- }
1038
-
1039
- return result.shift();
1029
+ return result.shift() || null;
1040
1030
  };
1041
1031
 
1042
1032
  const getPublishedRevisionByEntryId = async (model, params) => {
@@ -1044,12 +1034,7 @@ const createEntriesStorageOperations = params => {
1044
1034
  model,
1045
1035
  ids: [params.id]
1046
1036
  });
1047
-
1048
- if (result.length === 0) {
1049
- return null;
1050
- }
1051
-
1052
- return result.shift();
1037
+ return result.shift() || null;
1053
1038
  };
1054
1039
 
1055
1040
  const getRevisionById = async (model, params) => {
@@ -1057,12 +1042,7 @@ const createEntriesStorageOperations = params => {
1057
1042
  model,
1058
1043
  ids: [params.id]
1059
1044
  });
1060
-
1061
- if (result.length === 0) {
1062
- return null;
1063
- }
1064
-
1065
- return result.shift();
1045
+ return result.shift() || null;
1066
1046
  };
1067
1047
 
1068
1048
  const getRevisions = async (model, params) => {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["createType","createLatestType","createPublishedType","getEntryData","entry","TYPE","__type","getESLatestEntryData","plugins","latest","getESPublishedEntryData","published","createEntriesStorageOperations","params","entity","esEntity","elasticsearch","dataLoaders","DataLoadersHandler","create","model","storageEntry","esEntry","index","esIndex","configurations","es","esLatestData","revisionKeys","PK","SK","latestKeys","items","putBatch","table","clearAll","ex","WebinyError","message","code","error","put","data","createRevisionFrom","originalEntry","update","latestStorageEntry","getLatestRevisionByEntryId","ids","id","elasticsearchLatestData","push","deleteEntry","partitionKey","options","gte","esItems","deleteItems","map","item","deleteBatch","deleteEsItems","deleteRevision","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","publishedStorageEntry","getPublishedRevisionByEntryId","length","list","limit","result","indices","exists","body","hasMoreItems","totalCount","cursor","args","parentPath","response","search","hits","total","entries","_source","pop","sort","value","get","shift","publish","publishedKeys","latestEsEntry","keys","previouslyPublishedEntry","getRevisionById","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","savedOn","latestEsEntryDataDecompressed","PUBLISHED","locked","publishedOn","preparedEntryData","unpublish","requestReview","requestChanges","getRevisions","getAllEntryRevisions","getByIds","getLatestByIds","getPublishedByIds","getPreviousRevision","tenant","locale","entryId","version","queryParams","lt","filters","attr","eq","reverse","delete"],"mappings":"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","sourcesContent":["import {\n CmsEntry,\n CmsEntryStorageOperations,\n CmsEntryStorageOperationsCreateParams,\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryStorageOperationsDeleteParams,\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryStorageOperationsGetByIdsParams,\n CmsEntryStorageOperationsGetLatestByIdsParams,\n CmsEntryStorageOperationsGetLatestRevisionParams,\n CmsEntryStorageOperationsGetParams,\n CmsEntryStorageOperationsGetPreviousRevisionParams,\n CmsEntryStorageOperationsGetPublishedByIdsParams,\n CmsEntryStorageOperationsGetRevisionParams,\n CmsEntryStorageOperationsGetRevisionsParams,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsPublishParams,\n CmsEntryStorageOperationsRequestChangesParams,\n CmsEntryStorageOperationsRequestReviewParams,\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryStorageOperationsUpdateParams,\n CmsModel,\n CONTENT_ENTRY_STATUS\n} from \"@webiny/api-headless-cms/types\";\nimport {\n createElasticsearchQueryBody,\n extractEntriesFromIndex,\n prepareEntryToIndex\n} from \"~/helpers\";\nimport configurations from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport lodashCloneDeep from \"lodash/cloneDeep\";\nimport lodashOmit from \"lodash/omit\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { compress, decompress } from \"@webiny/api-elasticsearch/compression\";\nimport { batchWriteAll } from \"@webiny/db-dynamodb/utils/batchWrite\";\nimport { DataLoadersHandler } from \"~/operations/entry/dataLoaders\";\nimport {\n createLatestSortKey,\n createPartitionKey,\n createPublishedSortKey,\n createRevisionSortKey\n} from \"~/operations/entry/keys\";\nimport { queryAll, queryOne, QueryOneParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { createLimit } from \"@webiny/api-elasticsearch/limit\";\nimport { encodeCursor } from \"@webiny/api-elasticsearch/cursors\";\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\";\n\nconst createType = (): string => {\n return \"cms.entry\";\n};\nexport const createLatestType = (): string => {\n return `${createType()}.l`;\n};\nexport const createPublishedType = (): string => {\n return `${createType()}.p`;\n};\n\nconst getEntryData = (entry: CmsEntry) => {\n return {\n ...lodashOmit(entry, [\"PK\", \"SK\", \"published\", \"latest\"]),\n TYPE: createType(),\n __type: createType()\n };\n};\n\nconst getESLatestEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n latest: true,\n TYPE: createLatestType(),\n __type: createLatestType()\n });\n};\n\nconst getESPublishedEntryData = async (plugins: PluginsContainer, entry: CmsEntry) => {\n return compress(plugins, {\n ...getEntryData(entry),\n published: true,\n TYPE: createPublishedType(),\n __type: createPublishedType()\n });\n};\n\ninterface ElasticsearchDbRecord {\n index: string;\n data: Record<string, string>;\n}\n\nexport interface CreateEntriesStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\nexport const createEntriesStorageOperations = (\n params: CreateEntriesStorageOperationsParams\n): CmsEntryStorageOperations => {\n const { entity, esEntity, elasticsearch, plugins } = params;\n\n const dataLoaders = new DataLoadersHandler({\n entity\n });\n\n const create = async (model: CmsModel, params: CmsEntryStorageOperationsCreateParams) => {\n const { entry, storageEntry } = params;\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const { index: esIndex } = configurations.es({\n model\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n }),\n entity.putBatch({\n ...storageEntry,\n ...latestKeys,\n TYPE: createLatestType()\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 try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: esLatestData\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 storageEntry;\n };\n\n const createRevisionFrom = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams\n ) => {\n const { originalEntry, entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, esEntry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n TYPE: createType(),\n ...revisionKeys\n }),\n entity.putBatch({\n ...storageEntry,\n TYPE: createLatestType(),\n ...latestKeys\n })\n ];\n\n const { index } = configurations.es({\n model\n });\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry in the DynamoDB table.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n originalEntry,\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 originalEntry,\n entry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n };\n\n const update = async (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams) => {\n const { originalEntry, entry, storageEntry } = params;\n const revisionKeys = {\n PK: createPartitionKey(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\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: [originalEntry.id]\n });\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n /**\n * If the latest entry is the one being updated, we need to create a new latest entry records.\n */\n let elasticsearchLatestData = null;\n if (latestStorageEntry.id === originalEntry.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 const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n elasticsearchLatestData = await getESLatestEntryData(plugins, esEntry);\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 originalEntry,\n entry,\n storageEntry\n }\n );\n }\n if (!elasticsearchLatestData) {\n return storageEntry;\n }\n const { index: esIndex } = configurations.es({\n model\n });\n try {\n await esEntity.put({\n ...latestKeys,\n index: esIndex,\n data: elasticsearchLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry DynamoDB Elasticsearch record.\",\n ex.code || \"UPDATE_ES_ENTRY_ERROR\",\n {\n error: ex,\n originalEntry,\n entry\n }\n );\n }\n return storageEntry;\n };\n\n const deleteEntry = async (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => {\n const { entry } = params;\n\n const partitionKey = createPartitionKey(entry);\n\n const items = await queryAll<CmsEntry>({\n entity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const esItems = await queryAll<CmsEntry>({\n entity: esEntity,\n partitionKey,\n options: {\n gte: \" \"\n }\n });\n\n const deleteItems = items.map(item => {\n return entity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n const deleteEsItems = esItems.map(item => {\n return esEntity.deleteBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n try {\n await batchWriteAll({\n table: entity.table,\n items: deleteItems\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: deleteEsItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete entry records from DynamoDB Elasticsearch table.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n };\n\n const deleteRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams\n ) => {\n const { entryToDelete, entryToSetAsLatest, storageEntryToSetAsLatest } = params;\n\n const partitionKey = createPartitionKey(entryToDelete);\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: [entryToDelete.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(entryToDelete)\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 && entryToDelete.id === publishedStorageEntry.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 (entryToSetAsLatest && storageEntryToSetAsLatest) {\n const esEntry = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entryToSetAsLatest),\n storageEntry: lodashCloneDeep(storageEntryToSetAsLatest)\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 ...storageEntryToSetAsLatest,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch write entry records to DynamoDB table.\",\n ex.code || \"DELETE_REVISION_ERROR\",\n {\n error: ex,\n entryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\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 entryToDelete,\n entryToSetAsLatest,\n storageEntryToSetAsLatest\n }\n );\n }\n };\n\n const list = async (model: CmsModel, params: CmsEntryStorageOperationsListParams) => {\n const limit = createLimit(params.limit, 50);\n const { index } = configurations.es({\n model\n });\n\n try {\n const result = await elasticsearch.indices.exists({\n index\n });\n if (!result || !result.body) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: []\n };\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not determine if Elasticsearch index exists.\",\n \"ELASTICSEARCH_INDEX_CHECK_ERROR\",\n {\n error: ex,\n index\n }\n );\n }\n\n const body = createElasticsearchQueryBody({\n model,\n args: {\n ...params,\n limit\n },\n plugins,\n parentPath: \"values\"\n });\n\n let response: ElasticsearchSearchResponse;\n try {\n response = await elasticsearch.search({\n index,\n body\n });\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code || \"ELASTICSEARCH_ERROR\", {\n error: ex,\n index,\n body\n });\n }\n\n const { hits, total } = response.body.hits;\n const items = extractEntriesFromIndex({\n plugins,\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 : null;\n return {\n hasMoreItems,\n totalCount: total.value,\n cursor,\n items\n };\n };\n\n const get = async (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => {\n const { items } = await list(model, {\n ...params,\n limit: 1\n });\n return items.shift() || null;\n };\n\n const publish = async (model: CmsModel, params: CmsEntryStorageOperationsPublishParams) => {\n const { entry, storageEntry } = params;\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(entry),\n SK: createRevisionSortKey(entry)\n };\n const latestKeys = {\n PK: createPartitionKey(entry),\n SK: createLatestSortKey()\n };\n const publishedKeys = {\n PK: createPartitionKey(entry),\n SK: createPublishedSortKey()\n };\n\n let latestEsEntry: ElasticsearchDbRecord | null = null;\n try {\n latestEsEntry = await getRecord<ElasticsearchDbRecord>({\n entity: esEntity,\n keys: latestKeys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read Elasticsearch latest or published data.\",\n ex.code || \"PUBLISH_BATCH_READ\",\n {\n error: ex,\n latestKeys: latestKeys,\n publishedKeys: publishedKeys\n }\n );\n }\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n ...revisionKeys,\n TYPE: createType()\n })\n ];\n const esItems = [];\n\n const { index } = configurations.es({\n model\n });\n\n if (publishedStorageEntry && publishedStorageEntry.id !== entry.id) {\n /**\n * If there is a `published` entry already, we need to set it to `unpublished`. We need to\n * execute two updates: update the previously published entry's status and the published entry record.\n * DynamoDB does not support `batchUpdate` - so here we load the previously published\n * entry's data to update its status within a batch operation. If, hopefully,\n * they introduce a true update batch operation, remove this `read` call.\n */\n const [previouslyPublishedEntry] = await dataLoaders.getRevisionById({\n model,\n ids: [publishedStorageEntry.id]\n });\n\n items.push(\n /**\n * Update currently published entry (unpublish it)\n */\n entity.putBatch({\n ...previouslyPublishedEntry,\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n savedOn: entry.savedOn,\n TYPE: createType(),\n PK: createPartitionKey(publishedStorageEntry),\n SK: createRevisionSortKey(publishedStorageEntry)\n })\n );\n }\n /**\n * Update the helper item in DB with the new published entry\n */\n items.push(\n entity.putBatch({\n ...storageEntry,\n ...publishedKeys,\n TYPE: createPublishedType()\n })\n );\n\n /**\n * We need the latest entry to check if it neds to be updated as well in the Elasticsearch.\n */\n const [latestStorageEntry] = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [entry.id]\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 && latestStorageEntry.id === entry.id) {\n /**\n * Need to decompress the data from Elasticsearch DynamoDB table.\n */\n const latestEsEntryDataDecompressed: CmsEntry = (await decompress(\n plugins,\n latestEsEntry.data\n )) as any;\n\n esItems.push(\n esEntity.putBatch({\n index,\n PK: createPartitionKey(latestEsEntryDataDecompressed),\n SK: createLatestSortKey(),\n data: {\n ...latestEsEntryDataDecompressed,\n status: CONTENT_ENTRY_STATUS.PUBLISHED,\n locked: true,\n savedOn: entry.savedOn,\n publishedOn: entry.publishedOn\n }\n })\n );\n }\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n /**\n * Update the published revision entry in ES.\n */\n const esLatestData = await getESPublishedEntryData(plugins, preparedEntryData);\n\n esItems.push(\n esEntity.putBatch({\n ...publishedKeys,\n index,\n data: esLatestData\n })\n );\n\n /**\n * Finally, execute regular table batch.\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not store publish entry records in DynamoDB table.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store publish entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"PUBLISH_ES_ERROR\",\n {\n error: ex,\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n return storageEntry;\n };\n\n const unpublish = async (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams) => {\n const { entry, storageEntry } = params;\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(entry);\n\n const items = [\n entity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n }),\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n\n const esItems = [\n esEntity.deleteBatch({\n PK: partitionKey,\n SK: createPublishedSortKey()\n })\n ];\n /**\n * If we are unpublishing the latest revision, let's also update the latest revision entry's status in ES.\n */\n if (latestStorageEntry.id === entry.id) {\n const { index } = configurations.es({\n model\n });\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n const esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n esItems.push(\n esEntity.putBatch({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n })\n );\n }\n\n /**\n * Finally, execute regular table batch.\n */\n try {\n await batchWriteAll({\n table: entity.table,\n items\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not store unpublished entry records in DynamoDB table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n /**\n * And Elasticsearch table batch.\n */\n try {\n await batchWriteAll({\n table: esEntity.table,\n items: esItems\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store unpublished entry records in DynamoDB Elasticsearch table.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n return storageEntry;\n };\n\n const requestReview = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestReviewParams\n ) => {\n const { entry, storageEntry, originalEntry } = params;\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(entry);\n\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n let esLatestData = null;\n const { index } = configurations.es({\n model\n });\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\n }\n\n try {\n await entity.put({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n });\n dataLoaders.clearAll({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not store request review entry record into DynamoDB table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request review entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n return storageEntry;\n };\n\n const requestChanges = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsRequestChangesParams\n ) => {\n const { entry, storageEntry, originalEntry } = params;\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(entry);\n\n const items = [\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createRevisionSortKey(entry),\n TYPE: createType()\n })\n ];\n /**\n * If we updated the latest version, then make sure the changes are propagated to ES too.\n */\n const { index } = configurations.es({\n model\n });\n let esLatestData = null;\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: createLatestSortKey(),\n TYPE: createLatestType()\n })\n );\n\n const preparedEntryData = prepareEntryToIndex({\n plugins,\n model,\n entry: lodashCloneDeep(entry),\n storageEntry: lodashCloneDeep(storageEntry)\n });\n\n esLatestData = await getESLatestEntryData(plugins, preparedEntryData);\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 store request changes entry record into DynamoDB table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n /**\n * No need to proceed further if nothing to put into Elasticsearch.\n */\n if (!esLatestData) {\n return storageEntry;\n }\n\n try {\n await esEntity.put({\n PK: partitionKey,\n SK: createLatestSortKey(),\n index,\n data: esLatestData\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not store request changes entry record into DynamoDB Elasticsearch table.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n latestStorageEntry,\n originalEntry\n }\n );\n }\n return storageEntry;\n };\n\n const getLatestRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n const getPublishedRevisionByEntryId = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestRevisionParams\n ) => {\n const result = await dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisionById = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionParams\n ) => {\n const result = await dataLoaders.getRevisionById({\n model,\n ids: [params.id]\n });\n return result.shift() || null;\n };\n\n const getRevisions = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetRevisionsParams\n ) => {\n return await dataLoaders.getAllEntryRevisions({\n model,\n ids: [params.id]\n });\n };\n\n const getByIds = async (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => {\n return dataLoaders.getRevisionById({\n model,\n ids: params.ids\n });\n };\n\n const getLatestByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetLatestByIdsParams\n ) => {\n return dataLoaders.getLatestRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPublishedByIds = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPublishedByIdsParams\n ) => {\n return dataLoaders.getPublishedRevisionByEntryId({\n model,\n ids: params.ids\n });\n };\n\n const getPreviousRevision = async (\n model: CmsModel,\n params: CmsEntryStorageOperationsGetPreviousRevisionParams\n ) => {\n const { tenant, locale } = model;\n const { entryId, version } = params;\n const queryParams: QueryOneParams = {\n entity,\n partitionKey: createPartitionKey({\n tenant,\n locale,\n id: entryId\n }),\n options: {\n lt: `REV#${zeroPad(version)}`,\n /**\n * We need to have extra checks because DynamoDB will return published or latest record if there is no REV# record.\n */\n filters: [\n {\n attr: \"TYPE\",\n eq: createType()\n },\n {\n attr: \"version\",\n lt: version\n }\n ],\n reverse: true\n }\n };\n\n try {\n const result = await queryOne<CmsEntry>(queryParams);\n\n return cleanupItem(entity, result);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get previous version of given entry.\",\n ex.code || \"GET_PREVIOUS_VERSION_ERROR\",\n {\n ...params,\n error: ex,\n partitionKey: queryParams.partitionKey,\n options: queryParams.options,\n model\n }\n );\n }\n };\n\n return {\n create,\n createRevisionFrom,\n update,\n delete: deleteEntry,\n deleteRevision,\n get,\n publish,\n unpublish,\n requestReview,\n requestChanges,\n list,\n getLatestRevisionByEntryId,\n getPublishedRevisionByEntryId,\n getRevisionById,\n getRevisions,\n getByIds,\n getLatestByIds,\n getPublishedByIds,\n getPreviousRevision\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["keys.ts"],"names":["createPartitionKey","params","tenant","locale","id","initialId","createRevisionSortKey","version","createLatestSortKey","createPublishedSortKey"],"mappings":";;;;;;;AAAA;;AAOO,MAAMA,kBAAkB,GAAIC,MAAD,IAAwC;AACtE,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,MAAV;AAAkBC,IAAAA,EAAE,EAAEC;AAAtB,MAAoCJ,MAA1C;AACA,QAAM;AAAEG,IAAAA;AAAF,MAAS,4BAAgBC,SAAhB,CAAf;AACA,SAAQ,KAAIH,MAAO,MAAKC,MAAO,YAAWC,EAAG,EAA7C;AACH,CAJM;;;;AASA,MAAME,qBAAqB,GAAIL,MAAD,IAAmC;AACpE,SAAQ,OAAM,oBAAQA,MAAM,CAACM,OAAf,CAAwB,EAAtC;AACH,CAFM;;;;AAIA,MAAMC,mBAAmB,GAAG,MAAc;AAC7C,SAAO,GAAP;AACH,CAFM;;;;AAIA,MAAMC,sBAAsB,GAAG,MAAc;AAChD,SAAO,GAAP;AACH,CAFM","sourcesContent":["import { parseIdentifier, zeroPad } from \"@webiny/utils\";\n\nexport interface PartitionKeyParams {\n id: string;\n tenant: string;\n locale: string;\n}\nexport const createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale, id: initialId } = params;\n const { id } = parseIdentifier(initialId);\n return `T#${tenant}#L#${locale}#CMS#CME#${id}`;\n};\n\nexport interface SortKeyParams {\n version: number;\n}\nexport const createRevisionSortKey = (params: SortKeyParams): string => {\n return `REV#${zeroPad(params.version)}`;\n};\n\nexport const createLatestSortKey = (): string => {\n return \"L\";\n};\n\nexport const createPublishedSortKey = (): string => {\n return \"P\";\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKeys","id","createKeys","PK","SK","createType","createGroupsStorageOperations","entity","plugins","filteringPlugins","byType","ValueFilterPlugin","type","length","WebinyError","create","group","keys","put","TYPE","ex","message","code","error","update","original","deleteGroup","delete","get","list","sort","where","initialWhere","queryAllParams","partitionKey","options","gte","records","filteredItems","items","fields"],"mappings":"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","sourcesContent":["import {\n CmsGroup,\n CmsGroupStorageOperations,\n CmsGroupStorageOperationsCreateParams,\n CmsGroupStorageOperationsDeleteParams,\n CmsGroupStorageOperationsGetParams,\n CmsGroupStorageOperationsListParams,\n CmsGroupStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeyParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CMG`;\n};\n\ninterface SortKeyParams {\n id: string;\n}\nconst createSortKeys = (params: SortKeyParams): string => {\n const { id } = params;\n return id;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKeys(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.group\";\n};\n\nexport interface CreateGroupsStorageOperationsParams {\n entity: Entity<any>;\n plugins: PluginsContainer;\n}\nexport const createGroupsStorageOperations = (\n params: CreateGroupsStorageOperationsParams\n): CmsGroupStorageOperations => {\n const { entity, plugins } = params;\n\n const filteringPlugins = plugins.byType<ValueFilterPlugin>(ValueFilterPlugin.type);\n if (filteringPlugins.length === 0) {\n throw new WebinyError(\n \"DynamoDB filtering plugins not loaded.\",\n \"MISSING_DYNAMODB_FILTERING_PLUGINS\"\n );\n }\n\n const create = async (params: CmsGroupStorageOperationsCreateParams) => {\n const { group } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create group.\",\n ex.code || \"CREATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const update = async (params: CmsGroupStorageOperationsUpdateParams) => {\n const { group, original } = params;\n const keys = createKeys(group);\n try {\n await entity.put({\n ...group,\n TYPE: createType(),\n ...keys\n });\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update group.\",\n ex.code || \"UPDATE_GROUP_ERROR\",\n {\n error: ex,\n group,\n original,\n keys\n }\n );\n }\n };\n const deleteGroup = async (params: CmsGroupStorageOperationsDeleteParams) => {\n const { group } = params;\n // TODO make sure that group has locale and tenant on it - add it in the crud just in case\n const keys = createKeys(group);\n\n try {\n await entity.delete(keys);\n return group;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete group.\",\n ex.code || \"DELETE_GROUP_ERROR\",\n {\n error: ex,\n group,\n keys\n }\n );\n }\n };\n const get = async (params: CmsGroupStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const group = await getRecord<CmsGroup>({\n entity,\n keys\n });\n\n return cleanupItem(entity, group);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get group.\",\n ex.code || \"GET_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n keys\n }\n );\n }\n };\n const list = async (params: CmsGroupStorageOperationsListParams) => {\n const { sort, where: initialWhere } = params;\n\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(initialWhere),\n options: {\n gte: \" \"\n }\n };\n\n let records: CmsGroup[] = [];\n try {\n records = await queryAll(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list groups.\",\n ex.code || \"LIST_GROUP_ERROR\",\n {\n error: ex,\n ...params,\n sort,\n where: initialWhere\n }\n );\n }\n\n const where: Partial<CmsGroupStorageOperationsListParams[\"where\"]> = {\n ...initialWhere\n };\n delete where[\"tenant\"];\n delete where[\"locale\"];\n\n const filteredItems = filterItems({\n items: records,\n where,\n fields: [],\n plugins\n });\n\n if (!sort || sort.length === 0 || filteredItems.length === 0) {\n return filteredItems;\n }\n return sortItems({\n items: filteredItems,\n sort,\n fields: []\n });\n };\n\n return {\n create,\n update,\n delete: deleteGroup,\n get,\n list\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["createPartitionKey","params","tenant","locale","createSortKey","modelId","createKeys","PK","SK","createType","createModelsStorageOperations","entity","elasticsearch","create","model","index","configurations","es","body","exists","indices","ex","WebinyError","error","keys","put","TYPE","delete","dynamodbError","elasticsearchError","update","original","message","code","deleteModel","get","item","list","where","queryAllParams","partitionKey","options","gte","items"],"mappings":"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","sourcesContent":["import {\n CmsModel,\n CmsModelStorageOperations,\n CmsModelStorageOperationsCreateParams,\n CmsModelStorageOperationsDeleteParams,\n CmsModelStorageOperationsGetParams,\n CmsModelStorageOperationsListParams,\n CmsModelStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport configurations from \"~/configurations\";\nimport WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem, cleanupItems } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\n\ninterface PartitionKeysParams {\n tenant: string;\n locale: string;\n}\nconst createPartitionKey = (params: PartitionKeysParams): string => {\n const { tenant, locale } = params;\n return `T#${tenant}#L#${locale}#CMS#CM`;\n};\n\ninterface SortKeyParams {\n modelId: string;\n}\nconst createSortKey = (params: SortKeyParams): string => {\n return params.modelId;\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeysParams & SortKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey(params)\n };\n};\n\nconst createType = (): string => {\n return \"cms.model\";\n};\n\nexport interface CreateModelsStorageOperationsParams {\n entity: Entity<any>;\n elasticsearch: Client;\n}\nexport const createModelsStorageOperations = (\n params: CreateModelsStorageOperationsParams\n): CmsModelStorageOperations => {\n const { entity, elasticsearch } = params;\n\n const create = async (params: CmsModelStorageOperationsCreateParams) => {\n const { model } = params;\n\n const { index } = configurations.es({\n model\n });\n try {\n const { body: exists } = await elasticsearch.indices.exists({\n index\n });\n if (!exists) {\n await elasticsearch.indices.create({\n index\n });\n }\n } catch (ex) {\n throw new WebinyError(\n \"Could not create Elasticsearch indice.\",\n \"ELASTICSEARCH_INDICE_CREATE_ERROR\",\n {\n error: ex,\n index,\n model\n }\n );\n }\n\n const keys = createKeys(model);\n\n let error;\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n error = ex;\n }\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record failed to be created.`,\n \"DELETE_MODEL_INDICE_ERROR\",\n {\n dynamodbError: error,\n elasticsearchError: ex\n }\n );\n }\n throw error;\n };\n\n const update = async (params: CmsModelStorageOperationsUpdateParams) => {\n const { original, model } = params;\n\n const keys = createKeys(model);\n\n try {\n await entity.put({\n ...model,\n ...keys,\n TYPE: createType()\n });\n return model;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update model.\",\n ex.code || \"MODEL_UPDATE_ERROR\",\n {\n error: ex,\n model,\n original,\n keys\n }\n );\n }\n };\n\n const deleteModel = async (params: CmsModelStorageOperationsDeleteParams) => {\n const { model } = params;\n const keys = createKeys(model);\n\n try {\n await entity.delete(keys);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete model.\",\n ex.code || \"MODEL_DELETE_ERROR\",\n {\n error: ex,\n model,\n keys\n }\n );\n }\n const { index } = configurations.es({\n model\n });\n /**\n * In case of DynamoDB error we need to remove the index we created.\n */\n try {\n await elasticsearch.indices.delete({\n index\n });\n } catch (ex) {\n throw new WebinyError(\n `Could not delete elasticsearch index \"${index}\" after model record was deleted.`,\n \"DELETE_MODEL_INDICE_ERROR\",\n {\n error: ex\n }\n );\n }\n return model;\n };\n\n const get = async (params: CmsModelStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const item = await getRecord<CmsModel>({\n entity,\n keys\n });\n return cleanupItem(entity, item);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get model.\",\n ex.code || \"MODEL_GET_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n const list = async (params: CmsModelStorageOperationsListParams) => {\n const { where } = params;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createPartitionKey(where),\n options: {\n gte: \" \"\n }\n };\n try {\n const items = await queryAll<CmsModel>(queryAllParams);\n\n return cleanupItems(entity, items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not list models.\",\n ex.code || \"MODEL_LIST_ERROR\",\n {\n error: ex,\n partitionKey: queryAllParams.partitionKey\n }\n );\n }\n };\n\n return {\n create,\n update,\n delete: deleteModel,\n get,\n list\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["convertToDbData","settings","contentModelLastChange","toISOString","convertFromDbData","Date","createPartitionKey","tenant","locale","createSortKey","createKeys","params","PK","SK","createSettingsStorageOperations","entity","create","keys","dbSettings","put","ex","WebinyError","message","code","error","update","original","get","record"],"mappings":"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","sourcesContent":["import {\n CmsSettings,\n CmsSettingsStorageOperations,\n CmsSettingsStorageOperationsCreateParams,\n CmsSettingsStorageOperationsGetParams,\n CmsSettingsStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport WebinyError from \"@webiny/error\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\n\ninterface CmsSettingsDb extends Omit<CmsSettings, \"contentModelLastChange\"> {\n contentModelLastChange: string;\n}\n\nconst convertToDbData = (settings: CmsSettings): CmsSettingsDb => {\n return {\n ...settings,\n contentModelLastChange: settings.contentModelLastChange.toISOString()\n };\n};\n\nconst convertFromDbData = (settings?: CmsSettingsDb): CmsSettings | null => {\n if (!settings) {\n return null;\n }\n let contentModelLastChange;\n try {\n contentModelLastChange = new Date(settings.contentModelLastChange);\n } catch {\n contentModelLastChange = new Date();\n }\n return {\n ...settings,\n contentModelLastChange\n };\n};\n\ninterface PartitionKeyParams {\n tenant: string;\n locale: string;\n}\n\nconst createPartitionKey = ({ tenant, locale }: PartitionKeyParams): string => {\n return `T#${tenant}#L#${locale}#CMS#SETTINGS`;\n};\n\nconst createSortKey = (): string => {\n return \"settings\";\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey()\n };\n};\n\nexport interface CreateSettingsStorageOperationsParams {\n entity: Entity<any>;\n}\n\nexport const createSettingsStorageOperations = (\n params: CreateSettingsStorageOperationsParams\n): CmsSettingsStorageOperations => {\n const { entity } = params;\n\n const create = async (params: CmsSettingsStorageOperationsCreateParams) => {\n const { settings } = params;\n const keys = createKeys(settings);\n\n const dbSettings: CmsSettingsDb = convertToDbData(settings);\n\n try {\n await entity.put({\n ...dbSettings,\n ...keys\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create settings.\",\n ex.code || \"CREATE_SETTINGS_ERROR\",\n {\n error: ex,\n settings,\n dbSettings,\n keys\n }\n );\n }\n };\n\n const update = async (params: CmsSettingsStorageOperationsUpdateParams) => {\n const { settings, original } = params;\n\n const keys = createKeys(settings);\n\n const dbSettings: CmsSettingsDb = convertToDbData(settings);\n\n try {\n await entity.put({\n ...dbSettings,\n ...keys\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update settings.\",\n ex.code || \"UPDATE_SETTINGS_ERROR\",\n {\n error: ex,\n settings,\n dbSettings,\n original,\n keys\n }\n );\n }\n };\n\n const get = async (params: CmsSettingsStorageOperationsGetParams) => {\n const keys = createKeys(params);\n try {\n const record = await getRecord<CmsSettingsDb>({\n entity,\n keys\n });\n if (!record) {\n return null;\n }\n const settings = cleanupItem(entity, record) as CmsSettingsDb;\n return convertFromDbData(settings);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get settings.\",\n ex.code || \"GET_SETTINGS_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n return {\n create,\n get,\n update\n };\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["createElasticsearchTemplate.ts"],"names":["createElasticsearchTemplate","params","elasticsearch","options","name","body","index_patterns","settings","analysis","analyzer","lowercase_analyzer","type","filter","tokenizer","mappings","properties","property","fields","keyword","ignore_above","rawValues","enabled","indices","putTemplate","ex","WebinyError","message","code","error"],"mappings":";;;;;;;;;AAAA;;AAQO,MAAMA,2BAA2B,GAAG,MAAOC,MAAP,IAAqD;AAC5F,QAAM;AAAEC,IAAAA;AAAF,MAAoBD,MAA1B;AAEA,QAAME,OAA2B,GAAG;AAChCC,IAAAA,IAAI,EAAE,4BAD0B;AAEhCC,IAAAA,IAAI,EAAE;AACFC,MAAAA,cAAc,EAAE,CAAC,gBAAD,CADd;AAEFC,MAAAA,QAAQ,EAAE;AACNC,QAAAA,QAAQ,EAAE;AACNC,UAAAA,QAAQ,EAAE;AACNC,YAAAA,kBAAkB,EAAE;AAChBC,cAAAA,IAAI,EAAE,QADU;AAEhBC,cAAAA,MAAM,EAAE,CAAC,WAAD,EAAc,MAAd,CAFQ;AAGhBC,cAAAA,SAAS,EAAE;AAHK;AADd;AADJ;AADJ,OAFR;AAaFC,MAAAA,QAAQ,EAAE;AACNC,QAAAA,UAAU,EAAE;AACRC,UAAAA,QAAQ,EAAE;AACNL,YAAAA,IAAI,EAAE,MADA;AAENM,YAAAA,MAAM,EAAE;AACJC,cAAAA,OAAO,EAAE;AACLP,gBAAAA,IAAI,EAAE,SADD;AAELQ,gBAAAA,YAAY,EAAE;AAFT;AADL,aAFF;AAQNV,YAAAA,QAAQ,EAAE;AARJ,WADF;AAWRW,UAAAA,SAAS,EAAE;AACPT,YAAAA,IAAI,EAAE,QADC;AAEPU,YAAAA,OAAO,EAAE;AAFF;AAXH;AADN;AAbR;AAF0B,GAApC;;AAoCA,MAAI;AACA,UAAMnB,aAAa,CAACoB,OAAd,CAAsBC,WAAtB,CAAkCpB,OAAlC,CAAN;AACH,GAFD,CAEE,OAAOqB,EAAP,EAAW;AACT,UAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,qEADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,kCAFT,EAGF;AACIC,MAAAA,KAAK,EAAEJ,EADX;AAEIrB,MAAAA;AAFJ,KAHE,CAAN;AAQH;AACJ,CAnDM","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { IndicesPutTemplate } from \"@elastic/elasticsearch/api/requestParams\";\n\nexport interface CreateElasticsearchTemplateParams {\n elasticsearch: Client;\n}\n\nexport const createElasticsearchTemplate = async (params: CreateElasticsearchTemplateParams) => {\n const { elasticsearch } = params;\n\n const options: IndicesPutTemplate = {\n name: \"headless-cms-entries-index\",\n body: {\n index_patterns: [\"*headless-cms*\"],\n settings: {\n analysis: {\n analyzer: {\n lowercase_analyzer: {\n type: \"custom\",\n filter: [\"lowercase\", \"trim\"],\n tokenizer: \"keyword\"\n }\n }\n }\n },\n mappings: {\n properties: {\n property: {\n type: \"text\",\n fields: {\n keyword: {\n type: \"keyword\",\n ignore_above: 256\n }\n },\n analyzer: \"lowercase_analyzer\"\n },\n rawValues: {\n type: \"object\",\n enabled: false\n }\n }\n }\n }\n };\n\n try {\n await elasticsearch.indices.putTemplate(options);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create Elasticsearch index template for the Headless CMS.\",\n ex.code || \"CMS_ELASTICSEARCH_TEMPLATE_ERROR\",\n {\n error: ex,\n options\n }\n );\n }\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["createPartitionKey","tenant","toLowerCase","createSortKey","createKeys","params","PK","SK","createSystemStorageOperations","entity","create","system","keys","put","ex","WebinyError","message","code","error","update","original","get"],"mappings":";;;;;;;;;;;AAQA;;AACA;;AACA;;;;;;AASA,MAAMA,kBAAkB,GAAG,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAA4C;AACnE,SAAQ,KAAIA,MAAM,CAACC,WAAP,EAAqB,SAAjC;AACH,CAFD;;AAGA,MAAMC,aAAa,GAAG,MAAc;AAChC,SAAO,KAAP;AACH,CAFD;;AAQA,MAAMC,UAAU,GAAIC,MAAD,IAAsC;AACrD,SAAO;AACHC,IAAAA,EAAE,EAAEN,kBAAkB,CAACK,MAAD,CADnB;AAEHE,IAAAA,EAAE,EAAEJ,aAAa;AAFd,GAAP;AAIH,CALD;;AAOO,MAAMK,6BAA6B,GACtCH,MADyC,IAEZ;AAC7B,QAAM;AAAEI,IAAAA;AAAF,MAAaJ,MAAnB;;AAEA,QAAMK,MAAM,GAAG,OAAO;AAAEC,IAAAA;AAAF,GAAP,KAA8D;AACzE,UAAMC,IAAI,GAAGR,UAAU,CAACO,MAAD,CAAvB;;AACA,QAAI;AACA,YAAMF,MAAM,CAACI,GAAP,iCACCF,MADD,GAECC,IAFD,EAAN;AAIA,aAAOD,MAAP;AACH,KAND,CAME,OAAOG,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0BADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,qBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIH,QAAAA,MAFJ;AAGIC,QAAAA;AAHJ,OAHE,CAAN;AASH;AACJ,GAnBD;;AAqBA,QAAMO,MAAM,GAAG,MAAOd,MAAP,IAA0D;AACrE,UAAM;AAAEM,MAAAA,MAAF;AAAUS,MAAAA;AAAV,QAAuBf,MAA7B;AAEA,UAAMO,IAAI,GAAGR,UAAU,CAACO,MAAD,CAAvB;;AAEA,QAAI;AACA,YAAMF,MAAM,CAACI,GAAP,iCACCF,MADD,GAECC,IAFD,EAAN;AAIA,aAAOD,MAAP;AACH,KAND,CAME,OAAOG,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,0BADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,qBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIH,QAAAA,MAFJ;AAGIS,QAAAA,QAHJ;AAIIR,QAAAA;AAJJ,OAHE,CAAN;AAUH;AACJ,GAvBD;;AAyBA,QAAMS,GAAG,GAAG,MAAOhB,MAAP,IAAuD;AAC/D,UAAMO,IAAI,GAAGR,UAAU,CAACC,MAAD,CAAvB;;AAEA,QAAI;AACA,YAAMM,MAAM,GAAG,MAAM,cAAqB;AACtCF,QAAAA,MADsC;AAEtCG,QAAAA;AAFsC,OAArB,CAArB;AAIA,aAAO,0BAAYH,MAAZ,EAAoBE,MAApB,CAAP;AACH,KAND,CAME,OAAOG,EAAP,EAAW;AACT,YAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,uBADZ,EAEFF,EAAE,CAACG,IAAH,IAAW,kBAFT,EAGF;AACIC,QAAAA,KAAK,EAAEJ,EADX;AAEIF,QAAAA;AAFJ,OAHE,CAAN;AAQH;AACJ,GAnBD;;AAqBA,SAAO;AACHF,IAAAA,MADG;AAEHS,IAAAA,MAFG;AAGHE,IAAAA;AAHG,GAAP;AAKH,CA7EM","sourcesContent":["import {\n CmsSystem,\n CmsSystemStorageOperations,\n CmsSystemStorageOperationsCreateParams,\n CmsSystemStorageOperationsGetParams,\n CmsSystemStorageOperationsUpdateParams\n} from \"@webiny/api-headless-cms/types\";\nimport { Entity } from \"dynamodb-toolbox\";\nimport WebinyError from \"@webiny/error\";\nimport { get as getRecord } from \"@webiny/db-dynamodb/utils/get\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\n\nexport interface CreateSystemStorageOperationsParams {\n entity: Entity<any>;\n}\n\ninterface PartitionKeyParams {\n tenant: string;\n}\nconst createPartitionKey = ({ tenant }: PartitionKeyParams): string => {\n return `T#${tenant.toLowerCase()}#SYSTEM`;\n};\nconst createSortKey = (): string => {\n return \"CMS\";\n};\n\ninterface Keys {\n PK: string;\n SK: string;\n}\nconst createKeys = (params: PartitionKeyParams): Keys => {\n return {\n PK: createPartitionKey(params),\n SK: createSortKey()\n };\n};\n\nexport const createSystemStorageOperations = (\n params: CreateSystemStorageOperationsParams\n): CmsSystemStorageOperations => {\n const { entity } = params;\n\n const create = async ({ system }: CmsSystemStorageOperationsCreateParams) => {\n const keys = createKeys(system);\n try {\n await entity.put({\n ...system,\n ...keys\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create system.\",\n ex.code || \"CREATE_SYSTEM_ERROR\",\n {\n error: ex,\n system,\n keys\n }\n );\n }\n };\n\n const update = async (params: CmsSystemStorageOperationsUpdateParams) => {\n const { system, original } = params;\n\n const keys = createKeys(system);\n\n try {\n await entity.put({\n ...system,\n ...keys\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update system.\",\n ex.code || \"UPDATE_SYSTEM_ERROR\",\n {\n error: ex,\n system,\n original,\n keys\n }\n );\n }\n };\n\n const get = async (params: CmsSystemStorageOperationsGetParams) => {\n const keys = createKeys(params);\n\n try {\n const system = await getRecord<CmsSystem>({\n entity,\n keys\n });\n return cleanupItem(entity, system);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get system.\",\n ex.code || \"GET_SYSTEM_ERROR\",\n {\n error: ex,\n keys\n }\n );\n }\n };\n\n return {\n create,\n update,\n get\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-ddb-es",
3
- "version": "5.24.0",
3
+ "version": "5.25.0-beta.2",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-headless-cms",
@@ -22,16 +22,16 @@
22
22
  ],
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@babel/runtime": "7.16.7",
26
- "@webiny/api-headless-cms": "5.24.0",
27
- "@webiny/api-upgrade": "5.24.0",
28
- "@webiny/db-dynamodb": "5.24.0",
29
- "@webiny/error": "5.24.0",
30
- "@webiny/handler": "5.24.0",
31
- "@webiny/handler-aws": "5.24.0",
32
- "@webiny/handler-db": "5.24.0",
33
- "@webiny/plugins": "5.24.0",
34
- "@webiny/utils": "5.24.0",
25
+ "@babel/runtime": "7.17.7",
26
+ "@webiny/api-headless-cms": "5.25.0-beta.2",
27
+ "@webiny/api-upgrade": "5.25.0-beta.2",
28
+ "@webiny/db-dynamodb": "5.25.0-beta.2",
29
+ "@webiny/error": "5.25.0-beta.2",
30
+ "@webiny/handler": "5.25.0-beta.2",
31
+ "@webiny/handler-aws": "5.25.0-beta.2",
32
+ "@webiny/handler-db": "5.25.0-beta.2",
33
+ "@webiny/plugins": "5.25.0-beta.2",
34
+ "@webiny/utils": "5.25.0-beta.2",
35
35
  "dataloader": "2.0.0",
36
36
  "dynamodb-toolbox": "0.3.5",
37
37
  "jsonpack": "1.1.5",
@@ -45,10 +45,10 @@
45
45
  "@elastic/elasticsearch": "7.12.0",
46
46
  "@shelf/jest-elasticsearch": "^1.0.0",
47
47
  "@types/jsonpack": "^1.1.0",
48
- "@webiny/api-dynamodb-to-elasticsearch": "^5.24.0",
49
- "@webiny/api-elasticsearch": "^5.24.0",
50
- "@webiny/cli": "^5.24.0",
51
- "@webiny/project-utils": "^5.24.0",
48
+ "@webiny/api-dynamodb-to-elasticsearch": "^5.25.0-beta.2",
49
+ "@webiny/api-elasticsearch": "^5.25.0-beta.2",
50
+ "@webiny/cli": "^5.25.0-beta.2",
51
+ "@webiny/project-utils": "^5.25.0-beta.2",
52
52
  "jest": "^26.6.3",
53
53
  "jest-dynalite": "^3.2.0",
54
54
  "jest-environment-node": "^26.6.2",
@@ -57,7 +57,7 @@
57
57
  "rimraf": "^3.0.2",
58
58
  "sinon": "^9.0.2",
59
59
  "ttypescript": "^1.5.12",
60
- "typescript": "^4.1.3"
60
+ "typescript": "4.5.5"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public",
@@ -67,5 +67,5 @@
67
67
  "build": "yarn webiny run build",
68
68
  "watch": "yarn webiny run watch"
69
69
  },
70
- "gitHead": "be0cbfcaa9247c658c44179af7943cc5d6d71bc7"
70
+ "gitHead": "ed2f22976af47aea0b6b5d638f8afdc39951b014"
71
71
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsEntryElasticsearchBodyModifierPlugin.ts"],"names":["CmsEntryElasticsearchBodyModifierPlugin","ElasticsearchBodyModifierPlugin","constructor","config","modifyBody","modelId"],"mappings":";;;;;;;;;;;AAAA;;AAmBO,MAAMA,uCAAN,SAAsDC,gEAAtD,CAAwG;AAKpGC,EAAAA,WAAW,CAACC,MAAD,EAAwD;AACtE,UAAMA,MAAM,CAACC,UAAb;AADsE;AAGtE,SAAKC,OAAL,GAAeF,MAAM,CAACE,OAAtB;AACH;;AAT0G;;;8BAAlGL,uC,UACsC,uC","sourcesContent":["import {\n ElasticsearchBodyModifierPlugin,\n ModifyBodyCallable,\n ModifyBodyParams as BaseModifyBodyParams\n} from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchBodyModifierPlugin\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport interface ModifyBodyParams extends BaseModifyBodyParams {\n model: CmsModel;\n}\n\nexport interface CmsEntryElasticsearchBodyModifierPluginConfig {\n modifyBody: ModifyBodyCallable<ModifyBodyParams>;\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}\n\nexport class CmsEntryElasticsearchBodyModifierPlugin extends ElasticsearchBodyModifierPlugin<ModifyBodyParams> {\n public static override readonly type: string = \"cms.elasticsearch.modifier.body.entry\";\n\n public readonly modelId?: string;\n\n public constructor(config: CmsEntryElasticsearchBodyModifierPluginConfig) {\n super(config.modifyBody);\n\n this.modelId = config.modelId;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { ElasticsearchFieldPlugin, Params as BaseParams } from "@webiny/api-elasticsearch/plugins/definition/ElasticsearchFieldPlugin";
2
- export interface CmsEntryElasticsearchFieldPluginParams extends BaseParams {
1
+ import { ElasticsearchFieldPlugin, ElasticsearchFieldPluginParams as ElasticsearchFieldPluginParamsBaseParams } from "@webiny/api-elasticsearch/plugins/definition/ElasticsearchFieldPlugin";
2
+ export interface CmsEntryElasticsearchFieldPluginParams extends ElasticsearchFieldPluginParamsBaseParams {
3
3
  /**
4
4
  * If modelId is not passed, there is no filtering of plugins by it when plugin is applied during the runtime.
5
5
  */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsEntryElasticsearchFieldPlugin.ts"],"names":["CmsEntryElasticsearchFieldPlugin","ElasticsearchFieldPlugin","constructor","params","modelId"],"mappings":";;;;;;;;;;;AAAA;;AAYO,MAAMA,gCAAN,SAA+CC,kDAA/C,CAAwE;AAKpEC,EAAAA,WAAW,CAACC,MAAD,EAAiD;AAC/D,UAAMA,MAAN;AAD+D;AAG/D,SAAKC,OAAL,GAAeD,MAAM,CAACC,OAAtB;AACH;;AAT0E;;;8BAAlEJ,gC,UACsC,yC","sourcesContent":["import {\n ElasticsearchFieldPlugin,\n ElasticsearchFieldPluginParams as ElasticsearchFieldPluginParamsBaseParams\n} from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchFieldPlugin\";\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"]}
@@ -26,5 +26,5 @@ export declare class CmsEntryElasticsearchQueryBuilderValueSearchPlugin extends
26
26
  get fieldType(): string;
27
27
  constructor(params: CmsEntryElasticsearchQueryBuilderValueSearchPluginParams);
28
28
  transform(params: TransformCallableParams): any;
29
- createPath(params: CreatePathCallableParams): string;
29
+ createPath(params: CreatePathCallableParams): string | null;
30
30
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsEntryElasticsearchQueryBuilderValueSearchPlugin.ts"],"names":["CmsEntryElasticsearchQueryBuilderValueSearchPlugin","Plugin","fieldType","config","constructor","params","name","type","transform","createPath","path"],"mappings":";;;;;;;;;;;AAAA;;AA0BO,MAAMA,kDAAN,SAAiEC,cAAjE,CAAwE;AAKvD,MAATC,SAAS,GAAW;AAC3B,WAAO,KAAKC,MAAL,CAAYD,SAAnB;AACH;;AAEME,EAAAA,WAAW,CAACC,MAAD,EAAmE;AACjF;AADiF;AAGjF,SAAKF,MAAL,GAAcE,MAAd;AACA,SAAKC,IAAL,GAAa,GAAG,KAAKF,WAAN,CAA0BG,IAAK,IAAG,KAAKJ,MAAL,CAAYD,SAAU,EAAvE;AACH;;AAEMM,EAAAA,SAAS,CAACH,MAAD,EAAuC;AACnD,WAAO,KAAKF,MAAL,CAAYK,SAAZ,CAAsBH,MAAtB,CAAP;AACH;;AAEMI,EAAAA,UAAU,CAACJ,MAAD,EAAkD;AAC/D,QAAI,OAAO,KAAKF,MAAL,CAAYO,IAAnB,KAA4B,UAAhC,EAA4C;AACxC,aAAO,KAAKP,MAAL,CAAYO,IAAZ,CAAiBL,MAAjB,CAAP;AACH,KAFD,MAEO,IAAI,OAAO,KAAKF,MAAL,CAAYO,IAAnB,KAA4B,QAAhC,EAA0C;AAC7C,aAAO,KAAKP,MAAL,CAAYO,IAAnB;AACH;;AACD,WAAO,IAAP;AACH;;AA3B0E;;;8BAAlEV,kD,UACsC,+C","sourcesContent":["import { Plugin } from \"@webiny/plugins/Plugin\";\nimport { CmsModelField } from \"@webiny/api-headless-cms/types\";\n\nexport interface CreatePathCallableParams<T = any> {\n field: CmsModelField;\n key: string;\n value: T;\n}\n\nexport interface CreatePathCallable<T = any> {\n (params: CreatePathCallableParams<T>): string;\n}\n\nexport interface TransformCallableParams<T = any> {\n field: CmsModelField;\n value: T;\n}\nexport interface TransformCallable<T = any> {\n (params: TransformCallableParams<T>): string;\n}\n\nexport interface CmsEntryElasticsearchQueryBuilderValueSearchPluginParams {\n fieldType: string;\n path?: string | CreatePathCallable;\n transform: TransformCallable;\n}\nexport class CmsEntryElasticsearchQueryBuilderValueSearchPlugin extends Plugin {\n public static override readonly type: string = \"cms-elastic-search-query-builder-value-search\";\n\n private readonly config: CmsEntryElasticsearchQueryBuilderValueSearchPluginParams;\n\n public get fieldType(): string {\n return this.config.fieldType;\n }\n\n public constructor(params: CmsEntryElasticsearchQueryBuilderValueSearchPluginParams) {\n super();\n\n this.config = params;\n this.name = `${(this.constructor as any).type}-${this.config.fieldType}`;\n }\n\n public transform(params: TransformCallableParams): any {\n return this.config.transform(params);\n }\n\n public createPath(params: CreatePathCallableParams): string | null {\n if (typeof this.config.path === \"function\") {\n return this.config.path(params);\n } else if (typeof this.config.path === \"string\") {\n return this.config.path;\n }\n return null;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsEntryElasticsearchQueryModifierPlugin.ts"],"names":["CmsEntryElasticsearchQueryModifierPlugin","ElasticsearchQueryModifierPlugin","constructor","config","modifyQuery","modelId"],"mappings":";;;;;;;;;;;AAAA;;AAmBO,MAAMA,wCAAN,SAAuDC,kEAAvD,CAA2G;AAKvGC,EAAAA,WAAW,CAACC,MAAD,EAAyD;AACvE,UAAMA,MAAM,CAACC,WAAb;AADuE;AAGvE,SAAKC,OAAL,GAAeF,MAAM,CAACE,OAAtB;AACH;;AAT6G;;;8BAArGL,wC,UACsC,wC","sourcesContent":["import {\n ElasticsearchQueryModifierPlugin,\n ModifyQueryCallable,\n ModifyQueryParams as BaseModifyQueryParams\n} from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryModifierPlugin\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport interface ModifyQueryParams extends BaseModifyQueryParams {\n model: CmsModel;\n}\n\nexport interface CmsEntryElasticsearchQueryModifierPluginConfig {\n modifyQuery: ModifyQueryCallable<ModifyQueryParams>;\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}\n\nexport class CmsEntryElasticsearchQueryModifierPlugin extends ElasticsearchQueryModifierPlugin<ModifyQueryParams> {\n public static override readonly type: string = \"cms.elasticsearch.modifier.query.entry\";\n\n public readonly modelId?: string;\n\n public constructor(config: CmsEntryElasticsearchQueryModifierPluginConfig) {\n super(config.modifyQuery);\n\n this.modelId = config.modelId;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsEntryElasticsearchSortModifierPlugin.ts"],"names":["CmsEntryElasticsearchSortModifierPlugin","ElasticsearchSortModifierPlugin","constructor","config","modifySort","modelId"],"mappings":";;;;;;;;;;;AAAA;;AAmBO,MAAMA,uCAAN,SAAsDC,gEAAtD,CAAwG;AAKpGC,EAAAA,WAAW,CAACC,MAAD,EAAwD;AACtE,UAAMA,MAAM,CAACC,UAAb;AADsE;AAEtE,SAAKC,OAAL,GAAeF,MAAM,CAACE,OAAtB;AACH;;AAR0G;;;8BAAlGL,uC,UACsC,uC","sourcesContent":["import {\n ElasticsearchSortModifierPlugin,\n ModifySortCallable,\n ModifySortParams as BaseModifySortParams\n} from \"@webiny/api-elasticsearch/plugins/definition/ElasticsearchSortModifierPlugin\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport interface ModifySortParams extends BaseModifySortParams {\n model: CmsModel;\n}\n\nexport interface CmsEntryElasticsearchSortModifierPluginConfig {\n modifySort: ModifySortCallable<ModifySortParams>;\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}\n\nexport class CmsEntryElasticsearchSortModifierPlugin extends ElasticsearchSortModifierPlugin<ModifySortParams> {\n public static override readonly type: string = \"cms.elasticsearch.modifier.sort.entry\";\n\n public readonly modelId?: string;\n\n public constructor(config: CmsEntryElasticsearchSortModifierPluginConfig) {\n super(config.modifySort);\n this.modelId = config.modelId;\n }\n}\n"]}
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["types.ts"],"names":["ENTITIES"],"mappings":";;;;;;;AAkBA;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;IAsDYA,Q;;;WAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;GAAAA,Q,wBAAAA,Q","sourcesContent":["import { Plugin } from \"@webiny/plugins/types\";\nimport {\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: CmsModelField) => 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 modelFieldToGraphQLPlugins: CmsModelFieldToGraphQLPlugin[];\n attributes?: Record<ENTITIES, Attributes>;\n plugins?: Plugin[] | Plugin[][];\n}\n\nexport interface HeadlessCmsStorageOperations extends BaseHeadlessCmsStorageOperations {\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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;AAAA;;AACA;;eAEe,MAAM,CAAC,qBAAD,EAAe,sBAAf,C","sourcesContent":["import upgrade500 from \"./v5.0.0/index\";\nimport upgrade580 from \"./v5.8.0/index\";\n\nexport default () => [upgrade500(), upgrade580()];\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":["paginateBatch","items","perPage","execute","pages","Math","ceil","length","i","slice"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACO,MAAMA,aAAa,GAAG,OAAOC,KAAP,EAAcC,OAAd,EAAuBC,OAAvB,KAAmC;AAC5D,QAAMC,KAAK,GAAGC,IAAI,CAACC,IAAL,CAAUL,KAAK,CAACM,MAAN,GAAeL,OAAzB,CAAd;;AAEA,OAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,KAApB,EAA2BI,CAAC,EAA5B,EAAgC;AAC5B,UAAML,OAAO,CAACF,KAAK,CAACQ,KAAN,CAAYD,CAAC,GAAGN,OAAhB,EAAyBM,CAAC,GAAGN,OAAJ,GAAcA,OAAvC,CAAD,CAAb;AACH;AACJ,CANM","sourcesContent":["/**\n * File not used anymore.\n */\n// @ts-nocheck\nexport const paginateBatch = async (items, perPage, execute) => {\n const pages = Math.ceil(items.length / perPage);\n\n for (let i = 0; i < pages; i++) {\n await execute(items.slice(i * perPage, i * perPage + perPage));\n }\n};\n"]}