@webiny/api-headless-cms-ddb 5.17.4 → 5.18.0-beta.3

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 (91) hide show
  1. package/definitions/entry.d.ts +6 -4
  2. package/definitions/entry.js +19 -8
  3. package/definitions/group.d.ts +8 -0
  4. package/definitions/group.js +74 -0
  5. package/definitions/model.d.ts +8 -0
  6. package/definitions/model.js +96 -0
  7. package/definitions/settings.d.ts +8 -0
  8. package/definitions/settings.js +62 -0
  9. package/definitions/system.d.ts +8 -0
  10. package/definitions/system.js +50 -0
  11. package/definitions/table.d.ts +6 -12
  12. package/definitions/table.js +15 -15
  13. package/dynamoDb/index.d.ts +1 -1
  14. package/dynamoDb/index.js +4 -3
  15. package/dynamoDb/path/plainObject.js +1 -2
  16. package/dynamoDb/path/ref.js +1 -2
  17. package/dynamoDb/storage/date.d.ts +2 -2
  18. package/dynamoDb/storage/date.js +17 -21
  19. package/dynamoDb/storage/longText.d.ts +7 -0
  20. package/dynamoDb/storage/longText.js +83 -0
  21. package/dynamoDb/storage/richText.d.ts +2 -2
  22. package/dynamoDb/storage/richText.js +69 -67
  23. package/dynamoDb/transformValue/datetime.d.ts +1 -1
  24. package/dynamoDb/transformValue/datetime.js +1 -2
  25. package/index.d.ts +2 -6
  26. package/index.js +108 -13
  27. package/operations/entry/dataLoaders.d.ts +34 -19
  28. package/operations/entry/dataLoaders.js +158 -138
  29. package/operations/entry/index.d.ts +8 -4
  30. package/operations/entry/index.js +812 -16
  31. package/operations/entry/keys.d.ts +25 -0
  32. package/operations/entry/keys.js +62 -0
  33. package/operations/entry/systemFields.d.ts +2 -2
  34. package/operations/entry/systemFields.js +1 -2
  35. package/operations/entry/utils.d.ts +13 -9
  36. package/operations/entry/utils.js +62 -18
  37. package/operations/group/index.d.ts +8 -0
  38. package/operations/group/index.js +198 -0
  39. package/operations/model/index.d.ts +6 -3
  40. package/operations/model/index.js +153 -18
  41. package/operations/settings/index.d.ts +6 -3
  42. package/operations/settings/index.js +132 -16
  43. package/operations/system/index.d.ts +6 -3
  44. package/operations/system/index.js +94 -14
  45. package/package.json +11 -11
  46. package/types.d.ts +38 -8
  47. package/types.js +11 -1
  48. package/configurations.d.ts +0 -18
  49. package/configurations.js +0 -24
  50. package/configurations.js.map +0 -1
  51. package/definitions/entry.js.map +0 -1
  52. package/definitions/table.js.map +0 -1
  53. package/dynamoDb/index.js.map +0 -1
  54. package/dynamoDb/path/plainObject.js.map +0 -1
  55. package/dynamoDb/path/ref.js.map +0 -1
  56. package/dynamoDb/storage/date.js.map +0 -1
  57. package/dynamoDb/storage/richText.js.map +0 -1
  58. package/dynamoDb/transformValue/datetime.js.map +0 -1
  59. package/index.js.map +0 -1
  60. package/operations/entry/CmsContentEntryDynamo.d.ts +0 -86
  61. package/operations/entry/CmsContentEntryDynamo.js +0 -972
  62. package/operations/entry/CmsContentEntryDynamo.js.map +0 -1
  63. package/operations/entry/dataLoaders.js.map +0 -1
  64. package/operations/entry/index.js.map +0 -1
  65. package/operations/entry/systemFields.js.map +0 -1
  66. package/operations/entry/utils.js.map +0 -1
  67. package/operations/helpers.d.ts +0 -5
  68. package/operations/helpers.js +0 -96
  69. package/operations/helpers.js.map +0 -1
  70. package/operations/model/CmsContentModelDynamo.d.ts +0 -18
  71. package/operations/model/CmsContentModelDynamo.js +0 -234
  72. package/operations/model/CmsContentModelDynamo.js.map +0 -1
  73. package/operations/model/index.js.map +0 -1
  74. package/operations/modelGroup/CmsContentModelGroupDynamo.d.ts +0 -42
  75. package/operations/modelGroup/CmsContentModelGroupDynamo.js +0 -230
  76. package/operations/modelGroup/CmsContentModelGroupDynamo.js.map +0 -1
  77. package/operations/modelGroup/index.d.ts +0 -3
  78. package/operations/modelGroup/index.js +0 -26
  79. package/operations/modelGroup/index.js.map +0 -1
  80. package/operations/settings/CmsSettingsDynamo.d.ts +0 -16
  81. package/operations/settings/CmsSettingsDynamo.js +0 -145
  82. package/operations/settings/CmsSettingsDynamo.js.map +0 -1
  83. package/operations/settings/index.js.map +0 -1
  84. package/operations/system/CmsSystemDynamo.d.ts +0 -16
  85. package/operations/system/CmsSystemDynamo.js +0 -126
  86. package/operations/system/CmsSystemDynamo.js.map +0 -1
  87. package/operations/system/index.js.map +0 -1
  88. package/types.js.map +0 -1
  89. package/utils.d.ts +0 -5
  90. package/utils.js +0 -62
  91. package/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/CmsContentEntryDynamo.ts"],"names":["TYPE_ENTRY","TYPE_ENTRY_LATEST","TYPE_ENTRY_PUBLISHED","GSI1_INDEX","configurationDefaults","defaultLimit","maxLimit","undefined","CmsContentEntryDynamo","context","_context","configuration","_configuration","table","_table","entity","_entity","constructor","_modelPartitionKey","partitionKey","_dataLoaders","DataLoadersHandler","indexes","sortKey","create","model","args","entry","storageEntry","getPartitionKey","id","items","putBatch","PK","SK","getSortKeyRevision","version","TYPE","GSI1_PK","getGSIEntryPartitionKey","GSI1_SK","getGSISortKey","getSortKeyLatest","getGSILatestPartitionKey","batchWrite","ex","WebinyError","message","code","error","createRevisionFrom","originalEntry","latestEntry","delete","results","query","gte","keys","Items","map","item","key","deleteBatch","deleteRevision","entryToDelete","entryToSetAsLatest","storageEntryToSetAsLatest","publishedStorageEntry","getPublishedRevisionByEntryId","push","getSortKeyPublished","get","list","limit","length","shift","initialLimit","where","originalWhere","after","sort","queryOptions","createQueryOptions","queryPartitionKeys","runQuery","options","modelFields","plugins","filteredItems","fields","totalCount","sortedItems","start","hasMoreItems","end","slicedItems","slice","cursor","update","latestStorageEntry","getLatestRevisionByEntryId","publish","getGSIPublishedPartitionKey","status","CONTENT_ENTRY_STATUS","UNPUBLISHED","clearAllEntryRevisions","unpublish","requestChanges","requestReview","getAllRevisionsByIds","ids","getAllEntryRevisions","getByIds","getRevisionById","getPublishedByIds","getLatestByIds","getRevisions","getSingleDynamoDbItem","value","entryId","getPreviousRevision","op","order","reverse","result","Array","isArray","match","split","getGSIPartitionKey","type","modelId","includes","pop","filters","index","id_in","entryId_in","published","latest","eq","beginsWith","previousResult","next"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { DataLoadersHandler } from \"./dataLoaders\";\nimport {\n CmsContentEntry,\n CmsContentEntryListWhere,\n CmsContentEntryStorageOperations,\n CmsContentEntryStorageOperationsCreateArgs,\n CmsContentEntryStorageOperationsCreateRevisionFromArgs,\n CmsContentEntryStorageOperationsDeleteArgs,\n CmsContentEntryStorageOperationsDeleteRevisionArgs,\n CmsContentEntryStorageOperationsGetArgs,\n CmsContentEntryStorageOperationsListArgs,\n CmsContentEntryStorageOperationsListResponse,\n CmsContentEntryStorageOperationsPublishArgs,\n CmsContentEntryStorageOperationsRequestChangesArgs,\n CmsContentEntryStorageOperationsRequestReviewArgs,\n CmsContentEntryStorageOperationsUnpublishArgs,\n CmsContentEntryStorageOperationsUpdateArgs,\n CmsContentModel,\n CmsContext,\n CONTENT_ENTRY_STATUS\n} from \"@webiny/api-headless-cms/types\";\nimport { zeroPad } from \"@webiny/api-headless-cms/utils\";\nimport { createBasePartitionKey, decodePaginationCursor, encodePaginationCursor } from \"~/utils\";\nimport { Entity, Table } from \"dynamodb-toolbox\";\nimport { filterItems, buildModelFields, sortEntryItems } from \"./utils\";\nimport { queryOptions as DynamoDBToolboxQueryOptions } from \"dynamodb-toolbox/dist/classes/Table\";\nimport lodashCloneDeep from \"lodash.clonedeep\";\nimport { createEntryEntity } from \"~/definitions/entry\";\nimport { createTable } from \"~/definitions/table\";\n\nexport const TYPE_ENTRY = \"cms.entry\";\nexport const TYPE_ENTRY_LATEST = TYPE_ENTRY + \".l\";\nexport const TYPE_ENTRY_PUBLISHED = TYPE_ENTRY + \".p\";\n\nexport interface CmsContentEntryConfiguration {\n defaultLimit?: number;\n maxLimit?: number;\n}\n\ninterface ConstructorArgs {\n context: CmsContext;\n configuration: CmsContentEntryConfiguration;\n}\n\ninterface GetSingleDynamoDBItemArgs {\n partitionKey: string;\n value: any;\n op?: \"eq\" | \"lt\" | \"lte\" | \"gt\" | \"gte\" | \"between\" | \"beginsWith\";\n order?: string;\n}\n\ninterface RunQueryArgs {\n options?: DynamoDBToolboxQueryOptions;\n partitionKey: string;\n}\n\nconst GSI1_INDEX = \"GSI1\";\n\nconst configurationDefaults: CmsContentEntryConfiguration = {\n defaultLimit: 100,\n maxLimit: undefined\n};\n/**\n * We do not use transactions in this storage operations implementation due to their cost.\n */\nexport class CmsContentEntryDynamo implements CmsContentEntryStorageOperations {\n private readonly _context: CmsContext;\n private readonly _configuration: CmsContentEntryConfiguration;\n private readonly _modelPartitionKey: string;\n private readonly _dataLoaders: DataLoadersHandler;\n private readonly _table: Table;\n private readonly _entity: Entity<any>;\n\n private get context(): CmsContext {\n return this._context;\n }\n\n private get configuration(): CmsContentEntryConfiguration {\n return this._configuration;\n }\n\n public get table() {\n return this._table;\n }\n\n public get entity() {\n return this._entity;\n }\n\n public constructor({ context, configuration }: ConstructorArgs) {\n this._context = context;\n this._configuration = {\n ...configurationDefaults,\n ...(configuration || {})\n };\n this._modelPartitionKey = `${this.partitionKey}#M`;\n this._dataLoaders = new DataLoadersHandler(context, this);\n\n this._table = createTable({\n context,\n indexes: {\n [GSI1_INDEX]: {\n partitionKey: \"GSI1_PK\",\n sortKey: \"GSI1_SK\"\n }\n }\n });\n\n this._entity = createEntryEntity({\n table: this._table\n });\n }\n\n public async create(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsCreateArgs\n ): Promise<CmsContentEntry> {\n const { entry, storageEntry } = args;\n\n const partitionKey = this.getPartitionKey(entry.id);\n /**\n * We need to:\n * - create new main entry item\n * - create new or update latest entry item\n */\n const items = [\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(entry.version),\n TYPE: TYPE_ENTRY,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntry)\n }),\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntry)\n })\n ];\n\n try {\n await this._table.batchWrite(items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert data into the DynamoDB.\",\n ex.code || \"CREATE_ENTRY_ERROR\",\n {\n error: ex,\n entry\n }\n );\n }\n\n return storageEntry;\n }\n\n public async createRevisionFrom(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsCreateRevisionFromArgs\n ) {\n const { originalEntry, entry, storageEntry, latestEntry } = args;\n\n const partitionKey = this.getPartitionKey(storageEntry.id);\n /**\n * We need to:\n * - create the main entry item\n * - update the last entry item to a current one\n */\n const items = [\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(storageEntry.version),\n TYPE: TYPE_ENTRY,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntry)\n }),\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntry)\n })\n ];\n try {\n await this._table.batchWrite(items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create revision from given entry.\",\n ex.code || \"CREATE_REVISION_ERROR\",\n {\n error: ex,\n originalEntry,\n latestEntry,\n entry,\n storageEntry\n }\n );\n }\n /**\n * There are no modifications on the entry created so just return the data.\n */\n return storageEntry;\n }\n\n public async delete(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsDeleteArgs\n ): Promise<void> {\n const { entry } = args;\n const partitionKey = this.getPartitionKey(entry.id);\n\n const results = await this._entity.query(partitionKey, {\n gte: \" \"\n });\n\n const keys = results.Items.map(item => ({\n PK: partitionKey,\n SK: item.SK\n }));\n try {\n await this._table.batchWrite(keys.map(key => this._entity.deleteBatch(key)));\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the entry.\",\n ex.code || \"DELETE_ENTRY_ERROR\",\n {\n error: ex,\n partitionKey,\n keys\n }\n );\n }\n }\n\n public async deleteRevision(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsDeleteRevisionArgs\n ): Promise<void> {\n const { entryToDelete, entryToSetAsLatest, storageEntryToSetAsLatest } = args;\n const partitionKey = this.getPartitionKey(entryToDelete.id);\n\n const items = [\n this._entity.deleteBatch({\n PK: partitionKey,\n SK: this.getSortKeyRevision(entryToDelete.id)\n })\n ];\n\n const publishedStorageEntry = await this.getPublishedRevisionByEntryId(\n model,\n entryToDelete.id\n );\n\n /**\n * If revision we are deleting is the published one as well, we need to delete those records as well.\n */\n if (publishedStorageEntry && entryToDelete.id === publishedStorageEntry.id) {\n items.push(\n this._entity.deleteBatch({\n PK: partitionKey,\n SK: this.getSortKeyPublished()\n })\n );\n }\n if (storageEntryToSetAsLatest) {\n items.push(\n this._entity.putBatch({\n ...storageEntryToSetAsLatest,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntryToSetAsLatest)\n })\n );\n }\n try {\n await this._table.batchWrite(items);\n } catch (ex) {\n throw new WebinyError(ex.message, ex.code, {\n error: ex,\n entryToDelete,\n entryToSetAsLatest\n });\n }\n }\n\n public async get(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsGetArgs\n ): Promise<CmsContentEntry | null> {\n const { items } = await this.list(model, {\n ...(args || {}),\n limit: 1\n });\n if (items.length === 0) {\n return null;\n }\n return items.shift();\n }\n\n public async list(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsListArgs\n ): Promise<CmsContentEntryStorageOperationsListResponse> {\n const { limit: initialLimit, where: originalWhere, after, sort } = args;\n /**\n * There is no max limit imposed because that is up to the devs using this.\n * Default is some reasonable number for us but users can set their own when initializing the plugin.\n */\n const defaultLimit = this.configuration.defaultLimit || configurationDefaults.defaultLimit;\n const maxLimit = this.configuration.maxLimit || defaultLimit;\n const limit =\n !initialLimit || initialLimit <= 0\n ? initialLimit > maxLimit\n ? maxLimit\n : defaultLimit\n : initialLimit;\n\n const items: CmsContentEntry[] = [];\n\n const queryOptions = this.createQueryOptions({\n where: originalWhere,\n model\n });\n\n try {\n /**\n * We run the query method on all the partition keys that were built in the createQueryOptions() method.\n * Partition keys are always built as array because of the possibility that we might need to read from different partitions\n * which is the case if where condition is something like id_in or entryId_in.\n * If we are reading from the GSI1_PK it is a single partition but we keep it as an array\n * just to make it easier to read in all of the cases.\n */\n for (const partitionKey of queryOptions.queryPartitionKeys) {\n const results = await this.runQuery({\n partitionKey,\n options: queryOptions.options\n });\n items.push(...results);\n }\n } catch (ex) {\n throw new WebinyError(ex.message, \"SCAN_ERROR\", {\n error: ex\n });\n }\n /**\n * We need a object containing field, transformers and paths.\n * Just build it here and pass on into other methods that require it to avoid mapping multiple times.\n */\n const modelFields = buildModelFields({\n plugins: this.context.plugins,\n model\n });\n /**\n * Filter the read items via the code.\n * It will build the filters out of the where input and transform the values it is using.\n */\n const filteredItems = filterItems({\n items,\n where: queryOptions.where,\n plugins: this.context.plugins,\n fields: modelFields\n });\n\n const totalCount = filteredItems.length;\n /**\n * Sorting is also done via the code.\n * It takes the sort input and sorts by it via the lodash sortBy method.\n */\n const sortedItems = sortEntryItems({\n items: filteredItems,\n sort,\n fields: modelFields\n });\n\n const start = decodePaginationCursor(after) || 0;\n const hasMoreItems = totalCount > start + limit;\n const end = limit > totalCount + start + limit ? undefined : start + limit;\n const slicedItems = sortedItems.slice(start, end);\n /**\n * Although we do not need a cursor here, we will use it as such to keep it standardized.\n * Number is simply encoded.\n */\n const cursor = totalCount > start + limit ? encodePaginationCursor(start + limit) : null;\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n }\n public async update(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsUpdateArgs\n ): Promise<CmsContentEntry> {\n const { originalEntry, entry, storageEntry } = args;\n const partitionKey = this.getPartitionKey(originalEntry.id);\n\n const items = [];\n /**\n * We need to:\n * - update the current entry\n * - update the latest entry if the current entry is the latest one\n */\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(storageEntry.version),\n TYPE: TYPE_ENTRY,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(storageEntry)\n })\n );\n\n /**\n * We need the latest entry to update it as well if neccessary.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n if (latestStorageEntry && latestStorageEntry.id === entry.id) {\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n );\n }\n\n try {\n await this._table.batchWrite(items);\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update entry.\",\n ex.code || \"UPDATE_ERROR\",\n {\n error: ex,\n originalEntry,\n entry,\n latestStorageEntry\n }\n );\n }\n }\n\n public async publish(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsPublishArgs\n ): Promise<CmsContentEntry> {\n const { entry, storageEntry } = args;\n\n const partitionKey = this.getPartitionKey(entry.id);\n\n /**\n * We need the latest and published entries to see if something needs to be updated along side the publishing one.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n const publishedStorageEntry = await this.getPublishedRevisionByEntryId(model, entry.id);\n /**\n * We need to update:\n * - current entry revision sort key\n * - published sort key\n * - latest sort key - if entry updated is actually latest\n * - previous published entry to unpublished status - if any previously published entry\n */\n const items = [\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(entry.version),\n TYPE: TYPE_ENTRY,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n }),\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyPublished(),\n TYPE: TYPE_ENTRY_PUBLISHED,\n GSI1_PK: this.getGSIPublishedPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n ];\n if (entry.id === latestStorageEntry.id) {\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n );\n }\n if (publishedStorageEntry) {\n items.push(\n this._entity.putBatch({\n ...publishedStorageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(publishedStorageEntry.version),\n TYPE: TYPE_ENTRY,\n status: CONTENT_ENTRY_STATUS.UNPUBLISHED,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(publishedStorageEntry)\n })\n );\n }\n\n try {\n await this._table.batchWrite(items);\n this._dataLoaders.clearAllEntryRevisions(model, entry);\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the publishing batch.\",\n ex.code || \"PUBLISH_ERROR\",\n {\n entry,\n latestStorageEntry,\n publishedStorageEntry\n }\n );\n }\n }\n\n public async unpublish(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsUnpublishArgs\n ): Promise<CmsContentEntry> {\n const { entry, storageEntry } = args;\n\n const partitionKey = this.getPartitionKey(entry.id);\n /**\n * We need to:\n * - delete currently published entry\n * - update current entry revision with new data\n * - update latest entry status - if entry being unpublished is latest\n */\n const items = [\n this._entity.deleteBatch({\n PK: partitionKey,\n SK: this.getSortKeyPublished()\n }),\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(entry.version),\n TYPE: TYPE_ENTRY,\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the unpublishing one.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n if (entry.id === latestStorageEntry.id) {\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n );\n }\n\n try {\n await this._table.batchWrite(items);\n return storageEntry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute unpublish batch.\",\n ex.code || \"UNPUBLISH_ERROR\",\n {\n entry,\n storageEntry\n }\n );\n }\n }\n\n public async requestChanges(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsRequestChangesArgs\n ): Promise<CmsContentEntry> {\n const { entry, storageEntry, originalEntry } = args;\n\n const partitionKey = this.getPartitionKey(entry.id);\n\n /**\n * We need to:\n * - update the existing entry\n * - update latest version - if existing entry is the latest version\n */\n const items = [\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(entry.version),\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request changes one.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n if (latestStorageEntry.id === entry.id) {\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n );\n }\n\n try {\n await this._table.batchWrite(items);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute the request changes batch.\",\n ex.code || \"REQUEST_CHANGES_ERROR\",\n {\n entry,\n originalEntry\n }\n );\n }\n return entry;\n }\n\n public async requestReview(\n model: CmsContentModel,\n args: CmsContentEntryStorageOperationsRequestReviewArgs\n ): Promise<CmsContentEntry> {\n const { entry, storageEntry, originalEntry } = args;\n\n const partitionKey = this.getPartitionKey(entry.id);\n /**\n * We need to:\n * - update existing entry\n * - update latest entry - if existing entry is the latest entry\n */\n const items = [\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyRevision(entry.version),\n GSI1_PK: this.getGSIEntryPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n ];\n\n /**\n * We need the latest entry to see if something needs to be updated along side the request review one.\n */\n const latestStorageEntry = await this.getLatestRevisionByEntryId(model, entry.id);\n\n if (latestStorageEntry.id === entry.id) {\n items.push(\n this._entity.putBatch({\n ...storageEntry,\n PK: partitionKey,\n SK: this.getSortKeyLatest(),\n TYPE: TYPE_ENTRY_LATEST,\n GSI1_PK: this.getGSILatestPartitionKey(model),\n GSI1_SK: this.getGSISortKey(entry)\n })\n );\n }\n\n try {\n await this._table.batchWrite(items);\n return entry;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not execute request review batch.\",\n ex.code || \"REQUEST_REVIEW_ERROR\",\n {\n entry,\n storageEntry,\n originalEntry\n }\n );\n }\n }\n\n public async getAllRevisionsByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getAllEntryRevisions(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_ALL_REVISIONS_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getRevisionById(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getPublishedByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getPublishedRevisionByEntryId(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getLatestByIds(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n if (ids.length === 0) {\n return [];\n }\n try {\n return await this._dataLoaders.getLatestRevisionByEntryId(model, ids);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_BY_IDS_ERROR\",\n {\n ids\n }\n );\n }\n }\n\n public async getRevisions(model: CmsContentModel, id: string): Promise<CmsContentEntry[]> {\n try {\n return await this._dataLoaders.getAllEntryRevisions(model, [id]);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read multiple entries.\",\n ex.code || \"GET_ALL_REVISIONS_BY_IDS_ERROR\",\n {\n id\n }\n );\n }\n }\n\n public async getRevisionById(\n model: CmsContentModel,\n id: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n partitionKey: this.getPartitionKey(id),\n value: this.getSortKeyRevision(id)\n });\n }\n\n public async getPublishedRevisionByEntryId(\n model: CmsContentModel,\n entryId: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n partitionKey: this.getPartitionKey(entryId),\n value: this.getSortKeyPublished()\n });\n }\n\n public async getLatestRevisionByEntryId(\n model: CmsContentModel,\n entryId: string\n ): Promise<CmsContentEntry | null> {\n return this.getSingleDynamoDbItem({\n partitionKey: this.getPartitionKey(entryId),\n value: this.getSortKeyLatest()\n });\n }\n\n public async getPreviousRevision(\n model: CmsContentModel,\n entryId: string,\n version: number\n ): Promise<CmsContentEntry | null> {\n const entry = await this.getSingleDynamoDbItem({\n partitionKey: this.getPartitionKey(entryId),\n op: \"lt\",\n value: this.getSortKeyRevision(version),\n order: \"DESC\"\n });\n if ((entry as any).TYPE !== TYPE_ENTRY) {\n return null;\n }\n return entry;\n }\n\n private async getSingleDynamoDbItem(\n args: GetSingleDynamoDBItemArgs\n ): Promise<CmsContentEntry | null> {\n const { partitionKey, op = \"eq\", value, order = \"ASC\" } = args;\n const queryOptions: DynamoDBToolboxQueryOptions = {\n [op]: value,\n reverse: order === \"DESC\",\n limit: 1\n };\n\n try {\n const result = await this._entity.query(partitionKey, queryOptions);\n if (!result || Array.isArray(result.Items) === false) {\n throw new WebinyError(\n \"Error when querying for content entries - no result.\",\n \"QUERY_ERROR\",\n {\n partitionKey,\n queryOptions\n }\n );\n }\n if (result.Items.length === 0) {\n return null;\n }\n return result.Items.shift();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not read from the DynamoDB.\",\n ex.code || \"DDB_READ_ERROR\",\n {\n partitionKey,\n queryOptions\n }\n );\n }\n }\n\n public getPartitionKey(id: string): string {\n /**\n * If ID includes # it means it is composed of ID and VERSION.\n * We need ID only so extract it.\n */\n if (id.match(\"#\") !== null) {\n id = id.split(\"#\").shift();\n }\n return `${this.partitionKey}#${id}`;\n }\n\n private get partitionKey(): string {\n return `${createBasePartitionKey(this.context)}#CME`;\n }\n\n private getGSIPartitionKey(type: \"L\" | \"P\" | \"A\", model: CmsContentModel) {\n return `${this.partitionKey}#M#${model.modelId}#${type}`;\n }\n\n private getGSIEntryPartitionKey(model: CmsContentModel): string {\n return this.getGSIPartitionKey(\"A\", model);\n }\n private getGSILatestPartitionKey(model: CmsContentModel): string {\n return this.getGSIPartitionKey(\"L\", model);\n }\n\n private getGSIPublishedPartitionKey(model: CmsContentModel): string {\n return this.getGSIPartitionKey(\"P\", model);\n }\n\n private getGSISortKey(entry: CmsContentEntry): string {\n return entry.id;\n }\n /**\n * Gets a secondary key in form of REV#version from:\n * id#0003\n * 0003\n * 3\n */\n public getSortKeyRevision(version: string | number) {\n if (typeof version === \"string\" && version.includes(\"#\") === true) {\n version = version.split(\"#\").pop();\n }\n return `REV#${zeroPad(version)}`;\n }\n\n public getSortKeyLatest(): string {\n return \"L\";\n }\n\n public getSortKeyPublished(): string {\n return \"P\";\n }\n /**\n * Method to build the query partition keys, always an array, and create the target index:\n * - if undefined then it is primary\n * - if populated then it is that given one (and partition keys are reflecting that)\n */\n private createQueryOptions({\n where: originalWhere,\n model\n }: {\n where: CmsContentEntryListWhere;\n model: CmsContentModel;\n }): {\n queryPartitionKeys: string[];\n where: CmsContentEntryListWhere;\n options: DynamoDBToolboxQueryOptions;\n } {\n const options: DynamoDBToolboxQueryOptions = {\n filters: [],\n index: undefined\n };\n const where = lodashCloneDeep(originalWhere);\n /**\n * if we have id or entry ID, we will query via the primary key\n * just add all the possible IDs to find\n */\n const queryPartitionKeys: string[] = [];\n if (where.id) {\n queryPartitionKeys.push(this.getPartitionKey(where.id));\n }\n if (where.entryId) {\n queryPartitionKeys.push(this.getPartitionKey(where.entryId));\n }\n if (where.id_in) {\n queryPartitionKeys.push(...where.id_in.map(id => this.getPartitionKey(id)));\n }\n if (where.entryId_in) {\n queryPartitionKeys.push(...where.entryId_in.map(id => this.getPartitionKey(id)));\n }\n\n /**\n * If we do not have any of the IDs, we will query via the GSI1_PK just depending on the entry type\n * At this point there will probably be a lot of results\n * but we will apply some basic dynamodb filters so we dont get much data from the db\n * NOTE: It is still going to get charged tho\n */\n if (queryPartitionKeys.length === 0) {\n options.index = GSI1_INDEX;\n if (where.published) {\n queryPartitionKeys.push(this.getGSIPartitionKey(\"P\", model));\n } else if (where.latest) {\n queryPartitionKeys.push(this.getGSIPartitionKey(\"L\", model));\n } else {\n queryPartitionKeys.push(this.getGSIPartitionKey(\"A\", model));\n }\n }\n /**\n * If index is the primary one, we can filter records by type (latest, published or regular)\n * so we do not need to filter in the code\n */\n if (!options.index) {\n if (where.published) {\n options.eq = this.getSortKeyPublished();\n } else if (where.latest) {\n options.eq = this.getSortKeyLatest();\n } else {\n options.beginsWith = \"REV#\";\n }\n }\n /**\n * we remove all the used where conditions\n */\n delete where[\"id\"];\n delete where[\"id_in\"];\n delete where[\"entryId\"];\n delete where[\"entryId_in\"];\n delete where[\"published\"];\n delete where[\"latest\"];\n return {\n options,\n queryPartitionKeys,\n where\n };\n }\n /**\n * A method to query the database at the given partition key with the built query options.\n * Method runs in the loop until it reads everything it needs to.\n * We could impose the limit on the records read but there is no point since we MUST read everything to be able\n * to filter and sort the data.\n */\n public async runQuery(args: RunQueryArgs): Promise<CmsContentEntry[]> {\n let previousResult = undefined;\n let results;\n const items: CmsContentEntry[] = [];\n while ((results = await this.query(previousResult, args))) {\n items.push(...results.Items);\n previousResult = results;\n }\n return items;\n }\n\n private async query(previousResult, args: RunQueryArgs) {\n const { partitionKey, options } = args;\n let result;\n /**\n * In case there is no previous result we must make a new query.\n * This is the first query on the given partition key.\n */\n if (!previousResult) {\n result = await this._entity.query(partitionKey, options);\n } else if (typeof previousResult.next === \"function\") {\n /**\n * In case we have a previous result and it has a next method, we run it.\n * In case result of the next method is false, it means it has nothing else to read\n * and we return a null to keep the query from repeating.\n */\n result = await previousResult.next();\n if (result === false) {\n return null;\n }\n } else {\n /**\n * This could probably never happen but keep it here just in case to break the query loop.\n * Basically, either previousResult does not exist or it exists and has a next method\n * and at that point a result returned will be null and loop should not start again.\n */\n return null;\n }\n /**\n * We expect the result to contain an Items array and if not, something went wrong, very wrong.\n */\n if (!result || !result.Items || !Array.isArray(result.Items)) {\n throw new WebinyError(\n \"Error when querying for content entries - no result.\",\n \"QUERY_ERROR\",\n {\n partitionKey,\n options\n }\n );\n }\n return result;\n }\n}\n"],"file":"CmsContentEntryDynamo.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/dataLoaders.ts"],"names":["flatResponses","responses","entries","values","Object","items","push","executeBatchGet","storageOperations","batch","result","table","batchGet","Responses","next","previous","nResult","getAllEntryRevisions","context","model","DataLoader","ids","promises","map","id","partitionKey","getPartitionKey","runQuery","options","beginsWith","Promise","all","getRevisionById","reduce","collection","sortKey","getSortKeyRevision","keys","entity","getBatch","PK","SK","filter","item","getPublishedRevisionByEntryId","getSortKeyPublished","getLatestRevisionByEntryId","getSortKeyLatest","dataLoaders","DataLoadersHandler","constructor","Map","_context","_storageOperations","loadMany","clearAllEntryRevisions","entry","clear","clearRevisionById","clearPublishedRevisionByEntryId","clearLatestRevisionByEntryId","getLoader","name","WebinyError","loaderKey","modelId","_loaders","has","set","get","loader","results","Array","isArray","acc","res","message","code","data","JSON","stringify","ex","clearAll"],"mappings":"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","sourcesContent":["import DataLoader from \"dataloader\";\nimport { CmsContentEntry, CmsContentModel, CmsContext } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsContentEntryDynamo } from \"./CmsContentEntryDynamo\";\n\n/**\n * *** GLOBAL NOTE ***\n * When records are received from the batch get, we get them in all sorts of order.\n * What we need for DataLoader to work properly we must have id > records order.\n * So in the order IDs got into the DataLoader, its records must go out in the same order / bundle.\n */\n\nconst flatResponses = (responses: Record<string, CmsContentEntry[]>): CmsContentEntry[] => {\n const entries = [];\n const values = Object.values(responses);\n for (const items of values) {\n entries.push(...items);\n }\n return entries;\n};\n\nconst executeBatchGet = async (storageOperations: CmsContentEntryDynamo, batch: any[]) => {\n const items = [];\n const result = await storageOperations.table.batchGet(batch);\n if (!result) {\n return items;\n }\n if (result.Responses) {\n items.push(...flatResponses(result.Responses));\n }\n if (typeof result.next === \"function\") {\n let previous = result;\n let nResult;\n while ((nResult = await previous.next())) {\n items.push(...flatResponses(nResult.Responses));\n previous = nResult;\n if (!nResult || typeof nResult.next !== \"function\") {\n return items;\n }\n }\n }\n\n return items;\n};\n\nconst getAllEntryRevisions = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamo\n) => {\n return new DataLoader<string, CmsContentEntry[]>(async ids => {\n const promises = ids.map(id => {\n const partitionKey = storageOperations.getPartitionKey(id);\n return storageOperations.runQuery({\n partitionKey,\n options: {\n beginsWith: \"REV#\"\n }\n });\n });\n\n return Promise.all(promises);\n });\n};\n\nconst getRevisionById = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamo\n) => {\n return new DataLoader<string, CmsContentEntry>(async ids => {\n const batch = ids.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n const sortKey = storageOperations.getSortKeyRevision(id);\n const keys = `${partitionKey}__${sortKey}`;\n if (collection[keys]) {\n return collection;\n }\n collection[keys] = storageOperations.entity.getBatch({\n PK: partitionKey,\n SK: sortKey\n });\n return collection;\n }, {});\n\n const items = await executeBatchGet(storageOperations, Object.values(batch));\n\n return ids.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n const sortKey = storageOperations.getSortKeyRevision(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n};\n\nconst getPublishedRevisionByEntryId = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamo\n) => {\n return new DataLoader<string, CmsContentEntry>(async ids => {\n const sortKey = storageOperations.getSortKeyPublished();\n const batch = ids.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = storageOperations.entity.getBatch({\n PK: partitionKey,\n SK: sortKey\n });\n return collection;\n }, {});\n\n const items = await executeBatchGet(storageOperations, Object.values(batch));\n return ids.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n};\n\nconst getLatestRevisionByEntryId = (\n context: CmsContext,\n model: CmsContentModel,\n storageOperations: CmsContentEntryDynamo\n) => {\n return new DataLoader<string, CmsContentEntry>(async ids => {\n const sortKey = storageOperations.getSortKeyLatest();\n const batch = ids.reduce((collection, id) => {\n const partitionKey = storageOperations.getPartitionKey(id);\n if (collection[partitionKey]) {\n return collection;\n }\n collection[partitionKey] = storageOperations.entity.getBatch({\n PK: partitionKey,\n SK: sortKey\n });\n return collection;\n }, {});\n\n const items = await executeBatchGet(storageOperations, Object.values(batch));\n return ids.map(id => {\n return items.filter(item => {\n const partitionKey = storageOperations.getPartitionKey(id);\n return item.PK === partitionKey && item.SK === sortKey;\n });\n }) as any;\n });\n};\n\nconst dataLoaders = {\n getAllEntryRevisions,\n getRevisionById,\n getPublishedRevisionByEntryId,\n getLatestRevisionByEntryId\n};\n\nexport class DataLoadersHandler {\n private readonly _loaders: Map<string, DataLoader<any, any>> = new Map();\n private readonly _context: CmsContext;\n private readonly _storageOperations: CmsContentEntryDynamo;\n\n public constructor(context: CmsContext, storageOperations: CmsContentEntryDynamo) {\n this._context = context;\n this._storageOperations = storageOperations;\n }\n\n public async getAllEntryRevisions(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getAllEntryRevisions\", model, ids);\n }\n\n public clearAllEntryRevisions(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getAllEntryRevisions\", model, entry);\n }\n\n public async getRevisionById(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getRevisionById\", model, ids);\n }\n\n public clearRevisionById(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getRevisionById\", model, entry);\n }\n\n public async getPublishedRevisionByEntryId(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getPublishedRevisionByEntryId\", model, ids);\n }\n public clearPublishedRevisionByEntryId(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getPublishedRevisionByEntryId\", model, entry);\n }\n\n public async getLatestRevisionByEntryId(\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n return await this.loadMany(\"getLatestRevisionByEntryId\", model, ids);\n }\n\n public clearLatestRevisionByEntryId(model: CmsContentModel, entry?: CmsContentEntry): void {\n this.clear(\"getLatestRevisionByEntryId\", model, entry);\n }\n\n private getLoader(name: string, model: CmsContentModel): DataLoader<any, any> {\n if (!dataLoaders[name]) {\n throw new WebinyError(\"Unknown data loader.\", \"UNKNOWN_DATA_LOADER\", {\n name\n });\n }\n const loaderKey = `${name}-${model.modelId}`;\n if (!this._loaders.has(loaderKey)) {\n this._loaders.set(\n loaderKey,\n dataLoaders[name](this._context, model, this._storageOperations)\n );\n }\n return this._loaders.get(loaderKey);\n }\n\n private async loadMany(\n loader: string,\n model: CmsContentModel,\n ids: readonly string[]\n ): Promise<CmsContentEntry[]> {\n let results;\n try {\n results = await this.getLoader(loader, model).loadMany(ids);\n if (Array.isArray(results) === true) {\n return results.reduce((acc, res) => {\n if (Array.isArray(res) === false) {\n if (res?.message) {\n throw new WebinyError(res.message, res.code, {\n ...res,\n data: JSON.stringify(res.data || {})\n });\n }\n throw new WebinyError(\n \"Result from the data loader must be an array of arrays which contain requested items.\"\n );\n }\n acc.push(...res);\n return acc;\n }, []);\n }\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Data loader error.\",\n ex.code || \"DATA_LOADER_ERROR\",\n {\n loader,\n ids,\n model,\n data: ex.data || {}\n }\n );\n }\n throw new WebinyError(\n `Data loader did not return array of items or empty array.`,\n \"INVALID_DATA_LOADER_RESULT\",\n {\n loader,\n ids,\n results\n }\n );\n }\n /**\n * Helper to clear the cache for certain data loader.\n * If entry is passed then clear target key only.\n */\n private clear(name: string, model: CmsContentModel, entry?: CmsContentEntry): void {\n const loader = this.getLoader(name, model);\n if (!entry) {\n loader.clearAll();\n return;\n }\n loader.clear(entry.id);\n loader.clear(this._storageOperations.getPartitionKey(entry.id));\n }\n}\n"],"file":"dataLoaders.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/index.ts"],"names":["contentEntryStorageOperationsProvider","configuration","type","name","provide","context","CmsContentEntryDynamo"],"mappings":";;;;;;;AAAA;;AAGA,MAAMA,qCAAqC,GACvCC,aAD0C,KAEE;AAC5CC,EAAAA,IAAI,EAAE,+CADsC;AAE5CC,EAAAA,IAAI,EAAE,+CAFsC;AAG5CC,EAAAA,OAAO,EAAE,OAAO;AAAEC,IAAAA;AAAF,GAAP,KAAuB;AAC5B,WAAO,IAAIC,4CAAJ,CAA0B;AAC7BD,MAAAA,OAD6B;AAE7BJ,MAAAA;AAF6B,KAA1B,CAAP;AAIH;AAR2C,CAFF,CAA9C;;eAaeD,qC","sourcesContent":["import { CmsContentEntryDynamo, CmsContentEntryConfiguration } from \"./CmsContentEntryDynamo\";\nimport { CmsContentEntryStorageOperationsProvider } from \"@webiny/api-headless-cms/types\";\n\nconst contentEntryStorageOperationsProvider = (\n configuration?: CmsContentEntryConfiguration\n): CmsContentEntryStorageOperationsProvider => ({\n type: \"cms-content-entry-storage-operations-provider\",\n name: \"cms-content-entry-storage-operations-ddb-crud\",\n provide: async ({ context }) => {\n return new CmsContentEntryDynamo({\n context,\n configuration\n });\n }\n});\n\nexport default contentEntryStorageOperationsProvider;\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/systemFields.ts"],"names":["createSystemField","field","systemFields","id","type","fieldId","entryId","createdOn","savedOn","createdBy","settings","path","ownedBy"],"mappings":";;;;;;;AAEA,MAAMA,iBAAiB,GAAIC,KAAD,IAAgE;AACtF,SAAOA,KAAP;AACH,CAFD;;AAIO,MAAMC,YAAkD,GAAG;AAC9DC,EAAAA,EAAE,EAAEH,iBAAiB,CAAC;AAClBG,IAAAA,EAAE,EAAE,IADc;AAElBC,IAAAA,IAAI,EAAE,MAFY;AAGlBC,IAAAA,OAAO,EAAE;AAHS,GAAD,CADyC;AAM9DC,EAAAA,OAAO,EAAEN,iBAAiB,CAAC;AACvBG,IAAAA,EAAE,EAAE,SADmB;AAEvBC,IAAAA,IAAI,EAAE,MAFiB;AAGvBC,IAAAA,OAAO,EAAE;AAHc,GAAD,CANoC;AAW9DE,EAAAA,SAAS,EAAEP,iBAAiB,CAAC;AACzBG,IAAAA,EAAE,EAAE,WADqB;AAEzBC,IAAAA,IAAI,EAAE,UAFmB;AAGzBC,IAAAA,OAAO,EAAE;AAHgB,GAAD,CAXkC;AAgB9DG,EAAAA,OAAO,EAAER,iBAAiB,CAAC;AACvBG,IAAAA,EAAE,EAAE,SADmB;AAEvBC,IAAAA,IAAI,EAAE,UAFiB;AAGvBC,IAAAA,OAAO,EAAE;AAHc,GAAD,CAhBoC;AAqB9DI,EAAAA,SAAS,EAAET,iBAAiB,CAAC;AACzBG,IAAAA,EAAE,EAAE,WADqB;AAEzBC,IAAAA,IAAI,EAAE,aAFmB;AAGzBC,IAAAA,OAAO,EAAE,WAHgB;AAIzBK,IAAAA,QAAQ,EAAE;AACNC,MAAAA,IAAI,EAAE;AADA;AAJe,GAAD,CArBkC;AA6B9DC,EAAAA,OAAO,EAAEZ,iBAAiB,CAAC;AACvBG,IAAAA,EAAE,EAAE,SADmB;AAEvBC,IAAAA,IAAI,EAAE,aAFiB;AAGvBC,IAAAA,OAAO,EAAE,SAHc;AAIvBK,IAAAA,QAAQ,EAAE;AACNC,MAAAA,IAAI,EAAE;AADA;AAJa,GAAD;AA7BoC,CAA3D","sourcesContent":["import { CmsContentModelField } from \"@webiny/api-headless-cms/types\";\n\nconst createSystemField = (field: Partial<CmsContentModelField>): CmsContentModelField => {\n return field as CmsContentModelField;\n};\n\nexport const systemFields: Record<string, CmsContentModelField> = {\n id: createSystemField({\n id: \"id\",\n type: \"text\",\n fieldId: \"id\"\n }),\n entryId: createSystemField({\n id: \"entryId\",\n type: \"text\",\n fieldId: \"entryId\"\n }),\n createdOn: createSystemField({\n id: \"createdOn\",\n type: \"datetime\",\n fieldId: \"createdOn\"\n }),\n savedOn: createSystemField({\n id: \"savedOn\",\n type: \"datetime\",\n fieldId: \"savedOn\"\n }),\n createdBy: createSystemField({\n id: \"createdBy\",\n type: \"plainObject\",\n fieldId: \"createdBy\",\n settings: {\n path: \"createdBy.id\"\n }\n }),\n ownedBy: createSystemField({\n id: \"ownedBy\",\n type: \"plainObject\",\n fieldId: \"ownedBy\",\n settings: {\n path: \"ownedBy.id\"\n }\n })\n};\n"],"file":"systemFields.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/operations/entry/utils.ts"],"names":["VALUES_ATTRIBUTE","extractWhereArgs","key","result","split","fieldId","shift","rawOp","length","join","operation","negate","match","replace","transformValue","value","transform","Array","isArray","map","v","createFilters","args","where","plugins","fields","filterPlugins","getMappedPlugins","type","ValueFilterPlugin","property","transformValuePlugins","valuePathPlugins","Object","keys","field","WebinyError","transformValuePlugin","def","valuePathPlugin","targetValuePath","basePath","systemFields","createPath","valuePath","filterPlugin","transformValueCallable","path","compareValue","filterItems","items","filters","filter","item","dotProp","get","matched","matches","extractSort","sortBy","order","modelField","reverse","sortEntryItems","sort","push","firstSort","itemsToSort","id","valueTransformer","sortedItems","newItems","s","find","i","sortingBy","pluginsContainer","byType","reduce","collection","plugin","buildModelFields","model","values","isSystemField"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashSortBy from \"lodash.sortby\";\nimport dotProp from \"dot-prop\";\nimport {\n CmsContentEntry,\n CmsContentEntryListWhere,\n CmsContentModel,\n CmsContentModelField\n} from \"@webiny/api-headless-cms/types\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { CmsFieldFilterPathPlugin, CmsFieldFilterValueTransformPlugin } from \"~/types\";\nimport { systemFields } from \"./systemFields\";\nimport { ValueFilterPlugin } from \"@webiny/db-dynamodb/plugins/definitions/ValueFilterPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\n\ninterface ModelField {\n def: CmsContentModelField;\n valueTransformer: (value: any) => any;\n valuePath: string;\n isSystemField?: boolean;\n}\n\ntype ModelFieldRecords = Record<string, ModelField>;\n\ninterface CreateFiltersArgs {\n plugins: PluginsContainer;\n where: CmsContentEntryListWhere;\n fields: ModelFieldRecords;\n}\n\ninterface ItemFilter {\n fieldId: string;\n path: string;\n filterPlugin: ValueFilterPlugin;\n negate: boolean;\n compareValue: any;\n transformValue: <I = any, O = any>(value: I) => O;\n}\n\ninterface FilterItemsArgs {\n items: CmsContentEntry[];\n where: CmsContentEntryListWhere;\n plugins: PluginsContainer;\n fields: ModelFieldRecords;\n}\n\nconst VALUES_ATTRIBUTE = \"values\";\n\nconst extractWhereArgs = (key: string) => {\n const result = key.split(\"_\");\n const fieldId = result.shift();\n const rawOp = result.length === 0 ? \"eq\" : result.join(\"_\");\n /**\n * When rawOp is not, it means it is equal negated so just return that.\n */\n if (rawOp === \"not\") {\n return {\n fieldId,\n operation: \"eq\",\n negate: true\n };\n }\n const negate = rawOp.match(\"not_\") !== null;\n const operation = rawOp.replace(\"not_\", \"\");\n return { fieldId, operation, negate };\n};\n\nconst transformValue = (value: any, transform: (value: any) => any): any => {\n if (Array.isArray(value)) {\n return value.map(v => transform(v));\n }\n return transform(value);\n};\n\nconst createFilters = (args: CreateFiltersArgs): ItemFilter[] => {\n const { where, plugins, fields } = args;\n const filterPlugins = getMappedPlugins<ValueFilterPlugin>({\n plugins,\n type: ValueFilterPlugin.type,\n property: \"operation\"\n });\n const transformValuePlugins = getMappedPlugins<CmsFieldFilterValueTransformPlugin>({\n plugins,\n type: \"cms-field-filter-value-transform\",\n property: \"fieldType\"\n });\n const valuePathPlugins = getMappedPlugins<CmsFieldFilterPathPlugin>({\n plugins,\n type: \"cms-field-filter-path\",\n property: \"fieldType\"\n });\n return Object.keys(where).map(key => {\n const { fieldId, operation, negate } = extractWhereArgs(key);\n\n const field: ModelField = fields[fieldId];\n if (!field) {\n throw new WebinyError(\n `There is no field with the fieldId \"${fieldId}\".`,\n \"FIELD_ERROR\",\n {\n fieldId\n }\n );\n }\n\n const transformValuePlugin: CmsFieldFilterValueTransformPlugin =\n transformValuePlugins[field.def.type];\n const valuePathPlugin = valuePathPlugins[field.def.type];\n let targetValuePath: string;\n /**\n * add the base path if field is not a system field\n * pathPlugin should not know about that\n */\n const basePath = systemFields[fieldId] ? \"\" : `${VALUES_ATTRIBUTE}.`;\n if (valuePathPlugin) {\n targetValuePath = valuePathPlugin.createPath({\n field: field.def\n });\n } else if (systemFields[fieldId]) {\n targetValuePath = fieldId;\n } else {\n targetValuePath = field.def.fieldId;\n }\n\n const valuePath = `${basePath}${targetValuePath}`;\n\n const filterPlugin = filterPlugins[operation];\n if (!filterPlugin) {\n throw new WebinyError(\n `There is no filter plugin for operation \"${operation}\".`,\n \"FILTER_PLUGIN_ERROR\",\n {\n operation\n }\n );\n }\n\n const transformValueCallable = (value: any) => {\n if (!transformValuePlugin) {\n return value;\n }\n return transformValuePlugin.transform({\n field: field.def,\n value\n });\n };\n\n return {\n fieldId,\n path: valuePath,\n filterPlugin,\n negate,\n compareValue: transformValue(where[key], transformValueCallable),\n transformValue: transformValueCallable\n };\n });\n};\n\nexport const filterItems = (args: FilterItemsArgs): CmsContentEntry[] => {\n const { items, where, plugins, fields } = args;\n\n const filters = createFilters({\n plugins,\n where,\n fields\n });\n return items.filter(item => {\n for (const filter of filters) {\n const value = transformValue(dotProp.get(item, filter.path), filter.transformValue);\n const matched = filter.filterPlugin.matches({\n value,\n compareValue: filter.compareValue\n });\n if ((filter.negate ? !matched : matched) === false) {\n return false;\n }\n }\n return true;\n });\n};\n\nconst extractSort = (\n sortBy: string,\n fields: ModelFieldRecords\n): { valuePath: string; reverse: boolean; fieldId: string } => {\n const result = sortBy.split(\"_\");\n if (result.length !== 2) {\n throw new WebinyError(\n \"Problem in determining the sorting for the entry items.\",\n \"SORT_ERROR\",\n {\n sortBy\n }\n );\n }\n const [fieldId, order] = result;\n\n const modelField = fields[fieldId];\n\n if (!modelField) {\n throw new WebinyError(\n \"Sorting field does not exist in the content model.\",\n \"SORTING_FIELD_ERROR\",\n {\n fieldId,\n fields\n }\n );\n }\n const valuePath = modelField.valuePath;\n return {\n fieldId,\n valuePath,\n reverse: order === \"DESC\"\n };\n};\n\ninterface SortEntryItemsArgs {\n items: CmsContentEntry[];\n sort: string[];\n fields: ModelFieldRecords;\n}\n\nexport const sortEntryItems = (args: SortEntryItemsArgs): CmsContentEntry[] => {\n const { items, sort = [], fields } = args;\n if (items.length <= 1) {\n return items;\n } else if (sort.length === 0) {\n sort.push(\"savedOn_DESC\");\n } else if (sort.length > 1) {\n throw new WebinyError(\"Sorting is limited to a single field.\", \"SORT_ERROR\", {\n sort: sort\n });\n }\n const [firstSort] = sort;\n if (!firstSort) {\n throw new WebinyError(\"Empty sort array item.\", \"SORT_ERROR\", {\n sort\n });\n }\n\n const { fieldId, valuePath, reverse } = extractSort(firstSort, fields);\n const field = fields[fieldId];\n\n const itemsToSort = items.map(item => {\n return {\n id: item.id,\n value: field.valueTransformer(dotProp.get(item, valuePath))\n };\n });\n const sortedItems: { id: string; value: any }[] = lodashSortBy(itemsToSort, \"value\");\n const newItems = sortedItems.map(s => {\n const item = items.find(i => i.id === s.id);\n if (item) {\n return item;\n }\n throw new WebinyError(\n \"Could not find item by given id after the sorting.\",\n \"SORTING_ITEMS_ERROR\",\n {\n id: s.id,\n sortingBy: fieldId,\n reverse\n }\n );\n });\n if (!reverse) {\n return newItems;\n }\n return newItems.reverse();\n};\n\nconst getMappedPlugins = <T extends Plugin>(args: {\n plugins: PluginsContainer;\n type: string;\n property: string;\n}): Record<string, T> => {\n const { plugins: pluginsContainer, type, property } = args;\n const plugins = pluginsContainer.byType<T>(type);\n if (plugins.length === 0) {\n throw new WebinyError(`There are no plugins of type \"${type}\".`, \"PLUGINS_ERROR\", {\n type\n });\n }\n return plugins.reduce((collection, plugin) => {\n const key = plugin[property];\n if (typeof key !== \"string\") {\n throw new WebinyError(\n \"Property to map the plugins on must be a string.\",\n \"PLUGIN_PROPERTY_ERROR\",\n {\n type,\n property\n }\n );\n }\n collection[key] = plugin;\n return collection;\n }, {});\n};\n\nexport const buildModelFields = ({\n plugins,\n model\n}: {\n plugins: PluginsContainer;\n model: CmsContentModel;\n}) => {\n const transformValuePlugins = getMappedPlugins<CmsFieldFilterValueTransformPlugin>({\n plugins,\n type: \"cms-field-filter-value-transform\",\n property: \"fieldType\"\n });\n const valuePathPlugins = getMappedPlugins<CmsFieldFilterPathPlugin>({\n plugins,\n type: \"cms-field-filter-path\",\n property: \"fieldType\"\n });\n const fields: ModelFieldRecords = Object.values(systemFields).reduce((collection, field) => {\n const transformValuePlugin = transformValuePlugins[field.type];\n const valuePathPlugin = valuePathPlugins[field.type];\n let valuePath: string;\n if (valuePathPlugin) {\n valuePath = valuePathPlugin.createPath({\n field\n });\n }\n collection[field.fieldId] = {\n def: field,\n valueTransformer: (value: any) => {\n if (!transformValuePlugin) {\n return value;\n }\n return transformValuePlugin.transform({ field, value });\n },\n valuePath: valuePath || field.fieldId,\n isSystemField: true\n };\n\n return collection;\n }, {} as ModelFieldRecords);\n\n return model.fields.reduce((collection, field) => {\n const transformValuePlugin = transformValuePlugins[field.type];\n const valuePathPlugin = valuePathPlugins[field.type];\n let valuePath: string;\n if (valuePathPlugin) {\n valuePath = valuePathPlugin.createPath({\n field\n });\n }\n const targetValuePath = `${VALUES_ATTRIBUTE}.${valuePath || field.fieldId}`;\n collection[field.fieldId] = {\n def: field,\n valueTransformer: (value: any) => {\n if (!transformValuePlugin) {\n return value;\n }\n return transformValuePlugin.transform({ field, value });\n },\n valuePath: targetValuePath || field.fieldId\n };\n\n return collection;\n }, fields);\n};\n"],"file":"utils.js"}
