@webiny/api-aco 5.37.0-beta.0 → 5.37.0-beta.2

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 (94) hide show
  1. package/apps/AcoApp.d.ts +16 -0
  2. package/apps/AcoApp.js +108 -0
  3. package/apps/AcoApp.js.map +1 -0
  4. package/apps/AcoApps.d.ts +10 -0
  5. package/apps/AcoApps.js +76 -0
  6. package/apps/AcoApps.js.map +1 -0
  7. package/apps/app.gql.d.ts +3 -0
  8. package/apps/app.gql.js +58 -0
  9. package/apps/app.gql.js.map +1 -0
  10. package/apps/index.d.ts +2 -0
  11. package/apps/index.js +27 -0
  12. package/apps/index.js.map +1 -0
  13. package/createAcoContext.js +50 -13
  14. package/createAcoContext.js.map +1 -1
  15. package/createAcoGraphQL.d.ts +2 -2
  16. package/createAcoGraphQL.js +34 -5
  17. package/createAcoGraphQL.js.map +1 -1
  18. package/createAcoHooks.js.map +1 -1
  19. package/createAcoModels.js +0 -15
  20. package/createAcoModels.js.map +1 -1
  21. package/createAcoStorageOperations.js.map +1 -1
  22. package/{createAcoFields.d.ts → fields/index.d.ts} +1 -1
  23. package/fields/index.js +12 -0
  24. package/fields/index.js.map +1 -0
  25. package/fields/location.d.ts +2 -0
  26. package/fields/location.js +44 -0
  27. package/fields/location.js.map +1 -0
  28. package/folder/folder.crud.js +18 -0
  29. package/folder/folder.crud.js.map +1 -1
  30. package/folder/folder.gql.js +1 -1
  31. package/folder/folder.gql.js.map +1 -1
  32. package/folder/folder.model.js +0 -18
  33. package/folder/folder.model.js.map +1 -1
  34. package/folder/folder.so.js.map +1 -1
  35. package/folder/folder.types.d.ts +8 -2
  36. package/folder/folder.types.js.map +1 -1
  37. package/folder/onFolderBeforeDelete.hook.js +21 -9
  38. package/folder/onFolderBeforeDelete.hook.js.map +1 -1
  39. package/index.d.ts +3 -1
  40. package/index.js +31 -3
  41. package/index.js.map +1 -1
  42. package/package.json +29 -27
  43. package/plugins/AcoAppModifierPlugin.d.ts +43 -0
  44. package/plugins/AcoAppModifierPlugin.js +59 -0
  45. package/plugins/AcoAppModifierPlugin.js.map +1 -0
  46. package/plugins/AcoAppRegisterPlugin.d.ts +8 -0
  47. package/plugins/AcoAppRegisterPlugin.js +22 -0
  48. package/plugins/AcoAppRegisterPlugin.js.map +1 -0
  49. package/plugins/index.d.ts +2 -0
  50. package/plugins/index.js +27 -0
  51. package/plugins/index.js.map +1 -0
  52. package/record/graphql/createAppResolvers.d.ts +14 -0
  53. package/record/graphql/createAppResolvers.js +108 -0
  54. package/record/graphql/createAppResolvers.js.map +1 -0
  55. package/record/graphql/createAppSchema.d.ts +9 -0
  56. package/record/graphql/createAppSchema.js +142 -0
  57. package/record/graphql/createAppSchema.js.map +1 -0
  58. package/record/record.crud.js +45 -14
  59. package/record/record.crud.js.map +1 -1
  60. package/record/record.gql.d.ts +8 -3
  61. package/record/record.gql.js +36 -182
  62. package/record/record.gql.js.map +1 -1
  63. package/record/record.model.d.ts +7 -1
  64. package/record/record.model.js +34 -10
  65. package/record/record.model.js.map +1 -1
  66. package/record/record.so.js +55 -44
  67. package/record/record.so.js.map +1 -1
  68. package/record/record.types.d.ts +49 -15
  69. package/record/record.types.js.map +1 -1
  70. package/types.d.ts +45 -3
  71. package/types.js +10 -4
  72. package/types.js.map +1 -1
  73. package/utils/acoRecordId.js.map +1 -1
  74. package/utils/checkPermissions.js.map +1 -1
  75. package/utils/createListSort.js.map +1 -1
  76. package/utils/createModelField.js.map +1 -1
  77. package/utils/createOperationsWrapper.js.map +1 -1
  78. package/utils/fieldResolver.js.map +1 -1
  79. package/utils/getFieldValues.d.ts +2 -2
  80. package/utils/getFieldValues.js +1 -1
  81. package/utils/getFieldValues.js.map +1 -1
  82. package/utils/getFolderAndItsAncestors.d.ts +7 -0
  83. package/utils/getFolderAndItsAncestors.js +48 -0
  84. package/utils/getFolderAndItsAncestors.js.map +1 -0
  85. package/utils/isInstallationPending.js.map +1 -1
  86. package/utils/modelFactory.js.map +1 -1
  87. package/utils/resolve.d.ts +2 -1
  88. package/utils/resolve.js +11 -2
  89. package/utils/resolve.js.map +1 -1
  90. package/createAcoCrud.d.ts +0 -2
  91. package/createAcoCrud.js +0 -17
  92. package/createAcoCrud.js.map +0 -1
  93. package/createAcoFields.js +0 -40
  94. package/createAcoFields.js.map +0 -1
@@ -1,5 +1,6 @@
1
- import { AcoBaseFields, ListMeta, ListSort } from "../types";
1
+ import { AcoBaseFields, ListMeta } from "../types";
2
2
  import { Topic } from "@webiny/pubsub/types";
3
+ import { CmsModel } from "@webiny/api-headless-cms/types";
3
4
  export declare type GenericSearchData = {
4
5
  [key: string]: any;
5
6
  };
@@ -14,10 +15,10 @@ export interface SearchRecord<TData extends GenericSearchData = GenericSearchDat
14
15
  data: TData;
15
16
  tags: string[];
16
17
  }
