@webiny/api-aco 0.0.0-unstable.99666aeb00 → 0.0.0-unstable.a9593f74dd

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 (138) hide show
  1. package/apps/AcoApp.d.ts +5 -0
  2. package/apps/AcoApp.js +56 -21
  3. package/apps/AcoApp.js.map +1 -1
  4. package/apps/AcoApps.js +7 -8
  5. package/apps/AcoApps.js.map +1 -1
  6. package/apps/app.gql.js +6 -4
  7. package/apps/app.gql.js.map +1 -1
  8. package/apps/index.js +3 -1
  9. package/apps/index.js.map +1 -1
  10. package/createAcoContext.d.ts +5 -1
  11. package/createAcoContext.js +119 -25
  12. package/createAcoContext.js.map +1 -1
  13. package/createAcoGraphQL.js +6 -2
  14. package/createAcoGraphQL.js.map +1 -1
  15. package/createAcoHooks.js +9 -3
  16. package/createAcoHooks.js.map +1 -1
  17. package/createAcoModels.js +6 -19
  18. package/createAcoModels.js.map +1 -1
  19. package/createAcoStorageOperations.d.ts +0 -1
  20. package/createAcoStorageOperations.js +10 -7
  21. package/createAcoStorageOperations.js.map +1 -1
  22. package/fields/index.js +3 -1
  23. package/fields/index.js.map +1 -1
  24. package/fields/location.js +3 -1
  25. package/fields/location.js.map +1 -1
  26. package/filter/filter.crud.d.ts +3 -0
  27. package/filter/filter.crud.js +94 -0
  28. package/filter/filter.crud.js.map +1 -0
  29. package/filter/filter.gql.d.ts +3 -0
  30. package/filter/filter.gql.js +153 -0
  31. package/filter/filter.gql.js.map +1 -0
  32. package/filter/filter.model.d.ts +2 -0
  33. package/filter/filter.model.js +125 -0
  34. package/filter/filter.model.js.map +1 -0
  35. package/filter/filter.so.d.ts +3 -0
  36. package/filter/filter.so.js +98 -0
  37. package/filter/filter.so.js.map +1 -0
  38. package/filter/filter.types.d.ts +95 -0
  39. package/filter/filter.types.js +14 -0
  40. package/filter/filter.types.js.map +1 -0
  41. package/folder/folder.crud.d.ts +8 -1
  42. package/folder/folder.crud.js +194 -15
  43. package/folder/folder.crud.js.map +1 -1
  44. package/folder/folder.gql.js +85 -8
  45. package/folder/folder.gql.js.map +1 -1
  46. package/folder/folder.model.d.ts +1 -3
  47. package/folder/folder.model.js +54 -7
  48. package/folder/folder.model.js.map +1 -1
  49. package/folder/folder.so.js +38 -18
  50. package/folder/folder.so.js.map +1 -1
  51. package/folder/folder.types.d.ts +28 -2
  52. package/folder/folder.types.js +3 -1
  53. package/folder/folder.types.js.map +1 -1
  54. package/folder/onFolderBeforeDeleteAco.hook.d.ts +2 -0
  55. package/folder/onFolderBeforeDeleteAco.hook.js +67 -0
  56. package/folder/onFolderBeforeDeleteAco.hook.js.map +1 -0
  57. package/folder/onFolderBeforeDeleteFm.hook.d.ts +2 -0
  58. package/folder/onFolderBeforeDeleteFm.hook.js +49 -0
  59. package/folder/onFolderBeforeDeleteFm.hook.js.map +1 -0
  60. package/folder/onFolderBeforeDeleteHcms.hook.d.ts +2 -0
  61. package/folder/onFolderBeforeDeleteHcms.hook.js +56 -0
  62. package/folder/onFolderBeforeDeleteHcms.hook.js.map +1 -0
  63. package/index.d.ts +5 -1
  64. package/index.js +14 -4
  65. package/index.js.map +1 -1
  66. package/package.json +31 -27
  67. package/plugins/AcoAppModifierPlugin.js +4 -5
  68. package/plugins/AcoAppModifierPlugin.js.map +1 -1
  69. package/plugins/AcoAppRegisterPlugin.js +4 -5
  70. package/plugins/AcoAppRegisterPlugin.js.map +1 -1
  71. package/plugins/index.js +3 -1
  72. package/plugins/index.js.map +1 -1
  73. package/record/graphql/createAppResolvers.js +26 -19
  74. package/record/graphql/createAppResolvers.js.map +1 -1
  75. package/record/graphql/createAppSchema.js +10 -5
  76. package/record/graphql/createAppSchema.js.map +1 -1
  77. package/record/record.crud.js +3 -1
  78. package/record/record.crud.js.map +1 -1
  79. package/record/record.gql.js +3 -1
  80. package/record/record.gql.js.map +1 -1
  81. package/record/record.model.d.ts +1 -3
  82. package/record/record.model.js +7 -7
  83. package/record/record.model.js.map +1 -1
  84. package/record/record.so.js +35 -23
  85. package/record/record.so.js.map +1 -1
  86. package/record/record.types.d.ts +4 -3
  87. package/record/record.types.js +3 -1
  88. package/record/record.types.js.map +1 -1
  89. package/types.d.ts +23 -6
  90. package/types.js +25 -4
  91. package/types.js.map +1 -1
  92. package/utils/FolderLevelPermissions.d.ts +71 -0
  93. package/utils/FolderLevelPermissions.js +353 -0
  94. package/utils/FolderLevelPermissions.js.map +1 -0
  95. package/utils/acoRecordId.js +3 -1
  96. package/utils/acoRecordId.js.map +1 -1
  97. package/utils/createListSort.js +3 -1
  98. package/utils/createListSort.js.map +1 -1
  99. package/utils/createModelField.js +3 -1
  100. package/utils/createModelField.js.map +1 -1
  101. package/utils/createOperationsWrapper.js +3 -1
  102. package/utils/createOperationsWrapper.js.map +1 -1
  103. package/utils/decorators/CmsEntriesCrudDecorators.d.ts +11 -0
  104. package/utils/decorators/CmsEntriesCrudDecorators.js +232 -0
  105. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -0
  106. package/utils/decorators/constants.d.ts +1 -0
  107. package/utils/decorators/constants.js +10 -0
  108. package/utils/decorators/constants.js.map +1 -0
  109. package/utils/decorators/where.d.ts +14 -0
  110. package/utils/decorators/where.js +52 -0
  111. package/utils/decorators/where.js.map +1 -0
  112. package/utils/ensureAuthentication.d.ts +2 -0
  113. package/utils/{checkPermissions.js → ensureAuthentication.js} +5 -3
  114. package/utils/ensureAuthentication.js.map +1 -0
  115. package/utils/getFolderAndItsAncestors.d.ts +2 -2
  116. package/utils/getFolderAndItsAncestors.js +16 -11
  117. package/utils/getFolderAndItsAncestors.js.map +1 -1
  118. package/utils/isInstallationPending.js +3 -1
  119. package/utils/isInstallationPending.js.map +1 -1
  120. package/utils/modelFactory.d.ts +1 -3
  121. package/utils/modelFactory.js +7 -10
  122. package/utils/modelFactory.js.map +1 -1
  123. package/utils/pickEntryFieldValues.d.ts +3 -0
  124. package/utils/pickEntryFieldValues.js +31 -0
  125. package/utils/pickEntryFieldValues.js.map +1 -0
  126. package/utils/resolve.js +3 -1
  127. package/utils/resolve.js.map +1 -1
  128. package/folder/onFolderBeforeDelete.hook.d.ts +0 -2
  129. package/folder/onFolderBeforeDelete.hook.js +0 -66
  130. package/folder/onFolderBeforeDelete.hook.js.map +0 -1
  131. package/utils/checkPermissions.d.ts +0 -2
  132. package/utils/checkPermissions.js.map +0 -1
  133. package/utils/fieldResolver.d.ts +0 -16
  134. package/utils/fieldResolver.js +0 -44
  135. package/utils/fieldResolver.js.map +0 -1
  136. package/utils/getFieldValues.d.ts +0 -5
  137. package/utils/getFieldValues.js +0 -16
  138. package/utils/getFieldValues.js.map +0 -1
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CmsEntriesCrudDecorators = void 0;
7
+ var _handlerGraphql = require("@webiny/handler-graphql");
8
+ var _where = require("./where");
9
+ var _constants = require("./constants");
10
+ /**
11
+ * Keep this until we figure out how to fetch the folders.
12
+ */
13
+ const isPageModel = model => {
14
+ if (model.modelId === "pbPage") {
15
+ return true;
16
+ } else if (model.modelId === "acoSearchRecord-pbpage") {
17
+ return true;
18
+ }
19
+ return false;
20
+ };
21
+ const createFolderType = model => {
22
+ if (model.modelId === "fmFile") {
23
+ return "FmFile";
24
+ } else if (isPageModel(model)) {
25
+ return "PbPage";
26
+ }
27
+ return `cms:${model.modelId}`;
28
+ };
29
+ const filterEntriesByFolderFactory = (context, permissions) => {
30
+ return async (model, entries) => {
31
+ const [folders] = await context.aco.folder.listAll({
32
+ where: {
33
+ type: createFolderType(model)
34
+ }
35
+ });
36
+ const results = await Promise.all(entries.map(async entry => {
37
+ const folderId = entry.location?.folderId;
38
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
39
+ return entry;
40
+ }
41
+ const folder = folders.find(folder => folder.id === folderId);
42
+ if (!folder) {
43
+ throw new _handlerGraphql.NotFoundError(`Folder "${folderId}" not found.`);
44
+ }
45
+ const result = await permissions.canAccessFolderContent({
46
+ folder,
47
+ rwd: "r"
48
+ });
49
+ return result ? entry : null;
50
+ }));
51
+ return results.filter(entry => !!entry);
52
+ };
53
+ };
54
+ class CmsEntriesCrudDecorators {
55
+ constructor({
56
+ context
57
+ }) {
58
+ this.context = context;
59
+ }
60
+ decorate() {
61
+ const context = this.context;
62
+ const folderLevelPermissions = context.aco.folderLevelPermissions;
63
+ const filterEntriesByFolder = filterEntriesByFolderFactory(context, folderLevelPermissions);
64
+ const originalCmsListEntries = context.cms.listEntries.bind(context.cms);
65
+ context.cms.listEntries = async (model, params) => {
66
+ const folderType = createFolderType(model);
67
+ const folders = await folderLevelPermissions.listAllFoldersWithPermissions(folderType);
68
+ const where = (0, _where.createWhere)({
69
+ where: params.where,
70
+ folders
71
+ });
72
+ return originalCmsListEntries(model, {
73
+ ...params,
74
+ where
75
+ });
76
+ };
77
+ const originalCmsGetEntry = context.cms.getEntry.bind(context.cms);
78
+ context.cms.getEntry = async (model, params) => {
79
+ const entry = await originalCmsGetEntry(model, params);
80
+ const folderId = entry?.location?.folderId;
81
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
82
+ return entry;
83
+ }
84
+ const folder = await context.aco.folder.get(folderId);
85
+ await folderLevelPermissions.ensureCanAccessFolderContent({
86
+ folder,
87
+ rwd: "r"
88
+ });
89
+ return entry;
90
+ };
91
+ const originalCmsGetEntryById = context.cms.getEntryById.bind(context.cms);
92
+ context.cms.getEntryById = async (model, params) => {
93
+ const entry = await originalCmsGetEntryById(model, params);
94
+ const folderId = entry?.location?.folderId;
95
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
96
+ return entry;
97
+ }
98
+ const folder = await context.aco.folder.get(folderId);
99
+ await folderLevelPermissions.ensureCanAccessFolderContent({
100
+ folder,
101
+ rwd: "r"
102
+ });
103
+ return entry;
104
+ };
105
+ const originalGetLatestEntriesByIds = context.cms.getLatestEntriesByIds.bind(context.cms);
106
+ context.cms.getLatestEntriesByIds = async (model, ids) => {
107
+ const entries = await originalGetLatestEntriesByIds(model, ids);
108
+ return filterEntriesByFolder(model, entries);
109
+ };
110
+ const originalGetPublishedEntriesByIds = context.cms.getPublishedEntriesByIds.bind(context.cms);
111
+ context.cms.getPublishedEntriesByIds = async (model, ids) => {
112
+ const entries = await originalGetPublishedEntriesByIds(model, ids);
113
+ return filterEntriesByFolder(model, entries);
114
+ };
115
+ const originalCmsCreateEntry = context.cms.createEntry.bind(context.cms);
116
+ context.cms.createEntry = async (model, params, options) => {
117
+ const folderId = params.wbyAco_location?.folderId || params.location?.folderId;
118
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
119
+ return originalCmsCreateEntry(model, params, options);
120
+ }
121
+ const folder = await context.aco.folder.get(folderId);
122
+ await folderLevelPermissions.ensureCanAccessFolderContent({
123
+ folder,
124
+ rwd: "w"
125
+ });
126
+ return originalCmsCreateEntry(model, params, options);
127
+ };
128
+ const originalCmsCreateFromEntry = context.cms.createEntryRevisionFrom.bind(context.cms);
129
+ context.cms.createEntryRevisionFrom = async (model, id, input, options) => {
130
+ const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
131
+ id
132
+ });
133
+ const folderId = entry?.location?.folderId;
134
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
135
+ return originalCmsCreateFromEntry(model, id, input, options);
136
+ }
137
+ const folder = await context.aco.folder.get(folderId);
138
+ await folderLevelPermissions.ensureCanAccessFolderContent({
139
+ folder,
140
+ rwd: "w"
141
+ });
142
+ return originalCmsCreateFromEntry(model, id, input, options);
143
+ };
144
+ const originalCmsUpdateEntry = context.cms.updateEntry.bind(context.cms);
145
+ context.cms.updateEntry = async (model, id, input, meta, options) => {
146
+ const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
147
+ id
148
+ });
149
+ const folderId = entry?.location?.folderId;
150
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
151
+ return originalCmsUpdateEntry(model, id, input, meta, options);
152
+ }
153
+ const folder = await context.aco.folder.get(folderId);
154
+ await folderLevelPermissions.ensureCanAccessFolderContent({
155
+ folder,
156
+ rwd: "w"
157
+ });
158
+ return originalCmsUpdateEntry(model, id, input, meta, options);
159
+ };
160
+ const originalCmsDeleteEntry = context.cms.deleteEntry.bind(context.cms);
161
+ context.cms.deleteEntry = async (model, id, options) => {
162
+ const entry = await context.cms.storageOperations.entries.getLatestRevisionByEntryId(model, {
163
+ id
164
+ });
165
+ const folderId = entry?.location?.folderId;
166
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
167
+ return originalCmsDeleteEntry(model, id, options);
168
+ }
169
+ const folder = await context.aco.folder.get(folderId);
170
+ await folderLevelPermissions.ensureCanAccessFolderContent({
171
+ folder,
172
+ rwd: "d"
173
+ });
174
+ return originalCmsDeleteEntry(model, id, options);
175
+ };
176
+ const originalCmsDeleteEntryRevision = context.cms.deleteEntryRevision.bind(context.cms);
177
+ context.cms.deleteEntryRevision = async (model, id) => {
178
+ const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
179
+ id
180
+ });
181
+ const folderId = entry?.location?.folderId;
182
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
183
+ return originalCmsDeleteEntryRevision(model, id);
184
+ }
185
+ const folder = await context.aco.folder.get(folderId);
186
+ await folderLevelPermissions.ensureCanAccessFolderContent({
187
+ folder,
188
+ rwd: "d"
189
+ });
190
+ return originalCmsDeleteEntryRevision(model, id);
191
+ };
192
+ const originalCmsMoveEntry = context.cms.moveEntry.bind(context.cms);
193
+ context.cms.moveEntry = async (model, id, targetFolderId) => {
194
+ /**
195
+ * First we need to check if user has access to the entries existing folder.
196
+ */
197
+ const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
198
+ id
199
+ });
200
+ const folderId = entry?.location?.folderId || _constants.ROOT_FOLDER;
201
+ /**
202
+ * If the entry is in the same folder we are trying to move it to, just continue.
203
+ */
204
+ if (folderId === targetFolderId) {
205
+ return originalCmsMoveEntry(model, id, targetFolderId);
206
+ } else if (folderId !== _constants.ROOT_FOLDER) {
207
+ /**
208
+ * If entry current folder is not a root, check for access
209
+ */
210
+ const folder = await context.aco.folder.get(folderId);
211
+ await folderLevelPermissions.ensureCanAccessFolderContent({
212
+ folder,
213
+ rwd: "w"
214
+ });
215
+ }
216
+ /**
217
+ * If target folder is not a ROOT_FOLDER, check for access.
218
+ */
219
+ if (targetFolderId !== _constants.ROOT_FOLDER) {
220
+ const folder = await context.aco.folder.get(targetFolderId);
221
+ await folderLevelPermissions.ensureCanAccessFolderContent({
222
+ folder,
223
+ rwd: "w"
224
+ });
225
+ }
226
+ return originalCmsMoveEntry(model, id, targetFolderId);
227
+ };
228
+ }
229
+ }
230
+ exports.CmsEntriesCrudDecorators = CmsEntriesCrudDecorators;
231
+
232
+ //# sourceMappingURL=CmsEntriesCrudDecorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_handlerGraphql","require","_where","_constants","isPageModel","model","modelId","createFolderType","filterEntriesByFolderFactory","context","permissions","entries","folders","aco","folder","listAll","where","type","results","Promise","all","map","entry","folderId","location","ROOT_FOLDER","find","id","NotFoundError","result","canAccessFolderContent","rwd","filter","CmsEntriesCrudDecorators","constructor","decorate","folderLevelPermissions","filterEntriesByFolder","originalCmsListEntries","cms","listEntries","bind","params","folderType","listAllFoldersWithPermissions","createWhere","originalCmsGetEntry","getEntry","get","ensureCanAccessFolderContent","originalCmsGetEntryById","getEntryById","originalGetLatestEntriesByIds","getLatestEntriesByIds","ids","originalGetPublishedEntriesByIds","getPublishedEntriesByIds","originalCmsCreateEntry","createEntry","options","wbyAco_location","originalCmsCreateFromEntry","createEntryRevisionFrom","input","storageOperations","getRevisionById","originalCmsUpdateEntry","updateEntry","meta","originalCmsDeleteEntry","deleteEntry","getLatestRevisionByEntryId","originalCmsDeleteEntryRevision","deleteEntryRevision","originalCmsMoveEntry","moveEntry","targetFolderId","exports"],"sources":["CmsEntriesCrudDecorators.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\nimport { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { FolderLevelPermissions } from \"~/utils/FolderLevelPermissions\";\nimport { createWhere } from \"./where\";\nimport { ROOT_FOLDER } from \"./constants\";\n\ntype Context = Pick<AcoContext, \"aco\" | \"cms\">;\n/**\n * Keep this until we figure out how to fetch the folders.\n */\nconst isPageModel = (model: CmsModel): boolean => {\n if (model.modelId === \"pbPage\") {\n return true;\n } else if (model.modelId === \"acoSearchRecord-pbpage\") {\n return true;\n }\n return false;\n};\n\nconst createFolderType = (model: CmsModel): \"FmFile\" | \"PbPage\" | `cms:${string}` => {\n if (model.modelId === \"fmFile\") {\n return \"FmFile\";\n } else if (isPageModel(model)) {\n return \"PbPage\";\n }\n return `cms:${model.modelId}`;\n};\n\nconst filterEntriesByFolderFactory = (context: Context, permissions: FolderLevelPermissions) => {\n return async (model: CmsModel, entries: CmsEntry[]) => {\n const [folders] = await context.aco.folder.listAll({\n where: {\n type: createFolderType(model)\n }\n });\n\n const results = await Promise.all(\n entries.map(async entry => {\n const folderId = entry.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n\n const folder = folders.find(folder => folder.id === folderId);\n if (!folder) {\n throw new NotFoundError(`Folder \"${folderId}\" not found.`);\n }\n const result = await permissions.canAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n return result ? entry : null;\n })\n );\n\n return results.filter((entry): entry is CmsEntry => !!entry);\n };\n};\n\ninterface EntryManagerCrudDecoratorsParams {\n context: Context;\n}\n\nexport class CmsEntriesCrudDecorators {\n private readonly context: Context;\n\n public constructor({ context }: EntryManagerCrudDecoratorsParams) {\n this.context = context;\n }\n\n public decorate() {\n const context = this.context;\n const folderLevelPermissions = context.aco.folderLevelPermissions;\n\n const filterEntriesByFolder = filterEntriesByFolderFactory(context, folderLevelPermissions);\n\n const originalCmsListEntries = context.cms.listEntries.bind(context.cms);\n context.cms.listEntries = async (model, params) => {\n const folderType = createFolderType(model);\n const folders = await folderLevelPermissions.listAllFoldersWithPermissions(folderType);\n\n const where = createWhere({\n where: params.where,\n folders\n });\n return originalCmsListEntries(model, {\n ...params,\n where\n });\n };\n\n const originalCmsGetEntry = context.cms.getEntry.bind(context.cms);\n context.cms.getEntry = async (model, params) => {\n const entry = await originalCmsGetEntry(model, params);\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n\n return entry;\n };\n\n const originalCmsGetEntryById = context.cms.getEntryById.bind(context.cms);\n context.cms.getEntryById = async (model, params) => {\n const entry = await originalCmsGetEntryById(model, params);\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return entry;\n }\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"r\"\n });\n return entry;\n };\n\n const originalGetLatestEntriesByIds = context.cms.getLatestEntriesByIds.bind(context.cms);\n context.cms.getLatestEntriesByIds = async (model, ids) => {\n const entries = await originalGetLatestEntriesByIds(model, ids);\n\n return filterEntriesByFolder(model, entries);\n };\n\n const originalGetPublishedEntriesByIds = context.cms.getPublishedEntriesByIds.bind(\n context.cms\n );\n context.cms.getPublishedEntriesByIds = async (model, ids) => {\n const entries = await originalGetPublishedEntriesByIds(model, ids);\n return filterEntriesByFolder(model, entries);\n };\n\n const originalCmsCreateEntry = context.cms.createEntry.bind(context.cms);\n context.cms.createEntry = async (model, params, options) => {\n const folderId = params.wbyAco_location?.folderId || params.location?.folderId;\n\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsCreateEntry(model, params, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsCreateEntry(model, params, options);\n };\n\n const originalCmsCreateFromEntry = context.cms.createEntryRevisionFrom.bind(context.cms);\n context.cms.createEntryRevisionFrom = async (model, id, input, options) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsCreateFromEntry(model, id, input, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsCreateFromEntry(model, id, input, options);\n };\n\n const originalCmsUpdateEntry = context.cms.updateEntry.bind(context.cms);\n context.cms.updateEntry = async (model, id, input, meta, options) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsUpdateEntry(model, id, input, meta, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n\n return originalCmsUpdateEntry(model, id, input, meta, options);\n };\n\n const originalCmsDeleteEntry = context.cms.deleteEntry.bind(context.cms);\n context.cms.deleteEntry = async (model, id, options) => {\n const entry = await context.cms.storageOperations.entries.getLatestRevisionByEntryId(\n model,\n {\n id\n }\n );\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsDeleteEntry(model, id, options);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"d\"\n });\n\n return originalCmsDeleteEntry(model, id, options);\n };\n\n const originalCmsDeleteEntryRevision = context.cms.deleteEntryRevision.bind(context.cms);\n context.cms.deleteEntryRevision = async (model, id) => {\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n\n const folderId = entry?.location?.folderId;\n if (!folderId || folderId === ROOT_FOLDER) {\n return originalCmsDeleteEntryRevision(model, id);\n }\n\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"d\"\n });\n\n return originalCmsDeleteEntryRevision(model, id);\n };\n\n const originalCmsMoveEntry = context.cms.moveEntry.bind(context.cms);\n context.cms.moveEntry = async (model, id, targetFolderId) => {\n /**\n * First we need to check if user has access to the entries existing folder.\n */\n const entry = await context.cms.storageOperations.entries.getRevisionById(model, {\n id\n });\n const folderId = entry?.location?.folderId || ROOT_FOLDER;\n /**\n * If the entry is in the same folder we are trying to move it to, just continue.\n */\n if (folderId === targetFolderId) {\n return originalCmsMoveEntry(model, id, targetFolderId);\n } else if (folderId !== ROOT_FOLDER) {\n /**\n * If entry current folder is not a root, check for access\n */\n const folder = await context.aco.folder.get(folderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n }\n /**\n * If target folder is not a ROOT_FOLDER, check for access.\n */\n if (targetFolderId !== ROOT_FOLDER) {\n const folder = await context.aco.folder.get(targetFolderId);\n await folderLevelPermissions.ensureCanAccessFolderContent({\n folder,\n rwd: \"w\"\n });\n }\n\n return originalCmsMoveEntry(model, id, targetFolderId);\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const ROOT_FOLDER = "root";
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ROOT_FOLDER = void 0;
7
+ const ROOT_FOLDER = "root";
8
+ exports.ROOT_FOLDER = ROOT_FOLDER;
9
+
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ROOT_FOLDER","exports"],"sources":["constants.ts"],"sourcesContent":["export const ROOT_FOLDER = \"root\";\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAG,MAAM;AAACC,OAAA,CAAAD,WAAA,GAAAA,WAAA"}
@@ -0,0 +1,14 @@
1
+ import { CmsEntryListWhere } from "@webiny/api-headless-cms/types";
2
+ import { Folder } from "../../folder/folder.types";
3
+ interface Params {
4
+ where: CmsEntryListWhere | undefined;
5
+ folders: Folder[];
6
+ }
7
+ /**
8
+ * There are multiple cases that we need to handle:
9
+ * * existing location with no AND conditional
10
+ * * existing location with AND conditional
11
+ * * no existing location with no AND conditional + with AND conditional
12
+ */
13
+ export declare const createWhere: (params: Params) => CmsEntryListWhere | undefined;
14
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createWhere = void 0;
7
+ var _constants = require("./constants");
8
+ /**
9
+ * There are multiple cases that we need to handle:
10
+ * * existing location with no AND conditional
11
+ * * existing location with AND conditional
12
+ * * no existing location with no AND conditional + with AND conditional
13
+ */
14
+ const createWhere = params => {
15
+ const {
16
+ where,
17
+ folders
18
+ } = params;
19
+ if (!where) {
20
+ return undefined;
21
+ }
22
+ const whereLocation = {
23
+ wbyAco_location: {
24
+ // At the moment, all users can access entries in the root folder.
25
+ // Root folder level permissions cannot be set yet.
26
+ folderId_in: [_constants.ROOT_FOLDER, ...folders.map(folder => folder.id)]
27
+ }
28
+ };
29
+ const whereAnd = where.AND;
30
+ if (where.wbyAco_location && !whereAnd) {
31
+ return {
32
+ ...where,
33
+ AND: [{
34
+ ...whereLocation
35
+ }]
36
+ };
37
+ } else if (where.wbyAco_location && whereAnd) {
38
+ return {
39
+ ...where,
40
+ AND: [{
41
+ ...whereLocation
42
+ }, ...whereAnd]
43
+ };
44
+ }
45
+ return {
46
+ ...where,
47
+ ...whereLocation
48
+ };
49
+ };
50
+ exports.createWhere = createWhere;
51
+
52
+ //# sourceMappingURL=where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","createWhere","params","where","folders","undefined","whereLocation","wbyAco_location","folderId_in","ROOT_FOLDER","map","folder","id","whereAnd","AND","exports"],"sources":["where.ts"],"sourcesContent":["import { CmsEntryListWhere } from \"@webiny/api-headless-cms/types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { ROOT_FOLDER } from \"./constants\";\n\ninterface Params {\n where: CmsEntryListWhere | undefined;\n folders: Folder[];\n}\n\n/**\n * There are multiple cases that we need to handle:\n * * existing location with no AND conditional\n * * existing location with AND conditional\n * * no existing location with no AND conditional + with AND conditional\n */\nexport const createWhere = (params: Params): CmsEntryListWhere | undefined => {\n const { where, folders } = params;\n if (!where) {\n return undefined;\n }\n const whereLocation = {\n wbyAco_location: {\n // At the moment, all users can access entries in the root folder.\n // Root folder level permissions cannot be set yet.\n folderId_in: [ROOT_FOLDER, ...folders.map(folder => folder.id)]\n }\n };\n const whereAnd = where.AND;\n if (where.wbyAco_location && !whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n }\n ]\n };\n } else if (where.wbyAco_location && whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n },\n ...whereAnd\n ]\n };\n }\n return {\n ...where,\n ...whereLocation\n };\n};\n"],"mappings":";;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,WAAW,GAAIC,MAAc,IAAoC;EAC1E,MAAM;IAAEC,KAAK;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EACjC,IAAI,CAACC,KAAK,EAAE;IACR,OAAOE,SAAS;EACpB;EACA,MAAMC,aAAa,GAAG;IAClBC,eAAe,EAAE;MACb;MACA;MACAC,WAAW,EAAE,CAACC,sBAAW,EAAE,GAAGL,OAAO,CAACM,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,EAAE,CAAC;IAClE;EACJ,CAAC;EACD,MAAMC,QAAQ,GAAGV,KAAK,CAACW,GAAG;EAC1B,IAAIX,KAAK,CAACI,eAAe,IAAI,CAACM,QAAQ,EAAE;IACpC,OAAO;MACH,GAAGV,KAAK;MACRW,GAAG,EAAE,CACD;QACI,GAAGR;MACP,CAAC;IAET,CAAC;EACL,CAAC,MAAM,IAAIH,KAAK,CAACI,eAAe,IAAIM,QAAQ,EAAE;IAC1C,OAAO;MACH,GAAGV,KAAK;MACRW,GAAG,EAAE,CACD;QACI,GAAGR;MACP,CAAC,EACD,GAAGO,QAAQ;IAEnB,CAAC;EACL;EACA,OAAO;IACH,GAAGV,KAAK;IACR,GAAGG;EACP,CAAC;AACL,CAAC;AAACS,OAAA,CAAAd,WAAA,GAAAA,WAAA"}
@@ -0,0 +1,2 @@
1
+ import { AcoContext } from "../types";
2
+ export declare const ensureAuthentication: (context: AcoContext) => void;
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.checkPermissions = void 0;
6
+ exports.ensureAuthentication = void 0;
7
7
  var _apiSecurity = require("@webiny/api-security");
