@webiny/api-aco 5.43.0-beta.3 → 5.43.0-beta.5

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 (41) hide show
  1. package/constants.d.ts +1 -1
  2. package/constants.js +17 -2
  3. package/constants.js.map +1 -1
  4. package/flp/flp.types.d.ts +2 -14
  5. package/flp/flp.types.js +11 -0
  6. package/flp/flp.types.js.map +1 -1
  7. package/flp/useCases/CreateFlp.js +4 -5
  8. package/flp/useCases/CreateFlp.js.map +1 -1
  9. package/flp/useCases/UpdateFlp.d.ts +1 -0
  10. package/flp/useCases/UpdateFlp.js +24 -8
  11. package/flp/useCases/UpdateFlp.js.map +1 -1
  12. package/folder/createFolderTypeDefs.js +11 -0
  13. package/folder/createFolderTypeDefs.js.map +1 -1
  14. package/folder/folder.crud.js +4 -8
  15. package/folder/folder.crud.js.map +1 -1
  16. package/folder/folder.model.js +5 -1
  17. package/folder/folder.model.js.map +1 -1
  18. package/folder/folder.so.js +23 -2
  19. package/folder/folder.so.js.map +1 -1
  20. package/folder/folder.types.d.ts +9 -0
  21. package/folder/folder.types.js.map +1 -1
  22. package/folder/useCases/CreateFolder/CreateFolderWithFolderLevelPermissions.d.ts +2 -1
  23. package/folder/useCases/GetAncestors/GetAncestors.d.ts +4 -0
  24. package/folder/useCases/GetAncestors/GetAncestors.js +22 -2
  25. package/folder/useCases/GetAncestors/GetAncestors.js.map +1 -1
  26. package/folder/useCases/GetAncestors/IGetAncestors.d.ts +0 -1
  27. package/folder/useCases/GetAncestors/IGetAncestors.js.map +1 -1
  28. package/folder/useCases/GetAncestors/index.d.ts +6 -1
  29. package/folder/useCases/GetAncestors/index.js +2 -2
  30. package/folder/useCases/GetAncestors/index.js.map +1 -1
  31. package/folder/useCases/GetFolder/GetFolderWithFolderLevelPermissions.d.ts +2 -1
  32. package/folder/useCases/UpdateFolder/UpdateFolderWithFolderLevelPermissions.d.ts +2 -1
  33. package/package.json +28 -27
  34. package/record/record.so.js +25 -2
  35. package/record/record.so.js.map +1 -1
  36. package/{flp/useCases → utils}/Path.js +1 -1
  37. package/flp/useCases/Permissions.d.ts +0 -4
  38. package/flp/useCases/Permissions.js +0 -47
  39. package/flp/useCases/Permissions.js.map +0 -1
  40. /package/{flp/useCases → utils}/Path.d.ts +0 -0
  41. /package/{flp/useCases → utils}/Path.js.map +0 -0
package/constants.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const ROOT_FOLDER = "root";
1
+ export * from "@webiny/shared-aco";
2
2
  export declare const PB_PAGE_TYPE = "PbPage";
3
3
  export declare const FM_FILE_TYPE = "FmFile";
package/constants.js CHANGED
@@ -3,8 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ROOT_FOLDER = exports.PB_PAGE_TYPE = exports.FM_FILE_TYPE = void 0;
7
- const ROOT_FOLDER = exports.ROOT_FOLDER = "root";
6
+ var _exportNames = {
7
+ PB_PAGE_TYPE: true,
8
+ FM_FILE_TYPE: true
9
+ };
10
+ exports.PB_PAGE_TYPE = exports.FM_FILE_TYPE = void 0;
11
+ var _sharedAco = require("@webiny/shared-aco");
12
+ Object.keys(_sharedAco).forEach(function (key) {
13
+ if (key === "default" || key === "__esModule") return;
14
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
15
+ if (key in exports && exports[key] === _sharedAco[key]) return;
16
+ Object.defineProperty(exports, key, {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _sharedAco[key];
20
+ }
21
+ });
22
+ });
8
23
  const PB_PAGE_TYPE = exports.PB_PAGE_TYPE = "PbPage";
9
24
  const FM_FILE_TYPE = exports.FM_FILE_TYPE = "FmFile";
10
25
 
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ROOT_FOLDER","exports","PB_PAGE_TYPE","FM_FILE_TYPE"],"sources":["constants.ts"],"sourcesContent":["export const ROOT_FOLDER = \"root\";\nexport const PB_PAGE_TYPE = \"PbPage\";\nexport const FM_FILE_TYPE = \"FmFile\";\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,MAAM;AAC1B,MAAME,YAAY,GAAAD,OAAA,CAAAC,YAAA,GAAG,QAAQ;AAC7B,MAAMC,YAAY,GAAAF,OAAA,CAAAE,YAAA,GAAG,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["_sharedAco","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","PB_PAGE_TYPE","FM_FILE_TYPE"],"sources":["constants.ts"],"sourcesContent":["export * from \"@webiny/shared-aco\";\nexport const PB_PAGE_TYPE = \"PbPage\";\nexport const FM_FILE_TYPE = \"FmFile\";\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,UAAA,EAAAI,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,MAAAL,UAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,UAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACO,MAAMS,YAAY,GAAAJ,OAAA,CAAAI,YAAA,GAAG,QAAQ;AAC7B,MAAMC,YAAY,GAAAL,OAAA,CAAAK,YAAA,GAAG,QAAQ","ignoreList":[]}
@@ -1,20 +1,8 @@
1
1
  import { Topic } from "@webiny/pubsub/types";
2
2
  import { ITaskRunParams } from "@webiny/tasks/types";
3
3
  import { type AcoContext, type Folder } from "../types";
4
- export type FolderAccessLevel = "owner" | "viewer" | "editor" | "public" | "no-access";
5
- export interface FolderPermission {
6
- target: string;
7
- level: FolderAccessLevel;
8
- inheritedFrom?: string;
9
- }
10
- export interface FolderLevelPermission {
11
- id: string;
12
- parentId: string;
13
- slug: string;
14
- path: string;
15
- permissions: FolderPermission[];
16
- type: string;
17
- }
4
+ import type { FolderLevelPermission, FolderPermission } from "@webiny/shared-aco/flp/flp.types";
5
+ export * from "@webiny/shared-aco/flp/flp.types";
18
6
  /********
19
7
  * CRUD operations
20
8
  *******/
package/flp/flp.types.js CHANGED
@@ -3,5 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _flp = require("@webiny/shared-aco/flp/flp.types");
7
+ Object.keys(_flp).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _flp[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _flp[key];
14
+ }
15
+ });
16
+ });
6
17
 
7
18
  //# sourceMappingURL=flp.types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["flp.types.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { ITaskRunParams } from \"@webiny/tasks/types\";\nimport { type AcoContext, type Folder } from \"~/types\";\n\nexport type FolderAccessLevel = \"owner\" | \"viewer\" | \"editor\" | \"public\" | \"no-access\";\n\nexport interface FolderPermission {\n target: string;\n level: FolderAccessLevel;\n inheritedFrom?: string;\n}\n\nexport interface FolderLevelPermission {\n id: string;\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n type: string;\n}\n\n/********\n * CRUD operations\n *******/\n\nexport interface ListFlpsParams {\n where: {\n path_startsWith?: string;\n parentId?: string;\n type: string;\n };\n}\n\nexport type CreateFlpParams = Pick<\n FolderLevelPermission,\n \"id\" | \"type\" | \"permissions\" | \"path\" | \"parentId\" | \"slug\"\n>;\n\nexport interface UpdateFlpParams {\n parentId?: string;\n slug?: string;\n path?: string;\n permissions?: FolderPermission[];\n type?: string;\n}\n\nexport interface OnFlpBeforeCreateTopicParams {\n input: CreateFlpParams;\n}\n\nexport interface OnFlpAfterCreateTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBeforeUpdateTopicParams {\n original: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpAfterUpdateTopicParams {\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpBeforeDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpAfterDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBatchBeforeUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface OnFlpBatchAfterUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsCrud {\n list(params: ListFlpsParams): Promise<FolderLevelPermission[]>;\n get(id: string): Promise<FolderLevelPermission | null>;\n create(params: CreateFlpParams): Promise<FolderLevelPermission>;\n update(id: string, data: UpdateFlpParams): Promise<FolderLevelPermission>;\n delete(id: string): Promise<boolean>;\n batchUpdate(\n items: Array<{ id: string; data: UpdateFlpParams }>\n ): Promise<FolderLevelPermission[]>;\n onFlpBeforeCreate: Topic<OnFlpBeforeCreateTopicParams>;\n onFlpAfterCreate: Topic<OnFlpAfterCreateTopicParams>;\n onFlpBeforeUpdate: Topic<OnFlpBeforeUpdateTopicParams>;\n onFlpAfterUpdate: Topic<OnFlpAfterUpdateTopicParams>;\n onFlpBeforeDelete: Topic<OnFlpBeforeDeleteTopicParams>;\n onFlpAfterDelete: Topic<OnFlpAfterDeleteTopicParams>;\n onFlpBatchBeforeUpdate: Topic<OnFlpBatchBeforeUpdateTopicParams>;\n onFlpBatchAfterUpdate: Topic<OnFlpBatchAfterUpdateTopicParams>;\n}\n\n/********\n * Storage operations\n *******/\n\nexport interface StorageOperationsListFlpsParams {\n where: ListFlpsParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n}\n\nexport interface StorageOperationsGetFlpParams {\n id: string;\n tenant: string;\n locale: string;\n}\n\nexport type StorageOperationsCreateFlpParams = {\n data: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsUpdateFlpParams = {\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsDeleteFlpParams = {\n flp: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport interface StorageOperationsBatchUpdateFlpParams {\n items: Array<{\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsStorageOperations {\n list(params: StorageOperationsListFlpsParams): Promise<FolderLevelPermission[]>;\n get(params: StorageOperationsGetFlpParams): Promise<FolderLevelPermission | null>;\n create(params: StorageOperationsCreateFlpParams): Promise<FolderLevelPermission>;\n update(params: StorageOperationsUpdateFlpParams): Promise<FolderLevelPermission>;\n delete(params: StorageOperationsDeleteFlpParams): Promise<void>;\n batchUpdate(params: StorageOperationsBatchUpdateFlpParams): Promise<FolderLevelPermission[]>;\n}\n\n/********\n * Background Tasks\n *******/\n\nexport interface ICreateFlpTaskInput {\n folder: Folder;\n}\n\nexport type ICreateFlpTaskParams = ITaskRunParams<AcoContext, ICreateFlpTaskInput>;\n\nexport interface IUpdateFlpTaskInput {\n folder: Folder;\n queued?: string[];\n}\n\nexport type IUpdateFlpTaskParams = ITaskRunParams<AcoContext, IUpdateFlpTaskInput>;\n\nexport interface IDeleteFlpTaskInput {\n folder: Folder;\n}\n\nexport type IDeleteFlpTaskParams = ITaskRunParams<AcoContext, IDeleteFlpTaskInput>;\n\nexport interface ISyncFlpTaskInput {\n type?: string;\n folderId?: string;\n}\n\nexport type ISyncFlpTaskParams = ITaskRunParams<AcoContext, ISyncFlpTaskInput>;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":["_flp","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["flp.types.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { ITaskRunParams } from \"@webiny/tasks/types\";\nimport { type AcoContext, type Folder } from \"~/types\";\nimport type { FolderLevelPermission, FolderPermission } from \"@webiny/shared-aco/flp/flp.types\";\n\nexport * from \"@webiny/shared-aco/flp/flp.types\";\n\n/********\n * CRUD operations\n *******/\n\nexport interface ListFlpsParams {\n where: {\n path_startsWith?: string;\n parentId?: string;\n type: string;\n };\n}\n\nexport type CreateFlpParams = Pick<\n FolderLevelPermission,\n \"id\" | \"type\" | \"permissions\" | \"path\" | \"parentId\" | \"slug\"\n>;\n\nexport interface UpdateFlpParams {\n parentId?: string;\n slug?: string;\n path?: string;\n permissions?: FolderPermission[];\n type?: string;\n}\n\nexport interface OnFlpBeforeCreateTopicParams {\n input: CreateFlpParams;\n}\n\nexport interface OnFlpAfterCreateTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBeforeUpdateTopicParams {\n original: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpAfterUpdateTopicParams {\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpBeforeDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpAfterDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBatchBeforeUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface OnFlpBatchAfterUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsCrud {\n list(params: ListFlpsParams): Promise<FolderLevelPermission[]>;\n get(id: string): Promise<FolderLevelPermission | null>;\n create(params: CreateFlpParams): Promise<FolderLevelPermission>;\n update(id: string, data: UpdateFlpParams): Promise<FolderLevelPermission>;\n delete(id: string): Promise<boolean>;\n batchUpdate(\n items: Array<{ id: string; data: UpdateFlpParams }>\n ): Promise<FolderLevelPermission[]>;\n onFlpBeforeCreate: Topic<OnFlpBeforeCreateTopicParams>;\n onFlpAfterCreate: Topic<OnFlpAfterCreateTopicParams>;\n onFlpBeforeUpdate: Topic<OnFlpBeforeUpdateTopicParams>;\n onFlpAfterUpdate: Topic<OnFlpAfterUpdateTopicParams>;\n onFlpBeforeDelete: Topic<OnFlpBeforeDeleteTopicParams>;\n onFlpAfterDelete: Topic<OnFlpAfterDeleteTopicParams>;\n onFlpBatchBeforeUpdate: Topic<OnFlpBatchBeforeUpdateTopicParams>;\n onFlpBatchAfterUpdate: Topic<OnFlpBatchAfterUpdateTopicParams>;\n}\n\n/********\n * Storage operations\n *******/\n\nexport interface StorageOperationsListFlpsParams {\n where: ListFlpsParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n}\n\nexport interface StorageOperationsGetFlpParams {\n id: string;\n tenant: string;\n locale: string;\n}\n\nexport type StorageOperationsCreateFlpParams = {\n data: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsUpdateFlpParams = {\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsDeleteFlpParams = {\n flp: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport interface StorageOperationsBatchUpdateFlpParams {\n items: Array<{\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsStorageOperations {\n list(params: StorageOperationsListFlpsParams): Promise<FolderLevelPermission[]>;\n get(params: StorageOperationsGetFlpParams): Promise<FolderLevelPermission | null>;\n create(params: StorageOperationsCreateFlpParams): Promise<FolderLevelPermission>;\n update(params: StorageOperationsUpdateFlpParams): Promise<FolderLevelPermission>;\n delete(params: StorageOperationsDeleteFlpParams): Promise<void>;\n batchUpdate(params: StorageOperationsBatchUpdateFlpParams): Promise<FolderLevelPermission[]>;\n}\n\n/********\n * Background Tasks\n *******/\n\nexport interface ICreateFlpTaskInput {\n folder: Folder;\n}\n\nexport type ICreateFlpTaskParams = ITaskRunParams<AcoContext, ICreateFlpTaskInput>;\n\nexport interface IUpdateFlpTaskInput {\n folder: Folder;\n queued?: string[];\n}\n\nexport type IUpdateFlpTaskParams = ITaskRunParams<AcoContext, IUpdateFlpTaskInput>;\n\nexport interface IDeleteFlpTaskInput {\n folder: Folder;\n}\n\nexport type IDeleteFlpTaskParams = ITaskRunParams<AcoContext, IDeleteFlpTaskInput>;\n\nexport interface ISyncFlpTaskInput {\n type?: string;\n folderId?: string;\n}\n\nexport type ISyncFlpTaskParams = ITaskRunParams<AcoContext, ISyncFlpTaskInput>;\n"],"mappings":";;;;;AAKA,IAAAA,IAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,IAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,IAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,IAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.CreateFlp = void 0;
7
7
  var _error = require("@webiny/error");
