@webiny/api-aco 5.38.4-beta.0 → 5.38.5-beta.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.
package/index.d.ts CHANGED
@@ -6,4 +6,4 @@ export * from "./plugins";
6
6
  export interface CreateAcoParams {
7
7
  useFolderLevelPermissions?: boolean;
8
8
  }
9
- export declare const createAco: (params?: CreateAcoParams) => (import("@webiny/api-headless-cms/types").CmsModelFieldToGraphQLPlugin<import("@webiny/api-headless-cms/types").CmsModelField> | import("@webiny/api").ContextPlugin<import("./types").AcoContext> | import("@webiny/handler-graphql").GraphQLSchemaPlugin<import("./types").AcoContext>)[];
9
+ export declare const createAco: (params?: CreateAcoParams) => (import("@webiny/api").ContextPlugin<import("./types").AcoContext> | import("@webiny/handler-graphql").GraphQLSchemaPlugin<import("./types").AcoContext>)[];
package/index.js CHANGED
@@ -30,7 +30,6 @@ Object.defineProperty(exports, "SEARCH_RECORD_MODEL_ID", {
30
30
  exports.createAco = void 0;
31
31
  var _createAcoContext = require("./createAcoContext");
32
32
  var _createAcoGraphQL = require("./createAcoGraphQL");
33
- var _fields = require("./fields");
34
33
  var _record = require("./record/record.model");
35
34
  var _folder = require("./folder/folder.model");
36
35
  var _filter = require("./filter/filter.model");
@@ -59,7 +58,7 @@ Object.keys(_plugins).forEach(function (key) {
59
58
  });
60
59
  });
61
60
  const createAco = (params = {}) => {
62
- return [...(0, _fields.createFields)(), (0, _createAcoContext.createAcoContext)(params), ...(0, _createAcoGraphQL.createAcoGraphQL)()];
61
+ return [(0, _createAcoContext.createAcoContext)(params), ...(0, _createAcoGraphQL.createAcoGraphQL)()];
63
62
  };
64
63
  exports.createAco = createAco;
65
64
 
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_createAcoContext","require","_createAcoGraphQL","_fields","_record","_folder","_filter","_apps","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_plugins","createAco","params","createFields","createAcoContext","createAcoGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createAcoContext } from \"~/createAcoContext\";\nimport { createAcoGraphQL } from \"~/createAcoGraphQL\";\nimport { createFields } from \"~/fields\";\n\nexport { SEARCH_RECORD_MODEL_ID } from \"./record/record.model\";\nexport { FOLDER_MODEL_ID } from \"./folder/folder.model\";\nexport { FILTER_MODEL_ID } from \"./filter/filter.model\";\nexport * from \"./apps\";\nexport * from \"./plugins\";\n\nexport interface CreateAcoParams {\n useFolderLevelPermissions?: boolean;\n}\n\nexport const createAco = (params: CreateAcoParams = {}) => {\n return [...createFields(), createAcoContext(params), ...createAcoGraphQL()];\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AAAAO,MAAA,CAAAC,IAAA,CAAAF,KAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,KAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,KAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAnB,OAAA;AAAAO,MAAA,CAAAC,IAAA,CAAAW,QAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,QAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAMO,MAAMU,SAAS,GAAGA,CAACC,MAAuB,GAAG,CAAC,CAAC,KAAK;EACvD,OAAO,CAAC,GAAG,IAAAC,oBAAY,EAAC,CAAC,EAAE,IAAAC,kCAAgB,EAACF,MAAM,CAAC,EAAE,GAAG,IAAAG,kCAAgB,EAAC,CAAC,CAAC;AAC/E,CAAC;AAACT,OAAA,CAAAK,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"names":["_createAcoContext","require","_createAcoGraphQL","_record","_folder","_filter","_apps","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_plugins","createAco","params","createAcoContext","createAcoGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createAcoContext } from \"~/createAcoContext\";\nimport { createAcoGraphQL } from \"~/createAcoGraphQL\";\n\nexport { SEARCH_RECORD_MODEL_ID } from \"./record/record.model\";\nexport { FOLDER_MODEL_ID } from \"./folder/folder.model\";\nexport { FILTER_MODEL_ID } from \"./filter/filter.model\";\nexport * from \"./apps\";\nexport * from \"./plugins\";\n\nexport interface CreateAcoParams {\n useFolderLevelPermissions?: boolean;\n}\n\nexport const createAco = (params: CreateAcoParams = {}) => {\n return [createAcoContext(params), ...createAcoGraphQL()];\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AAAAM,MAAA,CAAAC,IAAA,CAAAF,KAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,KAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,KAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAlB,OAAA;AAAAM,MAAA,CAAAC,IAAA,CAAAW,QAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,QAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,QAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAMO,MAAMU,SAAS,GAAGA,CAACC,MAAuB,GAAG,CAAC,CAAC,KAAK;EACvD,OAAO,CAAC,IAAAC,kCAAgB,EAACD,MAAM,CAAC,EAAE,GAAG,IAAAE,kCAAgB,EAAC,CAAC,CAAC;AAC5D,CAAC;AAACR,OAAA,CAAAK,SAAA,GAAAA,SAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-aco",
3
- "version": "5.38.4-beta.0",
3
+ "version": "5.38.5-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "aco:base"
@@ -23,18 +23,18 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@ungap/structured-clone": "1.2.0",
26
- "@webiny/api": "5.38.4-beta.0",
27
- "@webiny/api-authentication": "5.38.4-beta.0",
28
- "@webiny/api-headless-cms": "5.38.4-beta.0",
29
- "@webiny/api-i18n": "5.38.4-beta.0",
30
- "@webiny/api-security": "5.38.4-beta.0",
31
- "@webiny/api-tenancy": "5.38.4-beta.0",
32
- "@webiny/error": "5.38.4-beta.0",
33
- "@webiny/handler": "5.38.4-beta.0",
34
- "@webiny/handler-graphql": "5.38.4-beta.0",
35
- "@webiny/pubsub": "5.38.4-beta.0",
36
- "@webiny/utils": "5.38.4-beta.0",
37
- "@webiny/validation": "5.38.4-beta.0",
26
+ "@webiny/api": "5.38.5-beta.0",
27
+ "@webiny/api-authentication": "5.38.5-beta.0",
28
+ "@webiny/api-headless-cms": "5.38.5-beta.0",
29
+ "@webiny/api-i18n": "5.38.5-beta.0",
30
+ "@webiny/api-security": "5.38.5-beta.0",
31
+ "@webiny/api-tenancy": "5.38.5-beta.0",
32
+ "@webiny/error": "5.38.5-beta.0",
33
+ "@webiny/handler": "5.38.5-beta.0",
34
+ "@webiny/handler-graphql": "5.38.5-beta.0",
35
+ "@webiny/pubsub": "5.38.5-beta.0",
36
+ "@webiny/utils": "5.38.5-beta.0",
37
+ "@webiny/validation": "5.38.5-beta.0",
38
38
  "lodash": "4.17.21"
