@webiny/api-aco 0.0.0-unstable.d16f688daf → 0.0.0-unstable.d65ec29d44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/context/folders.js +22 -22
- package/context/folders.js.map +1 -1
- package/context/links.js +18 -14
- package/context/links.js.map +1 -1
- package/createAcoContext.d.ts +3 -0
- package/createAcoContext.js +63 -0
- package/createAcoContext.js.map +1 -0
- package/createAcoCrud.d.ts +2 -0
- package/createAcoCrud.js +17 -0
- package/createAcoCrud.js.map +1 -0
- package/createAcoFields.d.ts +2 -0
- package/createAcoFields.js +40 -0
- package/createAcoFields.js.map +1 -0
- package/createAcoGraphQL.d.ts +3 -0
- package/createAcoGraphQL.js +91 -0
- package/createAcoGraphQL.js.map +1 -0
- package/createAcoHooks.d.ts +2 -0
- package/createAcoHooks.js +11 -0
- package/createAcoHooks.js.map +1 -0
- package/createAcoModels.d.ts +2 -0
- package/createAcoModels.js +67 -0
- package/createAcoModels.js.map +1 -0
- package/createAcoStorageOperations.d.ts +10 -0
- package/createAcoStorageOperations.js +19 -0
- package/createAcoStorageOperations.js.map +1 -0
- package/folder/folder.crud.d.ts +3 -0
- package/folder/folder.crud.js +92 -0
- package/folder/folder.crud.js.map +1 -0
- package/folder/folder.gql.d.ts +3 -0
- package/folder/folder.gql.js +103 -0
- package/folder/folder.gql.js.map +1 -0
- package/folder/folder.model.d.ts +4 -0
- package/folder/folder.model.js +79 -0
- package/folder/folder.model.js.map +1 -0
- package/folder/folder.so.d.ts +8 -0
- package/folder/folder.so.js +156 -0
- package/folder/folder.so.js.map +1 -0
- package/folder/folder.types.d.ts +83 -0
- package/folder/folder.types.js +5 -0
- package/folder/folder.types.js.map +1 -0
- package/folder/onFolderBeforeDelete.hook.d.ts +2 -0
- package/folder/onFolderBeforeDelete.hook.js +53 -0
- package/folder/onFolderBeforeDelete.hook.js.map +1 -0
- package/index.d.ts +1 -9
- package/index.js +7 -64
- package/index.js.map +1 -1
- package/package.json +22 -20
- package/record/record.crud.d.ts +3 -0
- package/record/record.crud.js +92 -0
- package/record/record.crud.js.map +1 -0
- package/record/record.gql.d.ts +3 -0
- package/record/record.gql.js +118 -0
- package/record/record.gql.js.map +1 -0
- package/record/record.model.d.ts +4 -0
- package/record/record.model.js +75 -0
- package/record/record.model.js.map +1 -0
- package/record/record.so.d.ts +8 -0
- package/record/record.so.js +100 -0
- package/record/record.so.js.map +1 -0
- package/record/record.types.d.ts +92 -0
- package/record/record.types.js +5 -0
- package/record/record.types.js.map +1 -0
- package/types.d.ts +20 -202
- package/types.js.map +1 -1
- package/utils/createModelField.d.ts +6 -0
- package/utils/createModelField.js +39 -0
- package/utils/createModelField.js.map +1 -0
- package/utils/fieldResolver.d.ts +16 -0
- package/utils/fieldResolver.js +44 -0
- package/utils/fieldResolver.js.map +1 -0
- package/utils/getFieldValues.d.ts +2 -0
- package/utils/getFieldValues.js +12 -0
- package/utils/getFieldValues.js.map +1 -0
- package/utils/isInstallationPending.d.ts +4 -0
- package/utils/isInstallationPending.js +21 -0
- package/utils/isInstallationPending.js.map +1 -0
- package/utils/modelFactory.d.ts +15 -0
- package/utils/modelFactory.js +23 -0
- package/utils/modelFactory.js.map +1 -0
- package/utils/resolve.d.ts +2 -0
- package/utils/resolve.js +15 -0
- package/utils/resolve.js.map +1 -0
package/README.md
CHANGED
|
@@ -16,3 +16,18 @@ Or if you prefer yarn:
|
|
|
16
16
|
```
|
|
17
17
|
yarn add @webiny/api-aco
|
|
18
18
|
```
|
|
19
|
+
## Testing
|
|
20
|
+
|
|
21
|
+
To run tests api-apw tests with targeted storage operations loaded use:
|
|
22
|
+
|
|
23
|
+
### DynamoDB
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
yarn test packages/api-aco --keyword=cms:ddb --keyword=aco:base
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
#### Note
|
|
30
|
+
|
|
31
|
+
> All the tests in `@webiny/api-aco` package are being tested against ddb-only storage operations because
|
|
32
|
+
current jest setup doesn't allow usage of more than one storage operations at a time with the help of --keyword flag.
|
|
33
|
+
We should revisit these tests once we have the ability to load multiple storage operations in the jest setup.
|
package/context/folders.js
CHANGED
|
@@ -17,23 +17,25 @@ var _handlerGraphql = require("@webiny/handler-graphql");
|
|
|
17
17
|
|
|
18
18
|
var _pubsub = require("@webiny/pubsub");
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _joi = _interopRequireDefault(require("joi"));
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Package mdbid does not have types.
|
|
24
24
|
*/
|
|
25
25
|
// @ts-ignore
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
31
34
|
});
|
|
32
35
|
|
|
33
|
-
const updateSchema =
|
|
34
|
-
name:
|
|
35
|
-
slug:
|
|
36
|
-
parentId: _zod.default.string().optional().nullable()
|
|
36
|
+
const updateSchema = _joi.default.object({
|
|
37
|
+
name: requiredString.min(3),
|
|
38
|
+
slug: requiredString.min(3)
|
|
37
39
|
});
|
|
38
40
|
|
|
39
41
|
const createFoldersContext = async ({
|
|
@@ -113,20 +115,20 @@ const createFoldersContext = async ({
|
|
|
113
115
|
},
|
|
114
116
|
|
|
115
117
|
async createFolder(input) {
|
|
116
|
-
|
|
118
|
+
await createSchema.validate(input);
|
|
117
119
|
const tenant = getTenantId();
|
|
118
120
|
const locale = getLocaleCode();
|
|
119
121
|
const {
|
|
120
122
|
type,
|
|
121
123
|
slug,
|
|
122
124
|
parentId
|
|
123
|
-
} =
|
|
125
|
+
} = input;
|
|
124
126
|
const existing = await storageOperations.getFolder({
|
|
125
127
|
tenant,
|
|
126
128
|
locale,
|
|
127
129
|
type,
|
|
128
130
|
slug,
|
|
129
|
-
parentId
|
|
131
|
+
parentId
|
|
130
132
|
});
|
|
131
133
|
|
|
132
134
|
if (existing) {
|
|
@@ -134,11 +136,11 @@ const createFoldersContext = async ({
|
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
const identity = getIdentity();
|
|
137
|
-
const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
138
|
-
parentId: parentId || undefined,
|
|
139
|
+
const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
139
140
|
id: (0, _mdbid.default)(),
|
|
140
141
|
tenant,
|
|
141
|
-
locale
|
|
142
|
+
locale
|
|
143
|
+
}, input), {}, {
|
|
142
144
|
webinyVersion: process.env.WEBINY_VERSION,
|
|
143
145
|
createdOn: new Date().toISOString(),
|
|
144
146
|
createdBy: {
|
|
@@ -163,19 +165,19 @@ const createFoldersContext = async ({
|
|
|
163
165
|
throw _error.default.from(error, {
|
|
164
166
|
message: "Could not create folder.",
|
|
165
167
|
code: "CREATE_FOLDER_ERROR",
|
|
166
|
-
data: (0, _objectSpread2.default)({},
|
|
168
|
+
data: (0, _objectSpread2.default)({}, input)
|
|
167
169
|
});
|
|
168
170
|
}
|
|
169
171
|
},
|
|
170
172
|
|
|
171
173
|
async updateFolder(id, input) {
|
|
172
|
-
|
|
174
|
+
await updateSchema.validate(input);
|
|
173
175
|
const tenant = getTenantId();
|
|
174
176
|
const locale = getLocaleCode();
|
|
175
177
|
const {
|
|
176
178
|
slug,
|
|
177
179
|
parentId
|
|
178
|
-
} =
|
|
180
|
+
} = input;
|
|
179
181
|
const original = await storageOperations.getFolder({
|
|
180
182
|
tenant,
|
|
181
183
|
locale,
|
|
@@ -199,9 +201,7 @@ const createFoldersContext = async ({
|
|
|
199
201
|
throw new _error.default(`Folder with slug "${slug}" already exists at this level.`, "FOLDER_EXISTS");
|
|
200
202
|
}
|
|
201
203
|
|
|
202
|
-
const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)(
|
|
203
|
-
parentId: parentId || undefined
|
|
204
|
-
});
|
|
204
|
+
const folder = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input);
|
|
205
205
|
|
|
206
206
|
try {
|
|
207
207
|
await onFolderBeforeUpdate.publish({
|
package/context/folders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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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"}
|
package/context/links.js
CHANGED
|
@@ -17,19 +17,23 @@ var _handlerGraphql = require("@webiny/handler-graphql");
|
|
|
17
17
|
|
|
18
18
|
var _pubsub = require("@webiny/pubsub");
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _joi = _interopRequireDefault(require("joi"));
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Package mdbid does not have types.
|
|
24
24
|
*/
|
|
25
25
|
// @ts-ignore
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
29
33
|
});
|
|
30
34
|
|
|
31
|
-
const updateSchema =
|
|
32
|
-
folderId:
|
|
35
|
+
const updateSchema = _joi.default.object({
|
|
36
|
+
folderId: requiredString
|
|
33
37
|
});
|
|
34
38
|
|
|
35
39
|
const createLinksContext = async ({
|
|
@@ -119,14 +123,14 @@ const createLinksContext = async ({
|
|
|
119
123
|
},
|
|
120
124
|
|
|
121
125
|
async createLink(input) {
|
|
122
|
-
|
|
126
|
+
await createSchema.validate(input);
|
|
123
127
|
const tenant = getTenantId();
|
|
124
128
|
const locale = getLocaleCode();
|
|
125
129
|
const existing = await storageOperations.getLink({
|
|
126
130
|
tenant,
|
|
127
131
|
locale,
|
|
128
|
-
folderId:
|
|
129
|
-
id:
|
|
132
|
+
folderId: input.folderId,
|
|
133
|
+
id: input.id
|
|
130
134
|
});
|
|
131
135
|
|
|
132
136
|
if (existing) {
|
|
@@ -135,10 +139,10 @@ const createLinksContext = async ({
|
|
|
135
139
|
|
|
136
140
|
const identity = getIdentity();
|
|
137
141
|
const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
138
|
-
linkId: (0, _mdbid.default)()
|
|
139
|
-
}, data), {}, {
|
|
142
|
+
linkId: (0, _mdbid.default)(),
|
|
140
143
|
tenant,
|
|
141
|
-
locale
|
|
144
|
+
locale
|
|
145
|
+
}, input), {}, {
|
|
142
146
|
webinyVersion: process.env.WEBINY_VERSION,
|
|
143
147
|
createdOn: new Date().toISOString(),
|
|
144
148
|
createdBy: {
|
|
@@ -181,8 +185,8 @@ const createLinksContext = async ({
|
|
|
181
185
|
throw new _handlerGraphql.NotFoundError(`Link "${id}" was not found!`);
|
|
182
186
|
}
|
|
183
187
|
|
|
184
|
-
|
|
185
|
-
const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original),
|
|
188
|
+
await updateSchema.validate(input);
|
|
189
|
+
const link = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input);
|
|
186
190
|
|
|
187
191
|
try {
|
|
188
192
|
await onLinkBeforeUpdate.publish({
|
package/context/links.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createAcoContext = void 0;
|
|
8
|
+
var _api = require("@webiny/api");
|
|
9
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
|
+
var _createAcoCrud = require("./createAcoCrud");
|
|
11
|
+
var _createAcoHooks = require("./createAcoHooks");
|
|
12
|
+
var _createAcoStorageOperations = require("./createAcoStorageOperations");
|
|
13
|
+
var _isInstallationPending = require("./utils/isInstallationPending");
|
|
14
|
+
const setupAcoContext = context => {
|
|
15
|
+
const {
|
|
16
|
+
tenancy,
|
|
17
|
+
security,
|
|
18
|
+
i18n
|
|
19
|
+
} = context;
|
|
20
|
+
if ((0, _isInstallationPending.isInstallationPending)({
|
|
21
|
+
tenancy,
|
|
22
|
+
i18n
|
|
23
|
+
})) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const getLocale = () => {
|
|
27
|
+
const locale = i18n.getContentLocale();
|
|
28
|
+
if (!locale) {
|
|
29
|
+
throw new _error.default("Missing content locale in api-aco/plugins/context.ts", "LOCALE_ERROR");
|
|
30
|
+
}
|
|
31
|
+
return locale;
|
|
32
|
+
};
|
|
33
|
+
const getTenant = () => {
|
|
34
|
+
return tenancy.getCurrentTenant();
|
|
35
|
+
};
|
|
36
|
+
const getIdentity = () => security.getIdentity();
|
|
37
|
+
context.aco = (0, _createAcoCrud.createAcoCrud)({
|
|
38
|
+
getLocale,
|
|
39
|
+
getIdentity,
|
|
40
|
+
getTenant,
|
|
41
|
+
storageOperations: (0, _createAcoStorageOperations.createAcoStorageOperations)({
|
|
42
|
+
/**
|
|
43
|
+
* TODO: We need to figure out a way to pass "cms" from outside (e.g. apps/api/graphql)
|
|
44
|
+
*/
|
|
45
|
+
cms: context.cms,
|
|
46
|
+
/**
|
|
47
|
+
* TODO: This is required for "entryFieldFromStorageTransform" which access plugins from context.
|
|
48
|
+
*/
|
|
49
|
+
getCmsContext: () => context,
|
|
50
|
+
security
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
const createAcoContext = () => {
|
|
55
|
+
return new _api.ContextPlugin(async context => {
|
|
56
|
+
if ((0, _isInstallationPending.isInstallationPending)(context)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await setupAcoContext(context);
|
|
60
|
+
await (0, _createAcoHooks.createAcoHooks)(context);
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
exports.createAcoContext = createAcoContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["setupAcoContext","context","tenancy","security","i18n","isInstallationPending","getLocale","locale","getContentLocale","WebinyError","getTenant","getCurrentTenant","getIdentity","aco","createAcoCrud","storageOperations","createAcoStorageOperations","cms","getCmsContext","createAcoContext","ContextPlugin","createAcoHooks"],"sources":["createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport WebinyError from \"@webiny/error\";\n\nimport { createAcoCrud } from \"~/createAcoCrud\";\nimport { createAcoHooks } from \"~/createAcoHooks\";\nimport { createAcoStorageOperations } from \"~/createAcoStorageOperations\";\nimport { isInstallationPending } from \"~/utils/isInstallationPending\";\n\nimport { AcoContext } from \"~/types\";\n\nconst setupAcoContext = (context: AcoContext) => {\n const { tenancy, security, i18n } = context;\n\n if (isInstallationPending({ tenancy, i18n })) {\n return;\n }\n\n const getLocale = (): I18NLocale => {\n const locale = i18n.getContentLocale();\n if (!locale) {\n throw new WebinyError(\n \"Missing content locale in api-aco/plugins/context.ts\",\n \"LOCALE_ERROR\"\n );\n }\n\n return locale;\n };\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const getIdentity = () => security.getIdentity();\n\n context.aco = createAcoCrud({\n getLocale,\n getIdentity,\n getTenant,\n storageOperations: createAcoStorageOperations({\n /**\n * TODO: We need to figure out a way to pass \"cms\" from outside (e.g. apps/api/graphql)\n */\n cms: context.cms,\n /**\n * TODO: This is required for \"entryFieldFromStorageTransform\" which access plugins from context.\n */\n getCmsContext: () => context,\n security\n })\n });\n};\n\nexport const createAcoContext = () => {\n return new ContextPlugin<AcoContext>(async context => {\n if (isInstallationPending(context)) {\n return;\n }\n\n await setupAcoContext(context);\n await createAcoHooks(context);\n });\n};\n"],"mappings":";;;;;;;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAIA,MAAMA,eAAe,GAAIC,OAAmB,IAAK;EAC7C,MAAM;IAAEC,OAAO;IAAEC,QAAQ;IAAEC;EAAK,CAAC,GAAGH,OAAO;EAE3C,IAAI,IAAAI,4CAAqB,EAAC;IAAEH,OAAO;IAAEE;EAAK,CAAC,CAAC,EAAE;IAC1C;EACJ;EAEA,MAAME,SAAS,GAAG,MAAkB;IAChC,MAAMC,MAAM,GAAGH,IAAI,CAACI,gBAAgB,EAAE;IACtC,IAAI,CAACD,MAAM,EAAE;MACT,MAAM,IAAIE,cAAW,CACjB,sDAAsD,EACtD,cAAc,CACjB;IACL;IAEA,OAAOF,MAAM;EACjB,CAAC;EAED,MAAMG,SAAS,GAAG,MAAc;IAC5B,OAAOR,OAAO,CAACS,gBAAgB,EAAE;EACrC,CAAC;EAED,MAAMC,WAAW,GAAG,MAAMT,QAAQ,CAACS,WAAW,EAAE;EAEhDX,OAAO,CAACY,GAAG,GAAG,IAAAC,4BAAa,EAAC;IACxBR,SAAS;IACTM,WAAW;IACXF,SAAS;IACTK,iBAAiB,EAAE,IAAAC,sDAA0B,EAAC;MAC1C;AACZ;AACA;MACYC,GAAG,EAAEhB,OAAO,CAACgB,GAAG;MAChB;AACZ;AACA;MACYC,aAAa,EAAE,MAAMjB,OAAO;MAC5BE;IACJ,CAAC;EACL,CAAC,CAAC;AACN,CAAC;AAEM,MAAMgB,gBAAgB,GAAG,MAAM;EAClC,OAAO,IAAIC,kBAAa,CAAa,MAAMnB,OAAO,IAAI;IAClD,IAAI,IAAAI,4CAAqB,EAACJ,OAAO,CAAC,EAAE;MAChC;IACJ;IAEA,MAAMD,eAAe,CAACC,OAAO,CAAC;IAC9B,MAAM,IAAAoB,8BAAc,EAACpB,OAAO,CAAC;EACjC,CAAC,CAAC;AACN,CAAC;AAAC"}
|
package/createAcoCrud.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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: false,
|
|
13
|
+
isSearchable: false,
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
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: false,\n isSearchable: false,\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,KAAK;EACjBC,YAAY,EAAE,KAAK;EACnBC,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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createAcoGraphQL = void 0;
|
|
7
|
+
var _api = require("@webiny/api");
|
|
8
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
9
|
+
var _folder = require("./folder/folder.gql");
|
|
10
|
+
var _record = require("./record/record.gql");
|
|
11
|
+
const emptyResolver = () => ({});
|
|
12
|
+
const baseSchema = new _handlerGraphql.GraphQLSchemaPlugin({
|
|
13
|
+
typeDefs: /* GraphQL */`
|
|
14
|
+
type AcoQuery {
|
|
15
|
+
_empty: String
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type AcoMutation {
|
|
19
|
+
_empty: String
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type SearchQuery {
|
|
23
|
+
_empty: String
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type SearchMutation {
|
|
27
|
+
_empty: String
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type AcoMeta {
|
|
31
|
+
hasMoreItems: Boolean
|
|
32
|
+
totalCount: Int
|
|
33
|
+
cursor: String
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type AcoUser {
|
|
37
|
+
id: ID
|
|
38
|
+
displayName: String
|
|
39
|
+
type: String
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
type AcoError {
|
|
43
|
+
code: String
|
|
44
|
+
message: String
|
|
45
|
+
data: JSON
|
|
46
|
+
stack: String
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
type AcoBooleanResponse {
|
|
50
|
+
data: Boolean
|
|
51
|
+
error: AcoError
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
enum AcoListSort {
|
|
55
|
+
id_ASC
|
|
56
|
+
id_DESC
|
|
57
|
+
savedOn_ASC
|
|
58
|
+
savedOn_DESC
|
|
59
|
+
createdOn_ASC
|
|
60
|
+
createdOn_DESC
|
|
61
|
+
title_ASC
|
|
62
|
+
title_DESC
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
extend type Query {
|
|
66
|
+
aco: AcoQuery
|
|
67
|
+
search: SearchQuery
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
extend type Mutation {
|
|
71
|
+
aco: AcoMutation
|
|
72
|
+
search: SearchMutation
|
|
73
|
+
}
|
|
74
|
+
`,
|
|
75
|
+
resolvers: {
|
|
76
|
+
Query: {
|
|
77
|
+
aco: emptyResolver,
|
|
78
|
+
search: emptyResolver
|
|
79
|
+
},
|
|
80
|
+
Mutation: {
|
|
81
|
+
aco: emptyResolver,
|
|
82
|
+
search: emptyResolver
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const createAcoGraphQL = () => {
|
|
87
|
+
return new _api.ContextPlugin(context => {
|
|
88
|
+
context.plugins.register([baseSchema, _folder.folderSchema, _record.searchRecordSchema]);
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
exports.createAcoGraphQL = createAcoGraphQL;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["emptyResolver","baseSchema","GraphQLSchemaPlugin","typeDefs","resolvers","Query","aco","search","Mutation","createAcoGraphQL","ContextPlugin","context","plugins","register","folderSchema","searchRecordSchema"],"sources":["createAcoGraphQL.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\n\nimport { folderSchema } from \"~/folder/folder.gql\";\nimport { searchRecordSchema } from \"~/record/record.gql\";\n\nimport { AcoContext } from \"~/types\";\n\nconst emptyResolver = () => ({});\n\nconst baseSchema = new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n type AcoQuery {\n _empty: String\n }\n\n type AcoMutation {\n _empty: String\n }\n\n type SearchQuery {\n _empty: String\n }\n\n type SearchMutation {\n _empty: String\n }\n\n type AcoMeta {\n hasMoreItems: Boolean\n totalCount: Int\n cursor: String\n }\n\n type AcoUser {\n id: ID\n displayName: String\n type: String\n }\n\n type AcoError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AcoBooleanResponse {\n data: Boolean\n error: AcoError\n }\n\n enum AcoListSort {\n id_ASC\n id_DESC\n savedOn_ASC\n savedOn_DESC\n createdOn_ASC\n createdOn_DESC\n title_ASC\n title_DESC\n }\n\n extend type Query {\n aco: AcoQuery\n search: SearchQuery\n }\n\n extend type Mutation {\n aco: AcoMutation\n search: SearchMutation\n }\n `,\n resolvers: {\n Query: {\n aco: emptyResolver,\n search: emptyResolver\n },\n Mutation: {\n aco: emptyResolver,\n search: emptyResolver\n }\n }\n});\n\nexport const createAcoGraphQL = () => {\n return new ContextPlugin<AcoContext>(context => {\n context.plugins.register([baseSchema, folderSchema, searchRecordSchema]);\n });\n};\n"],"mappings":";;;;;;AAAA;AACA;AAEA;AACA;AAIA,MAAMA,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;AAEhC,MAAMC,UAAU,GAAG,IAAIC,mCAAmB,CAAC;EACvCC,QAAQ,EAAE,aAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;EACDC,SAAS,EAAE;IACPC,KAAK,EAAE;MACHC,GAAG,EAAEN,aAAa;MAClBO,MAAM,EAAEP;IACZ,CAAC;IACDQ,QAAQ,EAAE;MACNF,GAAG,EAAEN,aAAa;MAClBO,MAAM,EAAEP;IACZ;EACJ;AACJ,CAAC,CAAC;AAEK,MAAMS,gBAAgB,GAAG,MAAM;EAClC,OAAO,IAAIC,kBAAa,CAAaC,OAAO,IAAI;IAC5CA,OAAO,CAACC,OAAO,CAACC,QAAQ,CAAC,CAACZ,UAAU,EAAEa,oBAAY,EAAEC,0BAAkB,CAAC,CAAC;EAC5E,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createAcoHooks = void 0;
|
|
7
|
+
var _onFolderBeforeDelete = require("./folder/onFolderBeforeDelete.hook");
|
|
8
|
+
const createAcoHooks = context => {
|
|
9
|
+
(0, _onFolderBeforeDelete.onFolderBeforeDeleteHook)(context);
|
|
10
|
+
};
|
|
11
|
+
exports.createAcoHooks = createAcoHooks;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAcoHooks","context","onFolderBeforeDeleteHook"],"sources":["createAcoHooks.ts"],"sourcesContent":["import { onFolderBeforeDeleteHook } from \"~/folder/onFolderBeforeDelete.hook\";\n\nimport { AcoContext } from \"~/types\";\n\nexport const createAcoHooks = (context: AcoContext) => {\n onFolderBeforeDeleteHook(context);\n};\n"],"mappings":";;;;;;AAAA;AAIO,MAAMA,cAAc,GAAIC,OAAmB,IAAK;EACnD,IAAAC,8CAAwB,EAACD,OAAO,CAAC;AACrC,CAAC;AAAC"}
|