8
- var _Path = require("./Path");
9
- var _Permissions = require("./Permissions");
10
- var _constants = require("../../constants");
8
+ var _Path = require("../../utils/Path");
9
+ var _sharedAco = require("@webiny/shared-aco");
11
10
  class CreateFlp {
12
11
  constructor(context) {
13
12
  this.context = context;
@@ -35,9 +34,9 @@ class CreateFlp {
35
34
  id,
36
35
  type,
37
36
  slug,
38
- parentId: parentId ?? _constants.ROOT_FOLDER,
37
+ parentId: parentId ?? _sharedAco.ROOT_FOLDER,
39
38
  path: _Path.Path.create(slug, parentFlp?.path),
40
- permissions: _Permissions.Permissions.create(permissions, parentFlp)
39
+ permissions: _sharedAco.Permissions.create(permissions, parentFlp)
41
40
  });
42
41
  } catch (error) {
43
42
  throw _error.WebinyError.from(error, {
@@ -1 +1 @@
1
- {"version":3,"names":["_error","require","_Path","_Permissions","_constants","CreateFlp","constructor","context","execute","folder","WebinyError","id","type","slug","parentId","permissions","parentFlp","aco","flp","get","create","ROOT_FOLDER","path","Path","Permissions","error","from","message","code","exports"],"sources":["CreateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"./Path\";\nimport { Permissions } from \"./Permissions\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types\";\nimport type { Folder } from \"~/folder/folder.types\";\nimport type { AcoContext } from \"~/types\";\nimport { ROOT_FOLDER } from \"~/constants\";\n\nexport class CreateFlp {\n private context: AcoContext;\n\n constructor(context: AcoContext) {\n this.context = context;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't create a new record into the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\"\n );\n }\n\n const { id, type, slug, parentId, permissions } = folder;\n let parentFlp: IFolderLevelPermission | null = null;\n\n if (parentId) {\n parentFlp = await this.context.aco.flp.get(parentId);\n\n if (!parentFlp) {\n throw new WebinyError(\n \"Parent folder level permission not found. Unable to create a new record in the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_PARENT_FLP_NOT_FOUND\"\n );\n }\n }\n\n await this.context.aco.flp.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while creating FLP\",\n code: \"ERROR_CREATE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAIA,IAAAG,UAAA,GAAAH,OAAA;AAEO,MAAMI,SAAS,CAAC;EAGnBC,WAAWA,CAACC,OAAmB,EAAE;IAC7B,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAE;IAC1B,IAAI;MACA,IAAI,CAACA,MAAM,EAAE;QACT,MAAM,IAAIC,kBAAW,CACjB,qEAAqE,EACrE,+CACJ,CAAC;MACL;MAEA,MAAM;QAAEC,EAAE;QAAEC,IAAI;QAAEC,IAAI;QAAEC,QAAQ;QAAEC;MAAY,CAAC,GAAGN,MAAM;MACxD,IAAIO,SAAwC,GAAG,IAAI;MAEnD,IAAIF,QAAQ,EAAE;QACVE,SAAS,GAAG,MAAM,IAAI,CAACT,OAAO,CAACU,GAAG,CAACC,GAAG,CAACC,GAAG,CAACL,QAAQ,CAAC;QAEpD,IAAI,CAACE,SAAS,EAAE;UACZ,MAAM,IAAIN,kBAAW,CACjB,6FAA6F,EAC7F,gDACJ,CAAC;QACL;MACJ;MAEA,MAAM,IAAI,CAACH,OAAO,CAACU,GAAG,CAACC,GAAG,CAACE,MAAM,CAAC;QAC9BT,EAAE;QACFC,IAAI;QACJC,IAAI;QACJC,QAAQ,EAAEA,QAAQ,IAAIO,sBAAW;QACjCC,IAAI,EAAEC,UAAI,CAACH,MAAM,CAACP,IAAI,EAAEG,SAAS,EAAEM,IAAI,CAAC;QACxCP,WAAW,EAAES,wBAAW,CAACJ,MAAM,CAACL,WAAW,EAAEC,SAAS;MAC1D,CAAC,CAAC;IACN,CAAC,CAAC,OAAOS,KAAK,EAAE;MACZ,MAAMf,kBAAW,CAACgB,IAAI,CAACD,KAAK,EAAE;QAC1BE,OAAO,EAAE,0BAA0B;QACnCC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAACC,OAAA,CAAAxB,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","require","_Path","_sharedAco","CreateFlp","constructor","context","execute","folder","WebinyError","id","type","slug","parentId","permissions","parentFlp","aco","flp","get","create","ROOT_FOLDER","path","Path","Permissions","error","from","message","code","exports"],"sources":["CreateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types\";\nimport type { Folder } from \"~/folder/folder.types\";\nimport type { AcoContext } from \"~/types\";\n\nexport class CreateFlp {\n private context: AcoContext;\n\n constructor(context: AcoContext) {\n this.context = context;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't create a new record into the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\"\n );\n }\n\n const { id, type, slug, parentId, permissions } = folder;\n let parentFlp: IFolderLevelPermission | null = null;\n\n if (parentId) {\n parentFlp = await this.context.aco.flp.get(parentId);\n\n if (!parentFlp) {\n throw new WebinyError(\n \"Parent folder level permission not found. Unable to create a new record in the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_PARENT_FLP_NOT_FOUND\"\n );\n }\n }\n\n await this.context.aco.flp.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while creating FLP\",\n code: \"ERROR_CREATE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAKO,MAAMG,SAAS,CAAC;EAGnBC,WAAWA,CAACC,OAAmB,EAAE;IAC7B,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAE;IAC1B,IAAI;MACA,IAAI,CAACA,MAAM,EAAE;QACT,MAAM,IAAIC,kBAAW,CACjB,qEAAqE,EACrE,+CACJ,CAAC;MACL;MAEA,MAAM;QAAEC,EAAE;QAAEC,IAAI;QAAEC,IAAI;QAAEC,QAAQ;QAAEC;MAAY,CAAC,GAAGN,MAAM;MACxD,IAAIO,SAAwC,GAAG,IAAI;MAEnD,IAAIF,QAAQ,EAAE;QACVE,SAAS,GAAG,MAAM,IAAI,CAACT,OAAO,CAACU,GAAG,CAACC,GAAG,CAACC,GAAG,CAACL,QAAQ,CAAC;QAEpD,IAAI,CAACE,SAAS,EAAE;UACZ,MAAM,IAAIN,kBAAW,CACjB,6FAA6F,EAC7F,gDACJ,CAAC;QACL;MACJ;MAEA,MAAM,IAAI,CAACH,OAAO,CAACU,GAAG,CAACC,GAAG,CAACE,MAAM,CAAC;QAC9BT,EAAE;QACFC,IAAI;QACJC,IAAI;QACJC,QAAQ,EAAEA,QAAQ,IAAIO,sBAAW;QACjCC,IAAI,EAAEC,UAAI,CAACH,MAAM,CAACP,IAAI,EAAEG,SAAS,EAAEM,IAAI,CAAC;QACxCP,WAAW,EAAES,sBAAW,CAACJ,MAAM,CAACL,WAAW,EAAEC,SAAS;MAC1D,CAAC,CAAC;IACN,CAAC,CAAC,OAAOS,KAAK,EAAE;MACZ,MAAMf,kBAAW,CAACgB,IAAI,CAACD,KAAK,EAAE;QAC1BE,OAAO,EAAE,0BAA0B;QACnCC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAACC,OAAA,CAAAxB,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -21,5 +21,6 @@ export declare class UpdateFlp {
21
21
  private clearQueuedList;
22
22
  private listDirectChildren;
23
23
  private getFlp;
24
+ private getFolderModel;
24
25
  }
25
26
  export {};
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.UpdateFlp = void 0;
7
7
  var _error = require("@webiny/error");
8
- var _Path = require("./Path");
9
- var _Permissions = require("./Permissions");
10
- var _constants = require("../../constants");
8
+ var _Path = require("../../utils/Path");
9
+ var _sharedAco = require("@webiny/shared-aco");
10
+ var _folder = require("../../folder/folder.model");
11
11
  class UpdateFlp {
12
12
  queued = new Set();
13
13
  flpsToUpdate = new Map();
@@ -30,9 +30,9 @@ class UpdateFlp {
30
30
  // Add the root folder to the update collection
31
31
  this.flpsToUpdate.set(folder.id, {
32
32
  slug: folder.slug,
33
- parentId: folder.parentId ?? _constants.ROOT_FOLDER,
33
+ parentId: folder.parentId ?? _sharedAco.ROOT_FOLDER,
34
34
  path: _Path.Path.create(folder.slug, parentFlp?.path),
35
- permissions: _Permissions.Permissions.create(folder.permissions, parentFlp)
35
+ permissions: _sharedAco.Permissions.create(folder.permissions, parentFlp)
36
36
  });
37
37
 
38
38
  // Let's set the FLP as in queue
@@ -80,7 +80,7 @@ class UpdateFlp {
80
80
  slug: flp.slug,
81
81
  parentId: flp.parentId,
82
82
  path: _Path.Path.create(flp.slug, currentParentFlp.path),
83
- permissions: _Permissions.Permissions.create(flp.permissions, currentParentFlp)
83
+ permissions: _sharedAco.Permissions.create(flp.permissions, currentParentFlp)
84
84
  });
85
85
 
86
86
  // Add the FLP to the queue list so we don't fetch it again
@@ -117,6 +117,19 @@ class UpdateFlp {
117
117
  };
118
118
  });
119
119
  await this.context.aco.flp.batchUpdate(items);
120
+
121
+ // Update all folders with the new path
122
+ const folderModel = await this.getFolderModel();
123
+ for (const item of items) {
124
+ const {
125
+ id,
126
+ data
127
+ } = item;
128
+ // Directly update the folder in CMS storage to bypass any folder update event triggers.
129
+ await this.context.cms.updateEntry(folderModel, id, {
130
+ path: data.path
131
+ });
132
+ }
120
133
  } catch (error) {
121
134
  throw _error.WebinyError.from(error, {
122
135
  message: "Error while executing batch update of FLPs",
@@ -169,13 +182,16 @@ class UpdateFlp {
169
182
  id,
170
183
  type,
171
184
  slug,
172
- parentId: parentId ?? _constants.ROOT_FOLDER,
185
+ parentId: parentId ?? _sharedAco.ROOT_FOLDER,
173
186
  path: _Path.Path.create(slug, parentFlp?.path),
174
- permissions: _Permissions.Permissions.create(permissions, parentFlp)
187
+ permissions: _sharedAco.Permissions.create(permissions, parentFlp)
175
188
  });
176
189
  }
177
190
  return flp;
178
191
  }
192
+ async getFolderModel() {
193
+ return await this.context.cms.getModel(_folder.FOLDER_MODEL_ID);
194
+ }
179
195
  }
180
196
  exports.UpdateFlp = UpdateFlp;
181
197
 
@@ -1 +1 @@
1
- {"version":3,"names":["_error","require","_Path","_Permissions","_constants","UpdateFlp","queued","Set","flpsToUpdate","Map","constructor","params","context","isCloseToTimeout","handleTimeout","execute","folder","WebinyError","flp","getFlp","parentFlp","parentId","aco","get","set","id","slug","ROOT_FOLDER","path","Path","create","permissions","Permissions","setQueued","directChildren","listDirectChildren","child","executeBatchUpdate","getQueuedList","collectBranchForUpdate","error","clear","from","message","code","isQueued","parentFlpData","currentParentFlp","children","items","Array","entries","map","data","batchUpdate","keys","clearQueuedList","add","has","folders","listAll","where","type","disablePermissions","Promise","all","exports"],"sources":["UpdateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"./Path\";\nimport { Permissions } from \"./Permissions\";\nimport { ROOT_FOLDER } from \"~/constants\";\nimport type { AcoContext, Folder, FolderLevelPermission, FolderPermission } from \"~/types\";\n\ninterface UpdateFlpParams {\n context: AcoContext;\n queued?: string[];\n isCloseToTimeout?: () => boolean;\n handleTimeout?: (queued: string[]) => void;\n}\n\ninterface FlpUpdateData {\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n}\n\nexport class UpdateFlp {\n private context: AcoContext;\n private readonly isCloseToTimeout?: () => boolean;\n private readonly handleTimeout?: (updated: string[]) => void;\n\n private readonly queued: Set<string> = new Set();\n private readonly flpsToUpdate: Map<string, FlpUpdateData> = new Map();\n\n constructor(params: UpdateFlpParams) {\n this.context = params.context;\n this.queued = new Set(params.queued);\n this.isCloseToTimeout = params.isCloseToTimeout;\n this.handleTimeout = params.handleTimeout;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't update the FLP record.\",\n \"ERROR_UPDATING_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n\n const flp = await this.getFlp(folder);\n const parentFlp = folder.parentId\n ? await this.context.aco.flp.get(folder.parentId)\n : null;\n\n // Add the root folder to the update collection\n this.flpsToUpdate.set(folder.id, {\n slug: folder.slug,\n parentId: folder.parentId ?? ROOT_FOLDER,\n path: Path.create(folder.slug, parentFlp?.path),\n permissions: Permissions.create(folder.permissions, parentFlp)\n });\n\n // Let's set the FLP as in queue\n this.setQueued(flp.id);\n\n // Get direct children and process each branch completely\n const directChildren = await this.listDirectChildren(flp);\n\n for (const child of directChildren) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n await this.collectBranchForUpdate(child, flp);\n }\n\n // Execute batch update\n await this.executeBatchUpdate();\n } catch (error) {\n // Clear the update collection in case of error\n this.flpsToUpdate.clear();\n this.queued.clear();\n throw WebinyError.from(error, {\n message: \"Error while updating FLP\",\n code: \"ERROR_UPDATING_FLP_USE_CASE\"\n });\n }\n }\n\n private async collectBranchForUpdate(\n flp: FolderLevelPermission,\n parentFlp: FolderLevelPermission\n ) {\n if (this.isQueued(flp.id)) {\n return;\n }\n\n // Get the parent's permissions from the update collection if available\n const parentFlpData = this.flpsToUpdate.get(parentFlp.id);\n const currentParentFlp = {\n ...parentFlp,\n ...(parentFlpData && { ...parentFlpData })\n };\n\n // Add the FLP to the update collection with inherited permissions\n this.flpsToUpdate.set(flp.id, {\n slug: flp.slug,\n parentId: flp.parentId,\n path: Path.create(flp.slug, currentParentFlp.path),\n permissions: Permissions.create(flp.permissions, currentParentFlp)\n });\n\n // Add the FLP to the queue list so we don't fetch it again\n this.setQueued(flp.id);\n\n // Process all children of this folder before moving to siblings\n const children = await this.listDirectChildren(flp);\n\n for (const child of children) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n // Pass the current FLP as the parent for the child\n await this.collectBranchForUpdate(child, flp);\n }\n }\n\n private async executeBatchUpdate() {\n try {\n const items = Array.from(this.flpsToUpdate.entries()).map(\n ([id, { slug, parentId, path, permissions }]) => {\n return {\n id,\n data: {\n slug,\n parentId,\n path,\n permissions\n }\n };\n }\n );\n\n await this.context.aco.flp.batchUpdate(items);\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing batch update of FLPs\",\n code: \"BATCH_UPDATE_FLP_ERROR\",\n data: {\n items: Array.from(this.flpsToUpdate.keys())\n }\n });\n } finally {\n // Clear the update collection after the batch update\n this.flpsToUpdate.clear();\n\n //Let's remove all the updated FLPs ids from the queue cache\n this.clearQueuedList();\n }\n }\n\n private getQueuedList() {\n return Array.from(this.queued);\n }\n\n private setQueued(id: string) {\n this.queued.add(id);\n }\n\n private isQueued(id: string) {\n return this.queued.has(id);\n }\n\n private clearQueuedList() {\n return this.queued.clear();\n }\n\n private async listDirectChildren(flp: FolderLevelPermission): Promise<FolderLevelPermission[]> {\n const [folders] = await this.context.aco.folder.listAll({\n where: {\n type: flp.type,\n parentId: flp.id\n },\n disablePermissions: true\n });\n\n return await Promise.all(folders.map(folder => this.getFlp(folder)));\n }\n\n private async getFlp({ id, type, parentId, slug, permissions }: Folder) {\n const flp = await this.context.aco.flp.get(id);\n\n if (!flp) {\n const parentFlp = parentId ? await this.context.aco.flp.get(parentId) : null;\n\n return await this.context.aco.flp.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n }\n\n return flp;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","require","_Path","_sharedAco","_folder","UpdateFlp","queued","Set","flpsToUpdate","Map","constructor","params","context","isCloseToTimeout","handleTimeout","execute","folder","WebinyError","flp","getFlp","parentFlp","parentId","aco","get","set","id","slug","ROOT_FOLDER","path","Path","create","permissions","Permissions","setQueued","directChildren","listDirectChildren","child","executeBatchUpdate","getQueuedList","collectBranchForUpdate","error","clear","from","message","code","isQueued","parentFlpData","currentParentFlp","children","items","Array","entries","map","data","batchUpdate","folderModel","getFolderModel","item","cms","updateEntry","keys","clearQueuedList","add","has","folders","listAll","where","type","disablePermissions","Promise","all","getModel","FOLDER_MODEL_ID","exports"],"sources":["UpdateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { AcoContext, Folder, FolderLevelPermission, FolderPermission } from \"~/types\";\nimport { FOLDER_MODEL_ID } from \"~/folder/folder.model\";\n\ninterface UpdateFlpParams {\n context: AcoContext;\n queued?: string[];\n isCloseToTimeout?: () => boolean;\n handleTimeout?: (queued: string[]) => void;\n}\n\ninterface FlpUpdateData {\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n}\n\nexport class UpdateFlp {\n private context: AcoContext;\n private readonly isCloseToTimeout?: () => boolean;\n private readonly handleTimeout?: (updated: string[]) => void;\n\n private readonly queued: Set<string> = new Set();\n private readonly flpsToUpdate: Map<string, FlpUpdateData> = new Map();\n\n constructor(params: UpdateFlpParams) {\n this.context = params.context;\n this.queued = new Set(params.queued);\n this.isCloseToTimeout = params.isCloseToTimeout;\n this.handleTimeout = params.handleTimeout;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't update the FLP record.\",\n \"ERROR_UPDATING_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n\n const flp = await this.getFlp(folder);\n const parentFlp = folder.parentId\n ? await this.context.aco.flp.get(folder.parentId)\n : null;\n\n // Add the root folder to the update collection\n this.flpsToUpdate.set(folder.id, {\n slug: folder.slug,\n parentId: folder.parentId ?? ROOT_FOLDER,\n path: Path.create(folder.slug, parentFlp?.path),\n permissions: Permissions.create(folder.permissions, parentFlp)\n });\n\n // Let's set the FLP as in queue\n this.setQueued(flp.id);\n\n // Get direct children and process each branch completely\n const directChildren = await this.listDirectChildren(flp);\n\n for (const child of directChildren) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n await this.collectBranchForUpdate(child, flp);\n }\n\n // Execute batch update\n await this.executeBatchUpdate();\n } catch (error) {\n // Clear the update collection in case of error\n this.flpsToUpdate.clear();\n this.queued.clear();\n throw WebinyError.from(error, {\n message: \"Error while updating FLP\",\n code: \"ERROR_UPDATING_FLP_USE_CASE\"\n });\n }\n }\n\n private async collectBranchForUpdate(\n flp: FolderLevelPermission,\n parentFlp: FolderLevelPermission\n ) {\n if (this.isQueued(flp.id)) {\n return;\n }\n\n // Get the parent's permissions from the update collection if available\n const parentFlpData = this.flpsToUpdate.get(parentFlp.id);\n const currentParentFlp = {\n ...parentFlp,\n ...(parentFlpData && { ...parentFlpData })\n };\n\n // Add the FLP to the update collection with inherited permissions\n this.flpsToUpdate.set(flp.id, {\n slug: flp.slug,\n parentId: flp.parentId,\n path: Path.create(flp.slug, currentParentFlp.path),\n permissions: Permissions.create(flp.permissions, currentParentFlp)\n });\n\n // Add the FLP to the queue list so we don't fetch it again\n this.setQueued(flp.id);\n\n // Process all children of this folder before moving to siblings\n const children = await this.listDirectChildren(flp);\n\n for (const child of children) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n // Pass the current FLP as the parent for the child\n await this.collectBranchForUpdate(child, flp);\n }\n }\n\n private async executeBatchUpdate() {\n try {\n const items = Array.from(this.flpsToUpdate.entries()).map(\n ([id, { slug, parentId, path, permissions }]) => {\n return {\n id,\n data: {\n slug,\n parentId,\n path,\n permissions\n }\n };\n }\n );\n\n await this.context.aco.flp.batchUpdate(items);\n\n // Update all folders with the new path\n const folderModel = await this.getFolderModel();\n for (const item of items) {\n const { id, data } = item;\n // Directly update the folder in CMS storage to bypass any folder update event triggers.\n await this.context.cms.updateEntry(folderModel, id, { path: data.path });\n }\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing batch update of FLPs\",\n code: \"BATCH_UPDATE_FLP_ERROR\",\n data: {\n items: Array.from(this.flpsToUpdate.keys())\n }\n });\n } finally {\n // Clear the update collection after the batch update\n this.flpsToUpdate.clear();\n\n //Let's remove all the updated FLPs ids from the queue cache\n this.clearQueuedList();\n }\n }\n\n private getQueuedList() {\n return Array.from(this.queued);\n }\n\n private setQueued(id: string) {\n this.queued.add(id);\n }\n\n private isQueued(id: string) {\n return this.queued.has(id);\n }\n\n private clearQueuedList() {\n return this.queued.clear();\n }\n\n private async listDirectChildren(flp: FolderLevelPermission): Promise<FolderLevelPermission[]> {\n const [folders] = await this.context.aco.folder.listAll({\n where: {\n type: flp.type,\n parentId: flp.id\n },\n disablePermissions: true\n });\n\n return await Promise.all(folders.map(folder => this.getFlp(folder)));\n }\n\n private async getFlp({ id, type, parentId, slug, permissions }: Folder) {\n const flp = await this.context.aco.flp.get(id);\n\n if (!flp) {\n const parentFlp = parentId ? await this.context.aco.flp.get(parentId) : null;\n\n return await this.context.aco.flp.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n }\n\n return flp;\n }\n\n private async getFolderModel() {\n return await this.context.cms.getModel(FOLDER_MODEL_ID);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -86,6 +86,9 @@ const createFolderTypeDefs = params => {
86
86
  ${inputCreateFields.map(f => f.typeDefs).join("\n")}
87
87
 
88
88
  input FolderCreateInput {
89
+ # Pass an ID if you want to create a folder with a specific ID.
90
+ id: ID
91
+
89
92
  ${inputCreateFields.map(f => f.fields).join("\n")}
90
93
  }
91
94
 
@@ -97,6 +100,14 @@ const createFolderTypeDefs = params => {
97
100
  type: String!
98
101
  parentId: ID
99
102
  parentId_in: [ID]
103
+ path: String
104
+ path_not: String
105
+ path_contains: String
106
+ path_not_contains: String
107
+ path_in: [String]
108
+ path_not_in: [String]
109
+ path_startsWith: String
110
+ path_not_startsWith: String
100
111
  createdBy: ID
101
112
  }
102
113
 
@@ -1 +1 @@
1
- {"version":3,"names":["_renderFields","require","_renderInputFields","removeFieldRequiredValidation","field","validation","filter","name","listValidation","v","createUpdateFields","fields","reduce","collection","push","createFolderTypeDefs","params","model","models","plugins","fieldTypePlugins","fieldTypes","renderFields","type","inputCreateFields","renderInputFields","inputUpdateFields","map","f","typeDefs","join","exports"],"sources":["createFolderTypeDefs.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields\";\n\nexport interface CreateFolderTypeDefsParams {\n model: CmsModel;\n models: CmsModel[];\n plugins: CmsFieldTypePlugins;\n}\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nexport const createFolderTypeDefs = (params: CreateFolderTypeDefsParams): string => {\n const { model, models, plugins: fieldTypePlugins } = params;\n const { fields } = model;\n\n const fieldTypes = renderFields({\n models,\n model,\n fields,\n type: \"manage\",\n fieldTypePlugins\n });\n const inputCreateFields = renderInputFields({\n models,\n model,\n fields,\n fieldTypePlugins\n });\n const inputUpdateFields = renderInputFields({\n models,\n model,\n fields: createUpdateFields(fields),\n fieldTypePlugins\n });\n\n return /* GraphQL */ `\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n \n type CompressedResponse {\n compression: String\n value: String\n }\n\n type Folder {\n id: ID!\n # Tells us if the current user can manage folder structure.\n canManageStructure: Boolean\n\n # Tells us if the current user can manage folder permissions.\n canManagePermissions: Boolean\n\n # Tells us if the current user can manage folder content.\n canManageContent: Boolean\n\n # Tells us if the folder contains non-inherited permissions.\n hasNonInheritedPermissions: Boolean\n\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: AcoUser\n modifiedBy: AcoUser\n savedBy: AcoUser\n \n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n \n input FolderCreateInput {\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n \n input FolderUpdateInput {\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n \n input FoldersListWhereInput {\n type: String!\n parentId: ID\n parentId_in: [ID]\n createdBy: ID\n }\n \n type FolderResponse {\n data: Folder\n error: AcoError\n }\n\n type FoldersListResponse {\n data: [Folder]\n error: AcoError\n meta: AcoMeta\n }\n\n type FoldersListCompressedResponse {\n data: CompressedResponse\n error: AcoError\n }\n \n type FoldersHierarchyData {\n parents: [Folder]\n siblings: [Folder]\n }\n\n type FoldersHierarchyResponse {\n data: FoldersHierarchyData\n error: AcoError\n }\n\n type FolderLevelPermissionsTarget {\n id: ID!\n type: String!\n target: ID!\n name: String!\n meta: JSON\n }\n\n type FolderLevelPermissionsTargetsListMeta {\n totalCount: Int!\n }\n\n type FolderLevelPermissionsTargetsListResponse {\n data: [FolderLevelPermissionsTarget]\n meta: FolderLevelPermissionsTargetsListMeta\n error: AcoError\n }\n \n type FolderModelResponse {\n data: JSON\n error: AcoError\n }\n\n extend type AcoQuery {\n getFolderModel: FolderModelResponse!\n getFolder(id: ID!): FolderResponse\n listFolders(\n where: FoldersListWhereInput!\n limit: Int\n after: String\n sort: AcoSort\n ): FoldersListResponse\n listFoldersCompressed(\n where: FoldersListWhereInput!\n limit: Int\n after: String\n sort: AcoSort\n ): FoldersListCompressedResponse\n getFolderHierarchy(type: String!, id: ID!): FoldersHierarchyResponse\n listFolderLevelPermissionsTargets: FolderLevelPermissionsTargetsListResponse\n }\n\n extend type AcoMutation {\n createFolder(data: FolderCreateInput!): FolderResponse\n updateFolder(id: ID!, data: FolderUpdateInput!): FolderResponse\n deleteFolder(id: ID!): AcoBooleanResponse\n }\n \n extend type AcoFolder_Permissions {\n inheritedFrom: ID\n }\n \n extend input AcoFolder_PermissionsInput {\n inheritedFrom: ID\n }\n `;\n};\n"],"mappings":";;;;;;AACA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAQA,MAAME,6BAA6B,GAAIC,KAAoB,IAAK;EAC5D,IAAIA,KAAK,CAACC,UAAU,EAAE;IAClBD,KAAK,CAACC,UAAU,GAAGD,KAAK,CAACC,UAAU,CAACC,MAAM,CAACD,UAAU,IAAIA,UAAU,CAACE,IAAI,KAAK,UAAU,CAAC;EAC5F;EACA,IAAIH,KAAK,CAACI,cAAc,EAAE;IACtBJ,KAAK,CAACI,cAAc,GAAGJ,KAAK,CAACI,cAAc,CAACF,MAAM,CAACG,CAAC,IAAIA,CAAC,CAACF,IAAI,KAAK,UAAU,CAAC;EAClF;EACA,OAAOH,KAAK;AAChB,CAAC;AAED,MAAMM,kBAAkB,GAAIC,MAAuB,IAAsB;EACrE,OAAOA,MAAM,CAACC,MAAM,CAAkB,CAACC,UAAU,EAAET,KAAK,KAAK;IACzDS,UAAU,CAACC,IAAI,CAACX,6BAA6B,CAAC;MAAE,GAAGC;IAAM,CAAC,CAAC,CAAC;IAC5D,OAAOS,UAAU;EACrB,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAEM,MAAME,oBAAoB,GAAIC,MAAkC,IAAa;EAChF,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,OAAO,EAAEC;EAAiB,CAAC,GAAGJ,MAAM;EAC3D,MAAM;IAAEL;EAAO,CAAC,GAAGM,KAAK;EAExB,MAAMI,UAAU,GAAG,IAAAC,0BAAY,EAAC;IAC5BJ,MAAM;IACND,KAAK;IACLN,MAAM;IACNY,IAAI,EAAE,QAAQ;IACdH;EACJ,CAAC,CAAC;EACF,MAAMI,iBAAiB,GAAG,IAAAC,oCAAiB,EAAC;IACxCP,MAAM;IACND,KAAK;IACLN,MAAM;IACNS;EACJ,CAAC,CAAC;EACF,MAAMM,iBAAiB,GAAG,IAAAD,oCAAiB,EAAC;IACxCP,MAAM;IACND,KAAK;IACLN,MAAM,EAAED,kBAAkB,CAACC,MAAM,CAAC;IAClCS;EACJ,CAAC,CAAC;EAEF,OAAO,aAAc;AACzB,UAAUC,UAAU,CAACM,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAcT,UAAU,CAACM,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AACtD;AACA;AACA,UAAUN,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AAC3D;AACA;AACA,eAAeN,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AAC9D;AACA;AACA;AACA,cAAcJ,iBAAiB,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AAACC,OAAA,CAAAhB,oBAAA,GAAAA,oBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_renderFields","require","_renderInputFields","removeFieldRequiredValidation","field","validation","filter","name","listValidation","v","createUpdateFields","fields","reduce","collection","push","createFolderTypeDefs","params","model","models","plugins","fieldTypePlugins","fieldTypes","renderFields","type","inputCreateFields","renderInputFields","inputUpdateFields","map","f","typeDefs","join","exports"],"sources":["createFolderTypeDefs.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields\";\n\nexport interface CreateFolderTypeDefsParams {\n model: CmsModel;\n models: CmsModel[];\n plugins: CmsFieldTypePlugins;\n}\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nexport const createFolderTypeDefs = (params: CreateFolderTypeDefsParams): string => {\n const { model, models, plugins: fieldTypePlugins } = params;\n const { fields } = model;\n\n const fieldTypes = renderFields({\n models,\n model,\n fields,\n type: \"manage\",\n fieldTypePlugins\n });\n const inputCreateFields = renderInputFields({\n models,\n model,\n fields,\n fieldTypePlugins\n });\n const inputUpdateFields = renderInputFields({\n models,\n model,\n fields: createUpdateFields(fields),\n fieldTypePlugins\n });\n\n return /* GraphQL */ `\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n \n type CompressedResponse {\n compression: String\n value: String\n }\n\n type Folder {\n id: ID!\n # Tells us if the current user can manage folder structure.\n canManageStructure: Boolean\n\n # Tells us if the current user can manage folder permissions.\n canManagePermissions: Boolean\n\n # Tells us if the current user can manage folder content.\n canManageContent: Boolean\n\n # Tells us if the folder contains non-inherited permissions.\n hasNonInheritedPermissions: Boolean\n\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: AcoUser\n modifiedBy: AcoUser\n savedBy: AcoUser\n \n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n \n input FolderCreateInput {\n # Pass an ID if you want to create a folder with a specific ID.\n id: ID \n \n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n \n input FolderUpdateInput {\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n \n input FoldersListWhereInput {\n type: String!\n parentId: ID\n parentId_in: [ID]\n path: String\n path_not: String\n path_contains: String\n path_not_contains: String\n path_in: [String]\n path_not_in: [String]\n path_startsWith: String\n path_not_startsWith: String\n createdBy: ID\n }\n \n type FolderResponse {\n data: Folder\n error: AcoError\n }\n\n type FoldersListResponse {\n data: [Folder]\n error: AcoError\n meta: AcoMeta\n }\n\n type FoldersListCompressedResponse {\n data: CompressedResponse\n error: AcoError\n }\n \n type FoldersHierarchyData {\n parents: [Folder]\n siblings: [Folder]\n }\n\n type FoldersHierarchyResponse {\n data: FoldersHierarchyData\n error: AcoError\n }\n\n type FolderLevelPermissionsTarget {\n id: ID!\n type: String!\n target: ID!\n name: String!\n meta: JSON\n }\n\n type FolderLevelPermissionsTargetsListMeta {\n totalCount: Int!\n }\n\n type FolderLevelPermissionsTargetsListResponse {\n data: [FolderLevelPermissionsTarget]\n meta: FolderLevelPermissionsTargetsListMeta\n error: AcoError\n }\n \n type FolderModelResponse {\n data: JSON\n error: AcoError\n }\n\n extend type AcoQuery {\n getFolderModel: FolderModelResponse!\n getFolder(id: ID!): FolderResponse\n listFolders(\n where: FoldersListWhereInput!\n limit: Int\n after: String\n sort: AcoSort\n ): FoldersListResponse\n listFoldersCompressed(\n where: FoldersListWhereInput!\n limit: Int\n after: String\n sort: AcoSort\n ): FoldersListCompressedResponse\n getFolderHierarchy(type: String!, id: ID!): FoldersHierarchyResponse\n listFolderLevelPermissionsTargets: FolderLevelPermissionsTargetsListResponse\n }\n\n extend type AcoMutation {\n createFolder(data: FolderCreateInput!): FolderResponse\n updateFolder(id: ID!, data: FolderUpdateInput!): FolderResponse\n deleteFolder(id: ID!): AcoBooleanResponse\n }\n \n extend type AcoFolder_Permissions {\n inheritedFrom: ID\n }\n \n extend input AcoFolder_PermissionsInput {\n inheritedFrom: ID\n }\n `;\n};\n"],"mappings":";;;;;;AACA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAQA,MAAME,6BAA6B,GAAIC,KAAoB,IAAK;EAC5D,IAAIA,KAAK,CAACC,UAAU,EAAE;IAClBD,KAAK,CAACC,UAAU,GAAGD,KAAK,CAACC,UAAU,CAACC,MAAM,CAACD,UAAU,IAAIA,UAAU,CAACE,IAAI,KAAK,UAAU,CAAC;EAC5F;EACA,IAAIH,KAAK,CAACI,cAAc,EAAE;IACtBJ,KAAK,CAACI,cAAc,GAAGJ,KAAK,CAACI,cAAc,CAACF,MAAM,CAACG,CAAC,IAAIA,CAAC,CAACF,IAAI,KAAK,UAAU,CAAC;EAClF;EACA,OAAOH,KAAK;AAChB,CAAC;AAED,MAAMM,kBAAkB,GAAIC,MAAuB,IAAsB;EACrE,OAAOA,MAAM,CAACC,MAAM,CAAkB,CAACC,UAAU,EAAET,KAAK,KAAK;IACzDS,UAAU,CAACC,IAAI,CAACX,6BAA6B,CAAC;MAAE,GAAGC;IAAM,CAAC,CAAC,CAAC;IAC5D,OAAOS,UAAU;EACrB,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAEM,MAAME,oBAAoB,GAAIC,MAAkC,IAAa;EAChF,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,OAAO,EAAEC;EAAiB,CAAC,GAAGJ,MAAM;EAC3D,MAAM;IAAEL;EAAO,CAAC,GAAGM,KAAK;EAExB,MAAMI,UAAU,GAAG,IAAAC,0BAAY,EAAC;IAC5BJ,MAAM;IACND,KAAK;IACLN,MAAM;IACNY,IAAI,EAAE,QAAQ;IACdH;EACJ,CAAC,CAAC;EACF,MAAMI,iBAAiB,GAAG,IAAAC,oCAAiB,EAAC;IACxCP,MAAM;IACND,KAAK;IACLN,MAAM;IACNS;EACJ,CAAC,CAAC;EACF,MAAMM,iBAAiB,GAAG,IAAAD,oCAAiB,EAAC;IACxCP,MAAM;IACND,KAAK;IACLN,MAAM,EAAED,kBAAkB,CAACC,MAAM,CAAC;IAClCS;EACJ,CAAC,CAAC;EAEF,OAAO,aAAc;AACzB,UAAUC,UAAU,CAACM,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAcT,UAAU,CAACM,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AACtD;AACA;AACA,UAAUN,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA,eAAeN,iBAAiB,CAACG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AAC9D;AACA;AACA;AACA,cAAcJ,iBAAiB,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACmB,IAAI,CAAC,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AAACC,OAAA,CAAAhB,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -76,7 +76,9 @@ const createFolderCrudMethods = ({
76
76
  });
77
77
  const {
78
78
  getAncestorsUseCase
79
- } = (0, _useCases.getGetAncestors)();
79
+ } = (0, _useCases.getGetAncestors)({
80
+ listFoldersUseCase: listFoldersUseCase
81
+ });
80
82
  const {
81
83
  listFolderLevelPermissionsTargetsUseCase
82
84
  } = (0, _useCases.getListFolderLevelPermissionsTargets)({
@@ -134,14 +136,8 @@ const createFolderCrudMethods = ({
134
136
  return await updateFolderUseCase.execute(id, data);
135
137
  },
136
138
  async getAncestors(folder) {
137
- const [folders] = await this.listAll({
138
- where: {
139
- type: folder.type
140
- }
141
- });
142
139
  return getAncestorsUseCase.execute({
143
- folder,
144
- folders
140
+ folder
145
141
  });
146
142
  },
147
143
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_pubsub","require","_useCases","FIXED_FOLDER_LISTING_LIMIT","createFolderCrudMethods","storageOperations","folderLevelPermissions","context","onFolderBeforeCreate","createTopic","onFolderAfterCreate","onFolderBeforeUpdate","onFolderAfterUpdate","onFolderBeforeDelete","onFolderAfterDelete","getFolderUseCase","getFolderUseCaseWithoutPermissions","getGetFolderUseCase","getOperation","folder","getFolder","listFoldersUseCase","listFoldersUseCaseWithoutPermissions","getListFoldersUseCases","listOperation","listFolders","getFolderHierarchyUseCase","getGetFolderHierarchyUseCases","createFolderUseCase","getCreateFolderUseCases","createOperation","createFolder","topics","updateFolderUseCase","getUpdateFolderUseCase","updateOperation","updateFolder","deleteFolderUseCase","getDeleteFolderUseCases","deleteOperation","deleteFolder","getAncestorsUseCase","getGetAncestors","listFolderLevelPermissionsTargetsUseCase","getListFolderLevelPermissionsTargets","get","id","disablePermissions","execute","list","params","listAll","limit","getFolderHierarchy","create","data","delete","update","getAncestors","folders","where","type","getFolderWithAncestors","listFolderLevelPermissionsTargets","exports"],"sources":["folder.crud.ts"],"sourcesContent":["import { createTopic } from \"@webiny/pubsub\";\nimport {\n AcoFolderCrud,\n type ListFoldersParams,\n OnFolderAfterCreateTopicParams,\n OnFolderAfterDeleteTopicParams,\n OnFolderAfterUpdateTopicParams,\n OnFolderBeforeCreateTopicParams,\n OnFolderBeforeDeleteTopicParams,\n OnFolderBeforeUpdateTopicParams\n} from \"./folder.types\";\nimport {\n getCreateFolderUseCases,\n getDeleteFolderUseCases,\n getGetAncestors,\n getGetFolderUseCase,\n getListFolderLevelPermissionsTargets,\n getListFoldersUseCases,\n getUpdateFolderUseCase,\n getGetFolderHierarchyUseCases\n} from \"~/folder/useCases\";\nimport { type AcoContext, CreateAcoParams, Folder } from \"~/types\";\n\nconst FIXED_FOLDER_LISTING_LIMIT = 10_000;\n\ninterface CreateFolderCrudMethodsParams extends CreateAcoParams {\n context: AcoContext;\n}\n\nexport const createFolderCrudMethods = ({\n storageOperations,\n folderLevelPermissions,\n context\n}: CreateFolderCrudMethodsParams): AcoFolderCrud => {\n // create\n const onFolderBeforeCreate = createTopic<OnFolderBeforeCreateTopicParams>(\n \"aco.onFolderBeforeCreate\"\n );\n const onFolderAfterCreate =\n createTopic<OnFolderAfterCreateTopicParams>(\"aco.onFolderAfterCreate\");\n // update\n const onFolderBeforeUpdate = createTopic<OnFolderBeforeUpdateTopicParams>(\n \"aco.onFolderBeforeUpdate\"\n );\n const onFolderAfterUpdate =\n createTopic<OnFolderAfterUpdateTopicParams>(\"aco.onFolderAfterUpdate\");\n // delete\n const onFolderBeforeDelete = createTopic<OnFolderBeforeDeleteTopicParams>(\n \"aco.onFolderBeforeDelete\"\n );\n const onFolderAfterDelete =\n createTopic<OnFolderAfterDeleteTopicParams>(\"aco.onFolderAfterDelete\");\n\n const { getFolderUseCase, getFolderUseCaseWithoutPermissions } = getGetFolderUseCase({\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions\n });\n\n const { listFoldersUseCase, listFoldersUseCaseWithoutPermissions } = getListFoldersUseCases({\n listOperation: storageOperations.folder.listFolders,\n folderLevelPermissions\n });\n\n const { getFolderHierarchyUseCase } = getGetFolderHierarchyUseCases({\n listOperation: storageOperations.folder.listFolders,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions\n });\n\n const { createFolderUseCase } = getCreateFolderUseCases({\n createOperation: storageOperations.folder.createFolder,\n folderLevelPermissions,\n topics: {\n onFolderAfterCreate,\n onFolderBeforeCreate\n }\n });\n\n const { updateFolderUseCase } = getUpdateFolderUseCase({\n updateOperation: storageOperations.folder.updateFolder,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions,\n topics: {\n onFolderAfterUpdate,\n onFolderBeforeUpdate\n }\n });\n\n const { deleteFolderUseCase } = getDeleteFolderUseCases({\n deleteOperation: storageOperations.folder.deleteFolder,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions,\n topics: {\n onFolderBeforeDelete,\n onFolderAfterDelete\n }\n });\n\n const { getAncestorsUseCase } = getGetAncestors();\n\n const { listFolderLevelPermissionsTargetsUseCase } = getListFolderLevelPermissionsTargets({\n context\n });\n\n return {\n /**\n * Lifecycle events\n */\n onFolderBeforeCreate,\n onFolderAfterCreate,\n onFolderBeforeUpdate,\n onFolderAfterUpdate,\n onFolderBeforeDelete,\n onFolderAfterDelete,\n\n async get(id, disablePermissions) {\n // If permissions are disabled, execute the use case without applying folder-level permissions logic, returning the raw folder data from the database.\n if (disablePermissions) {\n return await getFolderUseCaseWithoutPermissions.execute({ id });\n }\n return await getFolderUseCase.execute({ id });\n },\n\n async list({ disablePermissions, ...params }: ListFoldersParams) {\n // If permissions are disabled, execute the use case without applying folder-level permissions logic, returning the raw folder data from the database.\n if (disablePermissions) {\n return await listFoldersUseCaseWithoutPermissions.execute(params);\n }\n return await listFoldersUseCase.execute(params);\n },\n\n async listAll(params) {\n return await this.list({\n ...params,\n limit: FIXED_FOLDER_LISTING_LIMIT\n });\n },\n\n async getFolderHierarchy(params) {\n return await getFolderHierarchyUseCase.execute(params);\n },\n\n async create(data) {\n return await createFolderUseCase.execute(data);\n },\n\n async delete(id) {\n return await deleteFolderUseCase.execute({ id });\n },\n\n async update(id, data) {\n return await updateFolderUseCase.execute(id, data);\n },\n\n async getAncestors(folder: Folder) {\n const [folders] = await this.listAll({ where: { type: folder.type } });\n return getAncestorsUseCase.execute({ folder, folders });\n },\n\n /**\n * @deprecated use `getAncestors` instead\n */\n async getFolderWithAncestors(id: string) {\n const folder = await this.get(id);\n return this.getAncestors(folder);\n },\n\n async listFolderLevelPermissionsTargets() {\n return await listFolderLevelPermissionsTargetsUseCase.execute();\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_pubsub","require","_useCases","FIXED_FOLDER_LISTING_LIMIT","createFolderCrudMethods","storageOperations","folderLevelPermissions","context","onFolderBeforeCreate","createTopic","onFolderAfterCreate","onFolderBeforeUpdate","onFolderAfterUpdate","onFolderBeforeDelete","onFolderAfterDelete","getFolderUseCase","getFolderUseCaseWithoutPermissions","getGetFolderUseCase","getOperation","folder","getFolder","listFoldersUseCase","listFoldersUseCaseWithoutPermissions","getListFoldersUseCases","listOperation","listFolders","getFolderHierarchyUseCase","getGetFolderHierarchyUseCases","createFolderUseCase","getCreateFolderUseCases","createOperation","createFolder","topics","updateFolderUseCase","getUpdateFolderUseCase","updateOperation","updateFolder","deleteFolderUseCase","getDeleteFolderUseCases","deleteOperation","deleteFolder","getAncestorsUseCase","getGetAncestors","listFolderLevelPermissionsTargetsUseCase","getListFolderLevelPermissionsTargets","get","id","disablePermissions","execute","list","params","listAll","limit","getFolderHierarchy","create","data","delete","update","getAncestors","getFolderWithAncestors","listFolderLevelPermissionsTargets","exports"],"sources":["folder.crud.ts"],"sourcesContent":["import { createTopic } from \"@webiny/pubsub\";\nimport {\n AcoFolderCrud,\n type ListFoldersParams,\n OnFolderAfterCreateTopicParams,\n OnFolderAfterDeleteTopicParams,\n OnFolderAfterUpdateTopicParams,\n OnFolderBeforeCreateTopicParams,\n OnFolderBeforeDeleteTopicParams,\n OnFolderBeforeUpdateTopicParams\n} from \"./folder.types\";\nimport {\n getCreateFolderUseCases,\n getDeleteFolderUseCases,\n getGetAncestors,\n getGetFolderUseCase,\n getListFolderLevelPermissionsTargets,\n getListFoldersUseCases,\n getUpdateFolderUseCase,\n getGetFolderHierarchyUseCases\n} from \"~/folder/useCases\";\nimport { type AcoContext, CreateAcoParams, Folder } from \"~/types\";\n\nconst FIXED_FOLDER_LISTING_LIMIT = 10_000;\n\ninterface CreateFolderCrudMethodsParams extends CreateAcoParams {\n context: AcoContext;\n}\n\nexport const createFolderCrudMethods = ({\n storageOperations,\n folderLevelPermissions,\n context\n}: CreateFolderCrudMethodsParams): AcoFolderCrud => {\n // create\n const onFolderBeforeCreate = createTopic<OnFolderBeforeCreateTopicParams>(\n \"aco.onFolderBeforeCreate\"\n );\n const onFolderAfterCreate =\n createTopic<OnFolderAfterCreateTopicParams>(\"aco.onFolderAfterCreate\");\n // update\n const onFolderBeforeUpdate = createTopic<OnFolderBeforeUpdateTopicParams>(\n \"aco.onFolderBeforeUpdate\"\n );\n const onFolderAfterUpdate =\n createTopic<OnFolderAfterUpdateTopicParams>(\"aco.onFolderAfterUpdate\");\n // delete\n const onFolderBeforeDelete = createTopic<OnFolderBeforeDeleteTopicParams>(\n \"aco.onFolderBeforeDelete\"\n );\n const onFolderAfterDelete =\n createTopic<OnFolderAfterDeleteTopicParams>(\"aco.onFolderAfterDelete\");\n\n const { getFolderUseCase, getFolderUseCaseWithoutPermissions } = getGetFolderUseCase({\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions\n });\n\n const { listFoldersUseCase, listFoldersUseCaseWithoutPermissions } = getListFoldersUseCases({\n listOperation: storageOperations.folder.listFolders,\n folderLevelPermissions\n });\n\n const { getFolderHierarchyUseCase } = getGetFolderHierarchyUseCases({\n listOperation: storageOperations.folder.listFolders,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions\n });\n\n const { createFolderUseCase } = getCreateFolderUseCases({\n createOperation: storageOperations.folder.createFolder,\n folderLevelPermissions,\n topics: {\n onFolderAfterCreate,\n onFolderBeforeCreate\n }\n });\n\n const { updateFolderUseCase } = getUpdateFolderUseCase({\n updateOperation: storageOperations.folder.updateFolder,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions,\n topics: {\n onFolderAfterUpdate,\n onFolderBeforeUpdate\n }\n });\n\n const { deleteFolderUseCase } = getDeleteFolderUseCases({\n deleteOperation: storageOperations.folder.deleteFolder,\n getOperation: storageOperations.folder.getFolder,\n folderLevelPermissions,\n topics: {\n onFolderBeforeDelete,\n onFolderAfterDelete\n }\n });\n\n const { getAncestorsUseCase } = getGetAncestors({\n listFoldersUseCase: listFoldersUseCase\n });\n\n const { listFolderLevelPermissionsTargetsUseCase } = getListFolderLevelPermissionsTargets({\n context\n });\n\n return {\n /**\n * Lifecycle events\n */\n onFolderBeforeCreate,\n onFolderAfterCreate,\n onFolderBeforeUpdate,\n onFolderAfterUpdate,\n onFolderBeforeDelete,\n onFolderAfterDelete,\n\n async get(id, disablePermissions) {\n // If permissions are disabled, execute the use case without applying folder-level permissions logic, returning the raw folder data from the database.\n if (disablePermissions) {\n return await getFolderUseCaseWithoutPermissions.execute({ id });\n }\n return await getFolderUseCase.execute({ id });\n },\n\n async list({ disablePermissions, ...params }: ListFoldersParams) {\n // If permissions are disabled, execute the use case without applying folder-level permissions logic, returning the raw folder data from the database.\n if (disablePermissions) {\n return await listFoldersUseCaseWithoutPermissions.execute(params);\n }\n return await listFoldersUseCase.execute(params);\n },\n\n async listAll(params) {\n return await this.list({\n ...params,\n limit: FIXED_FOLDER_LISTING_LIMIT\n });\n },\n\n async getFolderHierarchy(params) {\n return await getFolderHierarchyUseCase.execute(params);\n },\n\n async create(data) {\n return await createFolderUseCase.execute(data);\n },\n\n async delete(id) {\n return await deleteFolderUseCase.execute({ id });\n },\n\n async update(id, data) {\n return await updateFolderUseCase.execute(id, data);\n },\n\n async getAncestors(folder: Folder) {\n return getAncestorsUseCase.execute({ folder });\n },\n\n /**\n * @deprecated use `getAncestors` instead\n */\n async getFolderWithAncestors(id: string) {\n const folder = await this.get(id);\n return this.getAncestors(folder);\n },\n\n async listFolderLevelPermissionsTargets() {\n return await listFolderLevelPermissionsTargetsUseCase.execute();\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -42,6 +42,10 @@ const parentIdField = () => (0, _createModelField.createModelField)({
42
42
  label: "Parent Id",
43
43
  type: "text"
44
44
  });
45
+ const pathField = () => (0, _createModelField.createModelField)({
46
+ label: "Path",
47
+ type: "text"
48
+ });
45
49
  const permissionsField = () => (0, _createModelField.createModelField)({
46
50
  label: "Permissions",
47
51
  fieldId: "permissions",
@@ -114,7 +118,7 @@ const createFolderModel = () => {
114
118
  // flp: true
115
119
  },
116
120
  titleFieldId: "title",
117
- fields: [titleField(), slugField(), typeField(), parentIdField(), permissionsField(), extensionsField()]
121
+ fields: [titleField(), slugField(), typeField(), parentIdField(), pathField(), permissionsField(), extensionsField()]
118
122
  });
119
123
  };