39
39
  },
40
40
  "devDependencies": {
@@ -44,22 +44,22 @@
44
44
  "@babel/preset-typescript": "7.22.5",
45
45
  "@babel/runtime": "7.22.6",
46
46
  "@types/ungap__structured-clone": "0.3.0",
47
- "@webiny/api-admin-users": "5.38.4-beta.0",
48
- "@webiny/api-file-manager": "5.38.4-beta.0",
49
- "@webiny/api-i18n-ddb": "5.38.4-beta.0",
50
- "@webiny/api-security-so-ddb": "5.38.4-beta.0",
51
- "@webiny/api-tenancy-so-ddb": "5.38.4-beta.0",
52
- "@webiny/api-wcp": "5.38.4-beta.0",
53
- "@webiny/cli": "5.38.4-beta.0",
54
- "@webiny/handler-aws": "5.38.4-beta.0",
55
- "@webiny/plugins": "5.38.4-beta.0",
56
- "@webiny/project-utils": "5.38.4-beta.0",
57
- "@webiny/wcp": "5.38.4-beta.0",
47
+ "@webiny/api-admin-users": "5.38.5-beta.0",
48
+ "@webiny/api-file-manager": "5.38.5-beta.0",
49
+ "@webiny/api-i18n-ddb": "5.38.5-beta.0",
50
+ "@webiny/api-security-so-ddb": "5.38.5-beta.0",
51
+ "@webiny/api-tenancy-so-ddb": "5.38.5-beta.0",
52
+ "@webiny/api-wcp": "5.38.5-beta.0",
53
+ "@webiny/cli": "5.38.5-beta.0",
54
+ "@webiny/handler-aws": "5.38.5-beta.0",
55
+ "@webiny/plugins": "5.38.5-beta.0",
56
+ "@webiny/project-utils": "5.38.5-beta.0",
57
+ "@webiny/wcp": "5.38.5-beta.0",
58
58
  "graphql": "15.8.0",
59
59
  "prettier": "2.8.8",
60
60
  "rimraf": "3.0.2",
61
61
  "ttypescript": "1.5.15",
62
62
  "typescript": "4.7.4"
63
63
  },
64
- "gitHead": "56afdd84e0fc6608264ec0066ee3d8770859e8d5"
64
+ "gitHead": "79aa2d7ceea9c64f474d88251a100d0c89eb3cad"
65
65
  }
@@ -7,54 +7,10 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.CmsEntriesCrudDecorators = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _handlerGraphql = require("@webiny/handler-graphql");
11
10
  var _where = require("./where");
12
11
  var _constants = require("./constants");
