@webiny/api-headless-cms-ddb 6.4.5 → 6.6.0-alpha.0

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 (228) hide show
  1. package/abstractions/CmsDdbDataLoaders.d.ts +5 -0
  2. package/abstractions/CmsDdbDataLoaders.js +5 -0
  3. package/abstractions/CmsDdbDataLoaders.js.map +1 -0
  4. package/abstractions/CmsDdbEntryEntity.d.ts +5 -0
  5. package/abstractions/CmsDdbEntryEntity.js +5 -0
  6. package/abstractions/CmsDdbEntryEntity.js.map +1 -0
  7. package/abstractions/CmsDdbGroupEntity.d.ts +5 -0
  8. package/abstractions/CmsDdbGroupEntity.js +5 -0
  9. package/abstractions/CmsDdbGroupEntity.js.map +1 -0
  10. package/abstractions/CmsDdbModelEntity.d.ts +5 -0
  11. package/abstractions/CmsDdbModelEntity.js +5 -0
  12. package/abstractions/CmsDdbModelEntity.js.map +1 -0
  13. package/abstractions/CmsDdbTable.d.ts +5 -0
  14. package/abstractions/CmsDdbTable.js +5 -0
  15. package/abstractions/CmsDdbTable.js.map +1 -0
  16. package/index.d.ts +13 -2
  17. package/index.js +31 -71
  18. package/index.js.map +1 -1
  19. package/operations/entry/DdbCreateEntry.d.ts +16 -0
  20. package/operations/entry/DdbCreateEntry.js +77 -0
  21. package/operations/entry/DdbCreateEntry.js.map +1 -0
  22. package/operations/entry/DdbCreateEntryRevisionFrom.d.ts +16 -0
  23. package/operations/entry/DdbCreateEntryRevisionFrom.js +85 -0
  24. package/operations/entry/DdbCreateEntryRevisionFrom.js.map +1 -0
  25. package/operations/entry/DdbDeleteEntry.d.ts +16 -0
  26. package/operations/entry/DdbDeleteEntry.js +65 -0
  27. package/operations/entry/DdbDeleteEntry.js.map +1 -0
  28. package/operations/entry/DdbDeleteEntryRevision.d.ts +17 -0
  29. package/operations/entry/DdbDeleteEntryRevision.js +91 -0
  30. package/operations/entry/DdbDeleteEntryRevision.js.map +1 -0
  31. package/operations/entry/DdbDeleteMultipleEntries.d.ts +16 -0
  32. package/operations/entry/DdbDeleteMultipleEntries.js +56 -0
  33. package/operations/entry/DdbDeleteMultipleEntries.js.map +1 -0
  34. package/operations/entry/DdbGetEntriesByIds.d.ts +14 -0
  35. package/operations/entry/DdbGetEntriesByIds.js +31 -0
  36. package/operations/entry/DdbGetEntriesByIds.js.map +1 -0
  37. package/operations/entry/DdbGetEntry.d.ts +14 -0
  38. package/operations/entry/DdbGetEntry.js +27 -0
  39. package/operations/entry/DdbGetEntry.js.map +1 -0
  40. package/operations/entry/DdbGetLatestEntriesByIds.d.ts +14 -0
  41. package/operations/entry/DdbGetLatestEntriesByIds.js +31 -0
  42. package/operations/entry/DdbGetLatestEntriesByIds.js.map +1 -0
  43. package/operations/entry/DdbGetLatestRevisionByEntryId.d.ts +14 -0
  44. package/operations/entry/DdbGetLatestRevisionByEntryId.js +35 -0
  45. package/operations/entry/DdbGetLatestRevisionByEntryId.js.map +1 -0
  46. package/operations/entry/DdbGetPreviousRevision.d.ts +14 -0
  47. package/operations/entry/DdbGetPreviousRevision.js +53 -0
  48. package/operations/entry/DdbGetPreviousRevision.js.map +1 -0
  49. package/operations/entry/DdbGetPublishedEntriesByIds.d.ts +14 -0
  50. package/operations/entry/DdbGetPublishedEntriesByIds.js +31 -0
  51. package/operations/entry/DdbGetPublishedEntriesByIds.js.map +1 -0
  52. package/operations/entry/DdbGetPublishedRevisionByEntryId.d.ts +14 -0
  53. package/operations/entry/DdbGetPublishedRevisionByEntryId.js +35 -0
  54. package/operations/entry/DdbGetPublishedRevisionByEntryId.js.map +1 -0
  55. package/operations/entry/DdbGetRevisionById.d.ts +14 -0
  56. package/operations/entry/DdbGetRevisionById.js +34 -0
  57. package/operations/entry/DdbGetRevisionById.js.map +1 -0
  58. package/operations/entry/DdbGetRevisions.d.ts +14 -0
  59. package/operations/entry/DdbGetRevisions.js +33 -0
  60. package/operations/entry/DdbGetRevisions.js.map +1 -0
  61. package/operations/entry/DdbGetUniqueFieldValues.d.ts +12 -0
  62. package/operations/entry/DdbGetUniqueFieldValues.js +31 -0
  63. package/operations/entry/DdbGetUniqueFieldValues.js.map +1 -0
  64. package/operations/entry/DdbListEntries.d.ts +28 -0
  65. package/operations/entry/DdbListEntries.js +124 -0
  66. package/operations/entry/DdbListEntries.js.map +1 -0
  67. package/operations/entry/DdbMoveEntry.d.ts +14 -0
  68. package/operations/entry/DdbMoveEntry.js +57 -0
  69. package/operations/entry/DdbMoveEntry.js.map +1 -0
  70. package/operations/entry/DdbMoveToBin.d.ts +16 -0
  71. package/operations/entry/DdbMoveToBin.js +77 -0
  72. package/operations/entry/DdbMoveToBin.js.map +1 -0
  73. package/operations/entry/DdbPublishEntry.d.ts +18 -0
  74. package/operations/entry/DdbPublishEntry.js +161 -0
  75. package/operations/entry/DdbPublishEntry.js.map +1 -0
  76. package/operations/entry/DdbRestoreFromBin.d.ts +16 -0
  77. package/operations/entry/DdbRestoreFromBin.js +78 -0
  78. package/operations/entry/DdbRestoreFromBin.js.map +1 -0
  79. package/operations/entry/DdbUnpublishEntry.d.ts +17 -0
  80. package/operations/entry/DdbUnpublishEntry.js +112 -0
  81. package/operations/entry/DdbUnpublishEntry.js.map +1 -0
  82. package/operations/entry/DdbUpdateEntry.d.ts +17 -0
  83. package/operations/entry/DdbUpdateEntry.js +110 -0
  84. package/operations/entry/DdbUpdateEntry.js.map +1 -0
  85. package/operations/entry/dataLoaders.d.ts +7 -6
  86. package/operations/entry/dataLoaders.js +11 -3
  87. package/operations/entry/dataLoaders.js.map +1 -1
  88. package/operations/entry/feature.d.ts +4 -0
  89. package/operations/entry/feature.js +55 -0
  90. package/operations/entry/feature.js.map +1 -0
  91. package/operations/entry/storageEntryUtils.d.ts +8 -0
  92. package/operations/entry/storageEntryUtils.js +25 -0
  93. package/operations/entry/storageEntryUtils.js.map +1 -0
  94. package/operations/group/DdbCreateGroup.d.ts +12 -0
  95. package/operations/group/DdbCreateGroup.js +35 -0
  96. package/operations/group/DdbCreateGroup.js.map +1 -0
  97. package/operations/group/DdbDeleteGroup.d.ts +12 -0
  98. package/operations/group/DdbDeleteGroup.js +31 -0
  99. package/operations/group/DdbDeleteGroup.js.map +1 -0
  100. package/operations/group/DdbGetGroup.d.ts +12 -0
  101. package/operations/group/DdbGetGroup.js +31 -0
  102. package/operations/group/DdbGetGroup.js.map +1 -0
  103. package/operations/group/DdbListGroups.d.ts +14 -0
  104. package/operations/group/DdbListGroups.js +52 -0
  105. package/operations/group/DdbListGroups.js.map +1 -0
  106. package/operations/group/DdbUpdateGroup.d.ts +12 -0
  107. package/operations/group/DdbUpdateGroup.js +35 -0
  108. package/operations/group/DdbUpdateGroup.js.map +1 -0
  109. package/operations/group/feature.d.ts +4 -0
  110. package/operations/group/feature.js +19 -0
  111. package/operations/group/feature.js.map +1 -0
  112. package/operations/group/keys.d.ts +15 -0
  113. package/operations/group/keys.js +17 -0
  114. package/operations/group/keys.js.map +1 -0
  115. package/operations/model/DdbCreateModel.d.ts +12 -0
  116. package/operations/model/DdbCreateModel.js +37 -0
  117. package/operations/model/DdbCreateModel.js.map +1 -0
  118. package/operations/model/DdbDeleteModel.d.ts +12 -0
  119. package/operations/model/DdbDeleteModel.js +31 -0
  120. package/operations/model/DdbDeleteModel.js.map +1 -0
  121. package/operations/model/DdbGetModel.d.ts +12 -0
  122. package/operations/model/DdbGetModel.js +30 -0
  123. package/operations/model/DdbGetModel.js.map +1 -0
  124. package/operations/model/DdbListModels.d.ts +12 -0
  125. package/operations/model/DdbListModels.js +36 -0
  126. package/operations/model/DdbListModels.js.map +1 -0
  127. package/operations/model/DdbUpdateModel.d.ts +12 -0
  128. package/operations/model/DdbUpdateModel.js +36 -0
  129. package/operations/model/DdbUpdateModel.js.map +1 -0
  130. package/operations/model/feature.d.ts +4 -0
  131. package/operations/model/feature.js +19 -0
  132. package/operations/model/feature.js.map +1 -0
  133. package/operations/model/keys.d.ts +15 -0
  134. package/operations/model/keys.js +16 -0
  135. package/operations/model/keys.js.map +1 -0
  136. package/package.json +15 -17
  137. package/types.d.ts +9 -49
  138. package/types.js.map +1 -1
  139. package/dynamoDb/index.d.ts +0 -2
  140. package/dynamoDb/index.js +0 -11
  141. package/dynamoDb/index.js.map +0 -1
  142. package/dynamoDb/path/locationFolderId.d.ts +0 -2
  143. package/dynamoDb/path/locationFolderId.js +0 -21
  144. package/dynamoDb/path/locationFolderId.js.map +0 -1
  145. package/dynamoDb/path/plainObject.d.ts +0 -2
  146. package/dynamoDb/path/plainObject.js +0 -16
  147. package/dynamoDb/path/plainObject.js.map +0 -1
  148. package/dynamoDb/transformValue/datetime.d.ts +0 -5
  149. package/dynamoDb/transformValue/datetime.js +0 -29
  150. package/dynamoDb/transformValue/datetime.js.map +0 -1
  151. package/operations/entry/filtering/createExpressions.d.ts +0 -27
  152. package/operations/entry/filtering/createExpressions.js +0 -124
  153. package/operations/entry/filtering/createExpressions.js.map +0 -1
  154. package/operations/entry/filtering/createFields.d.ts +0 -16
  155. package/operations/entry/filtering/createFields.js +0 -93
  156. package/operations/entry/filtering/createFields.js.map +0 -1
  157. package/operations/entry/filtering/extractSort.d.ts +0 -17
  158. package/operations/entry/filtering/extractSort.js +0 -60
  159. package/operations/entry/filtering/extractSort.js.map +0 -1
  160. package/operations/entry/filtering/filter.d.ts +0 -16
  161. package/operations/entry/filtering/filter.js +0 -85
  162. package/operations/entry/filtering/filter.js.map +0 -1
  163. package/operations/entry/filtering/fullTextSearch.d.ts +0 -14
  164. package/operations/entry/filtering/fullTextSearch.js +0 -25
  165. package/operations/entry/filtering/fullTextSearch.js.map +0 -1
  166. package/operations/entry/filtering/getValue.d.ts +0 -5
  167. package/operations/entry/filtering/getValue.js +0 -37
  168. package/operations/entry/filtering/getValue.js.map +0 -1
  169. package/operations/entry/filtering/index.d.ts +0 -2
  170. package/operations/entry/filtering/index.js +0 -2
  171. package/operations/entry/filtering/mapPlugins.d.ts +0 -8
  172. package/operations/entry/filtering/mapPlugins.js +0 -18
  173. package/operations/entry/filtering/mapPlugins.js.map +0 -1
  174. package/operations/entry/filtering/plugins/defaultFilterCreate.d.ts +0 -2
  175. package/operations/entry/filtering/plugins/defaultFilterCreate.js +0 -33
  176. package/operations/entry/filtering/plugins/defaultFilterCreate.js.map +0 -1
  177. package/operations/entry/filtering/plugins/index.d.ts +0 -1
  178. package/operations/entry/filtering/plugins/index.js +0 -13
  179. package/operations/entry/filtering/plugins/index.js.map +0 -1
  180. package/operations/entry/filtering/plugins/objectFilterCreate.d.ts +0 -2
  181. package/operations/entry/filtering/plugins/objectFilterCreate.js +0 -68
  182. package/operations/entry/filtering/plugins/objectFilterCreate.js.map +0 -1
  183. package/operations/entry/filtering/plugins/refFilterCreate.d.ts +0 -3
  184. package/operations/entry/filtering/plugins/refFilterCreate.js +0 -63
  185. package/operations/entry/filtering/plugins/refFilterCreate.js.map +0 -1
  186. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.d.ts +0 -2
  187. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.js +0 -56
  188. package/operations/entry/filtering/plugins/searchableJsonFilterCreate.js.map +0 -1
  189. package/operations/entry/filtering/sort.d.ts +0 -12
  190. package/operations/entry/filtering/sort.js +0 -41
  191. package/operations/entry/filtering/sort.js.map +0 -1
  192. package/operations/entry/filtering/systemFields.d.ts +0 -2
  193. package/operations/entry/filtering/systemFields.js +0 -149
  194. package/operations/entry/filtering/systemFields.js.map +0 -1
  195. package/operations/entry/filtering/transform.d.ts +0 -6
  196. package/operations/entry/filtering/transform.js +0 -7
  197. package/operations/entry/filtering/transform.js.map +0 -1
  198. package/operations/entry/filtering/types.d.ts +0 -40
  199. package/operations/entry/filtering/types.js +0 -0
  200. package/operations/entry/filtering/values.d.ts +0 -2
  201. package/operations/entry/filtering/values.js +0 -15
  202. package/operations/entry/filtering/values.js.map +0 -1
  203. package/operations/entry/filtering/where.d.ts +0 -5
  204. package/operations/entry/filtering/where.js +0 -22
  205. package/operations/entry/filtering/where.js.map +0 -1
  206. package/operations/entry/index.d.ts +0 -9
  207. package/operations/entry/index.js +0 -943
  208. package/operations/entry/index.js.map +0 -1
  209. package/operations/group/index.d.ts +0 -8
  210. package/operations/group/index.js +0 -121
  211. package/operations/group/index.js.map +0 -1
  212. package/operations/model/index.d.ts +0 -7
  213. package/operations/model/index.js +0 -106
  214. package/operations/model/index.js.map +0 -1
  215. package/plugins/CmsEntryFieldFilterPathPlugin.d.ts +0 -23
  216. package/plugins/CmsEntryFieldFilterPathPlugin.js +0 -30
  217. package/plugins/CmsEntryFieldFilterPathPlugin.js.map +0 -1
  218. package/plugins/CmsEntryFieldFilterPlugin.d.ts +0 -43
  219. package/plugins/CmsEntryFieldFilterPlugin.js +0 -20
  220. package/plugins/CmsEntryFieldFilterPlugin.js.map +0 -1
  221. package/plugins/CmsEntryFieldSortingPlugin.d.ts +0 -42
  222. package/plugins/CmsEntryFieldSortingPlugin.js +0 -20
  223. package/plugins/CmsEntryFieldSortingPlugin.js.map +0 -1
  224. package/plugins/CmsFieldFilterValueTransformPlugin.d.ts +0 -11
  225. package/plugins/CmsFieldFilterValueTransformPlugin.js +0 -19
  226. package/plugins/CmsFieldFilterValueTransformPlugin.js.map +0 -1
  227. package/plugins/index.d.ts +0 -4
  228. package/plugins/index.js +0 -4
