@webiny/api-aco 0.0.0-unstable.aad28a72ae → 0.0.0-unstable.d16f688daf

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.
@@ -17,25 +17,23 @@ var _handlerGraphql = require("@webiny/handler-graphql");
17
17
 
18
18
  var _pubsub = require("@webiny/pubsub");
19
19
 
20
- var _joi = _interopRequireDefault(require("joi"));
20
+ var _zod = _interopRequireDefault(require("zod"));
21
21
 
22
22
  /**
23
23
  * Package mdbid does not have types.
24
24
  */
25
25
  // @ts-ignore
26
- const requiredString = _joi.default.string().required();
27
-
28
- const createSchema = _joi.default.object({
29
- name: requiredString.min(3),
30
- slug: requiredString.min(3),
31
- type: requiredString,
32
- tenant: requiredString,
33
- locale: requiredString
26
+ const createSchema = _zod.default.object({
27
+ name: _zod.default.string().min(3),
28
+ slug: _zod.default.string().min(3),
29
+ type: _zod.default.string(),
30
+ parentId: _zod.default.string().optional().nullable()
34
31
  });
35
32
 
36
- const updateSchema = _joi.default.object({
37
- name: requiredString.min(3),
38
- slug: requiredString.min(3)
33
+ const updateSchema = _zod.default.object({
34
+ name: _zod.default.string().min(3).optional(),
35
+ slug: _zod.default.string().min(3).optional(),
36
+ parentId: _zod.default.string().optional().nullable()
39
37
  });
40
38
 
41
39
  const createFoldersContext = async ({
@@ -115,20 +113,20 @@ const createFoldersContext = async ({
115
113
  },
116
114
 
117
115
  async createFolder(input) {
118
- await createSchema.validate(input);
116
+ const data = await createSchema.parseAsync(input);
119
117
  const tenant = getTenantId();
120
118
  const locale = getLocaleCode();
121
119
  const {
122
120
  type,
123
121
  slug,
124
122
  parentId
125
- } = input;
123
+ } = data;
126
124
  const existing = await storageOperations.getFolder({
127
125
  tenant,
128
126
  locale,
129
127
  type,
130
128
  slug,
131
- parentId
129
+ parentId: parentId || undefined
132
130
  });
133
131
 
134
132
  if (existing) {
@@ -136,11 +134,11 @@ const createFoldersContext = async ({
136
134
  }
137
135
 
138
136
  const identity = getIdentity();
139
- const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({
137
+ const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
138
+ parentId: parentId || undefined,
140
139
  id: (0, _mdbid.default)(),
141
140
  tenant,
142
- locale
143
- }, input), {}, {
141
+ locale,
144
142
  webinyVersion: process.env.WEBINY_VERSION,
145
143
  createdOn: new Date().toISOString(),
146
144
  createdBy: {
@@ -165,19 +163,19 @@ const createFoldersContext = async ({
165
163
  throw _error.default.from(error, {
166
164
  message: "Could not create folder.",
167
165
  code: "CREATE_FOLDER_ERROR",
168
- data: (0, _objectSpread2.default)({}, input)
166
+ data: (0, _objectSpread2.default)({}, data)
169
167
  });
170
168
  }
171
169
  },
172
170
 
173
171
  async updateFolder(id, input) {
174
- await updateSchema.validate(input);
172
+ const data = await updateSchema.parseAsync(input);
175
173
  const tenant = getTenantId();
176
174
  const locale = getLocaleCode();
177
175
  const {
178
176
  slug,
179
177
  parentId
180
- } = input;
178
+ } = data;
181
179
  const original = await storageOperations.getFolder({
182
180
  tenant,
183
181
  locale,
@@ -201,7 +199,9 @@ const createFoldersContext = async ({
201
199
  throw new _error.default(`Folder with slug "${slug}" already exists at this level.`, "FOLDER_EXISTS");
202
200
  }
203
201
 
204
- const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input);
202
+ const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
203
+ parentId: parentId || undefined
204
+ });
205
205
 
206
206
  try {
207
207
  await onFolderBeforeUpdate.publish({
@@ -1 +1 @@
1
- {"version":3,"names":["requiredString","joi","string","required","createSchema","object","name","min","slug","type","tenant","locale","updateSchema","createFoldersContext","getTenantId","getLocaleCode","getIdentity","storageOperations","onFolderBeforeCreate","createTopic","onFolderAfterCreate","onFolderBeforeUpdate","onFolderAfterUpdate","onFolderBeforeDelete","onFolderAfterDelete","getFolder","id","folder","error","WebinyError","from","message","code","data","NotFoundError","listFolders","where","sort","createFolder","input","validate","parentId","existing","identity","mdbid","webinyVersion","process","env","WEBINY_VERSION","createdOn","Date","toISOString","createdBy","displayName","publish","result","updateFolder","original","undefined","deleteFolder"],"sources":["folders.ts"],"sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport joi from \"joi\";\n\nimport {\n Folder,\n FolderInput,\n FoldersConfig,\n GetFolderParams,\n IFolders,\n ListFoldersParams,\n OnFolderAfterCreateTopicParams,\n OnFolderAfterDeleteTopicParams,\n OnFolderAfterUpdateTopicParams,\n OnFolderBeforeCreateTopicParams,\n OnFolderBeforeDeleteTopicParams,\n OnFolderBeforeUpdateTopicParams\n} from \"~/types\";\n\nconst requiredString = joi.string().required();\n\nconst createSchema = joi.object({\n name: requiredString.min(3),\n slug: requiredString.min(3),\n type: requiredString,\n tenant: requiredString,\n locale: requiredString\n});\n\nconst updateSchema = joi.object({\n name: requiredString.min(3),\n slug: requiredString.min(3)\n});\n\nexport const createFoldersContext = async ({\n getTenantId,\n getLocaleCode,\n getIdentity,\n storageOperations\n}: FoldersConfig): Promise<IFolders> => {\n // create\n const onFolderBeforeCreate = createTopic<OnFolderBeforeCreateTopicParams>(\n \"folders.onFolderBeforeCreate\"\n );\n const onFolderAfterCreate = createTopic<OnFolderAfterCreateTopicParams>(\n \"folders.onFolderAfterCreate\"\n );\n // update\n const onFolderBeforeUpdate = createTopic<OnFolderBeforeUpdateTopicParams>(\n \"folders.onFolderBeforeUpdate\"\n );\n const onFolderAfterUpdate = createTopic<OnFolderAfterUpdateTopicParams>(\n \"folders.onFolderAfterUpdate\"\n );\n // delete\n const onFolderBeforeDelete = createTopic<OnFolderBeforeDeleteTopicParams>(\n \"folders.onFolderBeforeDelete\"\n );\n const onFolderAfterDelete = createTopic<OnFolderAfterDeleteTopicParams>(\n \"folders.onFolderAfterDelete\"\n );\n\n return {\n onFolderBeforeCreate,\n onFolderAfterCreate,\n onFolderBeforeUpdate,\n onFolderAfterUpdate,\n onFolderBeforeDelete,\n onFolderAfterDelete,\n async getFolder({ id }: GetFolderParams): Promise<Folder> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n let folder: Folder | undefined;\n\n try {\n folder = await storageOperations.getFolder({ tenant, locale, id });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not get folder.\",\n code: \"GET_FOLDER_ERROR\",\n data: { id }\n });\n }\n if (!folder) {\n throw new NotFoundError(`Unable to find folder with id: ${id}`);\n }\n return folder;\n },\n\n async listFolders({ where }: ListFoldersParams): Promise<Folder[]> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n return await storageOperations.listFolders({\n where: { tenant, locale, ...where },\n sort: [\"createdOn_ASC\"]\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not list folders.\",\n code: \"LIST_FOLDERS_ERROR\",\n data: { ...where }\n });\n }\n },\n\n async createFolder(input: FolderInput): Promise<Folder> {\n await createSchema.validate(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n const { type, slug, parentId } = input;\n\n const existing = await storageOperations.getFolder({\n tenant,\n locale,\n type,\n slug,\n parentId\n });\n\n if (existing) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_EXISTS\"\n );\n }\n\n const identity = getIdentity();\n\n const folder: Folder = {\n id: mdbid(),\n tenant,\n locale,\n ...input,\n webinyVersion: process.env.WEBINY_VERSION as string,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n try {\n await onFolderBeforeCreate.publish({\n folder\n });\n const result = await storageOperations.createFolder({ folder });\n await onFolderAfterCreate.publish({\n folder: result\n });\n return result;\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not create folder.\",\n code: \"CREATE_FOLDER_ERROR\",\n data: { ...input }\n });\n }\n },\n\n async updateFolder(id: string, input: Record<string, any>): Promise<Folder> {\n await updateSchema.validate(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n const { slug, parentId } = input;\n\n const original = await storageOperations.getFolder({ tenant, locale, id });\n\n if (!original) {\n throw new NotFoundError(`Folder \"${id}\" was not found!`);\n }\n\n const existing = await storageOperations.getFolder({\n tenant,\n locale,\n type: original.type,\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n });\n\n // Check if another folder exists already inside the target\n if (existing && existing?.id !== id) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_EXISTS\"\n );\n }\n\n const folder: Folder = {\n ...original,\n ...input\n };\n try {\n await onFolderBeforeUpdate.publish({\n folder,\n original\n });\n const result = await storageOperations.updateFolder({ original, folder });\n await onFolderAfterUpdate.publish({\n folder: result,\n original\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not update folder.\",\n error.code || \"UPDATE_FOLDER_ERROR\",\n {\n folder\n }\n );\n }\n },\n\n async deleteFolder(id: string): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const folder = await storageOperations.getFolder({ tenant, locale, id });\n\n if (!folder) {\n throw new NotFoundError(`Folder \"${id}\" was not found!`);\n }\n\n try {\n await onFolderBeforeDelete.publish({\n folder\n });\n const result = storageOperations.deleteFolder({ folder });\n await onFolderAfterDelete.publish({\n folder\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not delete folder.\",\n error.code || \"DELETE_FOLDER_ERROR\",\n {\n folder\n }\n );\n }\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createSchema","zod","object","name","string","min","slug","type","parentId","optional","nullable","updateSchema","createFoldersContext","getTenantId","getLocaleCode","getIdentity","storageOperations","onFolderBeforeCreate","createTopic","onFolderAfterCreate","onFolderBeforeUpdate","onFolderAfterUpdate","onFolderBeforeDelete","onFolderAfterDelete","getFolder","id","tenant","locale","folder","error","WebinyError","from","message","code","data","NotFoundError","listFolders","where","sort","createFolder","input","parseAsync","existing","undefined","identity","mdbid","webinyVersion","process","env","WEBINY_VERSION","createdOn","Date","toISOString","createdBy","displayName","publish","result","updateFolder","original","deleteFolder"],"sources":["folders.ts"],"sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport zod from \"zod\";\n\nimport {\n Folder,\n FolderInput,\n FoldersConfig,\n FolderUpdateInput,\n GetFolderParams,\n IFolders,\n ListFoldersParams,\n OnFolderAfterCreateTopicParams,\n OnFolderAfterDeleteTopicParams,\n OnFolderAfterUpdateTopicParams,\n OnFolderBeforeCreateTopicParams,\n OnFolderBeforeDeleteTopicParams,\n OnFolderBeforeUpdateTopicParams\n} from \"~/types\";\n\nconst createSchema = zod.object({\n name: zod.string().min(3),\n slug: zod.string().min(3),\n type: zod.string(),\n parentId: zod.string().optional().nullable()\n});\n\nconst updateSchema = zod.object({\n name: zod.string().min(3).optional(),\n slug: zod.string().min(3).optional(),\n parentId: zod.string().optional().nullable()\n});\n\nexport const createFoldersContext = async ({\n getTenantId,\n getLocaleCode,\n getIdentity,\n storageOperations\n}: FoldersConfig): Promise<IFolders> => {\n // create\n const onFolderBeforeCreate = createTopic<OnFolderBeforeCreateTopicParams>(\n \"folders.onFolderBeforeCreate\"\n );\n const onFolderAfterCreate = createTopic<OnFolderAfterCreateTopicParams>(\n \"folders.onFolderAfterCreate\"\n );\n // update\n const onFolderBeforeUpdate = createTopic<OnFolderBeforeUpdateTopicParams>(\n \"folders.onFolderBeforeUpdate\"\n );\n const onFolderAfterUpdate = createTopic<OnFolderAfterUpdateTopicParams>(\n \"folders.onFolderAfterUpdate\"\n );\n // delete\n const onFolderBeforeDelete = createTopic<OnFolderBeforeDeleteTopicParams>(\n \"folders.onFolderBeforeDelete\"\n );\n const onFolderAfterDelete = createTopic<OnFolderAfterDeleteTopicParams>(\n \"folders.onFolderAfterDelete\"\n );\n\n return {\n onFolderBeforeCreate,\n onFolderAfterCreate,\n onFolderBeforeUpdate,\n onFolderAfterUpdate,\n onFolderBeforeDelete,\n onFolderAfterDelete,\n async getFolder({ id }: GetFolderParams): Promise<Folder> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n let folder: Folder | undefined;\n\n try {\n folder = await storageOperations.getFolder({ tenant, locale, id });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not get folder.\",\n code: \"GET_FOLDER_ERROR\",\n data: { id }\n });\n }\n if (!folder) {\n throw new NotFoundError(`Unable to find folder with id: ${id}`);\n }\n return folder;\n },\n\n async listFolders({ where }: ListFoldersParams): Promise<Folder[]> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n return await storageOperations.listFolders({\n where: { tenant, locale, ...where },\n sort: [\"createdOn_ASC\"]\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not list folders.\",\n code: \"LIST_FOLDERS_ERROR\",\n data: { ...where }\n });\n }\n },\n\n async createFolder(input: FolderInput): Promise<Folder> {\n const data = await createSchema.parseAsync(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n const { type, slug, parentId } = data;\n\n const existing = await storageOperations.getFolder({\n tenant,\n locale,\n type,\n slug,\n parentId: parentId || undefined\n });\n\n if (existing) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_EXISTS\"\n );\n }\n\n const identity = getIdentity();\n\n const folder: Folder = {\n ...data,\n parentId: parentId || undefined,\n id: mdbid(),\n tenant,\n locale,\n webinyVersion: process.env.WEBINY_VERSION as string,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n try {\n await onFolderBeforeCreate.publish({\n folder\n });\n const result = await storageOperations.createFolder({ folder });\n await onFolderAfterCreate.publish({\n folder: result\n });\n return result;\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not create folder.\",\n code: \"CREATE_FOLDER_ERROR\",\n data: {\n ...data\n }\n });\n }\n },\n\n async updateFolder(id: string, input: FolderUpdateInput): Promise<Folder> {\n const data = await updateSchema.parseAsync(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n const { slug, parentId } = data;\n\n const original = await storageOperations.getFolder({ tenant, locale, id });\n\n if (!original) {\n throw new NotFoundError(`Folder \"${id}\" was not found!`);\n }\n\n const existing = await storageOperations.getFolder({\n tenant,\n locale,\n type: original.type,\n slug: slug || original.slug,\n parentId: parentId !== undefined ? parentId : original.parentId // parentId can be `null`\n });\n\n // Check if another folder exists already inside the target\n if (existing && existing?.id !== id) {\n throw new WebinyError(\n `Folder with slug \"${slug}\" already exists at this level.`,\n \"FOLDER_EXISTS\"\n );\n }\n\n const folder: Folder = {\n ...original,\n ...data,\n parentId: parentId || undefined\n };\n try {\n await onFolderBeforeUpdate.publish({\n folder,\n original\n });\n const result = await storageOperations.updateFolder({ original, folder });\n await onFolderAfterUpdate.publish({\n folder: result,\n original\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not update folder.\",\n error.code || \"UPDATE_FOLDER_ERROR\",\n {\n folder\n }\n );\n }\n },\n\n async deleteFolder(id: string): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const folder = await storageOperations.getFolder({ tenant, locale, id });\n\n if (!folder) {\n throw new NotFoundError(`Folder \"${id}\" was not found!`);\n }\n\n try {\n await onFolderBeforeDelete.publish({\n folder\n });\n const result = storageOperations.deleteFolder({ folder });\n await onFolderAfterDelete.publish({\n folder\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not delete folder.\",\n error.code || \"DELETE_FOLDER_ERROR\",\n {\n folder\n }\n );\n }\n }\n };\n};\n"],"mappings":"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"}
package/context/links.js CHANGED
@@ -17,23 +17,19 @@ var _handlerGraphql = require("@webiny/handler-graphql");
17
17
 
18
18
  var _pubsub = require("@webiny/pubsub");
19
19
 
20
- var _joi = _interopRequireDefault(require("joi"));
20
+ var _zod = _interopRequireDefault(require("zod"));
21
21
 
22
22
  /**
23
23
  * Package mdbid does not have types.
24
24
  */
25
25
  // @ts-ignore
26
- const requiredString = _joi.default.string().required();
27
-
28
- const createSchema = _joi.default.object({
29
- id: requiredString,
30
- folderId: requiredString,
31
- tenant: requiredString,
32
- locale: requiredString
26
+ const createSchema = _zod.default.object({
27
+ id: _zod.default.string(),
28
+ folderId: _zod.default.string()
33
29
  });
34
30
 
35
- const updateSchema = _joi.default.object({
36
- folderId: requiredString
31
+ const updateSchema = _zod.default.object({
32
+ folderId: _zod.default.string()
37
33
  });
38
34
 
39
35
  const createLinksContext = async ({
@@ -123,14 +119,14 @@ const createLinksContext = async ({
123
119
  },
124
120
 
125
121
  async createLink(input) {
126
- await createSchema.validate(input);
122
+ const data = await createSchema.parseAsync(input);
127
123
  const tenant = getTenantId();
128
124
  const locale = getLocaleCode();
129
125
  const existing = await storageOperations.getLink({
130
126
  tenant,
131
127
  locale,
132
- folderId: input.folderId,
133
- id: input.id
128
+ folderId: data.folderId,
129
+ id: data.id
134
130
  });
135
131
 
136
132
  if (existing) {
@@ -139,10 +135,10 @@ const createLinksContext = async ({
139
135
 
140
136
  const identity = getIdentity();
141
137
  const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({
142
- linkId: (0, _mdbid.default)(),
138
+ linkId: (0, _mdbid.default)()
139
+ }, data), {}, {
143
140
  tenant,
144
- locale
145
- }, input), {}, {
141
+ locale,
146
142
  webinyVersion: process.env.WEBINY_VERSION,
147
143
  createdOn: new Date().toISOString(),
148
144
  createdBy: {
@@ -185,8 +181,8 @@ const createLinksContext = async ({
185
181
  throw new _handlerGraphql.NotFoundError(`Link "${id}" was not found!`);
186
182
  }
187
183
 
188
- await updateSchema.validate(input);
189
- const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input);
184
+ const data = await updateSchema.parseAsync(input);
185
+ const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data);
190
186
 
191
187
  try {
192
188
  await onLinkBeforeUpdate.publish({
@@ -1 +1 @@
1
- {"version":3,"names":["requiredString","joi","string","required","createSchema","object","id","folderId","tenant","locale","updateSchema","createLinksContext","getTenantId","getLocaleCode","getIdentity","storageOperations","onLinkBeforeCreate","createTopic","onLinkAfterCreate","onLinkBeforeUpdate","onLinkAfterUpdate","onLinkBeforeDelete","onLinkAfterDelete","onLinkBeforeDeleteBatch","onLinkAfterDeleteBatch","getLink","link","error","WebinyError","from","message","code","data","NotFoundError","listLinks","where","limit","after","sort","createLink","input","validate","existing","identity","linkId","mdbid","webinyVersion","process","env","WEBINY_VERSION","createdOn","Date","toISOString","createdBy","displayName","type","publish","result","updateLink","original","deleteLink","deleteLinks","folderIds"],"sources":["links.ts"],"sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport joi from \"joi\";\n\nimport {\n FoldersConfig,\n ILinks,\n Link,\n LinkInput,\n ListLinksParams,\n ListLinksResponse,\n OnLinkAfterCreateTopicParams,\n OnLinkAfterDeleteBatchTopicParams,\n OnLinkAfterDeleteTopicParams,\n OnLinkAfterUpdateTopicParams,\n OnLinkBeforeCreateTopicParams,\n OnLinkBeforeDeleteBatchTopicParams,\n OnLinkBeforeDeleteTopicParams,\n OnLinkBeforeUpdateTopicParams\n} from \"~/types\";\n\nconst requiredString = joi.string().required();\n\nconst createSchema = joi.object({\n id: requiredString,\n folderId: requiredString,\n tenant: requiredString,\n locale: requiredString\n});\n\nconst updateSchema = joi.object({\n folderId: requiredString\n});\n\nexport const createLinksContext = async ({\n getTenantId,\n getLocaleCode,\n getIdentity,\n storageOperations\n}: FoldersConfig): Promise<ILinks> => {\n // create\n const onLinkBeforeCreate = createTopic<OnLinkBeforeCreateTopicParams>(\n \"folders.onLinkBeforeCreate\"\n );\n const onLinkAfterCreate = createTopic<OnLinkAfterCreateTopicParams>(\n \"folders.onLinkAfterCreate\"\n );\n // update\n const onLinkBeforeUpdate = createTopic<OnLinkBeforeUpdateTopicParams>(\n \"folders.onLinkBeforeUpdate\"\n );\n const onLinkAfterUpdate = createTopic<OnLinkAfterUpdateTopicParams>(\n \"folders.onLinkAfterUpdate\"\n );\n // delete\n const onLinkBeforeDelete = createTopic<OnLinkBeforeDeleteTopicParams>(\n \"folders.onLinkBeforeDelete\"\n );\n const onLinkAfterDelete = createTopic<OnLinkAfterDeleteTopicParams>(\n \"folders.onLinkAfterDelete\"\n );\n // delete batch\n const onLinkBeforeDeleteBatch = createTopic<OnLinkBeforeDeleteBatchTopicParams>(\n \"folders.onLinkBeforeDeleteBatch\"\n );\n const onLinkAfterDeleteBatch = createTopic<OnLinkAfterDeleteBatchTopicParams>(\n \"folders.onLinkAfterDeleteBatch\"\n );\n\n return {\n onLinkBeforeCreate,\n onLinkAfterCreate,\n onLinkBeforeUpdate,\n onLinkAfterUpdate,\n onLinkBeforeDelete,\n onLinkAfterDelete,\n onLinkBeforeDeleteBatch,\n onLinkAfterDeleteBatch,\n async getLink(id: string): Promise<Link> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n let link: Link | undefined;\n try {\n link = await storageOperations.getLink({ tenant, locale, id });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not get link.\",\n code: \"GET_LINK_ERROR\",\n data: { id }\n });\n }\n if (!link) {\n throw new NotFoundError(`Unable to find link with id: ${id}`);\n }\n return link;\n },\n\n async listLinks({ where, limit, after }: ListLinksParams): Promise<ListLinksResponse> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n return await storageOperations.listLinks({\n where: { tenant, locale, ...where },\n sort: [\"createdOn_ASC\"],\n limit,\n after\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not list links.\",\n code: \"LIST_LINKS_ERROR\",\n data: { ...where, limit, after }\n });\n }\n },\n\n async createLink(input: LinkInput): Promise<Link> {\n await createSchema.validate(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const existing = await storageOperations.getLink({\n tenant,\n locale,\n folderId: input.folderId,\n id: input.id\n });\n\n if (existing) {\n throw new WebinyError(`Link with id \"${input.id}\" already exists.`, \"LINK_EXISTS\");\n }\n\n const identity = getIdentity();\n\n const link: Link = {\n linkId: mdbid(),\n tenant,\n locale,\n ...input,\n webinyVersion: process.env.WEBINY_VERSION as string,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n try {\n await onLinkBeforeCreate.publish({\n link\n });\n const result = await storageOperations.createLink({ link });\n await onLinkAfterCreate.publish({\n link: result\n });\n return result;\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not create link.\",\n code: \"CREATE_LINK_ERROR\",\n data: { ...input }\n });\n }\n },\n\n async updateLink(id: string, input: Record<string, any>): Promise<Link> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const original = await storageOperations.getLink({ tenant, locale, id });\n\n if (!original) {\n throw new NotFoundError(`Link \"${id}\" was not found!`);\n }\n\n await updateSchema.validate(input);\n\n const link: Link = {\n ...original,\n ...input\n };\n\n try {\n await onLinkBeforeUpdate.publish({\n link,\n original\n });\n const result = await storageOperations.updateLink({ original, link });\n await onLinkAfterUpdate.publish({\n link: result,\n original\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not update link.\",\n error.code || \"UPDATE_LINK_ERROR\",\n {\n link\n }\n );\n }\n },\n\n async deleteLink(id: string): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const link = await storageOperations.getLink({ tenant, locale, id });\n\n if (!link) {\n throw new NotFoundError(`Link \"${id}\" was not found!`);\n }\n\n try {\n await onLinkBeforeDelete.publish({\n link\n });\n const result = await storageOperations.deleteLink({ link });\n await onLinkAfterDelete.publish({\n link\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not delete link.\",\n error.code || \"DELETE_LINK_ERROR\",\n {\n link\n }\n );\n }\n },\n\n async deleteLinks(folderIds: string[]): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n await onLinkBeforeDeleteBatch.publish({\n folderIds\n });\n const result = await storageOperations.deleteLinks({ tenant, locale, folderIds });\n await onLinkAfterDeleteBatch.publish({\n folderIds\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not batch delete links.\",\n error.code || \"DELETE_LINKS_ERROR\",\n {\n folderIds\n }\n );\n }\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createSchema","zod","object","id","string","folderId","updateSchema","createLinksContext","getTenantId","getLocaleCode","getIdentity","storageOperations","onLinkBeforeCreate","createTopic","onLinkAfterCreate","onLinkBeforeUpdate","onLinkAfterUpdate","onLinkBeforeDelete","onLinkAfterDelete","onLinkBeforeDeleteBatch","onLinkAfterDeleteBatch","getLink","tenant","locale","link","error","WebinyError","from","message","code","data","NotFoundError","listLinks","where","limit","after","sort","createLink","input","parseAsync","existing","identity","linkId","mdbid","webinyVersion","process","env","WEBINY_VERSION","createdOn","Date","toISOString","createdBy","displayName","type","publish","result","updateLink","original","deleteLink","deleteLinks","folderIds"],"sources":["links.ts"],"sourcesContent":["/**\n * Package mdbid does not have types.\n */\n// @ts-ignore\nimport mdbid from \"mdbid\";\nimport WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport zod from \"zod\";\n\nimport {\n FoldersConfig,\n ILinks,\n Link,\n LinkInput,\n ListLinksParams,\n ListLinksResponse,\n OnLinkAfterCreateTopicParams,\n OnLinkAfterDeleteBatchTopicParams,\n OnLinkAfterDeleteTopicParams,\n OnLinkAfterUpdateTopicParams,\n OnLinkBeforeCreateTopicParams,\n OnLinkBeforeDeleteBatchTopicParams,\n OnLinkBeforeDeleteTopicParams,\n OnLinkBeforeUpdateTopicParams\n} from \"~/types\";\n\nconst createSchema = zod.object({\n id: zod.string(),\n folderId: zod.string()\n});\n\nconst updateSchema = zod.object({\n folderId: zod.string()\n});\n\nexport const createLinksContext = async ({\n getTenantId,\n getLocaleCode,\n getIdentity,\n storageOperations\n}: FoldersConfig): Promise<ILinks> => {\n // create\n const onLinkBeforeCreate = createTopic<OnLinkBeforeCreateTopicParams>(\n \"folders.onLinkBeforeCreate\"\n );\n const onLinkAfterCreate = createTopic<OnLinkAfterCreateTopicParams>(\n \"folders.onLinkAfterCreate\"\n );\n // update\n const onLinkBeforeUpdate = createTopic<OnLinkBeforeUpdateTopicParams>(\n \"folders.onLinkBeforeUpdate\"\n );\n const onLinkAfterUpdate = createTopic<OnLinkAfterUpdateTopicParams>(\n \"folders.onLinkAfterUpdate\"\n );\n // delete\n const onLinkBeforeDelete = createTopic<OnLinkBeforeDeleteTopicParams>(\n \"folders.onLinkBeforeDelete\"\n );\n const onLinkAfterDelete = createTopic<OnLinkAfterDeleteTopicParams>(\n \"folders.onLinkAfterDelete\"\n );\n // delete batch\n const onLinkBeforeDeleteBatch = createTopic<OnLinkBeforeDeleteBatchTopicParams>(\n \"folders.onLinkBeforeDeleteBatch\"\n );\n const onLinkAfterDeleteBatch = createTopic<OnLinkAfterDeleteBatchTopicParams>(\n \"folders.onLinkAfterDeleteBatch\"\n );\n\n return {\n onLinkBeforeCreate,\n onLinkAfterCreate,\n onLinkBeforeUpdate,\n onLinkAfterUpdate,\n onLinkBeforeDelete,\n onLinkAfterDelete,\n onLinkBeforeDeleteBatch,\n onLinkAfterDeleteBatch,\n async getLink(id: string): Promise<Link> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n let link: Link | undefined;\n try {\n link = await storageOperations.getLink({ tenant, locale, id });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not get link.\",\n code: \"GET_LINK_ERROR\",\n data: { id }\n });\n }\n if (!link) {\n throw new NotFoundError(`Unable to find link with id: ${id}`);\n }\n return link;\n },\n\n async listLinks({ where, limit, after }: ListLinksParams): Promise<ListLinksResponse> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n return await storageOperations.listLinks({\n where: { tenant, locale, ...where },\n sort: [\"createdOn_ASC\"],\n limit,\n after\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not list links.\",\n code: \"LIST_LINKS_ERROR\",\n data: { ...where, limit, after }\n });\n }\n },\n\n async createLink(input: LinkInput): Promise<Link> {\n const data = await createSchema.parseAsync(input);\n\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const existing = await storageOperations.getLink({\n tenant,\n locale,\n folderId: data.folderId,\n id: data.id\n });\n\n if (existing) {\n throw new WebinyError(`Link with id \"${input.id}\" already exists.`, \"LINK_EXISTS\");\n }\n\n const identity = getIdentity();\n\n const link: Link = {\n linkId: mdbid(),\n ...data,\n tenant,\n locale,\n webinyVersion: process.env.WEBINY_VERSION as string,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n try {\n await onLinkBeforeCreate.publish({\n link\n });\n const result = await storageOperations.createLink({ link });\n await onLinkAfterCreate.publish({\n link: result\n });\n return result;\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Could not create link.\",\n code: \"CREATE_LINK_ERROR\",\n data: { ...input }\n });\n }\n },\n\n async updateLink(id: string, input: Record<string, any>): Promise<Link> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const original = await storageOperations.getLink({ tenant, locale, id });\n\n if (!original) {\n throw new NotFoundError(`Link \"${id}\" was not found!`);\n }\n\n const data = await updateSchema.parseAsync(input);\n\n const link: Link = {\n ...original,\n ...data\n };\n\n try {\n await onLinkBeforeUpdate.publish({\n link,\n original\n });\n const result = await storageOperations.updateLink({ original, link });\n await onLinkAfterUpdate.publish({\n link: result,\n original\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not update link.\",\n error.code || \"UPDATE_LINK_ERROR\",\n {\n link\n }\n );\n }\n },\n\n async deleteLink(id: string): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n const link = await storageOperations.getLink({ tenant, locale, id });\n\n if (!link) {\n throw new NotFoundError(`Link \"${id}\" was not found!`);\n }\n\n try {\n await onLinkBeforeDelete.publish({\n link\n });\n const result = await storageOperations.deleteLink({ link });\n await onLinkAfterDelete.publish({\n link\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not delete link.\",\n error.code || \"DELETE_LINK_ERROR\",\n {\n link\n }\n );\n }\n },\n\n async deleteLinks(folderIds: string[]): Promise<void> {\n const tenant = getTenantId();\n const locale = getLocaleCode();\n\n try {\n await onLinkBeforeDeleteBatch.publish({\n folderIds\n });\n const result = await storageOperations.deleteLinks({ tenant, locale, folderIds });\n await onLinkAfterDeleteBatch.publish({\n folderIds\n });\n return result;\n } catch (error) {\n throw new WebinyError(\n error.message || \"Could not batch delete links.\",\n error.code || \"DELETE_LINKS_ERROR\",\n {\n folderIds\n }\n );\n }\n }\n };\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-aco",
3
- "version": "0.0.0-unstable.aad28a72ae",
3
+ "version": "0.0.0-unstable.d16f688daf",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "aco:base"
@@ -27,29 +27,29 @@
27
27
  "@babel/preset-env": "^7.19.4",
28
28
  "@babel/preset-typescript": "^7.18.6",
29
29
  "@babel/runtime": "^7.19.0",
30
- "@webiny/api-i18n-ddb": "^0.0.0-unstable.aad28a72ae",
31
- "@webiny/api-security-so-ddb": "^0.0.0-unstable.aad28a72ae",
32
- "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.aad28a72ae",
33
- "@webiny/api-wcp": "^0.0.0-unstable.aad28a72ae",
34
- "@webiny/cli": "^0.0.0-unstable.aad28a72ae",
35
- "@webiny/handler-aws": "^0.0.0-unstable.aad28a72ae",
36
- "@webiny/plugins": "^0.0.0-unstable.aad28a72ae",
37
- "@webiny/project-utils": "^0.0.0-unstable.aad28a72ae",
30
+ "@webiny/api-i18n-ddb": "^0.0.0-unstable.d16f688daf",
31
+ "@webiny/api-security-so-ddb": "^0.0.0-unstable.d16f688daf",
32
+ "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.d16f688daf",
33
+ "@webiny/api-wcp": "^0.0.0-unstable.d16f688daf",
34
+ "@webiny/cli": "^0.0.0-unstable.d16f688daf",
35
+ "@webiny/handler-aws": "^0.0.0-unstable.d16f688daf",
36
+ "@webiny/plugins": "^0.0.0-unstable.d16f688daf",
37
+ "@webiny/project-utils": "^0.0.0-unstable.d16f688daf",
38
38
  "rimraf": "^3.0.2",
39
39
  "ttypescript": "^1.5.13",
40
40
  "typescript": "^4.7.4"
41
41
  },
42
42
  "dependencies": {
43
- "@webiny/api": "0.0.0-unstable.aad28a72ae",
44
- "@webiny/api-i18n": "0.0.0-unstable.aad28a72ae",
45
- "@webiny/api-security": "0.0.0-unstable.aad28a72ae",
46
- "@webiny/api-tenancy": "0.0.0-unstable.aad28a72ae",
47
- "@webiny/error": "0.0.0-unstable.aad28a72ae",
48
- "@webiny/handler": "0.0.0-unstable.aad28a72ae",
49
- "@webiny/handler-graphql": "0.0.0-unstable.aad28a72ae",
50
- "@webiny/pubsub": "0.0.0-unstable.aad28a72ae",
51
- "joi": "17.6.2",
52
- "mdbid": "1.0.0"
43
+ "@webiny/api": "0.0.0-unstable.d16f688daf",
44
+ "@webiny/api-i18n": "0.0.0-unstable.d16f688daf",
45
+ "@webiny/api-security": "0.0.0-unstable.d16f688daf",
46
+ "@webiny/api-tenancy": "0.0.0-unstable.d16f688daf",
47
+ "@webiny/error": "0.0.0-unstable.d16f688daf",
48
+ "@webiny/handler": "0.0.0-unstable.d16f688daf",
49
+ "@webiny/handler-graphql": "0.0.0-unstable.d16f688daf",
50
+ "@webiny/pubsub": "0.0.0-unstable.d16f688daf",
51
+ "mdbid": "1.0.0",
52
+ "zod": "3.20.2"
53
53
  },
54
- "gitHead": "aad28a72ae72f19b80a3196d2b4439399acc67ad"
54
+ "gitHead": "d16f688daf2f36622d725e53a4dd1c0486017015"
55
55
  }
package/types.d.ts CHANGED
@@ -18,7 +18,7 @@ export interface Folder {
18
18
  name: string;
19
19
  slug: string;
20
20
  type: string;
21
- parentId?: string;
21
+ parentId?: string | null;
22
22
  createdOn: string;
23
23
  createdBy: CreatedBy;
24
24
  tenant: string;
@@ -26,6 +26,7 @@ export interface Folder {
26
26
  webinyVersion: string;
27
27
  }
28
28
  export declare type FolderInput = Pick<Folder, "name" | "slug" | "type" | "parentId">;
29
+ export declare type FolderUpdateInput = Pick<Folder, "name" | "slug" | "parentId">;
29
30
  export interface GetFolderParams {
30
31
  id: string;
31
32
  }
@@ -49,7 +50,7 @@ export interface StorageOperationsGetFolderParams {
49
50
  id?: string;
50
51
  slug?: string;
51
52
  type?: string;
52
- parentId?: string;
53
+ parentId?: string | null;
53
54
  tenant: string;
54
55
  locale: string;
55
56
  }
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { TenancyContext } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport interface CreatedBy {\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 interface Folder {\n id: string;\n name: string;\n slug: string;\n type: string;\n parentId?: string;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n webinyVersion: string;\n}\n\nexport type FolderInput = Pick<Folder, \"name\" | \"slug\" | \"type\" | \"parentId\">;\n\nexport interface GetFolderParams {\n id: string;\n}\n\nexport interface ListFoldersWhere {\n type: string;\n}\n\nexport interface ListFoldersParams {\n where: ListFoldersWhere;\n}\n\nexport interface CreateFolderParams {\n folder: Folder;\n}\n\nexport interface UpdateFolderParams {\n original: Folder;\n folder: Folder;\n}\n\nexport interface DeleteFolderParams {\n folder: Folder;\n}\n\nexport interface StorageOperationsGetFolderParams {\n id?: string;\n slug?: string;\n type?: string;\n parentId?: string;\n tenant: string;\n locale: string;\n}\n\nexport interface StorageOperationsListFoldersParams extends ListFoldersParams {\n where: ListFoldersParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n sort: string[];\n}\n\nexport type StorageOperationsCreateFolderParams = CreateFolderParams;\nexport type StorageOperationsUpdateFolderParams = UpdateFolderParams;\nexport type StorageOperationsDeleteFolderParams = DeleteFolderParams;\n\nexport interface OnFolderBeforeCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderBeforeUpdateTopicParams {\n folder: Folder;\n original: Folder;\n}\n\nexport interface OnFolderAfterUpdateTopicParams {\n folder: Folder;\n original: Folder;\n}\n\nexport interface OnFolderBeforeDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface Link {\n id: string;\n linkId: string;\n folderId: string;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n webinyVersion: string;\n}\n\nexport type LinkInput = Pick<Link, \"id\" | \"folderId\">;\n\nexport interface ListLinksWhere {\n folderId: string;\n}\n\nexport interface ListLinksParams {\n where: ListLinksWhere;\n limit?: number;\n after?: string | null;\n}\n\nexport type ListLinksResponse = [Link[], ListMeta];\n\nexport interface CreateLinkParams {\n link: Link;\n}\n\nexport interface UpdateLinkParams {\n original: Link;\n link: Link;\n}\n\nexport interface DeleteLinkParams {\n link: Link;\n}\n\nexport interface DeleteLinksParams {\n tenant: string;\n locale: string;\n folderIds: string[];\n}\n\nexport interface StorageOperationsGetLinkParams {\n id?: string;\n folderId?: string;\n tenant: string;\n locale: string;\n}\n\nexport interface StorageOperationsListLinksParams extends ListLinksParams {\n where: ListLinksParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n sort: string[];\n}\n\nexport type StorageOperationListLinksResponse = ListLinksResponse;\n\nexport type StorageOperationsCreateLinkParams = CreateLinkParams;\nexport type StorageOperationsUpdateLinkParams = UpdateLinkParams;\nexport type StorageOperationsDeleteLinkParams = DeleteLinkParams;\nexport type StorageOperationsDeleteLinksParams = DeleteLinksParams;\n\nexport interface OnLinkBeforeCreateTopicParams {\n link: Link;\n}\n\nexport interface OnLinkAfterCreateTopicParams {\n link: Link;\n}\n\nexport interface OnLinkBeforeUpdateTopicParams {\n link: Link;\n original: Link;\n}\n\nexport interface OnLinkAfterUpdateTopicParams {\n link: Link;\n original: Link;\n}\n\nexport interface OnLinkBeforeDeleteTopicParams {\n link: Link;\n}\n\nexport interface OnLinkAfterDeleteTopicParams {\n link: Link;\n}\n\nexport interface OnLinkBeforeDeleteBatchTopicParams {\n folderIds: string[];\n}\n\nexport interface OnLinkAfterDeleteBatchTopicParams {\n folderIds: string[];\n}\n\nexport interface ACOContext extends BaseContext, I18NContext, TenancyContext, SecurityContext {\n folders: Folders;\n}\n\nexport type Folders = IFolders & ILinks;\n\nexport interface IFolders {\n getFolder(params: GetFolderParams): Promise<Folder>;\n listFolders(params: ListFoldersParams): Promise<Folder[]>;\n createFolder(input: FolderInput): Promise<Folder>;\n updateFolder(id: string, input: Partial<Folder>): Promise<Folder>;\n deleteFolder(id: string): Promise<void>;\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 ILinks {\n getLink(id: string): Promise<Link>;\n listLinks(params: ListLinksParams): Promise<ListLinksResponse>;\n createLink(input: LinkInput): Promise<Link>;\n updateLink(id: string, input: Partial<Link>): Promise<Link>;\n deleteLink(id: string): Promise<void>;\n deleteLinks(folderIds: string[]): Promise<void>;\n onLinkBeforeCreate: Topic<OnLinkBeforeCreateTopicParams>;\n onLinkAfterCreate: Topic<OnLinkAfterCreateTopicParams>;\n onLinkBeforeUpdate: Topic<OnLinkBeforeUpdateTopicParams>;\n onLinkAfterUpdate: Topic<OnLinkAfterUpdateTopicParams>;\n onLinkBeforeDelete: Topic<OnLinkBeforeDeleteTopicParams>;\n onLinkAfterDelete: Topic<OnLinkAfterDeleteTopicParams>;\n onLinkBeforeDeleteBatch: Topic<OnLinkBeforeDeleteBatchTopicParams>;\n onLinkAfterDeleteBatch: Topic<OnLinkAfterDeleteBatchTopicParams>;\n}\n\nexport interface FoldersConfig {\n getTenantId: () => string;\n getLocaleCode: () => string;\n getIdentity: () => SecurityIdentity;\n storageOperations: StorageOperations;\n}\n\nexport type StorageOperations = FoldersStorageOperations & LinksStorageOperations;\n\nexport interface FoldersStorageOperations {\n getFolder(params: StorageOperationsGetFolderParams): Promise<Folder | undefined>;\n listFolders(params: StorageOperationsListFoldersParams): Promise<Folder[]>;\n createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;\n updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;\n deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<void>;\n}\n\nexport interface LinksStorageOperations {\n getLink(params: StorageOperationsGetLinkParams): Promise<Link | undefined>;\n listLinks(params: StorageOperationsListLinksParams): Promise<StorageOperationListLinksResponse>;\n createLink(params: StorageOperationsCreateLinkParams): Promise<Link>;\n updateLink(params: StorageOperationsUpdateLinkParams): Promise<Link>;\n deleteLink(params: StorageOperationsDeleteLinkParams): Promise<void>;\n deleteLinks(params: StorageOperationsDeleteLinksParams): Promise<void>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { TenancyContext } from \"@webiny/api-tenancy/types\";\nimport { Context as BaseContext } from \"@webiny/handler/types\";\nimport { I18NContext } from \"@webiny/api-i18n/types\";\nimport { SecurityContext, SecurityIdentity } from \"@webiny/api-security/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\nexport interface CreatedBy {\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 interface Folder {\n id: string;\n name: string;\n slug: string;\n type: string;\n parentId?: string | null;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n webinyVersion: string;\n}\n\nexport type FolderInput = Pick<Folder, \"name\" | \"slug\" | \"type\" | \"parentId\">;\nexport type FolderUpdateInput = Pick<Folder, \"name\" | \"slug\" | \"parentId\">;\n\nexport interface GetFolderParams {\n id: string;\n}\n\nexport interface ListFoldersWhere {\n type: string;\n}\n\nexport interface ListFoldersParams {\n where: ListFoldersWhere;\n}\n\nexport interface CreateFolderParams {\n folder: Folder;\n}\n\nexport interface UpdateFolderParams {\n original: Folder;\n folder: Folder;\n}\n\nexport interface DeleteFolderParams {\n folder: Folder;\n}\n\nexport interface StorageOperationsGetFolderParams {\n id?: string;\n slug?: string;\n type?: string;\n parentId?: string | null;\n tenant: string;\n locale: string;\n}\n\nexport interface StorageOperationsListFoldersParams extends ListFoldersParams {\n where: ListFoldersParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n sort: string[];\n}\n\nexport type StorageOperationsCreateFolderParams = CreateFolderParams;\nexport type StorageOperationsUpdateFolderParams = UpdateFolderParams;\nexport type StorageOperationsDeleteFolderParams = DeleteFolderParams;\n\nexport interface OnFolderBeforeCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterCreateTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderBeforeUpdateTopicParams {\n folder: Folder;\n original: Folder;\n}\n\nexport interface OnFolderAfterUpdateTopicParams {\n folder: Folder;\n original: Folder;\n}\n\nexport interface OnFolderBeforeDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface OnFolderAfterDeleteTopicParams {\n folder: Folder;\n}\n\nexport interface Link {\n id: string;\n linkId: string;\n folderId: string;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n webinyVersion: string;\n}\n\nexport type LinkInput = Pick<Link, \"id\" | \"folderId\">;\n\nexport interface ListLinksWhere {\n folderId: string;\n}\n\nexport interface ListLinksParams {\n where: ListLinksWhere;\n limit?: number;\n after?: string | null;\n}\n\nexport type ListLinksResponse = [Link[], ListMeta];\n\nexport interface CreateLinkParams {\n link: Link;\n}\n\nexport interface UpdateLinkParams {\n original: Link;\n link: Link;\n}\n\nexport interface DeleteLinkParams {\n link: Link;\n}\n\nexport interface DeleteLinksParams {\n tenant: string;\n locale: string;\n folderIds: string[];\n}\n\nexport interface StorageOperationsGetLinkParams {\n id?: string;\n folderId?: string;\n tenant: string;\n locale: string;\n}\n\nexport interface StorageOperationsListLinksParams extends ListLinksParams {\n where: ListLinksParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n sort: string[];\n}\n\nexport type StorageOperationListLinksResponse = ListLinksResponse;\n\nexport type StorageOperationsCreateLinkParams = CreateLinkParams;\nexport type StorageOperationsUpdateLinkParams = UpdateLinkParams;\nexport type StorageOperationsDeleteLinkParams = DeleteLinkParams;\nexport type StorageOperationsDeleteLinksParams = DeleteLinksParams;\n\nexport interface OnLinkBeforeCreateTopicParams {\n link: Link;\n}\n\nexport interface OnLinkAfterCreateTopicParams {\n link: Link;\n}\n\nexport interface OnLinkBeforeUpdateTopicParams {\n link: Link;\n original: Link;\n}\n\nexport interface OnLinkAfterUpdateTopicParams {\n link: Link;\n original: Link;\n}\n\nexport interface OnLinkBeforeDeleteTopicParams {\n link: Link;\n}\n\nexport interface OnLinkAfterDeleteTopicParams {\n link: Link;\n}\n\nexport interface OnLinkBeforeDeleteBatchTopicParams {\n folderIds: string[];\n}\n\nexport interface OnLinkAfterDeleteBatchTopicParams {\n folderIds: string[];\n}\n\nexport interface ACOContext extends BaseContext, I18NContext, TenancyContext, SecurityContext {\n folders: Folders;\n}\n\nexport type Folders = IFolders & ILinks;\n\nexport interface IFolders {\n getFolder(params: GetFolderParams): Promise<Folder>;\n listFolders(params: ListFoldersParams): Promise<Folder[]>;\n createFolder(input: FolderInput): Promise<Folder>;\n updateFolder(id: string, input: Partial<Folder>): Promise<Folder>;\n deleteFolder(id: string): Promise<void>;\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 ILinks {\n getLink(id: string): Promise<Link>;\n listLinks(params: ListLinksParams): Promise<ListLinksResponse>;\n createLink(input: LinkInput): Promise<Link>;\n updateLink(id: string, input: Partial<Link>): Promise<Link>;\n deleteLink(id: string): Promise<void>;\n deleteLinks(folderIds: string[]): Promise<void>;\n onLinkBeforeCreate: Topic<OnLinkBeforeCreateTopicParams>;\n onLinkAfterCreate: Topic<OnLinkAfterCreateTopicParams>;\n onLinkBeforeUpdate: Topic<OnLinkBeforeUpdateTopicParams>;\n onLinkAfterUpdate: Topic<OnLinkAfterUpdateTopicParams>;\n onLinkBeforeDelete: Topic<OnLinkBeforeDeleteTopicParams>;\n onLinkAfterDelete: Topic<OnLinkAfterDeleteTopicParams>;\n onLinkBeforeDeleteBatch: Topic<OnLinkBeforeDeleteBatchTopicParams>;\n onLinkAfterDeleteBatch: Topic<OnLinkAfterDeleteBatchTopicParams>;\n}\n\nexport interface FoldersConfig {\n getTenantId: () => string;\n getLocaleCode: () => string;\n getIdentity: () => SecurityIdentity;\n storageOperations: StorageOperations;\n}\n\nexport type StorageOperations = FoldersStorageOperations & LinksStorageOperations;\n\nexport interface FoldersStorageOperations {\n getFolder(params: StorageOperationsGetFolderParams): Promise<Folder | undefined>;\n listFolders(params: StorageOperationsListFoldersParams): Promise<Folder[]>;\n createFolder(params: StorageOperationsCreateFolderParams): Promise<Folder>;\n updateFolder(params: StorageOperationsUpdateFolderParams): Promise<Folder>;\n deleteFolder(params: StorageOperationsDeleteFolderParams): Promise<void>;\n}\n\nexport interface LinksStorageOperations {\n getLink(params: StorageOperationsGetLinkParams): Promise<Link | undefined>;\n listLinks(params: StorageOperationsListLinksParams): Promise<StorageOperationListLinksResponse>;\n createLink(params: StorageOperationsCreateLinkParams): Promise<Link>;\n updateLink(params: StorageOperationsUpdateLinkParams): Promise<Link>;\n deleteLink(params: StorageOperationsDeleteLinkParams): Promise<void>;\n deleteLinks(params: StorageOperationsDeleteLinksParams): Promise<void>;\n}\n"],"mappings":""}