@@ -1,5 +0,0 @@
1
- import { CmsContext } from "@webiny/api-headless-cms/types";
2
- import { DocumentClient } from "aws-sdk/clients/dynamodb";
3
- export declare const getDocumentClient: (context: CmsContext) => DocumentClient;
4
- export declare const getTable: (context: CmsContext) => string;
5
- export declare const whereFilterFactory: (where?: Record<string, any>) => (model: any) => boolean;
@@ -1,96 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.whereFilterFactory = exports.getTable = exports.getDocumentClient = void 0;
9
-
10
- var _error = _interopRequireDefault(require("@webiny/error"));
11
-
12
- const getDocumentClient = context => {
13
- const driver = context.db.driver;
14
-
15
- if (!driver || !driver.documentClient) {
16
- throw new _error.default(`Missing documentDriver on the context db.driver property.`, "DOCUMENT_CLIENT_ERROR");
17
- }
18
-
19
- return driver.documentClient;
20
- };
21
-
22
- exports.getDocumentClient = getDocumentClient;
23
-
24
- const getTable = context => {
25
- const db = context.db;
26
-
27
- if (!db) {
28
- throw new _error.default("Missing db on context.", "DB_ERROR");
29
- } else if (!db.table) {
30
- throw new _error.default("Missing table on context.db.", "TABLE_ERROR");
31
- }
32
-
33
- return db.table;
34
- };
35
-
36
- exports.getTable = getTable;
37
- const whereKeySuffix = ["_not", "_not_in", "_in", "_gt", "_gte", "_lt", "_lte", "_not_between", "_between"].join("|");
38
-
39
- const removeWhereKeySuffix = key => {
40
- return key.replace(new RegExp(`${whereKeySuffix}$`), "");
41
- };
42
-
43
- const compare = (key, compareValue, value) => {
44
- if (key.endsWith("_not")) {
45
- return String(value) !== compareValue;
46
- } else if (key.endsWith("_not_in")) {
47
- return !compareValue.includes(value);
48
- } else if (key.endsWith("_in")) {
49
- return compareValue.includes(value);
50
- } else if (key.endsWith("_gt")) {
51
- return value > compareValue;
52
- } else if (key.endsWith("_gte")) {
53
- return value >= compareValue;
54
- } else if (key.endsWith("_lt")) {
55
- return value < compareValue;
56
- } else if (key.endsWith("_lte")) {
57
- return value <= compareValue;
58
- } else if (key.endsWith("_not_between")) {
59
- if (!Array.isArray(compareValue) || compareValue.length === 0) {
60
- throw new _error.default(`Wrong compareValue for "${key}".`);
61
- }
62
-
63
- return value < compareValue[0] && value > compareValue[1];
64
- } else if (key.endsWith("_between")) {
65
- if (!Array.isArray(compareValue) || compareValue.length === 0) {
66
- throw new _error.default(`Wrong compareValue for "${key}".`);
67
- }
68
-
69
- return value >= compareValue[0] && value <= compareValue[1];
70
- }
71
-
72
- return compareValue === value;
73
- };
74
-
75
- const whereFilterFactory = (where = {}) => {
76
- return model => {
77
- if (!where) {
78
- return true;
79
- }
80
-
81
- for (const key in where) {
82
- if (where.hasOwnProperty(key) === false) {
83
- continue;
84
- }
85
-
86
- const whereValue = where[key];
87
- const value = model[removeWhereKeySuffix(key)];
88
- return compare(key, whereValue, value);
89
- }
90
-
91
- return true;
92
- };
93
- };
94
-
95
- exports.whereFilterFactory = whereFilterFactory;
96
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/operations/helpers.ts"],"names":["getDocumentClient","context","driver","db","documentClient","WebinyError","getTable","table","whereKeySuffix","join","removeWhereKeySuffix","key","replace","RegExp","compare","compareValue","value","endsWith","String","includes","Array","isArray","length","whereFilterFactory","where","model","hasOwnProperty","whereValue"],"mappings":";;;;;;;;;AAEA;;AAEO,MAAMA,iBAAiB,GAAIC,OAAD,IAAyC;AACtE,QAAMC,MAAM,GAAGD,OAAO,CAACE,EAAR,CAAWD,MAA1B;;AACA,MAAI,CAACA,MAAD,IAAW,CAACA,MAAM,CAACE,cAAvB,EAAuC;AACnC,UAAM,IAAIC,cAAJ,CACD,2DADC,EAEF,uBAFE,CAAN;AAIH;;AACD,SAAOH,MAAM,CAACE,cAAd;AACH,CATM;;;;AAWA,MAAME,QAAQ,GAAIL,OAAD,IAAiC;AACrD,QAAME,EAAE,GAAGF,OAAO,CAACE,EAAnB;;AACA,MAAI,CAACA,EAAL,EAAS;AACL,UAAM,IAAIE,cAAJ,CAAgB,wBAAhB,EAA0C,UAA1C,CAAN;AACH,GAFD,MAEO,IAAI,CAACF,EAAE,CAACI,KAAR,EAAe;AAClB,UAAM,IAAIF,cAAJ,CAAgB,8BAAhB,EAAgD,aAAhD,CAAN;AACH;;AACD,SAAOF,EAAE,CAACI,KAAV;AACH,CARM;;;AAUP,MAAMC,cAAc,GAAG,CACnB,MADmB,EAEnB,SAFmB,EAGnB,KAHmB,EAInB,KAJmB,EAKnB,MALmB,EAMnB,KANmB,EAOnB,MAPmB,EAQnB,cARmB,EASnB,UATmB,EAUrBC,IAVqB,CAUhB,GAVgB,CAAvB;;AAYA,MAAMC,oBAAoB,GAAIC,GAAD,IAAyB;AAClD,SAAOA,GAAG,CAACC,OAAJ,CAAY,IAAIC,MAAJ,CAAY,GAAEL,cAAe,GAA7B,CAAZ,EAA8C,EAA9C,CAAP;AACH,CAFD;;AAIA,MAAMM,OAAO,GAAG,CAACH,GAAD,EAAcI,YAAd,EAAiCC,KAAjC,KAAyD;AACrE,MAAIL,GAAG,CAACM,QAAJ,CAAa,MAAb,CAAJ,EAA0B;AACtB,WAAOC,MAAM,CAACF,KAAD,CAAN,KAAkBD,YAAzB;AACH,GAFD,MAEO,IAAIJ,GAAG,CAACM,QAAJ,CAAa,SAAb,CAAJ,EAA6B;AAChC,WAAO,CAACF,YAAY,CAACI,QAAb,CAAsBH,KAAtB,CAAR;AACH,GAFM,MAEA,IAAIL,GAAG,CAACM,QAAJ,CAAa,KAAb,CAAJ,EAAyB;AAC5B,WAAOF,YAAY,CAACI,QAAb,CAAsBH,KAAtB,CAAP;AACH,GAFM,MAEA,IAAIL,GAAG,CAACM,QAAJ,CAAa,KAAb,CAAJ,EAAyB;AAC5B,WAAOD,KAAK,GAAGD,YAAf;AACH,GAFM,MAEA,IAAIJ,GAAG,CAACM,QAAJ,CAAa,MAAb,CAAJ,EAA0B;AAC7B,WAAOD,KAAK,IAAID,YAAhB;AACH,GAFM,MAEA,IAAIJ,GAAG,CAACM,QAAJ,CAAa,KAAb,CAAJ,EAAyB;AAC5B,WAAOD,KAAK,GAAGD,YAAf;AACH,GAFM,MAEA,IAAIJ,GAAG,CAACM,QAAJ,CAAa,MAAb,CAAJ,EAA0B;AAC7B,WAAOD,KAAK,IAAID,YAAhB;AACH,GAFM,MAEA,IAAIJ,GAAG,CAACM,QAAJ,CAAa,cAAb,CAAJ,EAAkC;AACrC,QAAI,CAACG,KAAK,CAACC,OAAN,CAAcN,YAAd,CAAD,IAAgCA,YAAY,CAACO,MAAb,KAAwB,CAA5D,EAA+D;AAC3D,YAAM,IAAIjB,cAAJ,CAAiB,2BAA0BM,GAAI,IAA/C,CAAN;AACH;;AACD,WAAOK,KAAK,GAAGD,YAAY,CAAC,CAAD,CAApB,IAA2BC,KAAK,GAAGD,YAAY,CAAC,CAAD,CAAtD;AACH,GALM,MAKA,IAAIJ,GAAG,CAACM,QAAJ,CAAa,UAAb,CAAJ,EAA8B;AACjC,QAAI,CAACG,KAAK,CAACC,OAAN,CAAcN,YAAd,CAAD,IAAgCA,YAAY,CAACO,MAAb,KAAwB,CAA5D,EAA+D;AAC3D,YAAM,IAAIjB,cAAJ,CAAiB,2BAA0BM,GAAI,IAA/C,CAAN;AACH;;AACD,WAAOK,KAAK,IAAID,YAAY,CAAC,CAAD,CAArB,IAA4BC,KAAK,IAAID,YAAY,CAAC,CAAD,CAAxD;AACH;;AACD,SAAOA,YAAY,KAAKC,KAAxB;AACH,CA3BD;;AA6BO,MAAMO,kBAAkB,GAAG,CAACC,KAA0B,GAAG,EAA9B,KAAqC;AACnE,SAAOC,KAAK,IAAI;AACZ,QAAI,CAACD,KAAL,EAAY;AACR,aAAO,IAAP;AACH;;AACD,SAAK,MAAMb,GAAX,IAAkBa,KAAlB,EAAyB;AACrB,UAAIA,KAAK,CAACE,cAAN,CAAqBf,GAArB,MAA8B,KAAlC,EAAyC;AACrC;AACH;;AACD,YAAMgB,UAAU,GAAGH,KAAK,CAACb,GAAD,CAAxB;AACA,YAAMK,KAAK,GAAGS,KAAK,CAACf,oBAAoB,CAACC,GAAD,CAArB,CAAnB;AACA,aAAOG,OAAO,CAACH,GAAD,EAAMgB,UAAN,EAAkBX,KAAlB,CAAd;AACH;;AACD,WAAO,IAAP;AACH,GAbD;AAcH,CAfM","sourcesContent":["import { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport { DocumentClient } from \"aws-sdk/clients/dynamodb\";\nimport WebinyError from \"@webiny/error\";\n\nexport const getDocumentClient = (context: CmsContext): DocumentClient => {\n const driver = context.db.driver as any;\n if (!driver || !driver.documentClient) {\n throw new WebinyError(\n `Missing documentDriver on the context db.driver property.`,\n \"DOCUMENT_CLIENT_ERROR\"\n );\n }\n return driver.documentClient;\n};\n\nexport const getTable = (context: CmsContext): string => {\n const db = context.db as any;\n if (!db) {\n throw new WebinyError(\"Missing db on context.\", \"DB_ERROR\");\n } else if (!db.table) {\n throw new WebinyError(\"Missing table on context.db.\", \"TABLE_ERROR\");\n }\n return db.table;\n};\n\nconst whereKeySuffix = [\n \"_not\",\n \"_not_in\",\n \"_in\",\n \"_gt\",\n \"_gte\",\n \"_lt\",\n \"_lte\",\n \"_not_between\",\n \"_between\"\n].join(\"|\");\n\nconst removeWhereKeySuffix = (key: string): string => {\n return key.replace(new RegExp(`${whereKeySuffix}$`), \"\");\n};\n\nconst compare = (key: string, compareValue: any, value: any): boolean => {\n if (key.endsWith(\"_not\")) {\n return String(value) !== compareValue;\n } else if (key.endsWith(\"_not_in\")) {\n return !compareValue.includes(value);\n } else if (key.endsWith(\"_in\")) {\n return compareValue.includes(value);\n } else if (key.endsWith(\"_gt\")) {\n return value > compareValue;\n } else if (key.endsWith(\"_gte\")) {\n return value >= compareValue;\n } else if (key.endsWith(\"_lt\")) {\n return value < compareValue;\n } else if (key.endsWith(\"_lte\")) {\n return value <= compareValue;\n } else if (key.endsWith(\"_not_between\")) {\n if (!Array.isArray(compareValue) || compareValue.length === 0) {\n throw new WebinyError(`Wrong compareValue for \"${key}\".`);\n }\n return value < compareValue[0] && value > compareValue[1];\n } else if (key.endsWith(\"_between\")) {\n if (!Array.isArray(compareValue) || compareValue.length === 0) {\n throw new WebinyError(`Wrong compareValue for \"${key}\".`);\n }\n return value >= compareValue[0] && value <= compareValue[1];\n }\n return compareValue === value;\n};\n\nexport const whereFilterFactory = (where: Record<string, any> = {}) => {\n return model => {\n if (!where) {\n return true;\n }\n for (const key in where) {\n if (where.hasOwnProperty(key) === false) {\n continue;\n }\n const whereValue = where[key];\n const value = model[removeWhereKeySuffix(key)];\n return compare(key, whereValue, value);\n }\n return true;\n };\n};\n"],"file":"helpers.js"}
@@ -1,18 +0,0 @@
1
- import { CmsContentModel, CmsContentModelStorageOperations, CmsContentModelStorageOperationsCreateArgs, CmsContentModelStorageOperationsDeleteArgs, CmsContentModelStorageOperationsGetArgs, CmsContentModelStorageOperationsUpdateArgs, CmsContext } from "@webiny/api-headless-cms/types";
2
- interface ConstructorArgs {
3
- context: CmsContext;
4
- }
5
- export default class CmsContentModelDynamo implements CmsContentModelStorageOperations {
6
- private readonly _context;
7
- private readonly _table;
8
- private readonly _entity;
9
- private get context();
10
- private get partitionKey();
11
- constructor(args: ConstructorArgs);
12
- create(args: CmsContentModelStorageOperationsCreateArgs): Promise<CmsContentModel>;
13
- delete(args: CmsContentModelStorageOperationsDeleteArgs): Promise<boolean>;
14
- get(args: CmsContentModelStorageOperationsGetArgs): Promise<CmsContentModel | null>;
15
- list(): Promise<CmsContentModel[]>;
16
- update(args: CmsContentModelStorageOperationsUpdateArgs): Promise<CmsContentModel>;
17
- }
18
- export {};
@@ -1,234 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _error = _interopRequireDefault(require("@webiny/error"));
13
-
14
- var _configurations = _interopRequireDefault(require("../../configurations"));
15
-
16
- var _utils = require("../../utils");
17
-
18
- var _dynamodbToolbox = require("dynamodb-toolbox");
19
-
20
- var _helpers = require("../helpers");
21
-
22
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
23
-
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
-
26
- /**
27
- * In some cases there are no layout, lockedFields or fields arrays when they are empty.
28
- * Probably due to some remove empty arrays feature in the ddb lib.
29
- * We need to ensure that there is always, at least, an empty array on those properties.
30
- */
31
- const ensureEmptyArraysExist = model => {
32
- return _objectSpread(_objectSpread({}, model), {}, {
33
- fields: model.fields || [],
34
- layout: model.layout || [],
35
- lockedFields: model.lockedFields || []
36
- });
37
- };
38
-
39
- class CmsContentModelDynamo {
40
- get context() {
41
- return this._context;
42
- }
43
-
44
- get partitionKey() {
45
- return `${(0, _utils.createBasePartitionKey)(this.context)}#CM`;
46
- }
47
-
48
- constructor(args) {
49
- (0, _defineProperty2.default)(this, "_context", void 0);
50
- (0, _defineProperty2.default)(this, "_table", void 0);
51
- (0, _defineProperty2.default)(this, "_entity", void 0);
52
- const {
53
- context
54
- } = args;
55
- this._context = context;
56
- this._table = new _dynamodbToolbox.Table({
57
- name: _configurations.default.db().table || (0, _helpers.getTable)(context),
58
- partitionKey: "PK",
59
- sortKey: "SK",
60
- DocumentClient: (0, _helpers.getDocumentClient)(context)
61
- });
62
- this._entity = new _dynamodbToolbox.Entity({
63
- name: "ContentModel",
64
- table: this._table,
65
- attributes: {
66
- PK: {
67
- partitionKey: true
68
- },
69
- SK: {
70
- sortKey: true
71
- },
72
- TYPE: {
73
- type: "string"
74
- },
75
- webinyVersion: {
76
- type: "string"
77
- },
78
- name: {
79
- type: "string"
80
- },
81
- modelId: {
82
- type: "string"
83
- },
84
- locale: {
85
- type: "string"
86
- },
87
- group: {
88
- type: "map"
89
- },
90
- description: {
91
- type: "string"
92
- },
93
- createdOn: {
94
- type: "string"
95
- },
96
- savedOn: {
97
- type: "string"
98
- },
99
- createdBy: {
100
- type: "map"
101
- },
102
- fields: {
103
- type: "list"
104
- },
105
- layout: {
106
- type: "list"
107
- },
108
- lockedFields: {
109
- type: "list"
110
- },
111
- titleFieldId: {
112
- type: "string"
113
- }
114
- }
115
- });
116
- }
117
-
118
- async create(args) {
119
- const {
120
- data
121
- } = args;
122
-
123
- try {
124
- await this._entity.put(_objectSpread({
125
- PK: this.partitionKey,
126
- SK: data.modelId,
127
- TYPE: "cms.model",
128
- webinyVersion: this.context.WEBINY_VERSION
129
- }, data));
130
- return data;
131
- } catch (ex) {
132
- throw new _error.default(ex.message || `Could not create content model`, ex.code || "CREATE_CONTENT_MODEL_ERROR", {
133
- data
134
- });
135
- }
136
- }
137
-
138
- async delete(args) {
139
- const {
140
- model
141
- } = args;
142
-
143
- try {
144
- await this._entity.delete({
145
- PK: this.partitionKey,
146
- SK: model.modelId
147
- });
148
- } catch (ex) {
149
- throw new _error.default("Could not delete content model.", "DELETE_CONTENT_MODEL_ERROR", {
150
- model
151
- });
152
- }
153
-
154
- return true;
155
- }
156
-
157
- async get(args) {
158
- const {
159
- id
160
- } = args;
161
-
162
- try {
163
- const result = await this._entity.get({
164
- PK: this.partitionKey,
165
- SK: id
166
- });
167
-
168
- if (!result) {
169
- throw new _error.default("Could not get content model - no result.", "GET_CONTENT_MODEL_ERROR", {
170
- PK: this.partitionKey,
171
- SK: id
172
- });
173
- } else if (!result.Item) {
174
- return null;
175
- }
176
-
177
- return ensureEmptyArraysExist(result.Item);
178
- } catch (ex) {
179
- throw new _error.default("Could not get content model.", "GET_CONTENT_MODEL_ERROR", _objectSpread(_objectSpread({}, ex.data), {}, {
180
- PK: this.partitionKey,
181
- SK: id
182
- }));
183
- }
184
- }
185
-
186
- async list() {
187
- try {
188
- const result = await this._entity.query(this.partitionKey, {}, {});
189
-
190
- if (!result || !Array.isArray(result.Items)) {
191
- throw new _error.default("Could not list content models - not an array.", "LIST_CONTENT_MODELS_ERROR", {});
192
- }
193
-
194
- const items = result.Items;
195
- return items.map(ensureEmptyArraysExist);
196
- } catch (ex) {
197
- throw new _error.default("Could not list content model groups.", "LIST_CONTENT_MODELS_ERROR");
198
- }
199
- }
200
-
201
- async update(args) {
202
- const {
203
- model,
204
- data
205
- } = args;
206
-
207
- const dbData = _objectSpread(_objectSpread({
208
- PK: this.partitionKey,
209
- SK: model.modelId,
210
- TYPE: "cms.group"
211
- }, data), {}, {
212
- webinyVersion: this.context.WEBINY_VERSION
213
- });
214
-
215
- try {
216
- const result = await this._entity.update(dbData);
217
-
218
- if (!result) {
219
- throw new _error.default("Could not create the content model - no result.", "CREATE_CONTENT_MODEL_ERROR");
220
- }
221
-
222
- return _objectSpread(_objectSpread({}, model), data);
223
- } catch (ex) {
224
- throw new _error.default(ex.message || "Could not create content model.", ex.code || "CREATE_CONTENT_MODEL_ERROR", {
225
- error: ex,
226
- data: dbData
227
- });
228
- }
229
- }
230
-
231
- }
232
-
233
- exports.default = CmsContentModelDynamo;
234
- //# sourceMappingURL=CmsContentModelDynamo.js.map