8
- const checkPermissions = context => {
8
+ const ensureAuthentication = context => {
9
9
  const identity = context.security.getIdentity();
10
10
  if (!identity) {
11
11
  throw new _apiSecurity.NotAuthorizedError();
12
12
  }
13
13
  };
14
- exports.checkPermissions = checkPermissions;
14
+ exports.ensureAuthentication = ensureAuthentication;
15
+
16
+ //# sourceMappingURL=ensureAuthentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_apiSecurity","require","ensureAuthentication","context","identity","security","getIdentity","NotAuthorizedError","exports"],"sources":["ensureAuthentication.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const ensureAuthentication = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,oBAAoB,GAAIC,OAAmB,IAAK;EACzD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,CAAC,CAAC;EAClC;AACJ,CAAC;AAACC,OAAA,CAAAN,oBAAA,GAAAA,oBAAA"}
@@ -1,7 +1,7 @@
1
1
  import { Folder } from "../folder/folder.types";
2
2
  interface GetFolderAndItsAncestorsParams {
3
- id: string;
3
+ folder: Folder;
4
4
  folders: Folder[];
5
5
  }
6
- export declare const getFolderAndItsAncestors: ({ id, folders }: GetFolderAndItsAncestorsParams) => Folder[];
6
+ export declare const getFolderAndItsAncestors: ({ folder, folders }: GetFolderAndItsAncestorsParams) => Folder[];
7
7
  export {};
@@ -5,32 +5,35 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getFolderAndItsAncestors = void 0;
7
7
  const getFolderAndItsAncestors = ({
8
- id,
8
+ folder,
9
9
  folders
10
10
  }) => {
11
11
  // Create a Map with folders, using folder.id as key
12
12
  const folderMap = new Map();
13
13
  folders.forEach(folder => folderMap.set(folder.id, folder));
14
- const findParents = (next, id) => {
15
- const folder = folderMap.get(id);
16
-
14
+ const findParents = (next, current) => {
17
15
  // No folder found: return the result
18
- if (!folder) {
16
+ if (!current) {
19
17
  return next;
20
18
  }
21
19
 
22
20
  // Push the current folder into the accumulator array
23
- next.push(folder);
21
+ next.push(current);
24
22
 
25
23
  // No parentId found: return the result
26
- if (!folder.parentId) {
24
+ if (!current.parentId) {
25
+ return next;
26
+ }
27
+ const parent = folderMap.get(current.parentId);
28
+
29
+ // No parent found: return the result
30
+ if (!parent) {
27
31
  return next;
28
32
  }
29
33
 
30
34
  // Go ahead and find parent for the current parent
31
- return findParents(next, folder.parentId);
35
+ return findParents(next, parent);
32
36
  };
33
- const folder = folderMap.get(id);
34
37
 
35
38
  // No folder found: return an empty array
36
39
  if (!folder) {
@@ -43,6 +46,8 @@ const getFolderAndItsAncestors = ({
43
46
  }
44
47
 
45
48
  // Recursively find parents for a given folder id
46
- return findParents([], id);
49
+ return findParents([], folder);
47
50
  };
48
- exports.getFolderAndItsAncestors = getFolderAndItsAncestors;
51
+ exports.getFolderAndItsAncestors = getFolderAndItsAncestors;
52
+
53
+ //# sourceMappingURL=getFolderAndItsAncestors.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getFolderAndItsAncestors","id","folders","folderMap","Map","forEach","folder","set","findParents","next","get","push","parentId"],"sources":["getFolderAndItsAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\ninterface GetFolderAndItsAncestorsParams {\n id: string;\n folders: Folder[];\n}\n\nexport const getFolderAndItsAncestors = ({\n id,\n folders\n}: GetFolderAndItsAncestorsParams): Folder[] => {\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(folder => folderMap.set(folder.id, folder));\n\n const findParents = (next: Folder[], id: string): Folder[] => {\n const folder = folderMap.get(id);\n\n // No folder found: return the result\n if (!folder) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(folder);\n\n // No parentId found: return the result\n if (!folder.parentId) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, folder.parentId);\n };\n\n const folder = folderMap.get(id);\n\n // No folder found: return an empty array\n if (!folder) {\n return [];\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return [folder];\n }\n\n // Recursively find parents for a given folder id\n return findParents([], id);\n};\n"],"mappings":";;;;;;AAOO,MAAMA,wBAAwB,GAAG,CAAC;EACrCC,EAAE;EACFC;AAC4B,CAAC,KAAe;EAC5C;EACA,MAAMC,SAAS,GAAG,IAAIC,GAAG,EAAkB;EAC3CF,OAAO,CAACG,OAAO,CAACC,MAAM,IAAIH,SAAS,CAACI,GAAG,CAACD,MAAM,CAACL,EAAE,EAAEK,MAAM,CAAC,CAAC;EAE3D,MAAME,WAAW,GAAG,CAACC,IAAc,EAAER,EAAU,KAAe;IAC1D,MAAMK,MAAM,GAAGH,SAAS,CAACO,GAAG,CAACT,EAAE,CAAC;;IAEhC;IACA,IAAI,CAACK,MAAM,EAAE;MACT,OAAOG,IAAI;IACf;;IAEA;IACAA,IAAI,CAACE,IAAI,CAACL,MAAM,CAAC;;IAEjB;IACA,IAAI,CAACA,MAAM,CAACM,QAAQ,EAAE;MAClB,OAAOH,IAAI;IACf;;IAEA;IACA,OAAOD,WAAW,CAACC,IAAI,EAAEH,MAAM,CAACM,QAAQ,CAAC;EAC7C,CAAC;EAED,MAAMN,MAAM,GAAGH,SAAS,CAACO,GAAG,CAACT,EAAE,CAAC;;EAEhC;EACA,IAAI,CAACK,MAAM,EAAE;IACT,OAAO,EAAE;EACb;;EAEA;EACA,IAAI,CAACA,MAAM,CAACM,QAAQ,EAAE;IAClB,OAAO,CAACN,MAAM,CAAC;EACnB;;EAEA;EACA,OAAOE,WAAW,CAAC,EAAE,EAAEP,EAAE,CAAC;AAC9B,CAAC;AAAC"}
1
+ {"version":3,"names":["getFolderAndItsAncestors","folder","folders","folderMap","Map","forEach","set","id","findParents","next","current","push","parentId","parent","get","exports"],"sources":["getFolderAndItsAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\ninterface GetFolderAndItsAncestorsParams {\n folder: Folder;\n folders: Folder[];\n}\n\nexport const getFolderAndItsAncestors = ({\n folder,\n folders\n}: GetFolderAndItsAncestorsParams): Folder[] => {\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(folder => folderMap.set(folder.id, folder));\n\n const findParents = (next: Folder[], current: Folder): Folder[] => {\n // No folder found: return the result\n if (!current) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(current);\n\n // No parentId found: return the result\n if (!current.parentId) {\n return next;\n }\n\n const parent = folderMap.get(current.parentId);\n\n // No parent found: return the result\n if (!parent) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, parent);\n };\n\n // No folder found: return an empty array\n if (!folder) {\n return [];\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return [folder];\n }\n\n // Recursively find parents for a given folder id\n return findParents([], folder);\n};\n"],"mappings":";;;;;;AAOO,MAAMA,wBAAwB,GAAGA,CAAC;EACrCC,MAAM;EACNC;AAC4B,CAAC,KAAe;EAC5C;EACA,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAC3CF,OAAO,CAACG,OAAO,CAACJ,MAAM,IAAIE,SAAS,CAACG,GAAG,CAACL,MAAM,CAACM,EAAE,EAAEN,MAAM,CAAC,CAAC;EAE3D,MAAMO,WAAW,GAAGA,CAACC,IAAc,EAAEC,OAAe,KAAe;IAC/D;IACA,IAAI,CAACA,OAAO,EAAE;MACV,OAAOD,IAAI;IACf;;IAEA;IACAA,IAAI,CAACE,IAAI,CAACD,OAAO,CAAC;;IAElB;IACA,IAAI,CAACA,OAAO,CAACE,QAAQ,EAAE;MACnB,OAAOH,IAAI;IACf;IAEA,MAAMI,MAAM,GAAGV,SAAS,CAACW,GAAG,CAACJ,OAAO,CAACE,QAAQ,CAAC;;IAE9C;IACA,IAAI,CAACC,MAAM,EAAE;MACT,OAAOJ,IAAI;IACf;;IAEA;IACA,OAAOD,WAAW,CAACC,IAAI,EAAEI,MAAM,CAAC;EACpC,CAAC;;EAED;EACA,IAAI,CAACZ,MAAM,EAAE;IACT,OAAO,EAAE;EACb;;EAEA;EACA,IAAI,CAACA,MAAM,CAACW,QAAQ,EAAE;IAClB,OAAO,CAACX,MAAM,CAAC;EACnB;;EAEA;EACA,OAAOO,WAAW,CAAC,EAAE,EAAEP,MAAM,CAAC;AAClC,CAAC;AAACc,OAAA,CAAAf,wBAAA,GAAAA,wBAAA"}
@@ -18,4 +18,6 @@ const isInstallationPending = ({
18
18
  }
19
19
  return !i18n.getContentLocale();
20
20
  };
21
- exports.isInstallationPending = isInstallationPending;
21
+ exports.isInstallationPending = isInstallationPending;
22
+
23
+ //# sourceMappingURL=isInstallationPending.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isInstallationPending","tenancy","i18n","tenant","getCurrentTenant","getContentLocale"],"sources":["isInstallationPending.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\n\ntype CheckInstallationParams = Pick<AcoContext, \"tenancy\" | \"i18n\">;\nexport const isInstallationPending = ({ tenancy, i18n }: CheckInstallationParams): boolean => {\n /**\n * In case of a fresh webiny project \"tenant\" and \"locale\" won't be there until\n * installation is completed. So, we need to skip \"ACO\" creation till then.\n */\n const tenant = tenancy.getCurrentTenant();\n if (!tenant) {\n return true;\n }\n\n return !i18n.getContentLocale();\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAG,CAAC;EAAEC,OAAO;EAAEC;AAA8B,CAAC,KAAc;EAC1F;AACJ;AACA;AACA;EACI,MAAMC,MAAM,GAAGF,OAAO,CAACG,gBAAgB,EAAE;EACzC,IAAI,CAACD,MAAM,EAAE;IACT,OAAO,IAAI;EACf;EAEA,OAAO,CAACD,IAAI,CAACG,gBAAgB,EAAE;AACnC,CAAC;AAAC"}
1
+ {"version":3,"names":["isInstallationPending","tenancy","i18n","tenant","getCurrentTenant","getContentLocale","exports"],"sources":["isInstallationPending.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\n\ntype CheckInstallationParams = Pick<AcoContext, \"tenancy\" | \"i18n\">;\nexport const isInstallationPending = ({ tenancy, i18n }: CheckInstallationParams): boolean => {\n /**\n * In case of a fresh webiny project \"tenant\" and \"locale\" won't be there until\n * installation is completed. So, we need to skip \"ACO\" creation till then.\n */\n const tenant = tenancy.getCurrentTenant();\n if (!tenant) {\n return true;\n }\n\n return !i18n.getContentLocale();\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAGA,CAAC;EAAEC,OAAO;EAAEC;AAA8B,CAAC,KAAc;EAC1F;AACJ;AACA;AACA;EACI,MAAMC,MAAM,GAAGF,OAAO,CAACG,gBAAgB,CAAC,CAAC;EACzC,IAAI,CAACD,MAAM,EAAE;IACT,OAAO,IAAI;EACf;EAEA,OAAO,CAACD,IAAI,CAACG,gBAAgB,CAAC,CAAC;AACnC,CAAC;AAACC,OAAA,CAAAN,qBAAA,GAAAA,qBAAA"}
@@ -1,7 +1,5 @@
1
1
  import { CmsModelPlugin, CmsPrivateModelFull } from "@webiny/api-headless-cms";
2
- import { CmsGroup } from "@webiny/api-headless-cms/types";
3
2
  interface Params {
4
- group: Pick<CmsGroup, "id" | "name">;
5
3
  /**
6
4
  * Locale and tenant do not need to be defined.
7
5
  * In that case model is not bound to any locale or tenant.
@@ -9,7 +7,7 @@ interface Params {
9
7
  */
10
8
  locale?: string;
11
9
  tenant?: string;
12
- modelDefinition: Omit<CmsPrivateModelFull, "noValidate" | "group">;
10
+ modelDefinition: CmsPrivateModelFull;
13
11
  }
14
12
  export declare const modelFactory: (params: Params) => CmsModelPlugin;
15
13
  export {};
@@ -1,25 +1,22 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.modelFactory = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
7
  var _apiHeadlessCms = require("@webiny/api-headless-cms");
10
8
  const modelFactory = params => {
11
9
  const {
12
- group,
13
10
  locale,
14
11
  tenant,
15
12
  modelDefinition
16
13
  } = params;
17
- return (0, _apiHeadlessCms.createCmsModel)((0, _objectSpread2.default)((0, _objectSpread2.default)({
18
- group,
14
+ return (0, _apiHeadlessCms.createCmsModel)({
19
15
  locale,
20
- tenant
21
- }, modelDefinition), {}, {
22
- noValidate: true
23
- }));
16
+ tenant,
17
+ ...modelDefinition
18
+ });
24
19
  };
25
- exports.modelFactory = modelFactory;
20
+ exports.modelFactory = modelFactory;
21
+
22
+ //# sourceMappingURL=modelFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["modelFactory","params","group","locale","tenant","modelDefinition","createCmsModel","noValidate"],"sources":["modelFactory.ts"],"sourcesContent":["import { CmsModelPlugin, CmsPrivateModelFull, createCmsModel } from \"@webiny/api-headless-cms\";\nimport { CmsGroup } from \"@webiny/api-headless-cms/types\";\n\ninterface Params {\n group: Pick<CmsGroup, \"id\" | \"name\">;\n /**\n * Locale and tenant do not need to be defined.\n * In that case model is not bound to any locale or tenant.\n * You can bind it to locale, tenant, both or none.\n */\n locale?: string;\n tenant?: string;\n modelDefinition: Omit<CmsPrivateModelFull, \"noValidate\" | \"group\">;\n}\n\nexport const modelFactory = (params: Params): CmsModelPlugin => {\n const { group, locale, tenant, modelDefinition } = params;\n\n return createCmsModel({\n group,\n locale,\n tenant,\n ...modelDefinition,\n noValidate: true\n });\n};\n"],"mappings":";;;;;;;;AAAA;AAeO,MAAMA,YAAY,GAAIC,MAAc,IAAqB;EAC5D,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAgB,CAAC,GAAGJ,MAAM;EAEzD,OAAO,IAAAK,8BAAc;IACjBJ,KAAK;IACLC,MAAM;IACNC;EAAM,GACHC,eAAe;IAClBE,UAAU,EAAE;EAAI,GAClB;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_apiHeadlessCms","require","modelFactory","params","locale","tenant","modelDefinition","createCmsModel","exports"],"sources":["modelFactory.ts"],"sourcesContent":["import { CmsModelPlugin, CmsPrivateModelFull, createCmsModel } from \"@webiny/api-headless-cms\";\n\ninterface Params {\n /**\n * Locale and tenant do not need to be defined.\n * In that case model is not bound to any locale or tenant.\n * You can bind it to locale, tenant, both or none.\n */\n locale?: string;\n tenant?: string;\n modelDefinition: CmsPrivateModelFull;\n}\n\nexport const modelFactory = (params: Params): CmsModelPlugin => {\n const { locale, tenant, modelDefinition } = params;\n\n return createCmsModel({\n locale,\n tenant,\n ...modelDefinition\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAaO,MAAMC,YAAY,GAAIC,MAAc,IAAqB;EAC5D,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAgB,CAAC,GAAGH,MAAM;EAElD,OAAO,IAAAI,8BAAc,EAAC;IAClBH,MAAM;IACNC,MAAM;IACN,GAAGC;EACP,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAN,YAAA,GAAAA,YAAA"}
@@ -0,0 +1,3 @@
1
+ import { CmsEntry } from "@webiny/api-headless-cms/types";
2
+ export declare const baseFields: string[];
3
+ export declare function pickEntryFieldValues<T>(entry: CmsEntry): T;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.baseFields = void 0;
7
+ exports.pickEntryFieldValues = pickEntryFieldValues;
8
+ const baseFields = [
9
+ // Entry ID is mapped to "id" (we don't use revisions with ACO entities).
10
+ "id", "createdOn", "modifiedOn", "savedOn", "createdBy", "modifiedBy", "savedBy"];
11
+ exports.baseFields = baseFields;
12
+ const pickBaseEntryFieldValues = entry => {
13
+ const pickedValues = {};
14
+ for (const fieldName of baseFields) {
15
+ const [srcFieldName, targetFieldName = srcFieldName] = fieldName.split(":");
16
+ if (srcFieldName in entry) {
17
+ Object.assign(pickedValues, {
18
+ [targetFieldName]: entry[srcFieldName]
19
+ });
20
+ }
21
+ }
22
+ return pickedValues;
23
+ };
24
+ function pickEntryFieldValues(entry) {
25
+ return {
26
+ ...pickBaseEntryFieldValues(entry),
27
+ ...entry.values
28
+ };
29
+ }
30
+
31
+ //# sourceMappingURL=pickEntryFieldValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["baseFields","exports","pickBaseEntryFieldValues","entry","pickedValues","fieldName","srcFieldName","targetFieldName","split","Object","assign","pickEntryFieldValues","values"],"sources":["pickEntryFieldValues.ts"],"sourcesContent":["import { CmsEntry } from \"@webiny/api-headless-cms/types\";\n\nexport const baseFields = [\n // Entry ID is mapped to \"id\" (we don't use revisions with ACO entities).\n \"id\",\n\n \"createdOn\",\n \"modifiedOn\",\n \"savedOn\",\n \"createdBy\",\n \"modifiedBy\",\n \"savedBy\"\n];\n\nconst pickBaseEntryFieldValues = (entry: CmsEntry) => {\n const pickedValues: Partial<CmsEntry> = {};\n for (const fieldName of baseFields) {\n const [srcFieldName, targetFieldName = srcFieldName] = fieldName.split(\":\");\n if (srcFieldName in entry) {\n Object.assign(pickedValues, {\n [targetFieldName]: entry[srcFieldName as keyof CmsEntry]\n });\n }\n }\n\n return pickedValues;\n};\n\nexport function pickEntryFieldValues<T>(entry: CmsEntry): T {\n return {\n ...pickBaseEntryFieldValues(entry),\n ...entry.values\n } as T;\n}\n"],"mappings":";;;;;;;AAEO,MAAMA,UAAU,GAAG;AACtB;AACA,IAAI,EAEJ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,SAAS,CACZ;AAACC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAEF,MAAME,wBAAwB,GAAIC,KAAe,IAAK;EAClD,MAAMC,YAA+B,GAAG,CAAC,CAAC;EAC1C,KAAK,MAAMC,SAAS,IAAIL,UAAU,EAAE;IAChC,MAAM,CAACM,YAAY,EAAEC,eAAe,GAAGD,YAAY,CAAC,GAAGD,SAAS,CAACG,KAAK,CAAC,GAAG,CAAC;IAC3E,IAAIF,YAAY,IAAIH,KAAK,EAAE;MACvBM,MAAM,CAACC,MAAM,CAACN,YAAY,EAAE;QACxB,CAACG,eAAe,GAAGJ,KAAK,CAACG,YAAY;MACzC,CAAC,CAAC;IACN;EACJ;EAEA,OAAOF,YAAY;AACvB,CAAC;AAEM,SAASO,oBAAoBA,CAAIR,KAAe,EAAK;EACxD,OAAO;IACH,GAAGD,wBAAwB,CAACC,KAAK,CAAC;IAClC,GAAGA,KAAK,CAACS;EACb,CAAC;AACL"}
package/utils/resolve.js CHANGED
@@ -21,4 +21,6 @@ const resolveList = async fn => {
21
21
  return new _handlerGraphql.ErrorResponse(e);
22
22
  }
23
23
  };
24
- exports.resolveList = resolveList;
24
+ exports.resolveList = resolveList;
25
+
26
+ //# sourceMappingURL=resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["resolve","fn","Response","e","ErrorResponse","resolveList","items","meta","ListResponse"],"sources":["resolve.ts"],"sourcesContent":["import { ErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\n\nexport const resolve = async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\nexport const resolveList = async (fn: () => Promise<any>) => {\n try {\n const [items, meta] = await fn();\n return new ListResponse(items, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA;AAEO,MAAMA,OAAO,GAAG,MAAOC,EAAsB,IAAK;EACrD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,EAAE,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAAC;AACK,MAAME,WAAW,GAAG,MAAOJ,EAAsB,IAAK;EACzD,IAAI;IACA,MAAM,CAACK,KAAK,EAAEC,IAAI,CAAC,GAAG,MAAMN,EAAE,EAAE;IAChC,OAAO,IAAIO,4BAAY,CAACF,KAAK,EAAEC,IAAI,CAAC;EACxC,CAAC,CAAC,OAAOJ,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAAC"}
1
+ {"version":3,"names":["_handlerGraphql","require","resolve","fn","Response","e","ErrorResponse","exports","resolveList","items","meta","ListResponse"],"sources":["resolve.ts"],"sourcesContent":["import { ErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\n\nexport const resolve = async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\nexport const resolveList = async (fn: () => Promise<any>) => {\n try {\n const [items, meta] = await fn();\n return new ListResponse(items, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,OAAO,GAAG,MAAOC,EAAsB,IAAK;EACrD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACE,OAAA,CAAAL,OAAA,GAAAA,OAAA;AACK,MAAMM,WAAW,GAAG,MAAOL,EAAsB,IAAK;EACzD,IAAI;IACA,MAAM,CAACM,KAAK,EAAEC,IAAI,CAAC,GAAG,MAAMP,EAAE,CAAC,CAAC;IAChC,OAAO,IAAIQ,4BAAY,CAACF,KAAK,EAAEC,IAAI,CAAC;EACxC,CAAC,CAAC,OAAOL,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACE,OAAA,CAAAC,WAAA,GAAAA,WAAA"}
@@ -1,2 +0,0 @@
1
- import { AcoContext } from "../types";
2
- export declare const onFolderBeforeDeleteHook: ({ aco }: AcoContext) => void;