13
- /**
14
- * Keep this until we figure out how to fetch the folders.
15
- */
16
- const isPageModel = model => {
17
- if (model.modelId === "pbPage") {
18
- return true;
19
- } else if (model.modelId === "acoSearchRecord-pbpage") {
20
- return true;
21
- }
22
- return false;
23
- };
24
- const createFolderType = model => {
25
- if (model.modelId === "fmFile") {
26
- return "FmFile";
27
- } else if (isPageModel(model)) {
28
- return "PbPage";
29
- }
30
- return `cms:${model.modelId}`;
31
- };
32
- const filterEntriesByFolderFactory = (context, permissions) => {
33
- return async (model, entries) => {
34
- const [folders] = await context.aco.folder.listAll({
35
- where: {
36
- type: createFolderType(model)
37
- }
38
- });
39
- const results = await Promise.all(entries.map(async entry => {
40
- var _entry$location;
41
- const folderId = (_entry$location = entry.location) === null || _entry$location === void 0 ? void 0 : _entry$location.folderId;
42
- if (!folderId || folderId === _constants.ROOT_FOLDER) {
43
- return entry;
44
- }
45
- const folder = folders.find(folder => folder.id === folderId);
46
- if (!folder) {
47
- throw new _handlerGraphql.NotFoundError(`Folder "${folderId}" not found.`);
48
- }
49
- const result = await permissions.canAccessFolderContent({
50
- folder,
51
- rwd: "r"
52
- });
53
- return result ? entry : null;
54
- }));
55
- return results.filter(entry => !!entry);
56
- };
57
- };
12
+ var _filterEntriesByFolderFactory = require("./filterEntriesByFolderFactory");
13
+ var _createFolderType = require("./createFolderType");
58
14
  class CmsEntriesCrudDecorators {
59
15
  constructor({
60
16
  context
@@ -65,12 +21,13 @@ class CmsEntriesCrudDecorators {
65
21
  decorate() {
66
22
  const context = this.context;
67
23
  const folderLevelPermissions = context.aco.folderLevelPermissions;
68
- const filterEntriesByFolder = filterEntriesByFolderFactory(context, folderLevelPermissions);
24
+ const filterEntriesByFolder = (0, _filterEntriesByFolderFactory.filterEntriesByFolderFactory)(context, folderLevelPermissions);
69
25
  const originalCmsListEntries = context.cms.listEntries.bind(context.cms);
70
26
  context.cms.listEntries = async (model, params) => {
71
- const folderType = createFolderType(model);
27
+ const folderType = (0, _createFolderType.createFolderType)(model);
72
28
  const folders = await folderLevelPermissions.listAllFoldersWithPermissions(folderType);
73
29
  const where = (0, _where.createWhere)({
30
+ model,
74
31
  where: params.where,
75
32
  folders
76
33
  });
@@ -80,9 +37,9 @@ class CmsEntriesCrudDecorators {
80
37
  };
81
38
  const originalCmsGetEntry = context.cms.getEntry.bind(context.cms);
82
39
  context.cms.getEntry = async (model, params) => {
83
- var _entry$location2;
40
+ var _entry$location;
84
41
  const entry = await originalCmsGetEntry(model, params);
85
- const folderId = entry === null || entry === void 0 || (_entry$location2 = entry.location) === null || _entry$location2 === void 0 ? void 0 : _entry$location2.folderId;
42
+ const folderId = entry === null || entry === void 0 || (_entry$location = entry.location) === null || _entry$location === void 0 ? void 0 : _entry$location.folderId;
86
43
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
87
44
  return entry;
88
45
  }
@@ -95,9 +52,9 @@ class CmsEntriesCrudDecorators {
95
52
  };
96
53
  const originalCmsGetEntryById = context.cms.getEntryById.bind(context.cms);
97
54
  context.cms.getEntryById = async (model, params) => {
98
- var _entry$location3;
55
+ var _entry$location2;
99
56
  const entry = await originalCmsGetEntryById(model, params);
100
- const folderId = entry === null || entry === void 0 || (_entry$location3 = entry.location) === null || _entry$location3 === void 0 ? void 0 : _entry$location3.folderId;
57
+ const folderId = entry === null || entry === void 0 || (_entry$location2 = entry.location) === null || _entry$location2 === void 0 ? void 0 : _entry$location2.folderId;
101
58
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
102
59
  return entry;
103
60
  }
@@ -134,11 +91,11 @@ class CmsEntriesCrudDecorators {
134
91
  };
135
92
  const originalCmsCreateFromEntry = context.cms.createEntryRevisionFrom.bind(context.cms);
136
93
  context.cms.createEntryRevisionFrom = async (model, id, input, options) => {
137
- var _entry$location4;
94
+ var _entry$location3;
138
95
  const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
139
96
  id
140
97
  });
141
- const folderId = entry === null || entry === void 0 || (_entry$location4 = entry.location) === null || _entry$location4 === void 0 ? void 0 : _entry$location4.folderId;
98
+ const folderId = entry === null || entry === void 0 || (_entry$location3 = entry.location) === null || _entry$location3 === void 0 ? void 0 : _entry$location3.folderId;
142
99
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
143
100
  return originalCmsCreateFromEntry(model, id, input, options);
144
101
  }
@@ -151,11 +108,11 @@ class CmsEntriesCrudDecorators {
151
108
  };
152
109
  const originalCmsUpdateEntry = context.cms.updateEntry.bind(context.cms);
153
110
  context.cms.updateEntry = async (model, id, input, meta, options) => {
154
- var _entry$location5;
111
+ var _entry$location4;
155
112
  const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
156
113
  id
157
114
  });
158
- const folderId = entry === null || entry === void 0 || (_entry$location5 = entry.location) === null || _entry$location5 === void 0 ? void 0 : _entry$location5.folderId;
115
+ const folderId = entry === null || entry === void 0 || (_entry$location4 = entry.location) === null || _entry$location4 === void 0 ? void 0 : _entry$location4.folderId;
159
116
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
160
117
  return originalCmsUpdateEntry(model, id, input, meta, options);
161
118
  }
@@ -168,11 +125,11 @@ class CmsEntriesCrudDecorators {
168
125
  };
169
126
  const originalCmsDeleteEntry = context.cms.deleteEntry.bind(context.cms);
170
127
  context.cms.deleteEntry = async (model, id, options) => {
171
- var _entry$location6;
128
+ var _entry$location5;
172
129
  const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
173
130
  id
174
131
  });
175
- const folderId = entry === null || entry === void 0 || (_entry$location6 = entry.location) === null || _entry$location6 === void 0 ? void 0 : _entry$location6.folderId;
132
+ const folderId = entry === null || entry === void 0 || (_entry$location5 = entry.location) === null || _entry$location5 === void 0 ? void 0 : _entry$location5.folderId;
176
133
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
177
134
  return originalCmsDeleteEntry(model, id, options);
178
135
  }