17
- export declare type SearchRecordTag = {
18
+ export interface SearchRecordTag {
18
19
  tag: string;
19
20
  count: number;
20
- };
21
+ }
21
22
  export interface ListSearchRecordsWhere {
22
23
  type: string;
23
24
  location?: {
@@ -30,7 +31,7 @@ export interface ListSearchRecordsWhere {
30
31
  export interface ListSearchRecordsParams {
31
32
  where?: ListSearchRecordsWhere;
32
33
  search?: string;
33
- sort?: ListSort;
34
+ sort?: string[];
34
35
  limit?: number;
35
36
  after?: string | null;
36
37
  }
@@ -63,47 +64,80 @@ export interface StorageOperationsUpdateSearchRecordParams<TData extends Generic
63
64
  id: string;
64
65
  data: UpdateSearchRecordParams<TData>;
65
66
  }
67
+ export interface StorageOperationsMoveSearchRecordParams {
68
+ id: string;
69
+ folderId?: string | null;
70
+ }
66
71
  export declare type StorageOperationsDeleteSearchRecordParams = DeleteSearchRecordParams;
67
72
  export interface OnSearchRecordBeforeCreateTopicParams<TData extends GenericSearchData = GenericSearchData> {
73
+ model: CmsModel;
68
74
  input: CreateSearchRecordParams<TData>;
69
75
  }
70
76
  export interface OnSearchRecordAfterCreateTopicParams<TData extends GenericSearchData = GenericSearchData> {
77
+ model: CmsModel;
71
78
  record: SearchRecord<TData>;
72
79
  }
73
80
  export interface OnSearchRecordBeforeUpdateTopicParams<TData extends GenericSearchData = GenericSearchData> {
81
+ model: CmsModel;
74
82
  original: SearchRecord<TData>;
75
83
  input: Record<string, any>;
76
84
  }
85
+ export interface OnSearchRecordBeforeMoveTopicParams<TData extends GenericSearchData = GenericSearchData> {
86
+ model: CmsModel;
87
+ original: SearchRecord<TData>;
88
+ folderId?: string | null;
89
+ }
90
+ export interface OnSearchRecordAfterMoveTopicParams<TData extends GenericSearchData = GenericSearchData> {
91
+ model: CmsModel;
92
+ original: SearchRecord<TData>;
93
+ folderId?: string | null;
94
+ }
77
95
  export interface OnSearchRecordAfterUpdateTopicParams<TData extends GenericSearchData = GenericSearchData> {
96
+ model: CmsModel;
78
97
  original: SearchRecord<TData>;
79
98
  record: SearchRecord<TData>;
80
99
  input: Record<string, any>;
81
100
  }
82
101
  export interface OnSearchRecordBeforeDeleteTopicParams<TData extends GenericSearchData = GenericSearchData> {
102
+ model: CmsModel;
83
103
  record: SearchRecord<TData>;
84
104
  }
85
105
  export interface OnSearchRecordAfterDeleteTopicParams<TData extends GenericSearchData = GenericSearchData> {
106
+ model: CmsModel;
86
107
  record: SearchRecord<TData>;
87
108
  }
88
- export interface AcoSearchRecordCrud {
89
- get<TData>(id: string): Promise<SearchRecord<TData>>;
90
- list<TData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
109
+ export interface AcoSearchRecordCrudBase {
110
+ get<TData extends GenericSearchData = GenericSearchData>(id: string): Promise<SearchRecord<TData>>;
111
+ list<TData extends GenericSearchData = GenericSearchData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
91
112
  listTags(params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
92
- create<TData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
93
- update<TData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
113
+ create<TData extends GenericSearchData = GenericSearchData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
114
+ update<TData extends GenericSearchData = GenericSearchData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
115
+ move(id: string, folderId?: string | null): Promise<boolean>;
94
116
  delete(id: string): Promise<Boolean>;
117
+ }
118
+ export interface AcoSearchRecordCrud extends Omit<AcoSearchRecordCrudBase, "get" | "list" | "create" | "update" | "delete" | "listTags" | "move"> {
119
+ get<TData>(model: CmsModel, id: string): Promise<SearchRecord<TData>>;
120
+ list<TData>(model: CmsModel, params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
121
+ listTags(model: CmsModel, params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
122
+ create<TData>(model: CmsModel, data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
123
+ update<TData>(model: CmsModel, id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
124
+ move(model: CmsModel, id: string, folderId?: string | null): Promise<boolean>;
125
+ delete(model: CmsModel, id: string): Promise<Boolean>;
95
126
  onSearchRecordBeforeCreate: Topic<OnSearchRecordBeforeCreateTopicParams>;
96
127
  onSearchRecordAfterCreate: Topic<OnSearchRecordAfterCreateTopicParams>;
97
128
  onSearchRecordBeforeUpdate: Topic<OnSearchRecordBeforeUpdateTopicParams>;
98
129
  onSearchRecordAfterUpdate: Topic<OnSearchRecordAfterUpdateTopicParams>;
130
+ onSearchRecordBeforeMove: Topic<OnSearchRecordBeforeMoveTopicParams>;
131
+ onSearchRecordAfterMove: Topic<OnSearchRecordAfterMoveTopicParams>;
99
132
  onSearchRecordBeforeDelete: Topic<OnSearchRecordBeforeDeleteTopicParams>;
100
133
  onSearchRecordAfterDelete: Topic<OnSearchRecordAfterDeleteTopicParams>;
101
134
  }
102
135
  export interface AcoSearchRecordStorageOperations {
103
- getRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsGetSearchRecordParams): Promise<SearchRecord<TData>>;
104
- listRecords<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
105
- listTags(params: StorageOperationsListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
106
- createRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsCreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
107
- updateRecord<TData extends GenericSearchData = GenericSearchData>(params: StorageOperationsUpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
108
- deleteRecord(params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;
136
+ getRecord<TData extends GenericSearchData = GenericSearchData>(model: CmsModel, params: StorageOperationsGetSearchRecordParams): Promise<SearchRecord<TData>>;
137
+ listRecords<TData extends GenericSearchData = GenericSearchData>(model: CmsModel, params: StorageOperationsListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;
138
+ listTags(model: CmsModel, params: StorageOperationsListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;
139
+ createRecord<TData extends GenericSearchData = GenericSearchData>(model: CmsModel, params: StorageOperationsCreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
140
+ updateRecord<TData extends GenericSearchData = GenericSearchData>(model: CmsModel, params: StorageOperationsUpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;
141
+ moveRecord(model: CmsModel, params: StorageOperationsMoveSearchRecordParams): Promise<boolean>;
142
+ deleteRecord(model: CmsModel, params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;
109
143
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["record.types.ts"],"sourcesContent":["import { AcoBaseFields, ListMeta, ListSort } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport type GenericSearchData = {\n [key: string]: any;\n};\n\nexport interface Location {\n folderId: string;\n}\n\nexport interface SearchRecord<TData extends GenericSearchData = GenericSearchData>\n extends AcoBaseFields {\n type: string;\n title: string;\n content?: string;\n location: Location;\n data: TData;\n tags: string[];\n}\n\nexport type SearchRecordTag = {\n tag: string;\n count: number;\n};\n\nexport interface ListSearchRecordsWhere {\n type: string;\n location?: {\n folderId: string;\n };\n tags_in?: string[];\n tags_startsWith?: string;\n tags_not_startsWith?: string;\n}\n\nexport interface ListSearchRecordsParams {\n where?: ListSearchRecordsWhere;\n search?: string;\n sort?: ListSort;\n limit?: number;\n after?: string | null;\n}\n\nexport type CreateSearchRecordParams<TData> = Pick<\n SearchRecord<TData>,\n \"id\" | \"title\" | \"content\" | \"type\" | \"location\" | \"data\" | \"tags\"\n>;\n\nexport interface UpdateSearchRecordParams<TData extends GenericSearchData> {\n title?: string;\n content?: string;\n location?: Location;\n data?: TData;\n tags?: string[];\n}\n\nexport interface DeleteSearchRecordParams {\n id: string;\n}\n\nexport interface ListSearchRecordTagsWhere {\n type: string;\n}\n\nexport interface ListSearchRecordTagsParams {\n where?: ListSearchRecordTagsWhere;\n}\n\nexport interface StorageOperationsGetSearchRecordParams {\n id: string;\n}\n\nexport type StorageOperationsListSearchRecordsParams = ListSearchRecordsParams;\nexport type StorageOperationsListSearchRecordTagsParams = ListSearchRecordTagsParams;\n\nexport interface StorageOperationsCreateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n data: CreateSearchRecordParams<TData>;\n}\nexport interface StorageOperationsUpdateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n id: string;\n data: UpdateSearchRecordParams<TData>;\n}\nexport type StorageOperationsDeleteSearchRecordParams = DeleteSearchRecordParams;\n\nexport interface OnSearchRecordBeforeCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n input: CreateSearchRecordParams<TData>;\n}\n\nexport interface OnSearchRecordAfterCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordBeforeUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordAfterUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n original: SearchRecord<TData>;\n record: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordBeforeDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordAfterDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n record: SearchRecord<TData>;\n}\n\nexport interface AcoSearchRecordCrud {\n get<TData>(id: string): Promise<SearchRecord<TData>>;\n list<TData>(params: ListSearchRecordsParams): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;\n create<TData>(data: CreateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n update<TData>(id: string, data: UpdateSearchRecordParams<TData>): Promise<SearchRecord<TData>>;\n delete(id: string): Promise<Boolean>;\n onSearchRecordBeforeCreate: Topic<OnSearchRecordBeforeCreateTopicParams>;\n onSearchRecordAfterCreate: Topic<OnSearchRecordAfterCreateTopicParams>;\n onSearchRecordBeforeUpdate: Topic<OnSearchRecordBeforeUpdateTopicParams>;\n onSearchRecordAfterUpdate: Topic<OnSearchRecordAfterUpdateTopicParams>;\n onSearchRecordBeforeDelete: Topic<OnSearchRecordBeforeDeleteTopicParams>;\n onSearchRecordAfterDelete: Topic<OnSearchRecordAfterDeleteTopicParams>;\n}\nexport interface AcoSearchRecordStorageOperations {\n getRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsGetSearchRecordParams\n ): Promise<SearchRecord<TData>>;\n listRecords<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(\n params: StorageOperationsListSearchRecordTagsParams\n ): Promise<[SearchRecordTag[], ListMeta]>;\n createRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsCreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n updateRecord<TData extends GenericSearchData = GenericSearchData>(\n params: StorageOperationsUpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n deleteRecord(params: StorageOperationsDeleteSearchRecordParams): Promise<boolean>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["record.types.ts"],"sourcesContent":["import { AcoBaseFields, ListMeta } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\n\nexport type GenericSearchData = {\n [key: string]: any;\n};\n\nexport interface Location {\n folderId: string;\n}\n\nexport interface SearchRecord<TData extends GenericSearchData = GenericSearchData>\n extends AcoBaseFields {\n type: string;\n title: string;\n content?: string;\n location: Location;\n data: TData;\n tags: string[];\n}\n\nexport interface SearchRecordTag {\n tag: string;\n count: number;\n}\n\nexport interface ListSearchRecordsWhere {\n type: string;\n location?: {\n folderId: string;\n };\n tags_in?: string[];\n tags_startsWith?: string;\n tags_not_startsWith?: string;\n}\n\nexport interface ListSearchRecordsParams {\n where?: ListSearchRecordsWhere;\n search?: string;\n sort?: string[];\n limit?: number;\n after?: string | null;\n}\n\nexport type CreateSearchRecordParams<TData> = Pick<\n SearchRecord<TData>,\n \"id\" | \"title\" | \"content\" | \"type\" | \"location\" | \"data\" | \"tags\"\n>;\n\nexport interface UpdateSearchRecordParams<TData extends GenericSearchData> {\n title?: string;\n content?: string;\n location?: Location;\n data?: TData;\n tags?: string[];\n}\n\nexport interface DeleteSearchRecordParams {\n id: string;\n}\n\nexport interface ListSearchRecordTagsWhere {\n type: string;\n}\n\nexport interface ListSearchRecordTagsParams {\n where?: ListSearchRecordTagsWhere;\n}\n\nexport interface StorageOperationsGetSearchRecordParams {\n id: string;\n}\n\nexport type StorageOperationsListSearchRecordsParams = ListSearchRecordsParams;\nexport type StorageOperationsListSearchRecordTagsParams = ListSearchRecordTagsParams;\n\nexport interface StorageOperationsCreateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n data: CreateSearchRecordParams<TData>;\n}\n\nexport interface StorageOperationsUpdateSearchRecordParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n id: string;\n data: UpdateSearchRecordParams<TData>;\n}\n\nexport interface StorageOperationsMoveSearchRecordParams {\n id: string;\n folderId?: string | null;\n}\n\nexport type StorageOperationsDeleteSearchRecordParams = DeleteSearchRecordParams;\n\nexport interface OnSearchRecordBeforeCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n input: CreateSearchRecordParams<TData>;\n}\n\nexport interface OnSearchRecordAfterCreateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordBeforeUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n original: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordBeforeMoveTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n original: SearchRecord<TData>;\n folderId?: string | null;\n}\n\nexport interface OnSearchRecordAfterMoveTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n original: SearchRecord<TData>;\n folderId?: string | null;\n}\n\nexport interface OnSearchRecordAfterUpdateTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n original: SearchRecord<TData>;\n record: SearchRecord<TData>;\n input: Record<string, any>;\n}\n\nexport interface OnSearchRecordBeforeDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n record: SearchRecord<TData>;\n}\n\nexport interface OnSearchRecordAfterDeleteTopicParams<\n TData extends GenericSearchData = GenericSearchData\n> {\n model: CmsModel;\n record: SearchRecord<TData>;\n}\n\nexport interface AcoSearchRecordCrudBase {\n get<TData extends GenericSearchData = GenericSearchData>(\n id: string\n ): Promise<SearchRecord<TData>>;\n list<TData extends GenericSearchData = GenericSearchData>(\n params: ListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(params: ListSearchRecordTagsParams): Promise<[SearchRecordTag[], ListMeta]>;\n create<TData extends GenericSearchData = GenericSearchData>(\n data: CreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n update<TData extends GenericSearchData = GenericSearchData>(\n id: string,\n data: UpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n move(id: string, folderId?: string | null): Promise<boolean>;\n delete(id: string): Promise<Boolean>;\n}\n\nexport interface AcoSearchRecordCrud\n extends Omit<\n AcoSearchRecordCrudBase,\n \"get\" | \"list\" | \"create\" | \"update\" | \"delete\" | \"listTags\" | \"move\"\n > {\n get<TData>(model: CmsModel, id: string): Promise<SearchRecord<TData>>;\n list<TData>(\n model: CmsModel,\n params: ListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(\n model: CmsModel,\n params: ListSearchRecordTagsParams\n ): Promise<[SearchRecordTag[], ListMeta]>;\n create<TData>(\n model: CmsModel,\n data: CreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n update<TData>(\n model: CmsModel,\n id: string,\n data: UpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n move(model: CmsModel, id: string, folderId?: string | null): Promise<boolean>;\n delete(model: CmsModel, id: string): Promise<Boolean>;\n onSearchRecordBeforeCreate: Topic<OnSearchRecordBeforeCreateTopicParams>;\n onSearchRecordAfterCreate: Topic<OnSearchRecordAfterCreateTopicParams>;\n onSearchRecordBeforeUpdate: Topic<OnSearchRecordBeforeUpdateTopicParams>;\n onSearchRecordAfterUpdate: Topic<OnSearchRecordAfterUpdateTopicParams>;\n onSearchRecordBeforeMove: Topic<OnSearchRecordBeforeMoveTopicParams>;\n onSearchRecordAfterMove: Topic<OnSearchRecordAfterMoveTopicParams>;\n onSearchRecordBeforeDelete: Topic<OnSearchRecordBeforeDeleteTopicParams>;\n onSearchRecordAfterDelete: Topic<OnSearchRecordAfterDeleteTopicParams>;\n}\n\nexport interface AcoSearchRecordStorageOperations {\n getRecord<TData extends GenericSearchData = GenericSearchData>(\n model: CmsModel,\n params: StorageOperationsGetSearchRecordParams\n ): Promise<SearchRecord<TData>>;\n listRecords<TData extends GenericSearchData = GenericSearchData>(\n model: CmsModel,\n params: StorageOperationsListSearchRecordsParams\n ): Promise<[SearchRecord<TData>[], ListMeta]>;\n listTags(\n model: CmsModel,\n params: StorageOperationsListSearchRecordTagsParams\n ): Promise<[SearchRecordTag[], ListMeta]>;\n createRecord<TData extends GenericSearchData = GenericSearchData>(\n model: CmsModel,\n params: StorageOperationsCreateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n updateRecord<TData extends GenericSearchData = GenericSearchData>(\n model: CmsModel,\n params: StorageOperationsUpdateSearchRecordParams<TData>\n ): Promise<SearchRecord<TData>>;\n moveRecord(model: CmsModel, params: StorageOperationsMoveSearchRecordParams): Promise<boolean>;\n deleteRecord(\n model: CmsModel,\n params: StorageOperationsDeleteSearchRecordParams\n ): Promise<boolean>;\n}\n"],"mappings":""}
package/types.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { Tenant, TenancyContext } from "@webiny/api-tenancy/types";
1
+ import { TenancyContext, Tenant } from "@webiny/api-tenancy/types";
2
2
  import { Context as BaseContext } from "@webiny/handler/types";
3
3
  import { I18NContext, I18NLocale } from "@webiny/api-i18n/types";
4
4
  import { SecurityContext, SecurityIdentity } from "@webiny/api-security/types";
5
- import { CmsContext } from "@webiny/api-headless-cms/types";
6
- import { AcoSearchRecordCrud, AcoSearchRecordStorageOperations } from "./record/record.types";
5
+ import { CmsContext, CmsModel, CmsModelField } from "@webiny/api-headless-cms/types";
6
+ import { AcoSearchRecordCrud, AcoSearchRecordCrudBase, AcoSearchRecordStorageOperations } from "./record/record.types";
7
7
  import { AcoFolderCrud, AcoFolderStorageOperations } from "./folder/folder.types";
8
8
  export * from "./folder/folder.types";
9
9
  export * from "./record/record.types";
@@ -32,6 +32,10 @@ export interface AcoBaseFields {
32
32
  export interface AdvancedContentOrganisation {
33
33
  folder: AcoFolderCrud;
34
34
  search: AcoSearchRecordCrud;
35
+ apps: IAcoApps;
36
+ registerApp: (params: IAcoAppRegisterParams) => Promise<IAcoApp>;
37
+ getApp: (name: string) => IAcoApp;
38
+ listApps: () => IAcoApp[];
35
39
  }
36
40
  export interface CreateAcoParams {
37
41
  getIdentity: () => SecurityIdentity;
@@ -47,3 +51,41 @@ export interface AcoContext extends BaseContext, I18NContext, TenancyContext, Se
47
51
  * @deprecated Use AcoContext instead
48
52
  */
49
53
  export declare type ACOContext = AcoContext;
54
+ /**
55
+ * Apps
56
+ */
57
+ export interface IAcoAppAddFieldCallable {
58
+ (field: CmsModelField): void;
59
+ }
60
+ export interface IAcoAppRemoveFieldCallable {
61
+ (id: string): void;
62
+ }
63
+ export interface IAcoAppModifyFieldCallableCallback {
64
+ (field: CmsModelField): CmsModelField;
65
+ }
66
+ export interface IAcoAppModifyFieldCallable {
67
+ (id: string, cb: IAcoAppModifyFieldCallableCallback): void;
68
+ }
69
+ export interface IAcoApp {
70
+ context: AcoContext;
71
+ search: AcoSearchRecordCrudBase;
72
+ folder: AcoFolderCrud;
73
+ name: string;
74
+ model: CmsModel;
75
+ getFields: () => CmsModelField[];
76
+ addField: IAcoAppAddFieldCallable;
77
+ removeField: IAcoAppRemoveFieldCallable;
78
+ modifyField: IAcoAppModifyFieldCallable;
79
+ }
80
+ export interface IAcoAppParams {
81
+ name: string;
82
+ apiName: string;
83
+ model: CmsModel;
84
+ fields: CmsModelField[];
85
+ }
86
+ export declare type IAcoAppsOptions = CreateAcoParams;
87
+ export interface IAcoApps {
88
+ list: () => IAcoApp[];
89
+ register: (app: IAcoAppParams) => Promise<IAcoApp>;
90
+ }
91
+ export declare type IAcoAppRegisterParams = Omit<IAcoAppParams, "model">;
package/types.js CHANGED
@@ -31,9 +31,15 @@ Object.keys(_record).forEach(function (key) {
31
31
  }
32
32
  });
33
33
  });
34
- let ListSortDirection;
35
- exports.ListSortDirection = ListSortDirection;
36
- (function (ListSortDirection) {
34
+ let ListSortDirection = /*#__PURE__*/function (ListSortDirection) {
37
35
  ListSortDirection[ListSortDirection["ASC"] = 0] = "ASC";
38
36
  ListSortDirection[ListSortDirection["DESC"] = 1] = "DESC";
39
- })(ListSortDirection || (exports.ListSortDirection = ListSortDirection = {}));
37
+ return ListSortDirection;
38
+ }({});
39
+ /**
40
+ * @deprecated Use AcoContext instead
41
+ */
42
+ /**
43
+ * Apps
44
+ */
45
+ exports.ListSortDirection = ListSortDirection;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ListSortDirection"],"sources":["types.ts"],"sourcesContent":["import { Tenant, TenancyContext } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext, I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { CmsContext } from \"@webiny/api-headless-cms/types\";\nimport { AcoSearchRecordCrud, AcoSearchRecordStorageOperations } from \"~/record/record.types\";\nimport { AcoFolderCrud, AcoFolderStorageOperations } from \"~/folder/folder.types\";\n\nexport * from \"./folder/folder.types\";\nexport * from \"./record/record.types\";\n\nexport interface User {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ListMeta {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\nexport enum ListSortDirection {\n ASC,\n DESC\n}\n\nexport type ListSort = Record<string, ListSortDirection>;\n\nexport interface AcoBaseFields {\n id: string;\n entryId: string;\n createdOn: string;\n createdBy: User;\n savedOn: string;\n}\n\nexport interface AdvancedContentOrganisation {\n folder: AcoFolderCrud;\n search: AcoSearchRecordCrud;\n}\n\nexport interface CreateAcoParams {\n getIdentity: () => SecurityIdentity;\n getLocale: () => I18NLocale;\n getTenant: () => Tenant;\n storageOperations: AcoStorageOperations;\n}\n\nexport type AcoStorageOperations = AcoFolderStorageOperations & AcoSearchRecordStorageOperations;\n\nexport interface AcoContext\n extends BaseContext,\n I18NContext,\n TenancyContext,\n SecurityContext,\n CmsContext {\n aco: AdvancedContentOrganisation;\n}\n\n/**\n * @deprecated Use AcoContext instead\n */\nexport type ACOContext = AcoContext;\n"],"mappings":";;;;;;;;;AAQA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAAsC,IAc1BA,iBAAiB;AAAA;AAAA,WAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;AAAA,GAAjBA,iBAAiB,iCAAjBA,iBAAiB"}
1
+ {"version":3,"names":["_folder","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_record","ListSortDirection"],"sources":["types.ts"],"sourcesContent":["import { TenancyContext, Tenant } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext, I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { CmsContext, CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport {\n AcoSearchRecordCrud,\n AcoSearchRecordCrudBase,\n AcoSearchRecordStorageOperations\n} from \"~/record/record.types\";\nimport { AcoFolderCrud, AcoFolderStorageOperations } from \"~/folder/folder.types\";\n\nexport * from \"./folder/folder.types\";\nexport * from \"./record/record.types\";\n\nexport interface User {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ListMeta {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\nexport enum ListSortDirection {\n ASC,\n DESC\n}\n\nexport type ListSort = Record<string, ListSortDirection>;\n\nexport interface AcoBaseFields {\n id: string;\n entryId: string;\n createdOn: string;\n createdBy: User;\n savedOn: string;\n}\n\nexport interface AdvancedContentOrganisation {\n folder: AcoFolderCrud;\n search: AcoSearchRecordCrud;\n apps: IAcoApps;\n registerApp: (params: IAcoAppRegisterParams) => Promise<IAcoApp>;\n getApp: (name: string) => IAcoApp;\n listApps: () => IAcoApp[];\n}\n\nexport interface CreateAcoParams {\n getIdentity: () => SecurityIdentity;\n getLocale: () => I18NLocale;\n getTenant: () => Tenant;\n storageOperations: AcoStorageOperations;\n}\n\nexport type AcoStorageOperations = AcoFolderStorageOperations & AcoSearchRecordStorageOperations;\n\nexport interface AcoContext\n extends BaseContext,\n I18NContext,\n TenancyContext,\n SecurityContext,\n CmsContext {\n aco: AdvancedContentOrganisation;\n}\n\n/**\n * @deprecated Use AcoContext instead\n */\nexport type ACOContext = AcoContext;\n\n/**\n * Apps\n */\nexport interface IAcoAppAddFieldCallable {\n (field: CmsModelField): void;\n}\n\nexport interface IAcoAppRemoveFieldCallable {\n (id: string): void;\n}\n\nexport interface IAcoAppModifyFieldCallableCallback {\n (field: CmsModelField): CmsModelField;\n}\n\nexport interface IAcoAppModifyFieldCallable {\n (id: string, cb: IAcoAppModifyFieldCallableCallback): void;\n}\n\nexport interface IAcoApp {\n context: AcoContext;\n search: AcoSearchRecordCrudBase;\n folder: AcoFolderCrud;\n name: string;\n model: CmsModel;\n getFields: () => CmsModelField[];\n addField: IAcoAppAddFieldCallable;\n removeField: IAcoAppRemoveFieldCallable;\n modifyField: IAcoAppModifyFieldCallable;\n}\n\nexport interface IAcoAppParams {\n name: string;\n apiName: string;\n model: CmsModel;\n fields: CmsModelField[];\n}\n\nexport type IAcoAppsOptions = CreateAcoParams;\n\nexport interface IAcoApps {\n list: () => IAcoApp[];\n register: (app: IAcoAppParams) => Promise<IAcoApp>;\n}\n\nexport type IAcoAppRegisterParams = Omit<IAcoAppParams, \"model\">;\n"],"mappings":";;;;;;;;;AAYA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,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,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,OAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,OAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,OAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,OAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAAsC,IAc1BU,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAjBA,iBAAiB,CAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA;AA0C7B;AACA;AACA;AAGA;AACA;AACA;AAFAL,OAAA,CAAAK,iBAAA,GAAAA,iBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["WBY_ACO_PREFIX","attachAcoRecordPrefix","id","startsWith","removeAcoRecordPrefix","substring","length"],"sources":["acoRecordId.ts"],"sourcesContent":["/**\n * !!! DO NOT CHANGE THIS !!!\n * If this is changed, you will need to create new migration which changes the IDs for the users.\n *\n * packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts:236\n * packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts:419\n */\nconst WBY_ACO_PREFIX = \"wby-aco-\";\n/**\n * 006\n * PageDataMigration in ddb-es and ddb\n */\n\nexport const attachAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX)) {\n return id;\n }\n return `${WBY_ACO_PREFIX}${id}`;\n};\n\nexport const removeAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX) === false) {\n return id;\n }\n return id.substring(WBY_ACO_PREFIX.length);\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,UAAU;AACjC;AACA;AACA;AACA;;AAEO,MAAMC,qBAAqB,GAAIC,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,EAAE;IAC/B,OAAOE,EAAE;EACb;EACA,OAAQ,GAAEF,cAAe,GAAEE,EAAG,EAAC;AACnC,CAAC;AAAC;AAEK,MAAME,qBAAqB,GAAIF,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,KAAK,KAAK,EAAE;IACzC,OAAOE,EAAE;EACb;EACA,OAAOA,EAAE,CAACG,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;AAC9C,CAAC;AAAC"}
1
+ {"version":3,"names":["WBY_ACO_PREFIX","attachAcoRecordPrefix","id","startsWith","exports","removeAcoRecordPrefix","substring","length"],"sources":["acoRecordId.ts"],"sourcesContent":["/**\n * !!! DO NOT CHANGE THIS !!!\n * If this is changed, you will need to create new migration which changes the IDs for the users.\n *\n * packages/migrations/src/migrations/5.35.0/006/ddb/PageDataMigration.ts:236\n * packages/migrations/src/migrations/5.35.0/006/ddb-es/PageDataMigration.ts:419\n */\nconst WBY_ACO_PREFIX = \"wby-aco-\";\n/**\n * 006\n * PageDataMigration in ddb-es and ddb\n */\n\nexport const attachAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX)) {\n return id;\n }\n return `${WBY_ACO_PREFIX}${id}`;\n};\n\nexport const removeAcoRecordPrefix = (id: string) => {\n if (id.startsWith(WBY_ACO_PREFIX) === false) {\n return id;\n }\n return id.substring(WBY_ACO_PREFIX.length);\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,cAAc,GAAG,UAAU;AACjC;AACA;AACA;AACA;;AAEO,MAAMC,qBAAqB,GAAIC,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,EAAE;IAC/B,OAAOE,EAAE;EACb;EACA,OAAQ,GAAEF,cAAe,GAAEE,EAAG,EAAC;AACnC,CAAC;AAACE,OAAA,CAAAH,qBAAA,GAAAA,qBAAA;AAEK,MAAMI,qBAAqB,GAAIH,EAAU,IAAK;EACjD,IAAIA,EAAE,CAACC,UAAU,CAACH,cAAc,CAAC,KAAK,KAAK,EAAE;IACzC,OAAOE,EAAE;EACb;EACA,OAAOA,EAAE,CAACI,SAAS,CAACN,cAAc,CAACO,MAAM,CAAC;AAC9C,CAAC;AAACH,OAAA,CAAAC,qBAAA,GAAAA,qBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["checkPermissions","context","identity","security","getIdentity","NotAuthorizedError"],"sources":["checkPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const checkPermissions = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA;AAGO,MAAMA,gBAAgB,GAAIC,OAAmB,IAAK;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,EAAE;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,EAAE;EAClC;AACJ,CAAC;AAAC"}
1
+ {"version":3,"names":["_apiSecurity","require","checkPermissions","context","identity","security","getIdentity","NotAuthorizedError","exports"],"sources":["checkPermissions.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport { AcoContext } from \"~/types\";\n\nexport const checkPermissions = (context: AcoContext) => {\n const identity = context.security.getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,gBAAgB,GAAIC,OAAmB,IAAK;EACrD,MAAMC,QAAQ,GAAGD,OAAO,CAACE,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAI,CAACF,QAAQ,EAAE;IACX,MAAM,IAAIG,+BAAkB,CAAC,CAAC;EAClC;AACJ,CAAC;AAACC,OAAA,CAAAN,gBAAA,GAAAA,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["createListSort","sort","Object","keys","map","key"],"sources":["createListSort.ts"],"sourcesContent":["import { ListSort } from \"~/types\";\n\nexport const createListSort = (sort?: ListSort): string[] | undefined => {\n if (!sort) {\n return;\n }\n\n return Object.keys(sort).map(key => `${key}_${sort[key]}`);\n};\n"],"mappings":";;;;;;AAEO,MAAMA,cAAc,GAAIC,IAAe,IAA2B;EACrE,IAAI,CAACA,IAAI,EAAE;IACP;EACJ;EAEA,OAAOC,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC,CAACG,GAAG,CAACC,GAAG,IAAK,GAAEA,GAAI,IAAGJ,IAAI,CAACI,GAAG,CAAE,EAAC,CAAC;AAC9D,CAAC;AAAC"}
1
+ {"version":3,"names":["createListSort","sort","Object","keys","map","key","exports"],"sources":["createListSort.ts"],"sourcesContent":["import { ListSort } from \"~/types\";\n\nexport const createListSort = (sort?: ListSort): string[] | undefined => {\n if (!sort) {\n return;\n }\n\n return Object.keys(sort).map(key => `${key}_${sort[key]}`);\n};\n"],"mappings":";;;;;;AAEO,MAAMA,cAAc,GAAIC,IAAe,IAA2B;EACrE,IAAI,CAACA,IAAI,EAAE;IACP;EACJ;EAEA,OAAOC,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC,CAACG,GAAG,CAACC,GAAG,IAAK,GAAEA,GAAI,IAAGJ,IAAI,CAACI,GAAG,CAAE,EAAC,CAAC;AAC9D,CAAC;AAACC,OAAA,CAAAN,cAAA,GAAAA,cAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["createModelField","params","label","fieldId","initialFieldId","type","settings","listValidation","validation","multipleValues","predefinedValues","values","enabled","camelCase","id","storageId"],"sources":["createModelField.ts"],"sourcesContent":["import { CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport camelCase from \"lodash/camelCase\";\n\nexport interface CreateModelFieldParams\n extends Omit<CmsModelField, \"id\" | \"storageId\" | \"fieldId\"> {\n fieldId?: string;\n}\n\nexport const createModelField = (params: CreateModelFieldParams): CmsModelField => {\n const {\n label,\n fieldId: initialFieldId,\n type,\n settings = {},\n listValidation = [],\n validation = [],\n multipleValues = false,\n predefinedValues = {\n values: [],\n enabled: false\n }\n } = params;\n\n const fieldId = initialFieldId ? camelCase(initialFieldId) : camelCase(label);\n\n return {\n id: fieldId,\n storageId: `${type}@${fieldId}`,\n fieldId,\n label,\n type,\n settings,\n listValidation,\n validation,\n multipleValues,\n predefinedValues\n };\n};\n"],"mappings":";;;;;;;AACA;AAOO,MAAMA,gBAAgB,GAAIC,MAA8B,IAAoB;EAC/E,MAAM;IACFC,KAAK;IACLC,OAAO,EAAEC,cAAc;IACvBC,IAAI;IACJC,QAAQ,GAAG,CAAC,CAAC;IACbC,cAAc,GAAG,EAAE;IACnBC,UAAU,GAAG,EAAE;IACfC,cAAc,GAAG,KAAK;IACtBC,gBAAgB,GAAG;MACfC,MAAM,EAAE,EAAE;MACVC,OAAO,EAAE;IACb;EACJ,CAAC,GAAGX,MAAM;EAEV,MAAME,OAAO,GAAGC,cAAc,GAAG,IAAAS,kBAAS,EAACT,cAAc,CAAC,GAAG,IAAAS,kBAAS,EAACX,KAAK,CAAC;EAE7E,OAAO;IACHY,EAAE,EAAEX,OAAO;IACXY,SAAS,EAAG,GAAEV,IAAK,IAAGF,OAAQ,EAAC;IAC/BA,OAAO;IACPD,KAAK;IACLG,IAAI;IACJC,QAAQ;IACRC,cAAc;IACdC,UAAU;IACVC,cAAc;IACdC;EACJ,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["_camelCase","_interopRequireDefault","require","createModelField","params","label","fieldId","initialFieldId","type","settings","listValidation","validation","multipleValues","predefinedValues","values","enabled","camelCase","id","storageId","exports"],"sources":["createModelField.ts"],"sourcesContent":["import { CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport camelCase from \"lodash/camelCase\";\n\nexport interface CreateModelFieldParams\n extends Omit<CmsModelField, \"id\" | \"storageId\" | \"fieldId\"> {\n fieldId?: string;\n}\n\nexport const createModelField = (params: CreateModelFieldParams): CmsModelField => {\n const {\n label,\n fieldId: initialFieldId,\n type,\n settings = {},\n listValidation = [],\n validation = [],\n multipleValues = false,\n predefinedValues = {\n values: [],\n enabled: false\n }\n } = params;\n\n const fieldId = initialFieldId ? camelCase(initialFieldId) : camelCase(label);\n\n return {\n id: fieldId,\n storageId: `${type}@${fieldId}`,\n fieldId,\n label,\n type,\n settings,\n listValidation,\n validation,\n multipleValues,\n predefinedValues\n };\n};\n"],"mappings":";;;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAOO,MAAMC,gBAAgB,GAAIC,MAA8B,IAAoB;EAC/E,MAAM;IACFC,KAAK;IACLC,OAAO,EAAEC,cAAc;IACvBC,IAAI;IACJC,QAAQ,GAAG,CAAC,CAAC;IACbC,cAAc,GAAG,EAAE;IACnBC,UAAU,GAAG,EAAE;IACfC,cAAc,GAAG,KAAK;IACtBC,gBAAgB,GAAG;MACfC,MAAM,EAAE,EAAE;MACVC,OAAO,EAAE;IACb;EACJ,CAAC,GAAGX,MAAM;EAEV,MAAME,OAAO,GAAGC,cAAc,GAAG,IAAAS,kBAAS,EAACT,cAAc,CAAC,GAAG,IAAAS,kBAAS,EAACX,KAAK,CAAC;EAE7E,OAAO;IACHY,EAAE,EAAEX,OAAO;IACXY,SAAS,EAAG,GAAEV,IAAK,IAAGF,OAAQ,EAAC;IAC/BA,OAAO;IACPD,KAAK;IACLG,IAAI;IACJC,QAAQ;IACRC,cAAc;IACdC,UAAU;IACVC,cAAc;IACdC;EACJ,CAAC;AACL,CAAC;AAACM,OAAA,CAAAhB,gBAAA,GAAAA,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["createOperationsWrapper","params","cms","security","modelName","withModel","cb","withoutAuthorization","model","getModel","WebinyError","result"],"sources":["createOperationsWrapper.ts"],"sourcesContent":["import { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\n\ninterface CreateOperationsWrapperParams extends CreateAcoStorageOperationsParams {\n modelName: string;\n}\n\nexport const createOperationsWrapper = (params: CreateOperationsWrapperParams) => {\n const { cms, security, modelName } = params;\n\n const withModel = async <TResult>(\n cb: (model: CmsModel) => Promise<TResult>\n ): Promise<TResult> => {\n return security.withoutAuthorization(async () => {\n const model = await cms.getModel(modelName);\n\n if (!model) {\n throw new WebinyError(\n `Could not find \"${modelName}\" model.`,\n \"MODEL_NOT_FOUND_ERROR\"\n );\n }\n\n const result = await cb(model);\n\n return result;\n });\n };\n\n return {\n withModel\n };\n};\n"],"mappings":";;;;;;;AAEA;AAMO,MAAMA,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,GAAG;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGH,MAAM;EAE3C,MAAMI,SAAS,GAAG,MACdC,EAAyC,IACtB;IACnB,OAAOH,QAAQ,CAACI,oBAAoB,CAAC,YAAY;MAC7C,MAAMC,KAAK,GAAG,MAAMN,GAAG,CAACO,QAAQ,CAACL,SAAS,CAAC;MAE3C,IAAI,CAACI,KAAK,EAAE;QACR,MAAM,IAAIE,cAAW,CAChB,mBAAkBN,SAAU,UAAS,EACtC,uBAAuB,CAC1B;MACL;MAEA,MAAMO,MAAM,GAAG,MAAML,EAAE,CAACE,KAAK,CAAC;MAE9B,OAAOG,MAAM;IACjB,CAAC,CAAC;EACN,CAAC;EAED,OAAO;IACHN;EACJ,CAAC;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","createOperationsWrapper","params","cms","security","modelName","withModel","cb","withoutAuthorization","model","getModel","WebinyError","result","exports"],"sources":["createOperationsWrapper.ts"],"sourcesContent":["import { CreateAcoStorageOperationsParams } from \"~/createAcoStorageOperations\";\nimport { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport WebinyError from \"@webiny/error\";\n\ninterface CreateOperationsWrapperParams extends CreateAcoStorageOperationsParams {\n modelName: string;\n}\n\nexport const createOperationsWrapper = (params: CreateOperationsWrapperParams) => {\n const { cms, security, modelName } = params;\n\n const withModel = async <TResult>(\n cb: (model: CmsModel) => Promise<TResult>\n ): Promise<TResult> => {\n return security.withoutAuthorization(async () => {\n const model = await cms.getModel(modelName);\n\n if (!model) {\n throw new WebinyError(\n `Could not find \"${modelName}\" model.`,\n \"MODEL_NOT_FOUND_ERROR\"\n );\n }\n\n const result = await cb(model);\n\n return result;\n });\n };\n\n return {\n withModel\n };\n};\n"],"mappings":";;;;;;;AAEA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAMO,MAAMC,uBAAuB,GAAIC,MAAqC,IAAK;EAC9E,MAAM;IAAEC,GAAG;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGH,MAAM;EAE3C,MAAMI,SAAS,GAAG,MACdC,EAAyC,IACtB;IACnB,OAAOH,QAAQ,CAACI,oBAAoB,CAAC,YAAY;MAC7C,MAAMC,KAAK,GAAG,MAAMN,GAAG,CAACO,QAAQ,CAACL,SAAS,CAAC;MAE3C,IAAI,CAACI,KAAK,EAAE;QACR,MAAM,IAAIE,cAAW,CAChB,mBAAkBN,SAAU,UAAS,EACtC,uBACJ,CAAC;MACL;MAEA,MAAMO,MAAM,GAAG,MAAML,EAAE,CAACE,KAAK,CAAC;MAE9B,OAAOG,MAAM;IACjB,CAAC,CAAC;EACN,CAAC;EAED,OAAO;IACHN;EACJ,CAAC;AACL,CAAC;AAACO,OAAA,CAAAZ,uBAAA,GAAAA,uBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["getFieldValues","params","entry","context","transformers","fields","values","pick","transformer","fieldId","model","field","entryFieldFromStorageTransform","value","getTransformer","find"],"sources":["fieldResolver.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsContext, CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { entryFieldFromStorageTransform } from \"@webiny/api-headless-cms\";\nimport { AcoBaseFields } from \"~/types\";\n\ninterface Transformer {\n fieldId: keyof AcoBaseFields;\n model: any;\n field: any;\n}\n\ninterface GetFieldValuesParams {\n entry: CmsEntry;\n fields: string[];\n transformers?: Transformer[];\n context: CmsContext;\n}\n\nexport const getFieldValues = async <T extends AcoBaseFields>(\n params: GetFieldValuesParams\n): Promise<T> => {\n const { entry, context, transformers = [], fields } = params;\n const values = {\n ...pick(entry, fields),\n ...entry.values\n } as T;\n /**\n * Transform field value for each transformers.\n */\n for (const transformer of transformers) {\n const { fieldId, model, field } = transformer;\n // Get transformed value (eg. data decompression)\n values[fieldId] = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value: values[fieldId]\n });\n }\n\n return values;\n};\n\nexport const getTransformer = (model: CmsModel, fieldId: string): Transformer => ({\n fieldId: fieldId as unknown as keyof AcoBaseFields,\n model: model,\n field: model.fields.find(field => field.fieldId === fieldId)\n});\n"],"mappings":";;;;;;;;AAAA;AAEA;AAgBO,MAAMA,cAAc,GAAG,MAC1BC,MAA4B,IACf;EACb,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC,YAAY,GAAG,EAAE;IAAEC;EAAO,CAAC,GAAGJ,MAAM;EAC5D,MAAMK,MAAM,+DACL,IAAAC,aAAI,EAACL,KAAK,EAAEG,MAAM,CAAC,GACnBH,KAAK,CAACI,MAAM,CACb;EACN;AACJ;AACA;EACI,KAAK,MAAME,WAAW,IAAIJ,YAAY,EAAE;IACpC,MAAM;MAAEK,OAAO;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGH,WAAW;IAC7C;IACAF,MAAM,CAACG,OAAO,CAAC,GAAG,MAAM,IAAAG,8CAA8B,EAAC;MACnDT,OAAO;MACPO,KAAK;MACLC,KAAK;MACLE,KAAK,EAAEP,MAAM,CAACG,OAAO;IACzB,CAAC,CAAC;EACN;EAEA,OAAOH,MAAM;AACjB,CAAC;AAAC;AAEK,MAAMQ,cAAc,GAAG,CAACJ,KAAe,EAAED,OAAe,MAAmB;EAC9EA,OAAO,EAAEA,OAAyC;EAClDC,KAAK,EAAEA,KAAK;EACZC,KAAK,EAAED,KAAK,CAACL,MAAM,CAACU,IAAI,CAACJ,KAAK,IAAIA,KAAK,CAACF,OAAO,KAAKA,OAAO;AAC/D,CAAC,CAAC;AAAC"}
1
+ {"version":3,"names":["_pick","_interopRequireDefault","require","_apiHeadlessCms","getFieldValues","params","entry","context","transformers","fields","values","_objectSpread2","default","pick","transformer","fieldId","model","field","entryFieldFromStorageTransform","value","exports","getTransformer","find"],"sources":["fieldResolver.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsContext, CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { entryFieldFromStorageTransform } from \"@webiny/api-headless-cms\";\nimport { AcoBaseFields } from \"~/types\";\n\ninterface Transformer {\n fieldId: keyof AcoBaseFields;\n model: any;\n field: any;\n}\n\ninterface GetFieldValuesParams {\n entry: CmsEntry;\n fields: string[];\n transformers?: Transformer[];\n context: CmsContext;\n}\n\nexport const getFieldValues = async <T extends AcoBaseFields>(\n params: GetFieldValuesParams\n): Promise<T> => {\n const { entry, context, transformers = [], fields } = params;\n const values = {\n ...pick(entry, fields),\n ...entry.values\n } as T;\n /**\n * Transform field value for each transformers.\n */\n for (const transformer of transformers) {\n const { fieldId, model, field } = transformer;\n // Get transformed value (eg. data decompression)\n values[fieldId] = await entryFieldFromStorageTransform({\n context,\n model,\n field,\n value: values[fieldId]\n });\n }\n\n return values;\n};\n\nexport const getTransformer = (model: CmsModel, fieldId: string): Transformer => ({\n fieldId: fieldId as unknown as keyof AcoBaseFields,\n model: model,\n field: model.fields.find(field => field.fieldId === fieldId)\n});\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AAgBO,MAAME,cAAc,GAAG,MAC1BC,MAA4B,IACf;EACb,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC,YAAY,GAAG,EAAE;IAAEC;EAAO,CAAC,GAAGJ,MAAM;EAC5D,MAAMK,MAAM,OAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACL,IAAAC,aAAI,EAACP,KAAK,EAAEG,MAAM,CAAC,GACnBH,KAAK,CAACI,MAAM,CACb;EACN;AACJ;AACA;EACI,KAAK,MAAMI,WAAW,IAAIN,YAAY,EAAE;IACpC,MAAM;MAAEO,OAAO;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGH,WAAW;IAC7C;IACAJ,MAAM,CAACK,OAAO,CAAC,GAAG,MAAM,IAAAG,8CAA8B,EAAC;MACnDX,OAAO;MACPS,KAAK;MACLC,KAAK;MACLE,KAAK,EAAET,MAAM,CAACK,OAAO;IACzB,CAAC,CAAC;EACN;EAEA,OAAOL,MAAM;AACjB,CAAC;AAACU,OAAA,CAAAhB,cAAA,GAAAA,cAAA;AAEK,MAAMiB,cAAc,GAAGA,CAACL,KAAe,EAAED,OAAe,MAAmB;EAC9EA,OAAO,EAAEA,OAAyC;EAClDC,KAAK,EAAEA,KAAK;EACZC,KAAK,EAAED,KAAK,CAACP,MAAM,CAACa,IAAI,CAACL,KAAK,IAAIA,KAAK,CAACF,OAAO,KAAKA,OAAO;AAC/D,CAAC,CAAC;AAACK,OAAA,CAAAC,cAAA,GAAAA,cAAA"}
@@ -1,5 +1,5 @@
1
1
  import { CmsEntry } from "@webiny/api-headless-cms/types";
2
- import { SearchRecord } from "../record/record.types";
3
2
  import { Folder } from "../folder/folder.types";
4
- export declare function getRecordFieldValues(entry: CmsEntry, fields: string[]): SearchRecord<any>;
3
+ import { SearchRecord } from "../record/record.types";
4
+ export declare function getRecordFieldValues(entry: CmsEntry<any>, fields?: string[]): SearchRecord<any>;
5
5
  export declare function getFolderFieldValues(entry: CmsEntry, fields: string[]): Folder;
@@ -9,7 +9,7 @@ exports.getRecordFieldValues = getRecordFieldValues;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
10
  var _pick = _interopRequireDefault(require("lodash/pick"));
11
11
  function getRecordFieldValues(entry, fields) {
12
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values);
12
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, fields ? (0, _pick.default)(entry, fields) : entry), entry.values);
13
13
  }
14
14
  function getFolderFieldValues(entry, fields) {
15
15
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _pick.default)(entry, fields)), entry.values);
@@ -1 +1 @@
1
- {"version":3,"names":["getRecordFieldValues","entry","fields","pick","values","getFolderFieldValues"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { SearchRecord } from \"~/record/record.types\";\nimport { Folder } from \"~/folder/folder.types\";\n\nexport function getRecordFieldValues(entry: CmsEntry, fields: string[]) {\n return {\n ...pick(entry, fields),\n ...entry.values\n } as SearchRecord<any>;\n}\n\nexport function getFolderFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), ...entry.values } as Folder;\n}\n"],"mappings":";;;;;;;;;AAAA;AAKO,SAASA,oBAAoB,CAACC,KAAe,EAAEC,MAAgB,EAAE;EACpE,mEACO,IAAAC,aAAI,EAACF,KAAK,EAAEC,MAAM,CAAC,GACnBD,KAAK,CAACG,MAAM;AAEvB;AAEO,SAASC,oBAAoB,CAACJ,KAAe,EAAEC,MAAgB,EAAE;EACpE,mEAAY,IAAAC,aAAI,EAACF,KAAK,EAAEC,MAAM,CAAC,GAAKD,KAAK,CAACG,MAAM;AACpD"}
1
+ {"version":3,"names":["_pick","_interopRequireDefault","require","getRecordFieldValues","entry","fields","_objectSpread2","default","pick","values","getFolderFieldValues"],"sources":["getFieldValues.ts"],"sourcesContent":["import pick from \"lodash/pick\";\nimport { CmsEntry } from \"@webiny/api-headless-cms/types\";\nimport { Folder } from \"~/folder/folder.types\";\nimport { SearchRecord } from \"~/record/record.types\";\n\nexport function getRecordFieldValues(entry: CmsEntry<any>, fields?: string[]) {\n return {\n ...(fields ? pick(entry, fields) : entry),\n ...entry.values\n } as SearchRecord<any>;\n}\n\nexport function getFolderFieldValues(entry: CmsEntry, fields: string[]) {\n return { ...pick(entry, fields), ...entry.values } as Folder;\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAKO,SAASC,oBAAoBA,CAACC,KAAoB,EAAEC,MAAiB,EAAE;EAC1E,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACQF,MAAM,GAAG,IAAAG,aAAI,EAACJ,KAAK,EAAEC,MAAM,CAAC,GAAGD,KAAK,GACrCA,KAAK,CAACK,MAAM;AAEvB;AAEO,SAASC,oBAAoBA,CAACN,KAAe,EAAEC,MAAgB,EAAE;EACpE,WAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MAAY,IAAAC,aAAI,EAACJ,KAAK,EAAEC,MAAM,CAAC,GAAKD,KAAK,CAACK,MAAM;AACpD"}
@@ -0,0 +1,7 @@
1
+ import { Folder } from "../folder/folder.types";
2
+ interface GetFolderAndItsAncestorsParams {
3
+ id: string;
4
+ folders: Folder[];
5
+ }
6
+ export declare const getFolderAndItsAncestors: ({ id, folders }: GetFolderAndItsAncestorsParams) => Folder[];
7
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getFolderAndItsAncestors = void 0;
7
+ const getFolderAndItsAncestors = ({
8
+ id,
9
+ folders
10
+ }) => {
11
+ // Create a Map with folders, using folder.id as key
12
+ const folderMap = new Map();
13
+ folders.forEach(folder => folderMap.set(folder.id, folder));
14
+ const findParents = (next, id) => {
15
+ const folder = folderMap.get(id);
16
+
17
+ // No folder found: return the result
18
+ if (!folder) {
19
+ return next;
20
+ }
21
+
22
+ // Push the current folder into the accumulator array
23
+ next.push(folder);
24
+
25
+ // No parentId found: return the result
26
+ if (!folder.parentId) {
27
+ return next;
28
+ }
29
+
30
+ // Go ahead and find parent for the current parent
31
+ return findParents(next, folder.parentId);
32
+ };
33
+ const folder = folderMap.get(id);
34
+
35
+ // No folder found: return an empty array
36
+ if (!folder) {
37
+ return [];
38
+ }
39
+
40
+ // The folder has no parent (it's at root level): return an array with the folder
41
+ if (!folder.parentId) {
42
+ return [folder];
43
+ }
44
+
45
+ // Recursively find parents for a given folder id
46
+ return findParents([], id);
47
+ };
48
+ exports.getFolderAndItsAncestors = getFolderAndItsAncestors;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getFolderAndItsAncestors","id","folders","folderMap","Map","forEach","folder","set","findParents","next","get","push","parentId","exports"],"sources":["getFolderAndItsAncestors.ts"],"sourcesContent":["import { Folder } from \"~/folder/folder.types\";\n\ninterface GetFolderAndItsAncestorsParams {\n id: string;\n folders: Folder[];\n}\n\nexport const getFolderAndItsAncestors = ({\n id,\n folders\n}: GetFolderAndItsAncestorsParams): Folder[] => {\n // Create a Map with folders, using folder.id as key\n const folderMap = new Map<string, Folder>();\n folders.forEach(folder => folderMap.set(folder.id, folder));\n\n const findParents = (next: Folder[], id: string): Folder[] => {\n const folder = folderMap.get(id);\n\n // No folder found: return the result\n if (!folder) {\n return next;\n }\n\n // Push the current folder into the accumulator array\n next.push(folder);\n\n // No parentId found: return the result\n if (!folder.parentId) {\n return next;\n }\n\n // Go ahead and find parent for the current parent\n return findParents(next, folder.parentId);\n };\n\n const folder = folderMap.get(id);\n\n // No folder found: return an empty array\n if (!folder) {\n return [];\n }\n\n // The folder has no parent (it's at root level): return an array with the folder\n if (!folder.parentId) {\n return [folder];\n }\n\n // Recursively find parents for a given folder id\n return findParents([], id);\n};\n"],"mappings":";;;;;;AAOO,MAAMA,wBAAwB,GAAGA,CAAC;EACrCC,EAAE;EACFC;AAC4B,CAAC,KAAe;EAC5C;EACA,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAC3CF,OAAO,CAACG,OAAO,CAACC,MAAM,IAAIH,SAAS,CAACI,GAAG,CAACD,MAAM,CAACL,EAAE,EAAEK,MAAM,CAAC,CAAC;EAE3D,MAAME,WAAW,GAAGA,CAACC,IAAc,EAAER,EAAU,KAAe;IAC1D,MAAMK,MAAM,GAAGH,SAAS,CAACO,GAAG,CAACT,EAAE,CAAC;;IAEhC;IACA,IAAI,CAACK,MAAM,EAAE;MACT,OAAOG,IAAI;IACf;;IAEA;IACAA,IAAI,CAACE,IAAI,CAACL,MAAM,CAAC;;IAEjB;IACA,IAAI,CAACA,MAAM,CAACM,QAAQ,EAAE;MAClB,OAAOH,IAAI;IACf;;IAEA;IACA,OAAOD,WAAW,CAACC,IAAI,EAAEH,MAAM,CAACM,QAAQ,CAAC;EAC7C,CAAC;EAED,MAAMN,MAAM,GAAGH,SAAS,CAACO,GAAG,CAACT,EAAE,CAAC;;EAEhC;EACA,IAAI,CAACK,MAAM,EAAE;IACT,OAAO,EAAE;EACb;;EAEA;EACA,IAAI,CAACA,MAAM,CAACM,QAAQ,EAAE;IAClB,OAAO,CAACN,MAAM,CAAC;EACnB;;EAEA;EACA,OAAOE,WAAW,CAAC,EAAE,EAAEP,EAAE,CAAC;AAC9B,CAAC;AAACY,OAAA,CAAAb,wBAAA,GAAAA,wBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["isInstallationPending","tenancy","i18n","tenant","getCurrentTenant","getContentLocale"],"sources":["isInstallationPending.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\n\ntype CheckInstallationParams = Pick<AcoContext, \"tenancy\" | \"i18n\">;\nexport const isInstallationPending = ({ tenancy, i18n }: CheckInstallationParams): boolean => {\n /**\n * In case of a fresh webiny project \"tenant\" and \"locale\" won't be there until\n * installation is completed. So, we need to skip \"ACO\" creation till then.\n */\n const tenant = tenancy.getCurrentTenant();\n if (!tenant) {\n return true;\n }\n\n return !i18n.getContentLocale();\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAG,CAAC;EAAEC,OAAO;EAAEC;AAA8B,CAAC,KAAc;EAC1F;AACJ;AACA;AACA;EACI,MAAMC,MAAM,GAAGF,OAAO,CAACG,gBAAgB,EAAE;EACzC,IAAI,CAACD,MAAM,EAAE;IACT,OAAO,IAAI;EACf;EAEA,OAAO,CAACD,IAAI,CAACG,gBAAgB,EAAE;AACnC,CAAC;AAAC"}
1
+ {"version":3,"names":["isInstallationPending","tenancy","i18n","tenant","getCurrentTenant","getContentLocale","exports"],"sources":["isInstallationPending.ts"],"sourcesContent":["import { AcoContext } from \"~/types\";\n\ntype CheckInstallationParams = Pick<AcoContext, \"tenancy\" | \"i18n\">;\nexport const isInstallationPending = ({ tenancy, i18n }: CheckInstallationParams): boolean => {\n /**\n * In case of a fresh webiny project \"tenant\" and \"locale\" won't be there until\n * installation is completed. So, we need to skip \"ACO\" creation till then.\n */\n const tenant = tenancy.getCurrentTenant();\n if (!tenant) {\n return true;\n }\n\n return !i18n.getContentLocale();\n};\n"],"mappings":";;;;;;AAGO,MAAMA,qBAAqB,GAAGA,CAAC;EAAEC,OAAO;EAAEC;AAA8B,CAAC,KAAc;EAC1F;AACJ;AACA;AACA;EACI,MAAMC,MAAM,GAAGF,OAAO,CAACG,gBAAgB,CAAC,CAAC;EACzC,IAAI,CAACD,MAAM,EAAE;IACT,OAAO,IAAI;EACf;EAEA,OAAO,CAACD,IAAI,CAACG,gBAAgB,CAAC,CAAC;AACnC,CAAC;AAACC,OAAA,CAAAN,qBAAA,GAAAA,qBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["modelFactory","params","group","locale","tenant","modelDefinition","createCmsModel","noValidate"],"sources":["modelFactory.ts"],"sourcesContent":["import { CmsModelPlugin, CmsPrivateModelFull, createCmsModel } from \"@webiny/api-headless-cms\";\nimport { CmsGroup } from \"@webiny/api-headless-cms/types\";\n\ninterface Params {\n group: Pick<CmsGroup, \"id\" | \"name\">;\n /**\n * Locale and tenant do not need to be defined.\n * In that case model is not bound to any locale or tenant.\n * You can bind it to locale, tenant, both or none.\n */\n locale?: string;\n tenant?: string;\n modelDefinition: Omit<CmsPrivateModelFull, \"noValidate\" | \"group\">;\n}\n\nexport const modelFactory = (params: Params): CmsModelPlugin => {\n const { group, locale, tenant, modelDefinition } = params;\n\n return createCmsModel({\n group,\n locale,\n tenant,\n ...modelDefinition,\n noValidate: true\n });\n};\n"],"mappings":";;;;;;;;AAAA;AAeO,MAAMA,YAAY,GAAIC,MAAc,IAAqB;EAC5D,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAgB,CAAC,GAAGJ,MAAM;EAEzD,OAAO,IAAAK,8BAAc;IACjBJ,KAAK;IACLC,MAAM;IACNC;EAAM,GACHC,eAAe;IAClBE,UAAU,EAAE;EAAI,GAClB;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["_apiHeadlessCms","require","modelFactory","params","group","locale","tenant","modelDefinition","createCmsModel","_objectSpread2","default","noValidate","exports"],"sources":["modelFactory.ts"],"sourcesContent":["import { CmsModelPlugin, CmsPrivateModelFull, createCmsModel } from \"@webiny/api-headless-cms\";\nimport { CmsGroup } from \"@webiny/api-headless-cms/types\";\n\ninterface Params {\n group: Pick<CmsGroup, \"id\" | \"name\">;\n /**\n * Locale and tenant do not need to be defined.\n * In that case model is not bound to any locale or tenant.\n * You can bind it to locale, tenant, both or none.\n */\n locale?: string;\n tenant?: string;\n modelDefinition: Omit<CmsPrivateModelFull, \"noValidate\" | \"group\">;\n}\n\nexport const modelFactory = (params: Params): CmsModelPlugin => {\n const { group, locale, tenant, modelDefinition } = params;\n\n return createCmsModel({\n group,\n locale,\n tenant,\n ...modelDefinition,\n noValidate: true\n });\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAeO,MAAMC,YAAY,GAAIC,MAAc,IAAqB;EAC5D,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAgB,CAAC,GAAGJ,MAAM;EAEzD,OAAO,IAAAK,8BAAc,MAAAC,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA;IACjBN,KAAK;IACLC,MAAM;IACNC;EAAM,GACHC,eAAe;IAClBI,UAAU,EAAE;EAAI,EACnB,CAAC;AACN,CAAC;AAACC,OAAA,CAAAV,YAAA,GAAAA,YAAA"}
@@ -1,2 +1,3 @@
1
- import { Response, ErrorResponse } from "@webiny/handler-graphql";
1
+ import { ErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
2
2
  export declare const resolve: (fn: () => Promise<any>) => Promise<ErrorResponse | Response<any>>;
3
+ export declare const resolveList: (fn: () => Promise<any>) => Promise<ErrorResponse | ListResponse<unknown, any>>;
package/utils/resolve.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.resolve = void 0;
6
+ exports.resolveList = exports.resolve = void 0;
7
7
  var _handlerGraphql = require("@webiny/handler-graphql");
8
8
  const resolve = async fn => {
9
9
  try {
@@ -12,4 +12,13 @@ const resolve = async fn => {
12
12
  return new _handlerGraphql.ErrorResponse(e);
13
13
  }
14
14
  };
15
- exports.resolve = resolve;
15
+ exports.resolve = resolve;
16
+ const resolveList = async fn => {
17
+ try {
18
+ const [items, meta] = await fn();
19
+ return new _handlerGraphql.ListResponse(items, meta);
20
+ } catch (e) {
21
+ return new _handlerGraphql.ErrorResponse(e);
22
+ }
23
+ };
24
+ exports.resolveList = resolveList;
@@ -1 +1 @@
1
- {"version":3,"names":["resolve","fn","Response","e","ErrorResponse"],"sources":["resolve.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport const resolve = async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA;AAEO,MAAMA,OAAO,GAAG,MAAOC,EAAsB,IAAK;EACrD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,EAAE,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAAC"}
1
+ {"version":3,"names":["_handlerGraphql","require","resolve","fn","Response","e","ErrorResponse","exports","resolveList","items","meta","ListResponse"],"sources":["resolve.ts"],"sourcesContent":["import { ErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\n\nexport const resolve = async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\nexport const resolveList = async (fn: () => Promise<any>) => {\n try {\n const [items, meta] = await fn();\n return new ListResponse(items, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,OAAO,GAAG,MAAOC,EAAsB,IAAK;EACrD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACE,OAAA,CAAAL,OAAA,GAAAA,OAAA;AACK,MAAMM,WAAW,GAAG,MAAOL,EAAsB,IAAK;EACzD,IAAI;IACA,MAAM,CAACM,KAAK,EAAEC,IAAI,CAAC,GAAG,MAAMP,EAAE,CAAC,CAAC;IAChC,OAAO,IAAIQ,4BAAY,CAACF,KAAK,EAAEC,IAAI,CAAC;EACxC,CAAC,CAAC,OAAOL,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACE,OAAA,CAAAC,WAAA,GAAAA,WAAA"}
@@ -1,2 +0,0 @@
1
- import { AdvancedContentOrganisation, CreateAcoParams } from "./types";
2
- export declare const createAcoCrud: (params: CreateAcoParams) => AdvancedContentOrganisation;
package/createAcoCrud.js DELETED
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createAcoCrud = void 0;
7
- var _folder = require("./folder/folder.crud");
8
- var _record = require("./record/record.crud");
9
- const createAcoCrud = params => {
10
- const folderMethods = (0, _folder.createFolderCrudMethods)(params);
11
- const searchRecordMethods = (0, _record.createSearchRecordCrudMethods)(params);
12
- return {
13
- folder: folderMethods,
14
- search: searchRecordMethods
15
- };
16
- };
17
- exports.createAcoCrud = createAcoCrud;
@@ -1 +0,0 @@
1
- {"version":3,"names":["createAcoCrud","params","folderMethods","createFolderCrudMethods","searchRecordMethods","createSearchRecordCrudMethods","folder","search"],"sources":["createAcoCrud.ts"],"sourcesContent":["import { createFolderCrudMethods } from \"~/folder/folder.crud\";\nimport { createSearchRecordCrudMethods } from \"~/record/record.crud\";\n\nimport { AdvancedContentOrganisation, CreateAcoParams } from \"~/types\";\n\nexport const createAcoCrud = (params: CreateAcoParams): AdvancedContentOrganisation => {\n const folderMethods = createFolderCrudMethods(params);\n const searchRecordMethods = createSearchRecordCrudMethods(params);\n\n return {\n folder: folderMethods,\n search: searchRecordMethods\n };\n};\n"],"mappings":";;;;;;AAAA;AACA;AAIO,MAAMA,aAAa,GAAIC,MAAuB,IAAkC;EACnF,MAAMC,aAAa,GAAG,IAAAC,+BAAuB,EAACF,MAAM,CAAC;EACrD,MAAMG,mBAAmB,GAAG,IAAAC,qCAA6B,EAACJ,MAAM,CAAC;EAEjE,OAAO;IACHK,MAAM,EAAEJ,aAAa;IACrBK,MAAM,EAAEH;EACZ,CAAC;AACL,CAAC;AAAC"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createAcoFields = void 0;
7
- // Creating an internal JSON field, we are using it inside the `record` type
8
- const jsonField = {
9
- name: "cms-model-field-to-graphql-json",
10
- type: "cms-model-field-to-graphql",
11
- fieldType: "wby-aco-json",
12
- isSortable: true,
13
- isSearchable: true,
14
- read: {
15
- createTypeField({
16
- field
17
- }) {
18
- return `${field.fieldId}: JSON`;
19
- },
20
- createGetFilters({
21
- field
22
- }) {
23
- return `${field.fieldId}: JSON`;
24
- }
25
- },
26
- manage: {
27
- createTypeField({
28
- field
29
- }) {
30
- return `${field.fieldId}: JSON`;
31
- },
32
- createInputField({
33
- field
34
- }) {
35
- return field.fieldId + ": JSON";
36
- }
37
- }
38
- };
39
- const createAcoFields = () => [jsonField];
40
- exports.createAcoFields = createAcoFields;
@@ -1 +0,0 @@
1
- {"version":3,"names":["jsonField","name","type","fieldType","isSortable","isSearchable","read","createTypeField","field","fieldId","createGetFilters","manage","createInputField","createAcoFields"],"sources":["createAcoFields.ts"],"sourcesContent":["import { CmsModelFieldToGraphQLPlugin } from \"@webiny/api-headless-cms/types\";\n\n// Creating an internal JSON field, we are using it inside the `record` type\nconst jsonField: CmsModelFieldToGraphQLPlugin = {\n name: \"cms-model-field-to-graphql-json\",\n type: \"cms-model-field-to-graphql\",\n fieldType: \"wby-aco-json\",\n isSortable: true,\n isSearchable: true,\n read: {\n createTypeField({ field }) {\n return `${field.fieldId}: JSON`;\n },\n createGetFilters({ field }) {\n return `${field.fieldId}: JSON`;\n }\n },\n manage: {\n createTypeField({ field }) {\n return `${field.fieldId}: JSON`;\n },\n createInputField({ field }) {\n return field.fieldId + \": JSON\";\n }\n }\n};\n\nexport const createAcoFields = (): CmsModelFieldToGraphQLPlugin[] => [jsonField];\n"],"mappings":";;;;;;AAEA;AACA,MAAMA,SAAuC,GAAG;EAC5CC,IAAI,EAAE,iCAAiC;EACvCC,IAAI,EAAE,4BAA4B;EAClCC,SAAS,EAAE,cAAc;EACzBC,UAAU,EAAE,IAAI;EAChBC,YAAY,EAAE,IAAI;EAClBC,IAAI,EAAE;IACFC,eAAe,CAAC;MAAEC;IAAM,CAAC,EAAE;MACvB,OAAQ,GAAEA,KAAK,CAACC,OAAQ,QAAO;IACnC,CAAC;IACDC,gBAAgB,CAAC;MAAEF;IAAM,CAAC,EAAE;MACxB,OAAQ,GAAEA,KAAK,CAACC,OAAQ,QAAO;IACnC;EACJ,CAAC;EACDE,MAAM,EAAE;IACJJ,eAAe,CAAC;MAAEC;IAAM,CAAC,EAAE;MACvB,OAAQ,GAAEA,KAAK,CAACC,OAAQ,QAAO;IACnC,CAAC;IACDG,gBAAgB,CAAC;MAAEJ;IAAM,CAAC,EAAE;MACxB,OAAOA,KAAK,CAACC,OAAO,GAAG,QAAQ;IACnC;EACJ;AACJ,CAAC;AAEM,MAAMI,eAAe,GAAG,MAAsC,CAACb,SAAS,CAAC;AAAC"}