@@ -1,943 +0,0 @@
1
- import error from "@webiny/error";
2
- import { DataLoadersHandler } from "./dataLoaders.js";
3
- import { CONTENT_ENTRY_STATUS } from "@webiny/api-headless-cms/types/index.js";
4
- import { createEntryLatestKeys, createEntryPublishedKeys, createEntryRevisionKeys, createGSIPartitionKey, createPartitionKey, createPublishedSortKey, createRevisionSortKey } from "./keys.js";
5
- import { decodeCursor, encodeCursor } from "@webiny/utils";
6
- import { StorageOperationsCmsModelPlugin } from "@webiny/api-headless-cms";
7
- import { createFields } from "./filtering/createFields.js";
8
- import { filter, sort } from "./filtering/index.js";
9
- import { isDeletedEntryMetaField, isEntryLevelEntryMetaField, isRestoredEntryMetaField, pickEntryMetaFields } from "@webiny/api-headless-cms/constants.js";
10
- import { getBaseFieldType } from "@webiny/api-headless-cms/utils/getBaseFieldType.js";
11
- import { StorageTransformRegistry } from "@webiny/api-headless-cms/exports/api/cms/storage.js";
12
- const convertToStorageEntry = (params)=>{
13
- const { model, storageEntry } = params;
14
- const values = model.convertValueKeyToStorage({
15
- fields: model.fields,
16
- values: storageEntry.values
17
- });
18
- return {
19
- ...storageEntry,
20
- values
21
- };
22
- };
23
- const convertFromStorageEntry = (params)=>{
24
- const { model, storageEntry } = params;
25
- const values = model.convertValueKeyFromStorage({
26
- fields: model.fields,
27
- values: storageEntry.values
28
- });
29
- return {
30
- ...storageEntry,
31
- values
32
- };
33
- };
34
- const MAX_LIST_LIMIT = 1000000;
35
- const createEntriesStorageOperations = (params)=>{
36
- const { entity, container, plugins } = params;
37
- const storageTransformRegistry = container.resolve(StorageTransformRegistry);
38
- let storageOperationsCmsModelPlugin;
39
- const getStorageOperationsCmsModelPlugin = ()=>{
40
- if (storageOperationsCmsModelPlugin) return storageOperationsCmsModelPlugin;
41
- storageOperationsCmsModelPlugin = plugins.oneByType(StorageOperationsCmsModelPlugin.type);
42
- return storageOperationsCmsModelPlugin;
43
- };
44
- const getStorageOperationsModel = (model)=>{
45
- const plugin = getStorageOperationsCmsModelPlugin();
46
- return plugin.getModel(model);
47
- };
48
- const dataLoaders = new DataLoadersHandler({
49
- entity
50
- });
51
- const createStorageTransformCallable = (model)=>(field, value)=>{
52
- const fieldType = getBaseFieldType(field);
53
- const storageTransform = storageTransformRegistry.get(fieldType);
54
- if (!storageTransform) return value;
55
- return storageTransform.fromStorage({
56
- model,
57
- field,
58
- value,
59
- getStorageTransform (fieldType) {
60
- return storageTransformRegistry.get(fieldType) || storageTransformRegistry.get("*");
61
- }
62
- });
63
- };
64
- const create = async (initialModel, params)=>{
65
- const { entry, storageEntry: initialStorageEntry } = params;
66
- const model = getStorageOperationsModel(initialModel);
67
- const isPublished = "published" === entry.status;
68
- const locked = isPublished ? true : entry.locked;
69
- const storageEntry = convertToStorageEntry({
70
- model,
71
- storageEntry: initialStorageEntry
72
- });
73
- const storageEntryRevisionKeys = createEntryRevisionKeys(entry);
74
- const storageEntryLatestKeys = createEntryLatestKeys(entry);
75
- const entityBatch = entity.createEntityWriter({
76
- put: [
77
- {
78
- ...storageEntryRevisionKeys,
79
- data: {
80
- ...storageEntry,
81
- locked
82
- }
83
- },
84
- {
85
- ...storageEntryLatestKeys,
86
- data: {
87
- ...storageEntry,
88
- locked
89
- }
90
- }
91
- ]
92
- });
93
- if (isPublished) {
94
- const storageEntryPublishedKeys = createEntryPublishedKeys(storageEntry);
95
- entityBatch.put({
96
- ...storageEntryPublishedKeys,
97
- data: {
98
- ...storageEntry,
99
- locked
100
- }
101
- });
102
- }
103
- try {
104
- await entityBatch.execute();
105
- dataLoaders.clearAll({
106
- tenant: entry.tenant
107
- });
108
- } catch (ex) {
109
- throw new error(ex.message || "Could not insert data into the DynamoDB.", ex.code || "CREATE_ENTRY_ERROR", {
110
- error: ex,
111
- entry
112
- });
113
- }
114
- return initialStorageEntry;
115
- };
116
- const createRevisionFrom = async (initialModel, params)=>{
117
- const { entry, storageEntry: initialStorageEntry } = params;
118
- const model = getStorageOperationsModel(initialModel);
119
- const storageEntry = convertToStorageEntry({
120
- storageEntry: initialStorageEntry,
121
- model
122
- });
123
- const entityBatch = entity.createEntityWriter({
124
- put: [
125
- {
126
- ...createEntryRevisionKeys(storageEntry),
127
- data: {
128
- ...storageEntry
129
- }
130
- },
131
- {
132
- ...createEntryLatestKeys(storageEntry),
133
- data: {
134
- ...storageEntry
135
- }
136
- }
137
- ]
138
- });
139
- const isPublished = "published" === entry.status;
140
- if (isPublished) {
141
- entityBatch.put({
142
- ...createEntryPublishedKeys(storageEntry),
143
- data: {
144
- ...storageEntry
145
- }
146
- });
147
- const [publishedRevisionStorageEntry] = await dataLoaders.getPublishedRevisionByEntryId({
148
- model,
149
- ids: [
150
- entry.id
151
- ]
152
- });
153
- if (publishedRevisionStorageEntry) entityBatch.put({
154
- ...createEntryRevisionKeys(publishedRevisionStorageEntry),
155
- data: {
156
- ...publishedRevisionStorageEntry,
157
- status: CONTENT_ENTRY_STATUS.UNPUBLISHED
158
- }
159
- });
160
- }
161
- try {
162
- await entityBatch.execute();
163
- dataLoaders.clearAll({
164
- tenant: entry.tenant
165
- });
166
- } catch (ex) {
167
- throw new error(ex.message || "Could not create revision from given entry.", ex.code || "CREATE_REVISION_ERROR", {
168
- error: ex,
169
- entry,
170
- storageEntry
171
- });
172
- }
173
- return initialStorageEntry;
174
- };
175
- const update = async (initialModel, params)=>{
176
- const { entry, storageEntry: initialStorageEntry } = params;
177
- const model = getStorageOperationsModel(initialModel);
178
- const isPublished = "published" === entry.status;
179
- const locked = isPublished ? true : entry.locked;
180
- const storageEntry = convertToStorageEntry({
181
- model,
182
- storageEntry: initialStorageEntry
183
- });
184
- const entityBatch = entity.createEntityWriter({
185
- put: [
186
- {
187
- ...createEntryRevisionKeys(storageEntry),
188
- data: {
189
- ...storageEntry,
190
- locked
191
- }
192
- }
193
- ]
194
- });
195
- if (isPublished) entityBatch.put({
196
- ...createEntryPublishedKeys(storageEntry),
197
- data: {
198
- ...storageEntry,
199
- locked
200
- }
201
- });
202
- const latestStorageEntry = await getLatestRevisionByEntryId(model, entry);
203
- if (latestStorageEntry) {
204
- const updatingLatestRevision = latestStorageEntry.id === entry.id;
205
- if (updatingLatestRevision) entityBatch.put({
206
- ...createEntryLatestKeys(storageEntry),
207
- data: {
208
- ...storageEntry,
209
- locked
210
- }
211
- });
212
- else {
213
- const updatedEntryLevelMetaFields = pickEntryMetaFields(entry, isEntryLevelEntryMetaField);
214
- entityBatch.put({
215
- ...createEntryRevisionKeys(latestStorageEntry),
216
- data: {
217
- ...latestStorageEntry,
218
- ...updatedEntryLevelMetaFields
219
- }
220
- });
221
- entityBatch.put({
222
- ...createEntryLatestKeys(latestStorageEntry),
223
- data: {
224
- ...latestStorageEntry,
225
- ...updatedEntryLevelMetaFields
226
- }
227
- });
228
- }
229
- }
230
- try {
231
- await entityBatch.execute();
232
- dataLoaders.clearAll({
233
- tenant: entry.tenant
234
- });
235
- return initialStorageEntry;
236
- } catch (ex) {
237
- throw new error(ex.message || "Could not update entry.", ex.code || "UPDATE_ERROR", {
238
- error: ex,
239
- entry,
240
- latestStorageEntry
241
- });
242
- }
243
- };
244
- const move = async (initialModel, id, folderId)=>{
245
- const model = getStorageOperationsModel(initialModel);
246
- const partitionKey = createPartitionKey({
247
- id,
248
- tenant: model.tenant
249
- });
250
- const records = await entity.queryAll({
251
- partitionKey,
252
- options: {
253
- gte: " "
254
- }
255
- });
256
- const entityBatch = entity.createEntityWriter({
257
- put: records.map((item)=>({
258
- ...item,
259
- data: {
260
- ...item.data,
261
- location: {
262
- ...item.data.location,
263
- folderId
264
- }
265
- }
266
- }))
267
- });
268
- try {
269
- await entityBatch.execute();
270
- } catch (ex) {
271
- throw error.from(ex, {
272
- message: "Could not move records to a new folder.",
273
- data: {
274
- id,
275
- folderId
276
- }
277
- });
278
- }
279
- };
280
- const moveToBin = async (initialModel, params)=>{
281
- const { entry, storageEntry: initialStorageEntry } = params;
282
- const model = getStorageOperationsModel(initialModel);
283
- let records = [];
284
- try {
285
- records = await entity.queryAll({
286
- partitionKey: createPartitionKey({
287
- id: entry.id,
288
- tenant: model.tenant
289
- }),
290
- options: {
291
- gte: " "
292
- }
293
- });
294
- } catch (ex) {
295
- throw new error(ex.message || "Could not load all records.", ex.code || "LOAD_ALL_RECORDS_ERROR", {
296
- error: ex,
297
- id: entry.id
298
- });
299
- }
300
- if (0 === records.length) return;
301
- const storageEntry = convertToStorageEntry({
302
- model,
303
- storageEntry: initialStorageEntry
304
- });
305
- const updatedDeletedMetaFields = pickEntryMetaFields(storageEntry, isDeletedEntryMetaField);
306
- const entityBatch = entity.createEntityWriter({
307
- put: records.map((record)=>({
308
- ...record,
309
- data: {
310
- ...record.data,
311
- ...updatedDeletedMetaFields,
312
- wbyDeleted: storageEntry.wbyDeleted,
313
- location: storageEntry.location,
314
- binOriginalFolderId: storageEntry.binOriginalFolderId
315
- }
316
- }))
317
- });
318
- try {
319
- await entityBatch.execute();
320
- dataLoaders.clearAll({
321
- tenant: entry.tenant
322
- });
323
- } catch (ex) {
324
- throw new error(ex.message || "Could not move the entry to the bin.", ex.code || "MOVE_ENTRY_TO_BIN_ERROR", {
325
- error: ex,
326
- entry,
327
- storageEntry
328
- });
329
- }
330
- };
331
- const deleteEntry = async (initialModel, params)=>{
332
- const { entry } = params;
333
- const id = entry.id || entry.entryId;
334
- const model = getStorageOperationsModel(initialModel);
335
- const partitionKey = createPartitionKey({
336
- id,
337
- tenant: model.tenant
338
- });
339
- let records = [];
340
- try {
341
- records = await entity.queryAll({
342
- partitionKey,
343
- options: {
344
- gte: " "
345
- }
346
- });
347
- } catch (ex) {
348
- throw new error(ex.message || "Could not load all records.", ex.code || "LOAD_ALL_RECORDS_ERROR", {
349
- error: ex,
350
- id
351
- });
352
- }
353
- const entityBatch = entity.createEntityWriter({
354
- delete: records.map((item)=>({
355
- PK: item.PK,
356
- SK: item.SK
357
- }))
358
- });
359
- try {
360
- await entityBatch.execute();
361
- dataLoaders.clearAll({
362
- tenant: entry.tenant
363
- });
364
- } catch (ex) {
365
- throw new error(ex.message || "Could not delete the entry.", ex.code || "DELETE_ENTRY_ERROR", {
366
- error: ex,
367
- partitionKey,
368
- id
369
- });
370
- }
371
- };
372
- const restoreFromBin = async (initialModel, params)=>{
373
- const { entry, storageEntry: initialStorageEntry } = params;
374
- const model = getStorageOperationsModel(initialModel);
375
- let records = [];
376
- try {
377
- records = await entity.queryAll({
378
- partitionKey: createPartitionKey({
379
- id: entry.id,
380
- tenant: model.tenant
381
- }),
382
- options: {
383
- gte: " "
384
- }
385
- });
386
- } catch (ex) {
387
- throw new error(ex.message || "Could not load all records.", ex.code || "LOAD_ALL_RECORDS_ERROR", {
388
- error: ex,
389
- id: entry.id
390
- });
391
- }
392
- if (0 === records.length) return initialStorageEntry;
393
- const storageEntry = convertToStorageEntry({
394
- model,
395
- storageEntry: initialStorageEntry
396
- });
397
- const updatedRestoredMetaFields = pickEntryMetaFields(storageEntry, isRestoredEntryMetaField);
398
- const entityBatch = entity.createEntityWriter({
399
- put: records.map((record)=>({
400
- ...record,
401
- data: {
402
- ...record.data,
403
- ...updatedRestoredMetaFields,
404
- wbyDeleted: storageEntry.wbyDeleted,
405
- location: storageEntry.location,
406
- binOriginalFolderId: storageEntry.binOriginalFolderId
407
- }
408
- }))
409
- });
410
- try {
411
- await entityBatch.execute();
412
- dataLoaders.clearAll({
413
- tenant: entry.tenant
414
- });
415
- return initialStorageEntry;
416
- } catch (ex) {
417
- throw new error(ex.message || "Could not restore the entry from the bin.", ex.code || "RESTORE_ENTRY_ERROR", {
418
- error: ex,
419
- entry,
420
- storageEntry
421
- });
422
- }
423
- };
424
- const deleteRevision = async (initialModel, params)=>{
425
- const { entry, latestEntry, latestStorageEntry: initialLatestStorageEntry } = params;
426
- const model = getStorageOperationsModel(initialModel);
427
- const partitionKey = createPartitionKey({
428
- id: entry.id,
429
- tenant: model.tenant
430
- });
431
- const entityBatch = entity.createEntityWriter({
432
- delete: [
433
- {
434
- PK: partitionKey,
435
- SK: createRevisionSortKey(entry)
436
- }
437
- ]
438
- });
439
- const publishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);
440
- if (publishedStorageEntry && entry.id === publishedStorageEntry.id) entityBatch.delete({
441
- PK: partitionKey,
442
- SK: createPublishedSortKey()
443
- });
444
- if (initialLatestStorageEntry) {
445
- const latestStorageEntry = convertToStorageEntry({
446
- storageEntry: initialLatestStorageEntry,
447
- model
448
- });
449
- entityBatch.put({
450
- ...createEntryLatestKeys(latestStorageEntry),
451
- data: {
452
- ...latestStorageEntry
453
- }
454
- });
455
- entityBatch.put({
456
- ...createEntryRevisionKeys(latestStorageEntry),
457
- data: {
458
- ...latestStorageEntry
459
- }
460
- });
461
- }
462
- try {
463
- await entityBatch.execute();
464
- dataLoaders.clearAll({
465
- tenant: entry.tenant
466
- });
467
- } catch (ex) {
468
- throw new error(ex.message, ex.code, {
469
- error: ex,
470
- entry,
471
- latestEntry
472
- });
473
- }
474
- };
475
- const deleteMultipleEntries = async (initialModel, params)=>{
476
- const { entries } = params;
477
- const model = getStorageOperationsModel(initialModel);
478
- const revisions = await dataLoaders.getAllEntryRevisions({
479
- model,
480
- ids: entries
481
- });
482
- const entityBatch = entity.createEntityWriter();
483
- for (const id of entries){
484
- const partitionKey = createPartitionKey({
485
- id,
486
- tenant: model.tenant
487
- });
488
- entityBatch.delete({
489
- PK: partitionKey,
490
- SK: "L"
491
- });
492
- entityBatch.delete({
493
- PK: partitionKey,
494
- SK: "P"
495
- });
496
- }
497
- for (const revision of revisions)entityBatch.delete({
498
- PK: createPartitionKey({
499
- id: revision.id,
500
- tenant: model.tenant
501
- }),
502
- SK: createRevisionSortKey({
503
- version: revision.version
504
- })
505
- });
506
- await entityBatch.execute();
507
- };
508
- const getLatestRevisionByEntryId = async (initialModel, params)=>{
509
- const model = getStorageOperationsModel(initialModel);
510
- const items = await dataLoaders.getLatestRevisionByEntryId({
511
- model,
512
- ids: [
513
- params.id
514
- ]
515
- });
516
- const item = items.shift() || null;
517
- if (!item) return null;
518
- return convertFromStorageEntry({
519
- storageEntry: item,
520
- model
521
- });
522
- };
523
- const getPublishedRevisionByEntryId = async (initialModel, params)=>{
524
- const model = getStorageOperationsModel(initialModel);
525
- const items = await dataLoaders.getPublishedRevisionByEntryId({
526
- model,
527
- ids: [
528
- params.id
529
- ]
530
- });
531
- const item = items.shift() || null;
532
- if (!item) return null;
533
- return convertFromStorageEntry({
534
- storageEntry: item,
535
- model
536
- });
537
- };
538
- const getRevisionById = async (initialModel, params)=>{
539
- const model = getStorageOperationsModel(initialModel);
540
- const items = await dataLoaders.getRevisionById({
541
- model,
542
- ids: [
543
- params.id
544
- ]
545
- });
546
- const item = items.shift() || null;
547
- if (!item) return null;
548
- return convertFromStorageEntry({
549
- storageEntry: item,
550
- model
551
- });
552
- };
553
- const getRevisions = async (initialModel, params)=>{
554
- const model = getStorageOperationsModel(initialModel);
555
- const items = await dataLoaders.getAllEntryRevisions({
556
- model,
557
- ids: [
558
- params.id
559
- ]
560
- });
561
- return items.map((item)=>convertFromStorageEntry({
562
- storageEntry: item,
563
- model
564
- }));
565
- };
566
- const getByIds = async (initialModel, params)=>{
567
- const model = getStorageOperationsModel(initialModel);
568
- const items = await dataLoaders.getRevisionById({
569
- model,
570
- ids: params.ids
571
- });
572
- return items.map((item)=>convertFromStorageEntry({
573
- storageEntry: item,
574
- model
575
- }));
576
- };
577
- const getLatestByIds = async (initialModel, params)=>{
578
- const model = getStorageOperationsModel(initialModel);
579
- const items = await dataLoaders.getLatestRevisionByEntryId({
580
- model,
581
- ids: params.ids
582
- });
583
- return items.map((item)=>convertFromStorageEntry({
584
- storageEntry: item,
585
- model
586
- }));
587
- };
588
- const getPublishedByIds = async (initialModel, params)=>{
589
- const model = getStorageOperationsModel(initialModel);
590
- const items = await dataLoaders.getPublishedRevisionByEntryId({
591
- model,
592
- ids: params.ids
593
- });
594
- return items.map((item)=>convertFromStorageEntry({
595
- storageEntry: item,
596
- model
597
- }));
598
- };
599
- const getPreviousRevision = async (initialModel, params)=>{
600
- const model = getStorageOperationsModel(initialModel);
601
- const { entryId, version } = params;
602
- const partitionKey = createPartitionKey({
603
- tenant: model.tenant,
604
- id: entryId
605
- });
606
- const unfilteredRevisions = await entity.queryAll({
607
- partitionKey,
608
- options: {
609
- beginsWith: "REV#",
610
- reverse: true
611
- }
612
- });
613
- const filteredRevisions = unfilteredRevisions.filter((item)=>item.data.version < version);
614
- const storageEntry = filteredRevisions[0];
615
- if (!storageEntry) return null;
616
- try {
617
- return convertFromStorageEntry({
618
- storageEntry: storageEntry.data,
619
- model
620
- });
621
- } catch (ex) {
622
- throw new error(ex.message || "Could not get previous version of given entry.", ex.code || "GET_PREVIOUS_VERSION_ERROR", {
623
- ...params,
624
- error: ex,
625
- partitionKey,
626
- model
627
- });
628
- }
629
- };
630
- const list = async (initialModel, params)=>{
631
- const model = getStorageOperationsModel(initialModel);
632
- const { limit: initialLimit = 10, where: initialWhere, after, sort: sortBy, fields, search } = params;
633
- const limit = initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;
634
- const type = initialWhere.published ? "P" : "L";
635
- const partitionKey = createGSIPartitionKey(model, type);
636
- const options = {
637
- index: "GSI1",
638
- gte: " "
639
- };
640
- let storageEntries = [];
641
- try {
642
- storageEntries = await entity.queryAll({
643
- partitionKey,
644
- options
645
- });
646
- } catch (ex) {
647
- throw new error(ex.message, "QUERY_ENTRIES_ERROR", {
648
- error: ex,
649
- partitionKey,
650
- options
651
- });
652
- }
653
- if (0 === storageEntries.length) return {
654
- hasMoreItems: false,
655
- totalCount: 0,
656
- cursor: null,
657
- items: []
658
- };
659
- const where = {
660
- ...initialWhere
661
- };
662
- delete where["published"];
663
- delete where["latest"];
664
- const modelFields = createFields({
665
- plugins,
666
- fields: model.fields
667
- });
668
- const fromStorage = createStorageTransformCallable(model);
669
- const records = await Promise.all(storageEntries.map(async (storageEntry)=>{
670
- const entry = convertFromStorageEntry({
671
- storageEntry: storageEntry.data,
672
- model
673
- });
674
- for (const field of model.fields)entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);
675
- return entry;
676
- }));
677
- const filteredItems = filter({
678
- items: records,
679
- where,
680
- plugins,
681
- fields: modelFields,
682
- fullTextSearch: {
683
- term: search,
684
- fields: fields || []
685
- },
686
- container
687
- });
688
- const totalCount = filteredItems.length;
689
- const sortedItems = sort({
690
- model,
691
- plugins,
692
- items: filteredItems,
693
- sort: sortBy,
694
- fields: modelFields
695
- });
696
- const start = parseInt(decodeCursor(after) || "0") || 0;
697
- const hasMoreItems = totalCount > start + limit;
698
- const end = limit > totalCount + start + limit ? void 0 : start + limit;
699
- const slicedItems = sortedItems.slice(start, end);
700
- const cursor = encodeCursor(`${start + limit}`);
701
- return {
702
- hasMoreItems,
703
- totalCount,
704
- cursor,
705
- items: slicedItems
706
- };
707
- };
708
- const get = async (initialModel, params)=>{
709
- const model = getStorageOperationsModel(initialModel);
710
- const { items } = await list(model, {
711
- ...params,
712
- limit: 1
713
- });
714
- return items.shift() || null;
715
- };
716
- const publish = async (initialModel, params)=>{
717
- const { entry, storageEntry: initialStorageEntry } = params;
718
- const model = getStorageOperationsModel(initialModel);
719
- const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);
720
- if (!initialLatestStorageEntry) throw new error('Could not publish entry. Could not load latest ("L") record.', "PUBLISH_ERROR", {
721
- entry
722
- });
723
- const initialPublishedStorageEntry = await getPublishedRevisionByEntryId(model, entry);
724
- const storageEntry = convertToStorageEntry({
725
- model,
726
- storageEntry: initialStorageEntry
727
- });
728
- const entityBatch = entity.createEntityWriter({
729
- put: [
730
- {
731
- ...createEntryRevisionKeys(storageEntry),
732
- data: {
733
- ...storageEntry
734
- }
735
- },
736
- {
737
- ...createEntryPublishedKeys(storageEntry),
738
- data: {
739
- ...storageEntry
740
- }
741
- }
742
- ]
743
- });
744
- const publishedRevisionId = initialPublishedStorageEntry?.id;
745
- const publishingLatestRevision = entry.id === initialLatestStorageEntry.id;
746
- if (publishingLatestRevision) {
747
- entityBatch.put({
748
- ...createEntryLatestKeys(storageEntry),
749
- data: {
750
- ...storageEntry
751
- }
752
- });
753
- if (publishedRevisionId && publishedRevisionId !== entry.id) {
754
- const publishedStorageEntry = convertToStorageEntry({
755
- storageEntry: initialPublishedStorageEntry,
756
- model
757
- });
758
- entityBatch.put({
759
- ...createEntryRevisionKeys(publishedStorageEntry),
760
- data: {
761
- ...publishedStorageEntry,
762
- status: CONTENT_ENTRY_STATUS.UNPUBLISHED
763
- }
764
- });
765
- }
766
- } else {
767
- const updatedEntryLevelMetaFields = pickEntryMetaFields(entry, isEntryLevelEntryMetaField);
768
- const latestStorageEntry = convertToStorageEntry({
769
- storageEntry: initialLatestStorageEntry,
770
- model
771
- });
772
- let latestRevisionStatus = latestStorageEntry.status;
773
- if (latestRevisionStatus === CONTENT_ENTRY_STATUS.PUBLISHED) latestRevisionStatus = CONTENT_ENTRY_STATUS.UNPUBLISHED;
774
- const latestStorageEntryFields = {
775
- ...latestStorageEntry,
776
- ...updatedEntryLevelMetaFields,
777
- status: latestRevisionStatus
778
- };
779
- entityBatch.put({
780
- ...createEntryLatestKeys(latestStorageEntryFields),
781
- data: {
782
- ...latestStorageEntryFields
783
- }
784
- });
785
- entityBatch.put({
786
- ...createEntryRevisionKeys(latestStorageEntryFields),
787
- data: {
788
- ...latestStorageEntryFields
789
- }
790
- });
791
- const publishedRevisionDifferentFromLatest = publishedRevisionId && publishedRevisionId !== latestStorageEntry.id;
792
- if (publishedRevisionDifferentFromLatest) {
793
- const publishedStorageEntry = convertToStorageEntry({
794
- storageEntry: initialPublishedStorageEntry,
795
- model
796
- });
797
- entityBatch.put({
798
- ...createEntryRevisionKeys(publishedStorageEntry),
799
- data: {
800
- ...publishedStorageEntry,
801
- status: CONTENT_ENTRY_STATUS.UNPUBLISHED
802
- }
803
- });
804
- }
805
- }
806
- try {
807
- await entityBatch.execute();
808
- dataLoaders.clearAll({
809
- tenant: entry.tenant
810
- });
811
- return initialStorageEntry;
812
- } catch (ex) {
813
- throw new error(ex.message || "Could not execute the publishing batch.", ex.code || "PUBLISH_ERROR", {
814
- entry,
815
- latestStorageEntry: initialLatestStorageEntry,
816
- publishedStorageEntry: initialPublishedStorageEntry
817
- });
818
- }
819
- };
820
- const unpublish = async (initialModel, params)=>{
821
- const { entry, storageEntry: initialStorageEntry } = params;
822
- const model = getStorageOperationsModel(initialModel);
823
- const partitionKey = createPartitionKey({
824
- id: entry.id,
825
- tenant: model.tenant
826
- });
827
- const storageEntry = convertToStorageEntry({
828
- storageEntry: initialStorageEntry,
829
- model
830
- });
831
- const entityBatch = entity.createEntityWriter({
832
- delete: [
833
- {
834
- PK: partitionKey,
835
- SK: createPublishedSortKey()
836
- }
837
- ],
838
- put: [
839
- {
840
- ...createEntryRevisionKeys(storageEntry),
841
- data: {
842
- ...storageEntry
843
- }
844
- }
845
- ]
846
- });
847
- const initialLatestStorageEntry = await getLatestRevisionByEntryId(model, entry);
848
- if (initialLatestStorageEntry) {
849
- const unpublishingLatestRevision = entry.id === initialLatestStorageEntry.id;
850
- if (unpublishingLatestRevision) entityBatch.put({
851
- ...createEntryLatestKeys(storageEntry),
852
- data: {
853
- ...storageEntry
854
- }
855
- });
856
- else {
857
- const latestStorageEntry = convertToStorageEntry({
858
- storageEntry: initialLatestStorageEntry,
859
- model
860
- });
861
- const updatedEntryLevelMetaFields = pickEntryMetaFields(entry, isEntryLevelEntryMetaField);
862
- entityBatch.put({
863
- ...createEntryRevisionKeys(latestStorageEntry),
864
- data: {
865
- ...latestStorageEntry,
866
- ...updatedEntryLevelMetaFields
867
- }
868
- });
869
- entityBatch.put({
870
- ...createEntryLatestKeys(latestStorageEntry),
871
- data: {
872
- ...latestStorageEntry,
873
- ...updatedEntryLevelMetaFields
874
- }
875
- });
876
- }
877
- }
878
- try {
879
- await entityBatch.execute();
880
- dataLoaders.clearAll({
881
- tenant: entry.tenant
882
- });
883
- return initialStorageEntry;
884
- } catch (ex) {
885
- throw new error(ex.message || "Could not execute unpublish batch.", ex.code || "UNPUBLISH_ERROR", {
886
- entry,
887
- storageEntry
888
- });
889
- }
890
- };
891
- const getUniqueFieldValues = async (model, params)=>{
892
- const { where, fieldId } = params;
893
- const field = model.fields.find((f)=>f.fieldId === fieldId);
894
- if (!field) throw new error('Could not find field with given "fieldId" value.', "FIELD_NOT_FOUND", {
895
- fieldId
896
- });
897
- const { items } = await list(model, {
898
- where,
899
- limit: MAX_LIST_LIMIT
900
- });
901
- const result = {};
902
- for (const item of items){
903
- const fieldValue = item.values[field.fieldId];
904
- if (!fieldValue) continue;
905
- const values = Array.isArray(fieldValue) ? fieldValue : [
906
- fieldValue
907
- ];
908
- if (0 !== values.length) for (const value of values)result[value] = {
909
- value,
910
- count: (result[value]?.count || 0) + 1
911
- };
912
- }
913
- return Object.values(result).sort((a, b)=>a.value > b.value ? 1 : b.value > a.value ? -1 : 0).sort((a, b)=>b.count - a.count);
914
- };
915
- return {
916
- create,
917
- createRevisionFrom,
918
- update,
919
- move,
920
- delete: deleteEntry,
921
- moveToBin,
922
- restoreFromBin,
923
- deleteRevision,
924
- deleteMultipleEntries,
925
- getPreviousRevision,
926
- getPublishedByIds,
927
- getLatestByIds,
928
- getByIds,
929
- getRevisionById,
930
- getPublishedRevisionByEntryId,
931
- getLatestRevisionByEntryId,
932
- get,
933
- getRevisions,
934
- publish,
935
- list,
936
- unpublish,
937
- dataLoaders,
938
- getUniqueFieldValues
939
- };
940
- };
941
- export { createEntriesStorageOperations };
942
-
943
- //# sourceMappingURL=index.js.map