@@ -185,11 +142,11 @@ class CmsEntriesCrudDecorators {
185
142
  };
186
143
  const originalCmsDeleteEntryRevision = context.cms.deleteEntryRevision.bind(context.cms);
187
144
  context.cms.deleteEntryRevision = async (model, id) => {
188
- var _entry$location7;
145
+ var _entry$location6;
189
146
  const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
190
147
  id
191
148
  });
192
- const folderId = entry === null || entry === void 0 || (_entry$location7 = entry.location) === null || _entry$location7 === void 0 ? void 0 : _entry$location7.folderId;
149
+ const folderId = entry === null || entry === void 0 || (_entry$location6 = entry.location) === null || _entry$location6 === void 0 ? void 0 : _entry$location6.folderId;
193
150
  if (!folderId || folderId === _constants.ROOT_FOLDER) {
194
151
  return originalCmsDeleteEntryRevision(model, id);
195
152
  }
@@ -202,14 +159,14 @@ class CmsEntriesCrudDecorators {
202
159
  };
203
160
  const originalCmsMoveEntry = context.cms.moveEntry.bind(context.cms);
204
161
  context.cms.moveEntry = async (model, id, targetFolderId) => {
205
- var _entry$location8;
162
+ var _entry$location7;
206
163
  /**
207
164
  * First we need to check if user has access to the entries existing folder.
208
165
  */
209
166
  const entry = await context.cms.storageOperations.entries.getRevisionById(model, {
210
167
  id
211
168
  });
212
- const folderId = (entry === null || entry === void 0 || (_entry$location8 = entry.location) === null || _entry$location8 === void 0 ? void 0 : _entry$location8.folderId) || _constants.ROOT_FOLDER;
169
+ const folderId = (entry === null || entry === void 0 || (_entry$location7 = entry.location) === null || _entry$location7 === void 0 ? void 0 : _entry$location7.folderId) || _constants.ROOT_FOLDER;
213
170
  /**
214
171
  * If the entry is in the same folder we are trying to move it to, just continue.
215
172
  */
@@ -1 +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","_entry$location","folderId","location","ROOT_FOLDER","find","id","NotFoundError","result","canAccessFolderContent","rwd","filter","CmsEntriesCrudDecorators","constructor","_defineProperty2","default","decorate","folderLevelPermissions","filterEntriesByFolder","originalCmsListEntries","cms","listEntries","bind","params","folderType","listAllFoldersWithPermissions","createWhere","_objectSpread2","originalCmsGetEntry","getEntry","_entry$location2","get","ensureCanAccessFolderContent","originalCmsGetEntryById","getEntryById","_entry$location3","originalGetLatestEntriesByIds","getLatestEntriesByIds","ids","originalGetPublishedEntriesByIds","getPublishedEntriesByIds","originalCmsCreateEntry","createEntry","options","_params$wbyAco_locati","_params$location","wbyAco_location","originalCmsCreateFromEntry","createEntryRevisionFrom","input","_entry$location4","storageOperations","getRevisionById","originalCmsUpdateEntry","updateEntry","meta","_entry$location5","originalCmsDeleteEntry","deleteEntry","_entry$location6","originalCmsDeleteEntryRevision","deleteEntryRevision","_entry$location7","originalCmsMoveEntry","moveEntry","targetFolderId","_entry$location8","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.getRevisionById(model, {\n id\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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"}
1
+ {"version":3,"names":["_where","require","_constants","_filterEntriesByFolderFactory","_createFolderType","CmsEntriesCrudDecorators","constructor","context","_defineProperty2","default","decorate","folderLevelPermissions","aco","filterEntriesByFolder","filterEntriesByFolderFactory","originalCmsListEntries","cms","listEntries","bind","model","params","folderType","createFolderType","folders","listAllFoldersWithPermissions","where","createWhere","_objectSpread2","originalCmsGetEntry","getEntry","_entry$location","entry","folderId","location","ROOT_FOLDER","folder","get","ensureCanAccessFolderContent","rwd","originalCmsGetEntryById","getEntryById","_entry$location2","originalGetLatestEntriesByIds","getLatestEntriesByIds","ids","entries","originalGetPublishedEntriesByIds","getPublishedEntriesByIds","originalCmsCreateEntry","createEntry","options","_params$wbyAco_locati","_params$location","wbyAco_location","originalCmsCreateFromEntry","createEntryRevisionFrom","id","input","_entry$location3","storageOperations","getRevisionById","originalCmsUpdateEntry","updateEntry","meta","_entry$location4","originalCmsDeleteEntry","deleteEntry","_entry$location5","originalCmsDeleteEntryRevision","deleteEntryRevision","_entry$location6","originalCmsMoveEntry","moveEntry","targetFolderId","_entry$location7","exports"],"sources":["CmsEntriesCrudDecorators.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\nimport { createWhere } from \"./where\";\nimport { ROOT_FOLDER } from \"./constants\";\nimport { filterEntriesByFolderFactory } from \"./filterEntriesByFolderFactory\";\nimport { createFolderType } from \"./createFolderType\";\n\ntype Context = Pick<AcoContext, \"aco\" | \"cms\">;\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 model,\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.getRevisionById(model, {\n id\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\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,2 @@
1
+ import { CmsModel } from "@webiny/api-headless-cms/types";
2
+ export declare const createFolderType: (model: CmsModel) => "FmFile" | "PbPage" | `cms:${string}`;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createFolderType = void 0;
7
+ var _isPageModel = require("./isPageModel");
8
+ const createFolderType = model => {
9
+ if (model.modelId === "fmFile") {
10
+ return "FmFile";
11
+ } else if ((0, _isPageModel.isPageModel)(model)) {
12
+ return "PbPage";
13
+ }
14
+ return `cms:${model.modelId}`;
15
+ };
16
+ exports.createFolderType = createFolderType;
17
+
18
+ //# sourceMappingURL=createFolderType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_isPageModel","require","createFolderType","model","modelId","isPageModel","exports"],"sources":["createFolderType.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { isPageModel } from \"./isPageModel\";\n\nexport const 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"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAIC,KAAe,IAA4C;EACxF,IAAIA,KAAK,CAACC,OAAO,KAAK,QAAQ,EAAE;IAC5B,OAAO,QAAQ;EACnB,CAAC,MAAM,IAAI,IAAAC,wBAAW,EAACF,KAAK,CAAC,EAAE;IAC3B,OAAO,QAAQ;EACnB;EACA,OAAQ,OAAMA,KAAK,CAACC,OAAQ,EAAC;AACjC,CAAC;AAACE,OAAA,CAAAJ,gBAAA,GAAAA,gBAAA"}
@@ -0,0 +1,6 @@
1
+ import { AcoContext } from "../../types";
2
+ import { CmsEntry, CmsModel } from "@webiny/api-headless-cms/types";
3
+ import { FolderLevelPermissions } from "../FolderLevelPermissions";
4
+ declare type Context = Pick<AcoContext, "aco" | "cms">;
5
+ export declare const filterEntriesByFolderFactory: (context: Context, permissions: FolderLevelPermissions) => (model: CmsModel, entries: CmsEntry[]) => Promise<CmsEntry<import("@webiny/api-headless-cms/types").CmsEntryValues>[]>;
6
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filterEntriesByFolderFactory = void 0;
7
+ var _handlerGraphql = require("@webiny/handler-graphql");
8
+ var _constants = require("./constants");
9
+ var _createFolderType = require("./createFolderType");
10
+ const filterEntriesByFolderFactory = (context, permissions) => {
11
+ return async (model, entries) => {
12
+ const [folders] = await context.aco.folder.listAll({
13
+ where: {
14
+ type: (0, _createFolderType.createFolderType)(model)
15
+ }
16
+ });
17
+ const results = await Promise.all(entries.map(async entry => {
18
+ var _entry$location;
19
+ const folderId = (_entry$location = entry.location) === null || _entry$location === void 0 ? void 0 : _entry$location.folderId;
20
+ if (!folderId || folderId === _constants.ROOT_FOLDER) {
21
+ return entry;
22
+ }
23
+ const folder = folders.find(folder => folder.id === folderId);
24
+ if (!folder) {
25
+ throw new _handlerGraphql.NotFoundError(`Folder "${folderId}" not found.`);
26
+ }
27
+ const result = await permissions.canAccessFolderContent({
28
+ folder,
29
+ rwd: "r"
30
+ });
31
+ return result ? entry : null;
32
+ }));
33
+ return results.filter(entry => !!entry);
34
+ };
35
+ };
36
+ exports.filterEntriesByFolderFactory = filterEntriesByFolderFactory;
37
+
38
+ //# sourceMappingURL=filterEntriesByFolderFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_handlerGraphql","require","_constants","_createFolderType","filterEntriesByFolderFactory","context","permissions","model","entries","folders","aco","folder","listAll","where","type","createFolderType","results","Promise","all","map","entry","_entry$location","folderId","location","ROOT_FOLDER","find","id","NotFoundError","result","canAccessFolderContent","rwd","filter","exports"],"sources":["filterEntriesByFolderFactory.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 { ROOT_FOLDER } from \"./constants\";\n\ntype Context = Pick<AcoContext, \"aco\" | \"cms\">;\n\nimport { createFolderType } from \"./createFolderType\";\n\nexport const filterEntriesByFolderFactory = (\n context: Context,\n permissions: FolderLevelPermissions\n) => {\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"],"mappings":";;;;;;AAEA,IAAAA,eAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAIA,IAAAE,iBAAA,GAAAF,OAAA;AAEO,MAAMG,4BAA4B,GAAGA,CACxCC,OAAgB,EAChBC,WAAmC,KAClC;EACD,OAAO,OAAOC,KAAe,EAAEC,OAAmB,KAAK;IACnD,MAAM,CAACC,OAAO,CAAC,GAAG,MAAMJ,OAAO,CAACK,GAAG,CAACC,MAAM,CAACC,OAAO,CAAC;MAC/CC,KAAK,EAAE;QACHC,IAAI,EAAE,IAAAC,kCAAgB,EAACR,KAAK;MAChC;IACJ,CAAC,CAAC;IAEF,MAAMS,OAAO,GAAG,MAAMC,OAAO,CAACC,GAAG,CAC7BV,OAAO,CAACW,GAAG,CAAC,MAAMC,KAAK,IAAI;MAAA,IAAAC,eAAA;MACvB,MAAMC,QAAQ,IAAAD,eAAA,GAAGD,KAAK,CAACG,QAAQ,cAAAF,eAAA,uBAAdA,eAAA,CAAgBC,QAAQ;MACzC,IAAI,CAACA,QAAQ,IAAIA,QAAQ,KAAKE,sBAAW,EAAE;QACvC,OAAOJ,KAAK;MAChB;MAEA,MAAMT,MAAM,GAAGF,OAAO,CAACgB,IAAI,CAACd,MAAM,IAAIA,MAAM,CAACe,EAAE,KAAKJ,QAAQ,CAAC;MAC7D,IAAI,CAACX,MAAM,EAAE;QACT,MAAM,IAAIgB,6BAAa,CAAE,WAAUL,QAAS,cAAa,CAAC;MAC9D;MACA,MAAMM,MAAM,GAAG,MAAMtB,WAAW,CAACuB,sBAAsB,CAAC;QACpDlB,MAAM;QACNmB,GAAG,EAAE;MACT,CAAC,CAAC;MACF,OAAOF,MAAM,GAAGR,KAAK,GAAG,IAAI;IAChC,CAAC,CACL,CAAC;IAED,OAAOJ,OAAO,CAACe,MAAM,CAAEX,KAAK,IAAwB,CAAC,CAACA,KAAK,CAAC;EAChE,CAAC;AACL,CAAC;AAACY,OAAA,CAAA5B,4BAAA,GAAAA,4BAAA"}
@@ -0,0 +1,5 @@
1
+ import { CmsModel } from "@webiny/api-headless-cms/types";
2
+ /**
3
+ * Keep this until we figure out how to fetch the folders.
4
+ */
5
+ export declare const isPageModel: (model: CmsModel) => boolean;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPageModel = void 0;
7
+ /**
8
+ * Keep this until we figure out how to fetch the folders.
9
+ */
10
+ const isPageModel = model => {
11
+ if (model.modelId === "pbPage") {
12
+ return true;
13
+ } else if (model.modelId === "acoSearchRecord-pbpage") {
14
+ return true;
15
+ }
16
+ return false;
17
+ };
18
+ exports.isPageModel = isPageModel;
19
+
20
+ //# sourceMappingURL=isPageModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isPageModel","model","modelId","exports"],"sources":["isPageModel.ts"],"sourcesContent":["import { CmsModel } from \"@webiny/api-headless-cms/types\";\n\n/**\n * Keep this until we figure out how to fetch the folders.\n */\nexport const 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"],"mappings":";;;;;;AAEA;AACA;AACA;AACO,MAAMA,WAAW,GAAIC,KAAe,IAAc;EACrD,IAAIA,KAAK,CAACC,OAAO,KAAK,QAAQ,EAAE;IAC5B,OAAO,IAAI;EACf,CAAC,MAAM,IAAID,KAAK,CAACC,OAAO,KAAK,wBAAwB,EAAE;IACnD,OAAO,IAAI;EACf;EACA,OAAO,KAAK;AAChB,CAAC;AAACC,OAAA,CAAAH,WAAA,GAAAA,WAAA"}
@@ -1,6 +1,7 @@
1
- import { CmsEntryListWhere } from "@webiny/api-headless-cms/types";
1
+ import { CmsEntryListWhere, CmsModel } from "@webiny/api-headless-cms/types";
2
2
  import { Folder } from "../../folder/folder.types";
3
3
  interface Params {
4
+ model: CmsModel;
4
5
  where: CmsEntryListWhere | undefined;
5
6
  folders: Folder[];
6
7
  }
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.createWhere = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
9
  var _constants = require("./constants");
10
+ var _isPageModel = require("./isPageModel");
10
11
  /**
11
12
  * There are multiple cases that we need to handle:
12
13
  * * existing location with no AND conditional
@@ -15,25 +16,32 @@ var _constants = require("./constants");
15
16
  */
16
17
  const createWhere = params => {
17
18
  const {
19
+ model,
18
20
  where,
19
21
  folders
20
22
  } = params;
21
- if (!where) {
22
- return undefined;
23
- }
23
+
24
+ // Once we migrate PB to HCMS, we can remove this check and always use `wbAco_location`.
25
+ const locationFieldName = (0, _isPageModel.isPageModel)(model) ? "location" : "wbyAco_location";
24
26
  const whereLocation = {
25
- wbyAco_location: {
27
+ [locationFieldName]: {
26
28
  // At the moment, all users can access entries in the root folder.
27
29
  // Root folder level permissions cannot be set yet.
28
30
  folderId_in: [_constants.ROOT_FOLDER, ...folders.map(folder => folder.id)]
29
31
  }
30
32
  };
33
+ if (!where) {
34
+ // If no `where` condition is present, that means we're performing a query
35
+ // across all folders. Still, with FLP enabled, we need to filter out
36
+ // folders to which the user does not have access.
37
+ return whereLocation;
38
+ }
31
39
  const whereAnd = where.AND;
32
- if (where.wbyAco_location && !whereAnd) {
40
+ if (where[locationFieldName] && !whereAnd) {
33
41
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
34
42
  AND: [(0, _objectSpread2.default)({}, whereLocation)]
35
43
  });
36
- } else if (where.wbyAco_location && whereAnd) {
44
+ } else if (where[locationFieldName] && whereAnd) {
37
45
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, where), {}, {
38
46
  AND: [(0, _objectSpread2.default)({}, whereLocation), ...whereAnd]
39
47
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_constants","require","createWhere","params","where","folders","undefined","whereLocation","wbyAco_location","folderId_in","ROOT_FOLDER","map","folder","id","whereAnd","AND","_objectSpread2","default","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,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMV,aAAa;IAEvB;EAET,CAAC,MAAM,IAAIH,KAAK,CAACI,eAAe,IAAIM,QAAQ,EAAE;IAC1C,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMV,aAAa,GAEpB,GAAGO,QAAQ;IACd;EAET;EACA,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK,GACLG,aAAa;AAExB,CAAC;AAACW,OAAA,CAAAhB,WAAA,GAAAA,WAAA"}
1
+ {"version":3,"names":["_constants","require","_isPageModel","createWhere","params","model","where","folders","locationFieldName","isPageModel","whereLocation","folderId_in","ROOT_FOLDER","map","folder","id","whereAnd","AND","_objectSpread2","default","exports"],"sources":["where.ts"],"sourcesContent":["import { CmsEntryListWhere, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { ROOT_FOLDER } from \"./constants\";\nimport { isPageModel } from \"~/utils/decorators/isPageModel\";\n\ninterface Params {\n model: CmsModel;\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 { model, where, folders } = params;\n\n // Once we migrate PB to HCMS, we can remove this check and always use `wbAco_location`.\n const locationFieldName = isPageModel(model) ? \"location\" : \"wbyAco_location\";\n\n const whereLocation = {\n [locationFieldName]: {\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\n if (!where) {\n // If no `where` condition is present, that means we're performing a query\n // across all folders. Still, with FLP enabled, we need to filter out\n // folders to which the user does not have access.\n return whereLocation;\n }\n\n const whereAnd = where.AND;\n if (where[locationFieldName] && !whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n }\n ]\n };\n } else if (where[locationFieldName] && whereAnd) {\n return {\n ...where,\n AND: [\n {\n ...whereLocation\n },\n ...whereAnd\n ]\n };\n }\n\n return {\n ...where,\n ...whereLocation\n };\n};\n"],"mappings":";;;;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,WAAW,GAAIC,MAAc,IAAoC;EAC1E,MAAM;IAAEC,KAAK;IAAEC,KAAK;IAAEC;EAAQ,CAAC,GAAGH,MAAM;;EAExC;EACA,MAAMI,iBAAiB,GAAG,IAAAC,wBAAW,EAACJ,KAAK,CAAC,GAAG,UAAU,GAAG,iBAAiB;EAE7E,MAAMK,aAAa,GAAG;IAClB,CAACF,iBAAiB,GAAG;MACjB;MACA;MACAG,WAAW,EAAE,CAACC,sBAAW,EAAE,GAAGL,OAAO,CAACM,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,EAAE,CAAC;IAClE;EACJ,CAAC;EAED,IAAI,CAACT,KAAK,EAAE;IACR;IACA;IACA;IACA,OAAOI,aAAa;EACxB;EAEA,MAAMM,QAAQ,GAAGV,KAAK,CAACW,GAAG;EAC1B,IAAIX,KAAK,CAACE,iBAAiB,CAAC,IAAI,CAACQ,QAAQ,EAAE;IACvC,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMT,aAAa;IAEvB;EAET,CAAC,MAAM,IAAIJ,KAAK,CAACE,iBAAiB,CAAC,IAAIQ,QAAQ,EAAE;IAC7C,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK;MACRW,GAAG,EAAE,KAAAC,cAAA,CAAAC,OAAA,MAEMT,aAAa,GAEpB,GAAGM,QAAQ;IACd;EAET;EAEA,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOb,KAAK,GACLI,aAAa;AAExB,CAAC;AAACU,OAAA,CAAAjB,WAAA,GAAAA,WAAA"}
package/fields/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { CmsModelFieldToGraphQLPlugin } from "@webiny/api-headless-cms/types";
2
- export declare const createFields: () => CmsModelFieldToGraphQLPlugin[];
package/fields/index.js DELETED
@@ -1,14 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createFields = void 0;
7
- const createFields = () => {
8
- return [
9
- // createLocationField()
10
- ];
11
- };
12
- exports.createFields = createFields;
13
-
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createFields","exports"],"sources":["index.ts"],"sourcesContent":["import { CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\n\nexport const createFields = (): CmsModelFieldToGraphQLPlugin[] => {\n return [\n // createLocationField()\n ];\n};\n"],"mappings":";;;;;;AAEO,MAAMA,YAAY,GAAGA,CAAA,KAAsC;EAC9D,OAAO;IACH;EAAA,CACH;AACL,CAAC;AAACC,OAAA,CAAAD,YAAA,GAAAA,YAAA"}
@@ -1,2 +0,0 @@
1
- import { CmsModelFieldToGraphQLPlugin } from "@webiny/api-headless-cms/types";
2
- export declare const createLocationField: () => CmsModelFieldToGraphQLPlugin;
@@ -1,46 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createLocationField = void 0;
7
- const createFilters = field => {
8
- return [`${field.fieldId}: AcoLocationInput`, `${field.fieldId}_in: [AcoLocationInput!]`, `${field.fieldId}_not_in: [AcoLocationInput!]`].join("\n");
9
- };
10
- const createLocationField = () => {
11
- return {
12
- type: "cms-model-field-to-graphql",
13
- name: "cms-model-field-to-graphql-location",
14
- fieldType: "location",
15
- isSortable: false,
16
- isSearchable: true,
17
- read: {
18
- createGetFilters({
19
- field
20
- }) {
21
- return createFilters(field);
22
- },
23
- createListFilters({
24
- field
25
- }) {
26
- return createFilters(field);
27
- },
28
- createTypeField() {
29
- return ``;
30
- }
31
- },
32
- manage: {
33
- createTypeField() {
34
- return ``;
35
- },
36
- createInputField({
37
- field
38
- }) {
39
- return `${field.fieldId}: AcoLocationInput`;
40
- }
41
- }
42
- };
43
- };
44
- exports.createLocationField = createLocationField;
45
-
46
- //# sourceMappingURL=location.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["createFilters","field","fieldId","join","createLocationField","type","name","fieldType","isSortable","isSearchable","read","createGetFilters","createListFilters","createTypeField","manage","createInputField","exports"],"sources":["location.ts"],"sourcesContent":["import { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\n\nconst createFilters = (field: CmsModelField) => {\n return [\n `${field.fieldId}: AcoLocationInput`,\n `${field.fieldId}_in: [AcoLocationInput!]`,\n `${field.fieldId}_not_in: [AcoLocationInput!]`\n ].join(\"\\n\");\n};\nexport const createLocationField = (): CmsModelFieldToGraphQLPlugin => {\n return {\n type: \"cms-model-field-to-graphql\",\n name: \"cms-model-field-to-graphql-location\",\n fieldType: \"location\",\n isSortable: false,\n isSearchable: true,\n read: {\n createGetFilters({ field }): string {\n return createFilters(field);\n },\n createListFilters({ field }): string {\n return createFilters(field);\n },\n createTypeField(): string {\n return ``;\n }\n },\n manage: {\n createTypeField(): string {\n return ``;\n },\n createInputField({ field }): string {\n return `${field.fieldId}: AcoLocationInput`;\n }\n }\n };\n};\n"],"mappings":";;;;;;AAEA,MAAMA,aAAa,GAAIC,KAAoB,IAAK;EAC5C,OAAO,CACF,GAAEA,KAAK,CAACC,OAAQ,oBAAmB,EACnC,GAAED,KAAK,CAACC,OAAQ,0BAAyB,EACzC,GAAED,KAAK,CAACC,OAAQ,8BAA6B,CACjD,CAACC,IAAI,CAAC,IAAI,CAAC;AAChB,CAAC;AACM,MAAMC,mBAAmB,GAAGA,CAAA,KAAoC;EACnE,OAAO;IACHC,IAAI,EAAE,4BAA4B;IAClCC,IAAI,EAAE,qCAAqC;IAC3CC,SAAS,EAAE,UAAU;IACrBC,UAAU,EAAE,KAAK;IACjBC,YAAY,EAAE,IAAI;IAClBC,IAAI,EAAE;MACFC,gBAAgBA,CAAC;QAAEV;MAAM,CAAC,EAAU;QAChC,OAAOD,aAAa,CAACC,KAAK,CAAC;MAC/B,CAAC;MACDW,iBAAiBA,CAAC;QAAEX;MAAM,CAAC,EAAU;QACjC,OAAOD,aAAa,CAACC,KAAK,CAAC;MAC/B,CAAC;MACDY,eAAeA,CAAA,EAAW;QACtB,OAAQ,EAAC;MACb;IACJ,CAAC;IACDC,MAAM,EAAE;MACJD,eAAeA,CAAA,EAAW;QACtB,OAAQ,EAAC;MACb,CAAC;MACDE,gBAAgBA,CAAC;QAAEd;MAAM,CAAC,EAAU;QAChC,OAAQ,GAAEA,KAAK,CAACC,OAAQ,oBAAmB;MAC/C;IACJ;EACJ,CAAC;AACL,CAAC;AAACc,OAAA,CAAAZ,mBAAA,GAAAA,mBAAA"}