120
124
  exports.createFolderModel = createFolderModel;
@@ -1 +1 @@
1
- {"version":3,"names":["_createModelField","require","_apiHeadlessCms","titleField","createModelField","label","type","validation","name","message","slugField","settings","preset","regex","flags","typeField","parentIdField","permissionsField","fieldId","multipleValues","listValidation","fields","id","storageId","predefinedValues","enabled","values","value","layout","extensionsField","FOLDER_MODEL_ID","exports","createFolderModel","createPrivateModel","modelId","authorization","permissions","titleFieldId"],"sources":["folder.model.ts"],"sourcesContent":["import { createModelField } from \"~/utils/createModelField\";\nimport { createPrivateModel } from \"@webiny/api-headless-cms\";\n\nconst titleField = () =>\n createModelField({\n label: \"Title\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst slugField = () =>\n createModelField({\n label: \"Slug\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n },\n {\n name: \"pattern\",\n settings: {\n preset: \"custom\",\n regex: \"^[a-z0-9]+(-[a-z0-9]+)*$\",\n flags: \"g\"\n },\n message: \"Value must consist of only 'a-z', '0-9' and '-'.\"\n }\n ]\n });\n\nconst typeField = () =>\n createModelField({\n label: \"Type\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst parentIdField = () =>\n createModelField({\n label: \"Parent Id\",\n type: \"text\"\n });\n\nconst permissionsField = () =>\n createModelField({\n label: \"Permissions\",\n fieldId: \"permissions\",\n type: \"object\",\n multipleValues: true,\n listValidation: [],\n settings: {\n fields: [\n {\n id: \"target\",\n type: \"text\",\n storageId: \"text@target\",\n fieldId: \"target\",\n label: \"Target\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n },\n {\n id: \"level\",\n type: \"text\",\n storageId: \"text@level\",\n fieldId: \"level\",\n label: \"Level\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ],\n predefinedValues: {\n enabled: true,\n values: [\n {\n label: \"Viewer\",\n value: \"viewer\"\n },\n {\n label: \"Editor\",\n value: \"editor\"\n },\n {\n label: \"Owner\",\n value: \"owner\"\n },\n {\n label: \"Public\",\n value: \"public\"\n },\n {\n label: \"No Access\",\n value: \"no-access\"\n }\n ]\n }\n }\n ],\n layout: [[\"target\"], [\"level\"]]\n }\n });\n\nconst extensionsField = () =>\n createModelField({\n label: \"Extensions\",\n fieldId: \"extensions\",\n type: \"object\",\n settings: {\n layout: [],\n fields: []\n }\n });\n\nexport const FOLDER_MODEL_ID = \"acoFolder\";\n\nexport const createFolderModel = () => {\n return createPrivateModel({\n name: \"ACO - Folder\",\n modelId: FOLDER_MODEL_ID,\n authorization: {\n // Disables base permission checks, but leaves FLP checks enabled.\n permissions: false\n\n // We're leaving FLP enabled (no need to set `flp: true`).\n // flp: true\n },\n titleFieldId: \"title\",\n fields: [\n titleField(),\n slugField(),\n typeField(),\n parentIdField(),\n permissionsField(),\n extensionsField()\n ]\n });\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_createModelField","require","_apiHeadlessCms","titleField","createModelField","label","type","validation","name","message","slugField","settings","preset","regex","flags","typeField","parentIdField","pathField","permissionsField","fieldId","multipleValues","listValidation","fields","id","storageId","predefinedValues","enabled","values","value","layout","extensionsField","FOLDER_MODEL_ID","exports","createFolderModel","createPrivateModel","modelId","authorization","permissions","titleFieldId"],"sources":["folder.model.ts"],"sourcesContent":["import { createModelField } from \"~/utils/createModelField\";\nimport { createPrivateModel } from \"@webiny/api-headless-cms\";\n\nconst titleField = () =>\n createModelField({\n label: \"Title\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst slugField = () =>\n createModelField({\n label: \"Slug\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n },\n {\n name: \"pattern\",\n settings: {\n preset: \"custom\",\n regex: \"^[a-z0-9]+(-[a-z0-9]+)*$\",\n flags: \"g\"\n },\n message: \"Value must consist of only 'a-z', '0-9' and '-'.\"\n }\n ]\n });\n\nconst typeField = () =>\n createModelField({\n label: \"Type\",\n type: \"text\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n });\n\nconst parentIdField = () =>\n createModelField({\n label: \"Parent Id\",\n type: \"text\"\n });\n\nconst pathField = () =>\n createModelField({\n label: \"Path\",\n type: \"text\"\n });\n\nconst permissionsField = () =>\n createModelField({\n label: \"Permissions\",\n fieldId: \"permissions\",\n type: \"object\",\n multipleValues: true,\n listValidation: [],\n settings: {\n fields: [\n {\n id: \"target\",\n type: \"text\",\n storageId: \"text@target\",\n fieldId: \"target\",\n label: \"Target\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ]\n },\n {\n id: \"level\",\n type: \"text\",\n storageId: \"text@level\",\n fieldId: \"level\",\n label: \"Level\",\n validation: [\n {\n name: \"required\",\n message: \"Value is required.\"\n }\n ],\n predefinedValues: {\n enabled: true,\n values: [\n {\n label: \"Viewer\",\n value: \"viewer\"\n },\n {\n label: \"Editor\",\n value: \"editor\"\n },\n {\n label: \"Owner\",\n value: \"owner\"\n },\n {\n label: \"Public\",\n value: \"public\"\n },\n {\n label: \"No Access\",\n value: \"no-access\"\n }\n ]\n }\n }\n ],\n layout: [[\"target\"], [\"level\"]]\n }\n });\n\nconst extensionsField = () =>\n createModelField({\n label: \"Extensions\",\n fieldId: \"extensions\",\n type: \"object\",\n settings: {\n layout: [],\n fields: []\n }\n });\n\nexport const FOLDER_MODEL_ID = \"acoFolder\";\n\nexport const createFolderModel = () => {\n return createPrivateModel({\n name: \"ACO - Folder\",\n modelId: FOLDER_MODEL_ID,\n authorization: {\n // Disables base permission checks, but leaves FLP checks enabled.\n permissions: false\n\n // We're leaving FLP enabled (no need to set `flp: true`).\n // flp: true\n },\n titleFieldId: \"title\",\n fields: [\n titleField(),\n slugField(),\n typeField(),\n parentIdField(),\n pathField(),\n permissionsField(),\n extensionsField()\n ]\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ var _folder = require("./folder.model");
11
11
  var _createListSort = require("../utils/createListSort");
12
12
  var _createOperationsWrapper = require("../utils/createOperationsWrapper");
13
13
  var _pickEntryFieldValues = require("../utils/pickEntryFieldValues");
14
+ var _Path = require("../utils/Path");
14
15
  var _constants = require("@webiny/api-headless-cms/constants");
15
16
  const createFolderOperations = params => {
16
17
  const {
@@ -87,6 +88,21 @@ const createFolderOperations = params => {
87
88
  return;
88
89
  });
89
90
  };
91
+ const createFolderPath = async ({
92
+ slug,
93
+ parentId
94
+ }) => {
95
+ let parentFolder = null;
96
+ if (parentId) {
97
+ parentFolder = await getFolder({
98
+ id: parentId
99
+ });
100
+ if (!parentFolder) {
101
+ throw new _error.default("Parent folder not found. Unable to create the folder `path`", "ERROR_CREATE_FOLDER_PATH_PARENT_FOLDER_NOT_FOUND");
102
+ }
103
+ }
104
+ return _Path.Path.create(slug, parentFolder?.path);
105
+ };
90
106
  return {
91
107
  getFolder,
92
108
  listFolders(params) {
@@ -121,7 +137,8 @@ const createFolderOperations = params => {
121
137
  });
122
138
  const entry = await cms.createEntry(model, {
123
139
  ...data,
124
- parentId: data.parentId || null
140
+ parentId: data.parentId || null,
141
+ path: await createFolderPath(data)
125
142
  });
126
143
  return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
127
144
  });
@@ -152,7 +169,11 @@ const createFolderOperations = params => {
152
169
  * we don't want to override them with the ones coming from the `original` entry.
153
170
  */
154
171
  ...(0, _omit.default)(original, _constants.ENTRY_META_FIELDS),
155
- ...data
172
+ ...data,
173
+ path: await createFolderPath({
174
+ slug: slug || original.slug,
175
+ parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`
176
+ })
156
177
  };
157
178
  const entry = await cms.updateEntry(model, id, input);
158
179
  return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
@@ -1 +1 @@
1
- {"version":3,"names":["_omit","_interopRequireDefault","require","_error","_folder","_createListSort","_createOperationsWrapper","_pickEntryFieldValues","_constants","createFolderOperations","params","cms","withModel","createOperationsWrapper","modelName","FOLDER_MODEL_ID","getFolder","id","slug","type","parentId","model","entry","getEntryById","getEntry","where","latest","WebinyError","pickEntryFieldValues","checkExistingFolder","listResult","storageOperations","entries","list","id_not","limit","items","length","listFolders","sort","listSort","title","meta","listLatestEntries","createListSort","map","createFolder","data","createEntry","updateFolder","original","undefined","input","omit","ENTRY_META_FIELDS","updateEntry","deleteFolder","deleteEntry","permanently","force","exports"],"sources":["folder.so.ts"],"sourcesContent":["import omit from \"lodash/omit\";\nimport WebinyError from \"@webiny/error\";\nimport { FOLDER_MODEL_ID } from \"./folder.model\";\nimport { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { AcoFolderStorageOperations, Folder } from \"./folder.types\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants\";\nimport { ListSort } from \"~/types\";\n\ninterface AcoCheckExistingFolderParams {\n params: {\n type: string;\n slug: string;\n parentId?: string | null;\n };\n id?: string;\n}\n\nexport const createFolderOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoFolderStorageOperations => {\n const { cms } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: FOLDER_MODEL_ID\n });\n\n const getFolder: AcoFolderStorageOperations[\"getFolder\"] = ({ id, slug, type, parentId }) => {\n return withModel(async model => {\n let entry;\n\n if (id) {\n entry = await cms.getEntryById(model, id);\n } else if (slug && type) {\n entry = await cms.getEntry(model, {\n where: { slug, type, parentId, latest: true }\n });\n }\n\n if (!entry) {\n throw new WebinyError(\"Could not load folder.\", \"GET_FOLDER_ERROR\", {\n id,\n slug,\n type,\n parentId\n });\n }\n\n return pickEntryFieldValues(entry);\n });\n };\n\n const checkExistingFolder = ({ id, params }: AcoCheckExistingFolderParams) => {\n return withModel(async model => {\n const { type, slug, parentId } = params;\n\n // We don't need to perform any kind of authorization or checks here. We just need to check\n // if the folder already exists in the database. Hence the direct storage operations access.\n const listResult = await cms.storageOperations.entries.list(model, {\n ...params,\n where: {\n // Folders always work with latest entries. We never publish them.\n latest: true,\n type,\n slug,\n parentId,\n id_not: id\n },\n limit: 1\n });\n\n if (listResult?.items?.length > 0) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_ALREADY_EXISTS\",\n {\n id,\n params\n }\n );\n }\n\n return;\n });\n };\n\n return {\n getFolder,\n listFolders(params) {\n return withModel(async model => {\n const { sort, where } = params;\n\n const listSort =\n sort ||\n ({\n title: \"ASC\"\n } as unknown as ListSort);\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: createListSort(listSort),\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(pickEntryFieldValues<Folder>), meta];\n });\n },\n createFolder({ data }) {\n return withModel(async model => {\n await checkExistingFolder({\n params: {\n type: data.type,\n slug: data.slug,\n parentId: data.parentId\n }\n });\n\n const entry = await cms.createEntry(model, {\n ...data,\n parentId: data.parentId || null\n });\n\n return pickEntryFieldValues(entry);\n });\n },\n updateFolder({ id, data }) {\n return withModel(async model => {\n const { slug, parentId } = data;\n\n const original = await getFolder({ id });\n\n await checkExistingFolder({\n id,\n params: {\n type: original.type,\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n }\n });\n\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n ...data\n };\n\n const entry = await cms.updateEntry(model, id, input);\n return pickEntryFieldValues(entry);\n });\n },\n deleteFolder({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id, {\n permanently: true,\n force: true\n });\n return true;\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_omit","_interopRequireDefault","require","_error","_folder","_createListSort","_createOperationsWrapper","_pickEntryFieldValues","_Path","_constants","createFolderOperations","params","cms","withModel","createOperationsWrapper","modelName","FOLDER_MODEL_ID","getFolder","id","slug","type","parentId","model","entry","getEntryById","getEntry","where","latest","WebinyError","pickEntryFieldValues","checkExistingFolder","listResult","storageOperations","entries","list","id_not","limit","items","length","createFolderPath","parentFolder","Path","create","path","listFolders","sort","listSort","title","meta","listLatestEntries","createListSort","map","createFolder","data","createEntry","updateFolder","original","undefined","input","omit","ENTRY_META_FIELDS","updateEntry","deleteFolder","deleteEntry","permanently","force","exports"],"sources":["folder.so.ts"],"sourcesContent":["import omit from \"lodash/omit\";\nimport WebinyError from \"@webiny/error\";\nimport { FOLDER_MODEL_ID } from \"./folder.model\";\nimport { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { createListSort } from \"~/utils/createListSort\";\nimport { createOperationsWrapper } from \"~/utils/createOperationsWrapper\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { Path } from \"~/utils/Path\";\nimport { AcoFolderStorageOperations, Folder } from \"./folder.types\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants\";\nimport { ListSort } from \"~/types\";\n\ninterface AcoCheckExistingFolderParams {\n params: {\n type: string;\n slug: string;\n parentId?: string | null;\n };\n id?: string;\n}\n\nexport const createFolderOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoFolderStorageOperations => {\n const { cms } = params;\n\n const { withModel } = createOperationsWrapper({\n ...params,\n modelName: FOLDER_MODEL_ID\n });\n\n const getFolder: AcoFolderStorageOperations[\"getFolder\"] = ({ id, slug, type, parentId }) => {\n return withModel(async model => {\n let entry;\n\n if (id) {\n entry = await cms.getEntryById(model, id);\n } else if (slug && type) {\n entry = await cms.getEntry(model, {\n where: { slug, type, parentId, latest: true }\n });\n }\n\n if (!entry) {\n throw new WebinyError(\"Could not load folder.\", \"GET_FOLDER_ERROR\", {\n id,\n slug,\n type,\n parentId\n });\n }\n\n return pickEntryFieldValues(entry);\n });\n };\n\n const checkExistingFolder = ({ id, params }: AcoCheckExistingFolderParams) => {\n return withModel(async model => {\n const { type, slug, parentId } = params;\n\n // We don't need to perform any kind of authorization or checks here. We just need to check\n // if the folder already exists in the database. Hence the direct storage operations access.\n const listResult = await cms.storageOperations.entries.list(model, {\n ...params,\n where: {\n // Folders always work with latest entries. We never publish them.\n latest: true,\n type,\n slug,\n parentId,\n id_not: id\n },\n limit: 1\n });\n\n if (listResult?.items?.length > 0) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_ALREADY_EXISTS\",\n {\n id,\n params\n }\n );\n }\n\n return;\n });\n };\n\n const createFolderPath = async ({\n slug,\n parentId\n }: Pick<Folder, \"slug\" | \"parentId\">): Promise<string> => {\n let parentFolder: Folder | null = null;\n\n if (parentId) {\n parentFolder = await getFolder({ id: parentId });\n\n if (!parentFolder) {\n throw new WebinyError(\n \"Parent folder not found. Unable to create the folder `path`\",\n \"ERROR_CREATE_FOLDER_PATH_PARENT_FOLDER_NOT_FOUND\"\n );\n }\n }\n\n return Path.create(slug, parentFolder?.path);\n };\n\n return {\n getFolder,\n listFolders(params) {\n return withModel(async model => {\n const { sort, where } = params;\n\n const listSort =\n sort ||\n ({\n title: \"ASC\"\n } as unknown as ListSort);\n\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort: createListSort(listSort),\n where: {\n ...(where || {})\n }\n });\n\n return [entries.map(pickEntryFieldValues<Folder>), meta];\n });\n },\n createFolder({ data }) {\n return withModel(async model => {\n await checkExistingFolder({\n params: {\n type: data.type,\n slug: data.slug,\n parentId: data.parentId\n }\n });\n\n const entry = await cms.createEntry(model, {\n ...data,\n parentId: data.parentId || null,\n path: await createFolderPath(data)\n });\n\n return pickEntryFieldValues(entry);\n });\n },\n updateFolder({ id, data }) {\n return withModel(async model => {\n const { slug, parentId } = data;\n\n const original = await getFolder({ id });\n\n await checkExistingFolder({\n id,\n params: {\n type: original.type,\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n }\n });\n\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n ...data,\n path: await createFolderPath({\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n })\n };\n\n const entry = await cms.updateEntry(model, id, input);\n return pickEntryFieldValues(entry);\n });\n },\n deleteFolder({ id }) {\n return withModel(async model => {\n await cms.deleteEntry(model, id, {\n permanently: true,\n force: true\n });\n return true;\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,7 @@ export interface Folder {
14
14
  permissions?: FolderPermission[];
15
15
  type: string;
16
16
  parentId?: string | null;
17
+ path: string;
17
18
  extensions?: Record<string, any>;
18
19
  }
19
20
  export interface ListFoldersWhere {
@@ -21,6 +22,14 @@ export interface ListFoldersWhere {
21
22
  id_not_in?: string[];
22
23
  parentId?: string | null;
23
24
  parentId_in?: string[];
25
+ path?: string;
26
+ path_not?: string;
27
+ path_contains?: string;
28
+ path_not_contains?: string;
29
+ path_in?: string[];
30
+ path_not_in?: string[];
31
+ path_startsWith?: string;
32
+ path_not_startsWith?: string;
24
33
  }
25
34
  export interface ListFoldersParams {
26
35
  where: ListFoldersWhere;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["folder.types.ts"],"sourcesContent":["import { type FolderPermission, ListMeta, ListSort, User } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport interface Folder {\n id: string;\n entryId: string;\n createdOn: string;\n modifiedOn: string | null;\n savedOn: string;\n createdBy: User;\n modifiedBy: User | null;\n savedBy: User;\n title: string;\n slug: string;\n permissions?: FolderPermission[];\n type: string;\n parentId?: string | null;\n extensions?: Record<string, any>;\n}\n\nexport interface ListFoldersWhere {\n type: string;\n id_not_in?: string[];\n parentId?: string | null;\n parentId_in?: string[];\n}\n\nexport interface ListFoldersParams {\n where: ListFoldersWhere;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n disablePermissions?: boolean;\n}\n\nexport type ListAllFoldersParams = Omit<ListFoldersParams, \"limit\" | \"after\">;\n\nexport interface GetFolderHierarchyParams {\n type: string;\n id: string;\n}\n\nexport interface GetFolderHierarchyResponse {\n parents: Folder[];\n siblings: Folder[];\n}\n\nexport type CreateFolderParams = Pick<Folder, \"title\" | \"slug\" | \"type\" | \"parentId\">;\n\nexport interface UpdateFolderParams {\n title?: string;\n slug?: string;\n permissions?: FolderPermission[];\n parentId?: string;\n}\n\nexport interface DeleteFolderParams {\n id: string;\n}\n\nexport interface FolderLevelPermissionsTarget<TMeta = Record<string, any>> {\n id: string;\n target: string;\n name: string;\n type: string;\n meta: TMeta;\n}\n\nexport interface FolderLevelPermissionsTargetListMeta {\n totalCount: number;\n}\n\nexport interface StorageOperationsGetFolderParams {\n id?: string;\n slug?: string;\n type?: string;\n parentId?: string | null;\n}\n\nexport interface GetFolderParams {\n id: string;\n}\n\nexport type StorageOperationsListFoldersParams = ListFoldersParams;\n\nexport interface StorageOperationsCreateFolderParams {\n data: CreateFolderParams;\n}\n\nexport interface StorageOperationsUpdateFolderParams {\n id: string;\n data: UpdateFolderParams;\n}\n\nexport type StorageOperationsDeleteFolderParams = DeleteFolderParams;\n\nexport interface OnFolderBeforeCreateTopicParams {\n input: CreateFolderParams;\n}\n\nexport interface OnFolderAfterCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderBeforeUpdateTopicParams {\n original: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderAfterUpdateTopicParams {\n original: Folder;\n folder: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderBeforeDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface AcoFolderCrud {\n get(id: string, disablePermissions?: boolean): Promise<Folder>;\n\n list(params: ListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n listFolderLevelPermissionsTargets(): Promise<\n [FolderLevelPermissionsTarget[], FolderLevelPermissionsTargetListMeta]\n >;\n\n listAll(params: ListAllFoldersParams): Promise<[Folder[], ListMeta]>;\n\n create(data: CreateFolderParams): Promise<Folder>;\n\n update(id: string, data: UpdateFolderParams): Promise<Folder>;\n\n delete(id: string): Promise<boolean>;\n\n getAncestors(folder: Folder): Promise<Folder[]>;\n\n getFolderHierarchy(params: GetFolderHierarchyParams): Promise<GetFolderHierarchyResponse>;\n\n /**\n * @deprecated use `getAncestors` instead\n */\n getFolderWithAncestors(id: string): Promise<Folder[]>;\n\n onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;\n onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;\n onFolderBeforeUpdate: Topic<OnFolderBeforeUpdateTopicParams>;\n onFolderAfterUpdate: Topic<OnFolderAfterUpdateTopicParams>;\n onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;\n onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;\n}\n\nexport interface AcoFolderStorageOperations {\n getFolder(params: StorageOperationsGetFolderParams): Promise<Folder>;\n\n listFolders(params: StorageOperationsListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;\n\n updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;\n\n deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<boolean>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["folder.types.ts"],"sourcesContent":["import { type FolderPermission, ListMeta, ListSort, User } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport interface Folder {\n id: string;\n entryId: string;\n createdOn: string;\n modifiedOn: string | null;\n savedOn: string;\n createdBy: User;\n modifiedBy: User | null;\n savedBy: User;\n title: string;\n slug: string;\n permissions?: FolderPermission[];\n type: string;\n parentId?: string | null;\n path: string;\n extensions?: Record<string, any>;\n}\n\nexport interface ListFoldersWhere {\n type: string;\n id_not_in?: string[];\n parentId?: string | null;\n parentId_in?: string[];\n path?: string;\n path_not?: string;\n path_contains?: string;\n path_not_contains?: string;\n path_in?: string[];\n path_not_in?: string[];\n path_startsWith?: string;\n path_not_startsWith?: string;\n}\n\nexport interface ListFoldersParams {\n where: ListFoldersWhere;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n disablePermissions?: boolean;\n}\n\nexport type ListAllFoldersParams = Omit<ListFoldersParams, \"limit\" | \"after\">;\n\nexport interface GetFolderHierarchyParams {\n type: string;\n id: string;\n}\n\nexport interface GetFolderHierarchyResponse {\n parents: Folder[];\n siblings: Folder[];\n}\n\nexport type CreateFolderParams = Pick<Folder, \"title\" | \"slug\" | \"type\" | \"parentId\">;\n\nexport interface UpdateFolderParams {\n title?: string;\n slug?: string;\n permissions?: FolderPermission[];\n parentId?: string;\n}\n\nexport interface DeleteFolderParams {\n id: string;\n}\n\nexport interface FolderLevelPermissionsTarget<TMeta = Record<string, any>> {\n id: string;\n target: string;\n name: string;\n type: string;\n meta: TMeta;\n}\n\nexport interface FolderLevelPermissionsTargetListMeta {\n totalCount: number;\n}\n\nexport interface StorageOperationsGetFolderParams {\n id?: string;\n slug?: string;\n type?: string;\n parentId?: string | null;\n}\n\nexport interface GetFolderParams {\n id: string;\n}\n\nexport type StorageOperationsListFoldersParams = ListFoldersParams;\n\nexport interface StorageOperationsCreateFolderParams {\n data: CreateFolderParams;\n}\n\nexport interface StorageOperationsUpdateFolderParams {\n id: string;\n data: UpdateFolderParams;\n}\n\nexport type StorageOperationsDeleteFolderParams = DeleteFolderParams;\n\nexport interface OnFolderBeforeCreateTopicParams {\n input: CreateFolderParams;\n}\n\nexport interface OnFolderAfterCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderBeforeUpdateTopicParams {\n original: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderAfterUpdateTopicParams {\n original: Folder;\n folder: Folder;\n input: Record<string, any>;\n}\n\nexport interface OnFolderBeforeDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface AcoFolderCrud {\n get(id: string, disablePermissions?: boolean): Promise<Folder>;\n\n list(params: ListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n listFolderLevelPermissionsTargets(): Promise<\n [FolderLevelPermissionsTarget[], FolderLevelPermissionsTargetListMeta]\n >;\n\n listAll(params: ListAllFoldersParams): Promise<[Folder[], ListMeta]>;\n\n create(data: CreateFolderParams): Promise<Folder>;\n\n update(id: string, data: UpdateFolderParams): Promise<Folder>;\n\n delete(id: string): Promise<boolean>;\n\n getAncestors(folder: Folder): Promise<Folder[]>;\n\n getFolderHierarchy(params: GetFolderHierarchyParams): Promise<GetFolderHierarchyResponse>;\n\n /**\n * @deprecated use `getAncestors` instead\n */\n getFolderWithAncestors(id: string): Promise<Folder[]>;\n\n onFolderBeforeCreate: Topic<OnFolderBeforeCreateTopicParams>;\n onFolderAfterCreate: Topic<OnFolderAfterCreateTopicParams>;\n onFolderBeforeUpdate: Topic<OnFolderBeforeUpdateTopicParams>;\n onFolderAfterUpdate: Topic<OnFolderAfterUpdateTopicParams>;\n onFolderBeforeDelete: Topic<OnFolderBeforeDeleteTopicParams>;\n onFolderAfterDelete: Topic<OnFolderAfterDeleteTopicParams>;\n}\n\nexport interface AcoFolderStorageOperations {\n getFolder(params: StorageOperationsGetFolderParams): Promise<Folder>;\n\n listFolders(params: StorageOperationsListFoldersParams): Promise<[Folder[], ListMeta]>;\n\n createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;\n\n updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;\n\n deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<boolean>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -6,7 +6,7 @@ export declare class CreateFolderWithFolderLevelPermissions implements ICreateFo
6
6
  private readonly decoretee;
7
7
  constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: ICreateFolder);
8
8
  execute(params: CreateFolderParams): Promise<{
9
- permissions: import("../../../types").FolderPermission[];
9
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
10
10
  id: string;
11
11
  entryId: string;
12
12
  createdOn: string;
@@ -19,6 +19,7 @@ export declare class CreateFolderWithFolderLevelPermissions implements ICreateFo
19
19
  slug: string;
20
20
  type: string;
21
21
  parentId?: string | null | undefined;
22
+ path: string;
22
23
  extensions?: Record<string, any> | undefined;
23
24
  }>;
24
25
  }
@@ -1,5 +1,9 @@
1
1
  import type { GetAncestorsParams, IGetAncestors } from "./IGetAncestors";
2
2
  import type { Folder } from "../../folder.types";
3
+ import type { IListFolders } from "../ListFolders/IListFolders";
3
4
  export declare class GetAncestors implements IGetAncestors {
5
+ private listFoldersUseCase;
6
+ constructor(listFoldersUseCase: IListFolders);
4
7
  execute(params: GetAncestorsParams): Promise<Folder[]>;
8
+ private listFolders;
5
9
  }
@@ -4,12 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.GetAncestors = void 0;
7
+ var _constants = require("../../../constants");
7
8
  class GetAncestors {
9
+ constructor(listFoldersUseCase) {
10
+ this.listFoldersUseCase = listFoldersUseCase;
11
+ }
8
12
  async execute(params) {
9
13
  const {
10
- folder,
11
- folders
14
+ folder
12
15
  } = params;
16
+ const folders = await this.listFolders(folder);
13
17
 
14
18
  // Create a Map with folders, using folder.id as key
15
19
  const folderMap = new Map();
@@ -51,6 +55,22 @@ class GetAncestors {
51
55
  // Recursively find parents for a given folder id
52
56
  return findParents([], folder);
53
57
  }
58
+ async listFolders(folder) {
59
+ // Construct paths for all ancestors of the folder
60
+ const parts = folder.path.split("/").slice(1);
61
+ const paths = parts.map((_, index) => {
62
+ return [_constants.ROOT_FOLDER, ...parts.slice(0, index + 1)].join("/");
63
+ });
64
+
65
+ // Retrieve all folders that match the specified type and any of the constructed paths
66
+ const [folders] = await this.listFoldersUseCase.execute({
67
+ where: {
68
+ type: folder.type,
69
+ path_in: paths
70
+ }
71
+ });
72
+ return folders;
73
+ }
54
74
  }
55
75
  exports.GetAncestors = GetAncestors;
56
76
 
@@ -1 +1 @@
1
- {"version":3,"names":["GetAncestors","execute","params","folder","folders","folderMap","Map","forEach","set","id","findParents","next","current","push","parentId","parent","get","exports"],"sources":["GetAncestors.ts"],"sourcesContent":["import type { GetAncestorsParams, IGetAncestors } from \"./IGetAncestors\";\nimport type { Folder } from \"~/folder/folder.types\";\n\nexport class GetAncestors implements IGetAncestors {\n public async execute(params: GetAncestorsParams) {\n const { folder, folders } = params;\n\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}\n"],"mappings":";;;;;;AAGO,MAAMA,YAAY,CAA0B;EAC/C,MAAaC,OAAOA,CAACC,MAA0B,EAAE;IAC7C,MAAM;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAGF,MAAM;;IAElC;IACA,MAAMG,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;IAC3CF,OAAO,CAACG,OAAO,CAACJ,MAAM,IAAIE,SAAS,CAACG,GAAG,CAACL,MAAM,CAACM,EAAE,EAAEN,MAAM,CAAC,CAAC;IAE3D,MAAMO,WAAW,GAAGA,CAACC,IAAc,EAAEC,OAAe,KAAe;MAC/D;MACA,IAAI,CAACA,OAAO,EAAE;QACV,OAAOD,IAAI;MACf;;MAEA;MACAA,IAAI,CAACE,IAAI,CAACD,OAAO,CAAC;;MAElB;MACA,IAAI,CAACA,OAAO,CAACE,QAAQ,EAAE;QACnB,OAAOH,IAAI;MACf;MAEA,MAAMI,MAAM,GAAGV,SAAS,CAACW,GAAG,CAACJ,OAAO,CAACE,QAAQ,CAAC;;MAE9C;MACA,IAAI,CAACC,MAAM,EAAE;QACT,OAAOJ,IAAI;MACf;;MAEA;MACA,OAAOD,WAAW,CAACC,IAAI,EAAEI,MAAM,CAAC;IACpC,CAAC;;IAED;IACA,IAAI,CAACZ,MAAM,EAAE;MACT,OAAO,EAAE;IACb;;IAEA;IACA,IAAI,CAACA,MAAM,CAACW,QAAQ,EAAE;MAClB,OAAO,CAACX,MAAM,CAAC;IACnB;;IAEA;IACA,OAAOO,WAAW,CAAC,EAAE,EAAEP,MAAM,CAAC;EAClC;AACJ;AAACc,OAAA,CAAAjB,YAAA,GAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_constants","require","GetAncestors","constructor","listFoldersUseCase","execute","params","folder","folders","listFolders","folderMap","Map","forEach","set","id","findParents","next","current","push","parentId","parent","get","parts","path","split","slice","paths","map","_","index","ROOT_FOLDER","join","where","type","path_in","exports"],"sources":["GetAncestors.ts"],"sourcesContent":["import type { GetAncestorsParams, IGetAncestors } from \"./IGetAncestors\";\nimport type { Folder } from \"~/folder/folder.types\";\nimport type { IListFolders } from \"~/folder/useCases/ListFolders/IListFolders\";\nimport { ROOT_FOLDER } from \"~/constants\";\n\nexport class GetAncestors implements IGetAncestors {\n private listFoldersUseCase: IListFolders;\n\n constructor(listFoldersUseCase: IListFolders) {\n this.listFoldersUseCase = listFoldersUseCase;\n }\n\n public async execute(params: GetAncestorsParams) {\n const { folder } = params;\n\n const folders = await this.listFolders(folder);\n\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\n private async listFolders(folder: Folder) {\n // Construct paths for all ancestors of the folder\n const parts = folder.path.split(\"/\").slice(1);\n const paths = parts.map((_, index) => {\n return [ROOT_FOLDER, ...parts.slice(0, index + 1)].join(\"/\");\n });\n\n // Retrieve all folders that match the specified type and any of the constructed paths\n const [folders] = await this.listFoldersUseCase.execute({\n where: {\n type: folder.type,\n path_in: paths\n }\n });\n\n return folders;\n }\n}\n"],"mappings":";;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AAEO,MAAMC,YAAY,CAA0B;EAG/CC,WAAWA,CAACC,kBAAgC,EAAE;IAC1C,IAAI,CAACA,kBAAkB,GAAGA,kBAAkB;EAChD;EAEA,MAAaC,OAAOA,CAACC,MAA0B,EAAE;IAC7C,MAAM;MAAEC;IAAO,CAAC,GAAGD,MAAM;IAEzB,MAAME,OAAO,GAAG,MAAM,IAAI,CAACC,WAAW,CAACF,MAAM,CAAC;;IAE9C;IACA,MAAMG,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;IAC3CH,OAAO,CAACI,OAAO,CAACL,MAAM,IAAIG,SAAS,CAACG,GAAG,CAACN,MAAM,CAACO,EAAE,EAAEP,MAAM,CAAC,CAAC;IAE3D,MAAMQ,WAAW,GAAGA,CAACC,IAAc,EAAEC,OAAe,KAAe;MAC/D;MACA,IAAI,CAACA,OAAO,EAAE;QACV,OAAOD,IAAI;MACf;;MAEA;MACAA,IAAI,CAACE,IAAI,CAACD,OAAO,CAAC;;MAElB;MACA,IAAI,CAACA,OAAO,CAACE,QAAQ,EAAE;QACnB,OAAOH,IAAI;MACf;MAEA,MAAMI,MAAM,GAAGV,SAAS,CAACW,GAAG,CAACJ,OAAO,CAACE,QAAQ,CAAC;;MAE9C;MACA,IAAI,CAACC,MAAM,EAAE;QACT,OAAOJ,IAAI;MACf;;MAEA;MACA,OAAOD,WAAW,CAACC,IAAI,EAAEI,MAAM,CAAC;IACpC,CAAC;;IAED;IACA,IAAI,CAACb,MAAM,EAAE;MACT,OAAO,EAAE;IACb;;IAEA;IACA,IAAI,CAACA,MAAM,CAACY,QAAQ,EAAE;MAClB,OAAO,CAACZ,MAAM,CAAC;IACnB;;IAEA;IACA,OAAOQ,WAAW,CAAC,EAAE,EAAER,MAAM,CAAC;EAClC;EAEA,MAAcE,WAAWA,CAACF,MAAc,EAAE;IACtC;IACA,MAAMe,KAAK,GAAGf,MAAM,CAACgB,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAMC,KAAK,GAAGJ,KAAK,CAACK,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;MAClC,OAAO,CAACC,sBAAW,EAAE,GAAGR,KAAK,CAACG,KAAK,CAAC,CAAC,EAAEI,KAAK,GAAG,CAAC,CAAC,CAAC,CAACE,IAAI,CAAC,GAAG,CAAC;IAChE,CAAC,CAAC;;IAEF;IACA,MAAM,CAACvB,OAAO,CAAC,GAAG,MAAM,IAAI,CAACJ,kBAAkB,CAACC,OAAO,CAAC;MACpD2B,KAAK,EAAE;QACHC,IAAI,EAAE1B,MAAM,CAAC0B,IAAI;QACjBC,OAAO,EAAER;MACb;IACJ,CAAC,CAAC;IAEF,OAAOlB,OAAO;EAClB;AACJ;AAAC2B,OAAA,CAAAjC,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  import { Folder } from "../../folder.types";
2
2
  export interface GetAncestorsParams {
3
3
  folder: Folder;
4
- folders: Folder[];
5
4
  }
6
5
  export interface IGetAncestors {
7
6
  execute: (params: GetAncestorsParams) => Promise<Folder[]>;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["IGetAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\nexport interface GetAncestorsParams {\n folder: Folder;\n folders: Folder[];\n}\n\nexport interface IGetAncestors {\n execute: (params: GetAncestorsParams) => Promise<Folder[]>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["IGetAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\nexport interface GetAncestorsParams {\n folder: Folder;\n}\n\nexport interface IGetAncestors {\n execute: (params: GetAncestorsParams) => Promise<Folder[]>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,9 @@
1
1
  import { GetAncestors } from "./GetAncestors";
2
- export declare const getGetAncestors: () => {
2
+ import type { IListFolders } from "../ListFolders/IListFolders";
3
+ interface GetAncestorsUseCasesParams {
4
+ listFoldersUseCase: IListFolders;
5
+ }
6
+ export declare const getGetAncestors: (params: GetAncestorsUseCasesParams) => {
3
7
  getAncestorsUseCase: GetAncestors;
4
8
  };
9
+ export {};
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getGetAncestors = void 0;
7
7
  var _GetAncestors = require("./GetAncestors");
8
- const getGetAncestors = () => {
9
- const getAncestorsUseCase = new _GetAncestors.GetAncestors();
8
+ const getGetAncestors = params => {
9
+ const getAncestorsUseCase = new _GetAncestors.GetAncestors(params.listFoldersUseCase);
10
10
  return {
11
11
  getAncestorsUseCase
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_GetAncestors","require","getGetAncestors","getAncestorsUseCase","GetAncestors","exports"],"sources":["index.ts"],"sourcesContent":["import { GetAncestors } from \"./GetAncestors\";\n\nexport const getGetAncestors = () => {\n const getAncestorsUseCase = new GetAncestors();\n\n return {\n getAncestorsUseCase\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEO,MAAMC,eAAe,GAAGA,CAAA,KAAM;EACjC,MAAMC,mBAAmB,GAAG,IAAIC,0BAAY,CAAC,CAAC;EAE9C,OAAO;IACHD;EACJ,CAAC;AACL,CAAC;AAACE,OAAA,CAAAH,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["_GetAncestors","require","getGetAncestors","params","getAncestorsUseCase","GetAncestors","listFoldersUseCase","exports"],"sources":["index.ts"],"sourcesContent":["import { GetAncestors } from \"./GetAncestors\";\nimport type { IListFolders } from \"~/folder/useCases/ListFolders/IListFolders\";\n\ninterface GetAncestorsUseCasesParams {\n listFoldersUseCase: IListFolders;\n}\n\nexport const getGetAncestors = (params: GetAncestorsUseCasesParams) => {\n const getAncestorsUseCase = new GetAncestors(params.listFoldersUseCase);\n\n return {\n getAncestorsUseCase\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAOO,MAAMC,eAAe,GAAIC,MAAkC,IAAK;EACnE,MAAMC,mBAAmB,GAAG,IAAIC,0BAAY,CAACF,MAAM,CAACG,kBAAkB,CAAC;EAEvE,OAAO;IACHF;EACJ,CAAC;AACL,CAAC;AAACG,OAAA,CAAAL,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -6,7 +6,7 @@ export declare class GetFolderWithFolderLevelPermissions implements IGetFolder {
6
6
  private readonly decoretee;
7
7
  constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolder);
8
8
  execute(params: GetFolderParams): Promise<{
9
- permissions: import("../../../types").FolderPermission[];
9
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
10
10
  id: string;
11
11
  entryId: string;
12
12
  createdOn: string;
@@ -19,6 +19,7 @@ export declare class GetFolderWithFolderLevelPermissions implements IGetFolder {
19
19
  slug: string;
20
20
  type: string;
21
21
  parentId?: string | null | undefined;
22
+ path: string;
22
23
  extensions?: Record<string, any> | undefined;
23
24
  }>;
24
25
  }
@@ -7,7 +7,7 @@ export declare class UpdateFolderWithFolderLevelPermissions implements IUpdateFo
7
7
  private readonly decoretee;
8
8
  constructor(folderLevelPermissions: FolderLevelPermissions, getOperation: AcoFolderStorageOperations["getFolder"], decoretee: IUpdateFolder);
9
9
  execute(id: string, params: UpdateFolderParams): Promise<{
10
- permissions: import("../../../types").FolderPermission[];
10
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
11
11
  id: string;
12
12
  entryId: string;
13
13
  createdOn: string;
@@ -20,6 +20,7 @@ export declare class UpdateFolderWithFolderLevelPermissions implements IUpdateFo
20
20
  slug: string;
21
21
  type: string;
22
22
  parentId?: string | null | undefined;
23
+ path: string;
23
24
  extensions?: Record<string, any> | undefined;
24
25
  }>;
25
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-aco",
3
- "version": "5.43.0-beta.3",
3
+ "version": "5.43.0-beta.5",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "aco:base"
@@ -22,38 +22,39 @@
22
22
  "directory": "dist"
23
23
  },
24
24
  "dependencies": {
25
- "@webiny/api": "5.43.0-beta.3",
26
- "@webiny/api-authentication": "5.43.0-beta.3",
27
- "@webiny/api-headless-cms": "5.43.0-beta.3",
28
- "@webiny/api-i18n": "5.43.0-beta.3",
29
- "@webiny/api-security": "5.43.0-beta.3",
30
- "@webiny/api-tenancy": "5.43.0-beta.3",
31
- "@webiny/aws-sdk": "5.43.0-beta.3",
32
- "@webiny/db-dynamodb": "5.43.0-beta.3",
33
- "@webiny/error": "5.43.0-beta.3",
34
- "@webiny/handler": "5.43.0-beta.3",
35
- "@webiny/handler-graphql": "5.43.0-beta.3",
36
- "@webiny/pubsub": "5.43.0-beta.3",
37
- "@webiny/tasks": "5.43.0-beta.3",
38
- "@webiny/utils": "5.43.0-beta.3",
39
- "@webiny/validation": "5.43.0-beta.3",
25
+ "@webiny/api": "5.43.0-beta.5",
26
+ "@webiny/api-authentication": "5.43.0-beta.5",
27
+ "@webiny/api-headless-cms": "5.43.0-beta.5",
28
+ "@webiny/api-i18n": "5.43.0-beta.5",
29
+ "@webiny/api-security": "5.43.0-beta.5",
30
+ "@webiny/api-tenancy": "5.43.0-beta.5",
31
+ "@webiny/aws-sdk": "5.43.0-beta.5",
32
+ "@webiny/db-dynamodb": "5.43.0-beta.5",
33
+ "@webiny/error": "5.43.0-beta.5",
34
+ "@webiny/handler": "5.43.0-beta.5",
35
+ "@webiny/handler-graphql": "5.43.0-beta.5",
36
+ "@webiny/pubsub": "5.43.0-beta.5",
37
+ "@webiny/shared-aco": "5.43.0-beta.5",
38
+ "@webiny/tasks": "5.43.0-beta.5",
39
+ "@webiny/utils": "5.43.0-beta.5",
40
+ "@webiny/validation": "5.43.0-beta.5",
40
41
  "lodash": "4.17.21"
41
42
  },
42
43
  "devDependencies": {
43
- "@webiny/api-admin-users": "5.43.0-beta.3",
44
- "@webiny/api-file-manager": "5.43.0-beta.3",
45
- "@webiny/api-i18n-ddb": "5.43.0-beta.3",
46
- "@webiny/api-security-so-ddb": "5.43.0-beta.3",
47
- "@webiny/api-tenancy-so-ddb": "5.43.0-beta.3",
48
- "@webiny/api-wcp": "5.43.0-beta.3",
49
- "@webiny/handler-aws": "5.43.0-beta.3",
50
- "@webiny/plugins": "5.43.0-beta.3",
51
- "@webiny/project-utils": "5.43.0-beta.3",
52
- "@webiny/wcp": "5.43.0-beta.3",
44
+ "@webiny/api-admin-users": "5.43.0-beta.5",
45
+ "@webiny/api-file-manager": "5.43.0-beta.5",
46
+ "@webiny/api-i18n-ddb": "5.43.0-beta.5",
47
+ "@webiny/api-security-so-ddb": "5.43.0-beta.5",
48
+ "@webiny/api-tenancy-so-ddb": "5.43.0-beta.5",
49
+ "@webiny/api-wcp": "5.43.0-beta.5",
50
+ "@webiny/handler-aws": "5.43.0-beta.5",
51
+ "@webiny/plugins": "5.43.0-beta.5",
52
+ "@webiny/project-utils": "5.43.0-beta.5",
53
+ "@webiny/wcp": "5.43.0-beta.5",
53
54
  "graphql": "15.9.0",
54
55
  "prettier": "2.8.8",
55
56
  "rimraf": "6.0.1",
56
57
  "typescript": "5.3.3"
57
58
  },
58
- "gitHead": "bb3de95f65a48bc7264719fcd2d78bf78749fc69"
59
+ "gitHead": "4033580d3aaaa66cf5e0006af6926203c89919f2"
59
60
  }
@@ -77,17 +77,40 @@ const createSearchRecordOperations = params => {
77
77
  return [tags, meta];
78
78
  },
79
79
  async createRecord(model, {
80
- data: SearchRecordData
80
+ data: searchRecordData
81
81
  }) {
82
82
  const {
83
83
  tags = [],
84
84
  data = {},
85
85
  ...rest
86
- } = SearchRecordData;
86
+ } = searchRecordData;
87
+
88
+ // We added this so that if the main record has its meta fields set with
89
+ // custom values, we can propagate them to the search record as well.
90
+ const {
91
+ createdBy,
92
+ createdOn,
93
+ modifiedBy,
94
+ modifiedOn,
95
+ savedBy,
96
+ savedOn
97
+ } = (0, _constants.pickEntryMetaFields)(data);
87
98
  const entry = await cms.createEntry(model, {
88
99
  tags,
89
100
  data,
90
101
  ...rest,
102
+ createdBy,
103
+ createdOn,
104
+ modifiedBy,
105
+ modifiedOn,
106
+ savedBy,
107
+ savedOn,
108
+ revisionCreatedBy: createdBy,
109
+ revisionCreatedOn: createdOn,
110
+ revisionModifiedBy: modifiedBy,
111
+ revisionModifiedOn: modifiedOn,
112
+ revisionSavedBy: savedBy,
113
+ revisionSavedOn: savedOn,
91
114
  id: (0, _acoRecordId.attachAcoRecordPrefix)(rest.id)
92
115
  });
93
116
  return (0, _pickEntryFieldValues.pickEntryFieldValues)(entry);
@@ -1 +1 @@
1
- {"version":3,"names":["_omit","_interopRequireDefault","require","_error","_pickEntryFieldValues","_acoRecordId","_record","_constants","createSearchRecordOperations","params","cms","getRecord","model","id","revisions","storageOperations","entries","getLatestByIds","ids","attachAcoRecordPrefix","length","WebinyError","record","pickEntryFieldValues","listRecords","sort","where","meta","listLatestEntries","items","map","listTags","getUniqueFieldValues","latest","fieldId","hasMoreItems","totalCount","cursor","tags","item","tag","value","count","createRecord","data","SearchRecordData","rest","entry","createEntry","updateRecord","original","input","omit","ENTRY_META_FIELDS","updateEntry","moveRecord","folderId","wbyAco_location","lookFor","SEARCH_RECORD_MODEL_ID","modelId","substring","location","deleteRecord","deleteEntry","exports"],"sources":["record.so.ts"],"sourcesContent":["import omit from \"lodash/omit\";\nimport WebinyError from \"@webiny/error\";\nimport { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { AcoSearchRecordStorageOperations, SearchRecord } from \"./record.types\";\nimport { CmsModel, UpdateCmsEntryInput } from \"@webiny/api-headless-cms/types\";\nimport { attachAcoRecordPrefix } from \"~/utils/acoRecordId\";\nimport { SEARCH_RECORD_MODEL_ID } from \"~/record/record.model\";\nimport { ENTRY_META_FIELDS } from \"@webiny/api-headless-cms/constants\";\n\nexport const createSearchRecordOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoSearchRecordStorageOperations => {\n const { cms } = params;\n\n const getRecord = async (model: CmsModel, id: string) => {\n /**\n * The record \"id\" has been passed by the original entry.\n * We need to retrieve it via `cms.storageOperations.entries.getLatestByIds()` method and return the first one.\n */\n const revisions = await cms.storageOperations.entries.getLatestByIds(model, {\n ids: [attachAcoRecordPrefix(id)]\n });\n\n if (revisions.length === 0) {\n throw new WebinyError(\"Record not found.\", \"NOT_FOUND\", {\n id\n });\n }\n\n return revisions[0];\n };\n\n return {\n async getRecord(model, { id }) {\n const record = await getRecord(model, id);\n return pickEntryFieldValues<SearchRecord<any>>(record);\n },\n async listRecords(model, params) {\n const { sort, where } = params;\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort,\n where: {\n ...(where || {})\n }\n });\n\n const items = entries.map(pickEntryFieldValues<SearchRecord<any>>);\n\n return [items, meta];\n },\n async listTags(model, params) {\n const { where } = params;\n const items = await cms.getUniqueFieldValues(model, {\n where: {\n ...(where || {}),\n latest: true\n },\n fieldId: \"tags\"\n });\n\n const meta = {\n hasMoreItems: false,\n totalCount: items.length,\n cursor: null\n };\n\n const tags = items.map(item => {\n return {\n tag: item.value,\n count: item.count\n };\n });\n\n return [tags, meta];\n },\n async createRecord(model, { data: SearchRecordData }) {\n const { tags = [], data = {}, ...rest } = SearchRecordData;\n const entry = await cms.createEntry(model, {\n tags,\n data,\n ...rest,\n id: attachAcoRecordPrefix(rest.id)\n });\n\n return pickEntryFieldValues<SearchRecord<any>>(entry);\n },\n async updateRecord(this: AcoSearchRecordStorageOperations, model, { id, data }) {\n const original = await this.getRecord(model, { id });\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n ...data\n };\n\n const entry = await cms.updateEntry(model, attachAcoRecordPrefix(original.id), input);\n\n return pickEntryFieldValues<SearchRecord<any>>(entry);\n },\n async moveRecord(this: AcoSearchRecordStorageOperations, model, params) {\n const { id, folderId } = params;\n const original = await this.getRecord(model, { id });\n\n const input: UpdateCmsEntryInput = {\n wbyAco_location: {\n folderId\n }\n };\n /**\n * We only apply the location to the search record model as we do not want to override the users data.\n */\n const lookFor = `${SEARCH_RECORD_MODEL_ID}-`;\n if (model.modelId.substring(0, lookFor.length) === lookFor) {\n input.location = {\n folderId\n };\n }\n\n await cms.updateEntry(model, attachAcoRecordPrefix(original.id), input);\n\n return true;\n },\n async deleteRecord(model, { id }) {\n await cms.deleteEntry(model, attachAcoRecordPrefix(id));\n return true;\n }\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,qBAAA,GAAAF,OAAA;AAGA,IAAAG,YAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AAEO,MAAMM,4BAA4B,GACrCC,MAAwC,IACL;EACnC,MAAM;IAAEC;EAAI,CAAC,GAAGD,MAAM;EAEtB,MAAME,SAAS,GAAG,MAAAA,CAAOC,KAAe,EAAEC,EAAU,KAAK;IACrD;AACR;AACA;AACA;IACQ,MAAMC,SAAS,GAAG,MAAMJ,GAAG,CAACK,iBAAiB,CAACC,OAAO,CAACC,cAAc,CAACL,KAAK,EAAE;MACxEM,GAAG,EAAE,CAAC,IAAAC,kCAAqB,EAACN,EAAE,CAAC;IACnC,CAAC,CAAC;IAEF,IAAIC,SAAS,CAACM,MAAM,KAAK,CAAC,EAAE;MACxB,MAAM,IAAIC,cAAW,CAAC,mBAAmB,EAAE,WAAW,EAAE;QACpDR;MACJ,CAAC,CAAC;IACN;IAEA,OAAOC,SAAS,CAAC,CAAC,CAAC;EACvB,CAAC;EAED,OAAO;IACH,MAAMH,SAASA,CAACC,KAAK,EAAE;MAAEC;IAAG,CAAC,EAAE;MAC3B,MAAMS,MAAM,GAAG,MAAMX,SAAS,CAACC,KAAK,EAAEC,EAAE,CAAC;MACzC,OAAO,IAAAU,0CAAoB,EAAoBD,MAAM,CAAC;IAC1D,CAAC;IACD,MAAME,WAAWA,CAACZ,KAAK,EAAEH,MAAM,EAAE;MAC7B,MAAM;QAAEgB,IAAI;QAAEC;MAAM,CAAC,GAAGjB,MAAM;MAC9B,MAAM,CAACO,OAAO,EAAEW,IAAI,CAAC,GAAG,MAAMjB,GAAG,CAACkB,iBAAiB,CAAChB,KAAK,EAAE;QACvD,GAAGH,MAAM;QACTgB,IAAI;QACJC,KAAK,EAAE;UACH,IAAIA,KAAK,IAAI,CAAC,CAAC;QACnB;MACJ,CAAC,CAAC;MAEF,MAAMG,KAAK,GAAGb,OAAO,CAACc,GAAG,CAACP,0CAAuC,CAAC;MAElE,OAAO,CAACM,KAAK,EAAEF,IAAI,CAAC;IACxB,CAAC;IACD,MAAMI,QAAQA,CAACnB,KAAK,EAAEH,MAAM,EAAE;MAC1B,MAAM;QAAEiB;MAAM,CAAC,GAAGjB,MAAM;MACxB,MAAMoB,KAAK,GAAG,MAAMnB,GAAG,CAACsB,oBAAoB,CAACpB,KAAK,EAAE;QAChDc,KAAK,EAAE;UACH,IAAIA,KAAK,IAAI,CAAC,CAAC,CAAC;UAChBO,MAAM,EAAE;QACZ,CAAC;QACDC,OAAO,EAAE;MACb,CAAC,CAAC;MAEF,MAAMP,IAAI,GAAG;QACTQ,YAAY,EAAE,KAAK;QACnBC,UAAU,EAAEP,KAAK,CAACT,MAAM;QACxBiB,MAAM,EAAE;MACZ,CAAC;MAED,MAAMC,IAAI,GAAGT,KAAK,CAACC,GAAG,CAACS,IAAI,IAAI;QAC3B,OAAO;UACHC,GAAG,EAAED,IAAI,CAACE,KAAK;UACfC,KAAK,EAAEH,IAAI,CAACG;QAChB,CAAC;MACL,CAAC,CAAC;MAEF,OAAO,CAACJ,IAAI,EAAEX,IAAI,CAAC;IACvB,CAAC;IACD,MAAMgB,YAAYA,CAAC/B,KAAK,EAAE;MAAEgC,IAAI,EAAEC;IAAiB,CAAC,EAAE;MAClD,MAAM;QAAEP,IAAI,GAAG,EAAE;QAAEM,IAAI,GAAG,CAAC,CAAC;QAAE,GAAGE;MAAK,CAAC,GAAGD,gBAAgB;MAC1D,MAAME,KAAK,GAAG,MAAMrC,GAAG,CAACsC,WAAW,CAACpC,KAAK,EAAE;QACvC0B,IAAI;QACJM,IAAI;QACJ,GAAGE,IAAI;QACPjC,EAAE,EAAE,IAAAM,kCAAqB,EAAC2B,IAAI,CAACjC,EAAE;MACrC,CAAC,CAAC;MAEF,OAAO,IAAAU,0CAAoB,EAAoBwB,KAAK,CAAC;IACzD,CAAC;IACD,MAAME,YAAYA,CAAyCrC,KAAK,EAAE;MAAEC,EAAE;MAAE+B;IAAK,CAAC,EAAE;MAC5E,MAAMM,QAAQ,GAAG,MAAM,IAAI,CAACvC,SAAS,CAACC,KAAK,EAAE;QAAEC;MAAG,CAAC,CAAC;MACpD,MAAMsC,KAAK,GAAG;QACV;AAChB;AACA;AACA;QACgB,GAAG,IAAAC,aAAI,EAACF,QAAQ,EAAEG,4BAAiB,CAAC;QACpC,GAAGT;MACP,CAAC;MAED,MAAMG,KAAK,GAAG,MAAMrC,GAAG,CAAC4C,WAAW,CAAC1C,KAAK,EAAE,IAAAO,kCAAqB,EAAC+B,QAAQ,CAACrC,EAAE,CAAC,EAAEsC,KAAK,CAAC;MAErF,OAAO,IAAA5B,0CAAoB,EAAoBwB,KAAK,CAAC;IACzD,CAAC;IACD,MAAMQ,UAAUA,CAAyC3C,KAAK,EAAEH,MAAM,EAAE;MACpE,MAAM;QAAEI,EAAE;QAAE2C;MAAS,CAAC,GAAG/C,MAAM;MAC/B,MAAMyC,QAAQ,GAAG,MAAM,IAAI,CAACvC,SAAS,CAACC,KAAK,EAAE;QAAEC;MAAG,CAAC,CAAC;MAEpD,MAAMsC,KAA0B,GAAG;QAC/BM,eAAe,EAAE;UACbD;QACJ;MACJ,CAAC;MACD;AACZ;AACA;MACY,MAAME,OAAO,GAAG,GAAGC,8BAAsB,GAAG;MAC5C,IAAI/C,KAAK,CAACgD,OAAO,CAACC,SAAS,CAAC,CAAC,EAAEH,OAAO,CAACtC,MAAM,CAAC,KAAKsC,OAAO,EAAE;QACxDP,KAAK,CAACW,QAAQ,GAAG;UACbN;QACJ,CAAC;MACL;MAEA,MAAM9C,GAAG,CAAC4C,WAAW,CAAC1C,KAAK,EAAE,IAAAO,kCAAqB,EAAC+B,QAAQ,CAACrC,EAAE,CAAC,EAAEsC,KAAK,CAAC;MAEvE,OAAO,IAAI;IACf,CAAC;IACD,MAAMY,YAAYA,CAACnD,KAAK,EAAE;MAAEC;IAAG,CAAC,EAAE;MAC9B,MAAMH,GAAG,CAACsD,WAAW,CAACpD,KAAK,EAAE,IAAAO,kCAAqB,EAACN,EAAE,CAAC,CAAC;MACvD,OAAO,IAAI;IACf;EACJ,CAAC;AACL,CAAC;AAACoD,OAAA,CAAAzD,4BAAA,GAAAA,4BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_omit","_interopRequireDefault","require","_error","_pickEntryFieldValues","_acoRecordId","_record","_constants","createSearchRecordOperations","params","cms","getRecord","model","id","revisions","storageOperations","entries","getLatestByIds","ids","attachAcoRecordPrefix","length","WebinyError","record","pickEntryFieldValues","listRecords","sort","where","meta","listLatestEntries","items","map","listTags","getUniqueFieldValues","latest","fieldId","hasMoreItems","totalCount","cursor","tags","item","tag","value","count","createRecord","data","searchRecordData","rest","createdBy","createdOn","modifiedBy","modifiedOn","savedBy","savedOn","pickEntryMetaFields","entry","createEntry","revisionCreatedBy","revisionCreatedOn","revisionModifiedBy","revisionModifiedOn","revisionSavedBy","revisionSavedOn","updateRecord","original","input","omit","ENTRY_META_FIELDS","updateEntry","moveRecord","folderId","wbyAco_location","lookFor","SEARCH_RECORD_MODEL_ID","modelId","substring","location","deleteRecord","deleteEntry","exports"],"sources":["record.so.ts"],"sourcesContent":["import omit from \"lodash/omit\";\nimport WebinyError from \"@webiny/error\";\nimport { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { pickEntryFieldValues } from \"~/utils/pickEntryFieldValues\";\nimport { AcoSearchRecordStorageOperations, SearchRecord } from \"./record.types\";\nimport { CmsModel, UpdateCmsEntryInput } from \"@webiny/api-headless-cms/types\";\nimport { attachAcoRecordPrefix } from \"~/utils/acoRecordId\";\nimport { SEARCH_RECORD_MODEL_ID } from \"~/record/record.model\";\nimport { ENTRY_META_FIELDS, pickEntryMetaFields } from \"@webiny/api-headless-cms/constants\";\n\nexport const createSearchRecordOperations = (\n params: CreateAcoStorageOperationsParams\n): AcoSearchRecordStorageOperations => {\n const { cms } = params;\n\n const getRecord = async (model: CmsModel, id: string) => {\n /**\n * The record \"id\" has been passed by the original entry.\n * We need to retrieve it via `cms.storageOperations.entries.getLatestByIds()` method and return the first one.\n */\n const revisions = await cms.storageOperations.entries.getLatestByIds(model, {\n ids: [attachAcoRecordPrefix(id)]\n });\n\n if (revisions.length === 0) {\n throw new WebinyError(\"Record not found.\", \"NOT_FOUND\", {\n id\n });\n }\n\n return revisions[0];\n };\n\n return {\n async getRecord(model, { id }) {\n const record = await getRecord(model, id);\n return pickEntryFieldValues<SearchRecord<any>>(record);\n },\n async listRecords(model, params) {\n const { sort, where } = params;\n const [entries, meta] = await cms.listLatestEntries(model, {\n ...params,\n sort,\n where: {\n ...(where || {})\n }\n });\n\n const items = entries.map(pickEntryFieldValues<SearchRecord<any>>);\n\n return [items, meta];\n },\n async listTags(model, params) {\n const { where } = params;\n const items = await cms.getUniqueFieldValues(model, {\n where: {\n ...(where || {}),\n latest: true\n },\n fieldId: \"tags\"\n });\n\n const meta = {\n hasMoreItems: false,\n totalCount: items.length,\n cursor: null\n };\n\n const tags = items.map(item => {\n return {\n tag: item.value,\n count: item.count\n };\n });\n\n return [tags, meta];\n },\n async createRecord(model, { data: searchRecordData }) {\n const { tags = [], data = {}, ...rest } = searchRecordData;\n\n // We added this so that if the main record has its meta fields set with\n // custom values, we can propagate them to the search record as well.\n const { createdBy, createdOn, modifiedBy, modifiedOn, savedBy, savedOn } =\n pickEntryMetaFields(data);\n\n const entry = await cms.createEntry(model, {\n tags,\n data,\n ...rest,\n createdBy,\n createdOn,\n modifiedBy,\n modifiedOn,\n savedBy,\n savedOn,\n revisionCreatedBy: createdBy,\n revisionCreatedOn: createdOn,\n revisionModifiedBy: modifiedBy,\n revisionModifiedOn: modifiedOn,\n revisionSavedBy: savedBy,\n revisionSavedOn: savedOn,\n id: attachAcoRecordPrefix(rest.id)\n });\n\n return pickEntryFieldValues<SearchRecord<any>>(entry);\n },\n async updateRecord(this: AcoSearchRecordStorageOperations, model, { id, data }) {\n const original = await this.getRecord(model, { id });\n const input = {\n /**\n * We are omitting the standard entry meta fields:\n * we don't want to override them with the ones coming from the `original` entry.\n */\n ...omit(original, ENTRY_META_FIELDS),\n ...data\n };\n\n const entry = await cms.updateEntry(model, attachAcoRecordPrefix(original.id), input);\n\n return pickEntryFieldValues<SearchRecord<any>>(entry);\n },\n async moveRecord(this: AcoSearchRecordStorageOperations, model, params) {\n const { id, folderId } = params;\n const original = await this.getRecord(model, { id });\n\n const input: UpdateCmsEntryInput = {\n wbyAco_location: {\n folderId\n }\n };\n /**\n * We only apply the location to the search record model as we do not want to override the users data.\n */\n const lookFor = `${SEARCH_RECORD_MODEL_ID}-`;\n if (model.modelId.substring(0, lookFor.length) === lookFor) {\n input.location = {\n folderId\n };\n }\n\n await cms.updateEntry(model, attachAcoRecordPrefix(original.id), input);\n\n return true;\n },\n async deleteRecord(model, { id }) {\n await cms.deleteEntry(model, attachAcoRecordPrefix(id));\n return true;\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Path = void 0;
7
- var _constants = require("../../constants");
7
+ var _constants = require("../constants");
8
8
  class Path {
9
9
  static create(slug, parentPath) {
10
10
  if (parentPath) {
@@ -1,4 +0,0 @@
1
- import type { FolderLevelPermission, FolderPermission } from "../flp.types";
2
- export declare class Permissions {
3
- static create(permissions?: FolderPermission[], parentFlp?: FolderLevelPermission | null): FolderPermission[];
4
- }
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Permissions = void 0;
7
- class Permissions {
8
- static create(permissions, parentFlp) {
9
- const parentFolderPermissions = parentFlp?.permissions || [];
10
- const currentFolderPermissions = permissions?.filter(p => p.inheritedFrom !== `parent:${parentFlp?.id}`) || [];
11
- if (!parentFolderPermissions.length) {
12
- return currentFolderPermissions;
13
- }
14
-
15
- // Merge parent and current folder permissions:
16
- // - current folder permissions take precedence over parent permissions
17
- // - only if parent permission's level is set to `no-access`, then we ignore the current folder permission
18
- const permissionsInheritedFromParentFolder = [];
19
- for (const parentFolderPermission of parentFolderPermissions) {
20
- if (parentFolderPermission.level === "no-access") {
21
- permissionsInheritedFromParentFolder.push({
22
- ...parentFolderPermission,
23
- inheritedFrom: `parent:${parentFlp.id}`
24
- });
25
- continue;
26
- }
27
- const currentFolderHasOverridePermission = currentFolderPermissions.some(permission => permission.target === parentFolderPermission.target);
28
- if (currentFolderHasOverridePermission) {
29
- continue;
30
- }
31
- permissionsInheritedFromParentFolder.push({
32
- ...parentFolderPermission,
33
- inheritedFrom: `parent:${parentFlp.id}`
34
- });
35
- }
36
-
37
- // Add current folder permissions that are not present in the parent folder permissions.
38
- const applicableCurrentFolderPermissions = currentFolderPermissions.filter(permission => {
39
- const alreadyInInheritedPermissions = permissionsInheritedFromParentFolder.some(p => p.target === permission.target);
40
- return !alreadyInInheritedPermissions;
41
- });
42
- return [...applicableCurrentFolderPermissions, ...permissionsInheritedFromParentFolder];
43
- }
44
- }
45
- exports.Permissions = Permissions;
46
-
47
- //# sourceMappingURL=Permissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Permissions","create","permissions","parentFlp","parentFolderPermissions","currentFolderPermissions","filter","p","inheritedFrom","id","length","permissionsInheritedFromParentFolder","parentFolderPermission","level","push","currentFolderHasOverridePermission","some","permission","target","applicableCurrentFolderPermissions","alreadyInInheritedPermissions","exports"],"sources":["Permissions.ts"],"sourcesContent":["import type { FolderLevelPermission, FolderPermission } from \"~/flp/flp.types\";\n\nexport class Permissions {\n public static create(\n permissions?: FolderPermission[],\n parentFlp?: FolderLevelPermission | null\n ): FolderPermission[] {\n const parentFolderPermissions = parentFlp?.permissions || [];\n const currentFolderPermissions =\n permissions?.filter(p => p.inheritedFrom !== `parent:${parentFlp?.id}`) || [];\n\n if (!parentFolderPermissions.length) {\n return currentFolderPermissions;\n }\n\n // Merge parent and current folder permissions:\n // - current folder permissions take precedence over parent permissions\n // - only if parent permission's level is set to `no-access`, then we ignore the current folder permission\n const permissionsInheritedFromParentFolder: FolderPermission[] = [];\n\n for (const parentFolderPermission of parentFolderPermissions) {\n if (parentFolderPermission.level === \"no-access\") {\n permissionsInheritedFromParentFolder.push({\n ...parentFolderPermission,\n inheritedFrom: `parent:${parentFlp!.id}`\n });\n continue;\n }\n\n const currentFolderHasOverridePermission = currentFolderPermissions.some(\n permission => permission.target === parentFolderPermission.target\n );\n\n if (currentFolderHasOverridePermission) {\n continue;\n }\n\n permissionsInheritedFromParentFolder.push({\n ...parentFolderPermission,\n inheritedFrom: `parent:${parentFlp!.id}`\n });\n }\n\n // Add current folder permissions that are not present in the parent folder permissions.\n const applicableCurrentFolderPermissions = currentFolderPermissions.filter(permission => {\n const alreadyInInheritedPermissions = permissionsInheritedFromParentFolder.some(\n p => p.target === permission.target\n );\n\n return !alreadyInInheritedPermissions;\n });\n\n return [...applicableCurrentFolderPermissions, ...permissionsInheritedFromParentFolder];\n }\n}\n"],"mappings":";;;;;;AAEO,MAAMA,WAAW,CAAC;EACrB,OAAcC,MAAMA,CAChBC,WAAgC,EAChCC,SAAwC,EACtB;IAClB,MAAMC,uBAAuB,GAAGD,SAAS,EAAED,WAAW,IAAI,EAAE;IAC5D,MAAMG,wBAAwB,GAC1BH,WAAW,EAAEI,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACC,aAAa,KAAK,UAAUL,SAAS,EAAEM,EAAE,EAAE,CAAC,IAAI,EAAE;IAEjF,IAAI,CAACL,uBAAuB,CAACM,MAAM,EAAE;MACjC,OAAOL,wBAAwB;IACnC;;IAEA;IACA;IACA;IACA,MAAMM,oCAAwD,GAAG,EAAE;IAEnE,KAAK,MAAMC,sBAAsB,IAAIR,uBAAuB,EAAE;MAC1D,IAAIQ,sBAAsB,CAACC,KAAK,KAAK,WAAW,EAAE;QAC9CF,oCAAoC,CAACG,IAAI,CAAC;UACtC,GAAGF,sBAAsB;UACzBJ,aAAa,EAAE,UAAUL,SAAS,CAAEM,EAAE;QAC1C,CAAC,CAAC;QACF;MACJ;MAEA,MAAMM,kCAAkC,GAAGV,wBAAwB,CAACW,IAAI,CACpEC,UAAU,IAAIA,UAAU,CAACC,MAAM,KAAKN,sBAAsB,CAACM,MAC/D,CAAC;MAED,IAAIH,kCAAkC,EAAE;QACpC;MACJ;MAEAJ,oCAAoC,CAACG,IAAI,CAAC;QACtC,GAAGF,sBAAsB;QACzBJ,aAAa,EAAE,UAAUL,SAAS,CAAEM,EAAE;MAC1C,CAAC,CAAC;IACN;;IAEA;IACA,MAAMU,kCAAkC,GAAGd,wBAAwB,CAACC,MAAM,CAACW,UAAU,IAAI;MACrF,MAAMG,6BAA6B,GAAGT,oCAAoC,CAACK,IAAI,CAC3ET,CAAC,IAAIA,CAAC,CAACW,MAAM,KAAKD,UAAU,CAACC,MACjC,CAAC;MAED,OAAO,CAACE,6BAA6B;IACzC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAGD,kCAAkC,EAAE,GAAGR,oCAAoC,CAAC;EAC3F;AACJ;AAACU,OAAA,CAAArB,WAAA,GAAAA,WAAA","ignoreList":[]}
File without changes
File without changes