@webiny/api-headless-cms 5.25.0-beta.2 → 5.25.0-beta.3

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.
@@ -155,14 +155,23 @@ const graphQLHandlerFactory = (options = {}) => {
155
155
  return next();
156
156
  }
157
157
 
158
- if (http.request.method === "OPTIONS") {
158
+ const method = (http.request.method || "").toLowerCase();
159
+ /**
160
+ * In case of OPTIONS method we just return the headers since there is no need to go further.
161
+ */
162
+
163
+ if (method.toLowerCase() === "options") {
159
164
  return http.response({
160
165
  statusCode: 204,
161
166
  headers: _objectSpread(_objectSpread({}, DEFAULT_HEADERS), OPTIONS_HEADERS)
162
167
  });
163
168
  }
169
+ /**
170
+ * We expect, and allow, only POST method to access our GraphQL
171
+ */
172
+
164
173
 
165
- if (http.request.method !== "POST") {
174
+ if (method !== "post") {
166
175
  return next();
167
176
  }
168
177
 
@@ -1 +1 @@
1
- {"version":3,"sources":["graphQLHandlerFactory.ts"],"names":["DEFAULT_HEADERS","DEFAULT_CACHE_MAX_AGE","OPTIONS_HEADERS","respond","http","result","response","body","JSON","stringify","statusCode","headers","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","getSchema","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","data","reason","graphQLHandlerFactory","options","debug","handler","name","handle","next","request","method","ex","NotAuthorizedResponse","getLocale","parse"],"mappings":"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","sourcesContent":["import { boolean } from \"boolean\";\nimport { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError, NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport buildSchemaPlugins from \"./plugins/buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { HttpObject } from \"@webiny/handler-http/types\";\nimport { HandlerPlugin } from \"@webiny/handler/types\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\n\nexport interface CreateGraphQLHandlerOptions {\n debug?: boolean;\n}\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface Args {\n context: CmsContext;\n type: string;\n locale: I18NLocale;\n}\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST\",\n \"Content-Type\": \"application/json\",\n ...getWebinyVersionHeaders()\n};\n\nconst DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": `${DEFAULT_CACHE_MAX_AGE}`,\n \"Cache-Control\": `public, max-age=${DEFAULT_CACHE_MAX_AGE}`\n};\n\nconst respond = (http: HttpObject, result: unknown) => {\n return http.response({\n body: JSON.stringify(result),\n statusCode: 200,\n headers: DEFAULT_HEADERS\n });\n};\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: Args): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n// gets an existing schema or rewrites existing one or creates a completely new one\n// depending on the schemaId created from type and locale parameters\nconst getSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context, type, locale } = args;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(args);\n if (!schemaList.has(id)) {\n const schema = await generateSchema(args);\n\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(args);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nexport const graphQLHandlerFactory = (\n options: CreateGraphQLHandlerOptions = {}\n): PluginCollection => {\n const debug = boolean(options.debug);\n\n const handler: HandlerPlugin = {\n type: \"handler\",\n name: \"handler-graphql-content-model\",\n async handle(context: CmsContext, next) {\n const { http } = context;\n\n if (!http || !http.request) {\n return next();\n }\n\n if (http.request.method === \"OPTIONS\") {\n return http.response({\n statusCode: 204,\n headers: {\n ...DEFAULT_HEADERS,\n ...OPTIONS_HEADERS\n }\n });\n }\n\n if (http.request.method !== \"POST\") {\n return next();\n }\n\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return respond(http, new NotAuthorizedResponse(ex));\n }\n\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type\n });\n\n const body: GraphQLRequestBody | GraphQLRequestBody[] = JSON.parse(http.request.body);\n\n const result = await processRequestBody(body, schema, context);\n return respond(http, result);\n }\n };\n\n return [...(debug ? debugPlugins() : []), handler];\n};\n"]}
1
+ {"version":3,"sources":["graphQLHandlerFactory.ts"],"names":["DEFAULT_HEADERS","DEFAULT_CACHE_MAX_AGE","OPTIONS_HEADERS","respond","http","result","response","body","JSON","stringify","statusCode","headers","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","generateSchema","plugins","register","typeDefs","resolvers","schemaPlugins","byType","GraphQLSchemaPlugin","pl","push","schema","getSchema","tenantId","tenancy","getCurrentTenant","id","cacheKey","has","set","key","cache","get","checkEndpointAccess","permission","security","getPermission","NotAuthorizedError","data","reason","graphQLHandlerFactory","options","debug","handler","name","handle","next","request","method","toLowerCase","ex","NotAuthorizedResponse","getLocale","parse"],"mappings":"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","sourcesContent":["import { boolean } from \"boolean\";\nimport { GraphQLSchema } from \"graphql\";\nimport { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError, NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { PluginCollection } from \"@webiny/plugins/types\";\nimport debugPlugins from \"@webiny/handler-graphql/debugPlugins\";\nimport processRequestBody from \"@webiny/handler-graphql/processRequestBody\";\nimport buildSchemaPlugins from \"./plugins/buildSchemaPlugins\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins\";\nimport { getWebinyVersionHeaders } from \"@webiny/utils\";\nimport { HttpObject } from \"@webiny/handler-http/types\";\nimport { HandlerPlugin } from \"@webiny/handler/types\";\nimport { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\n\nexport interface CreateGraphQLHandlerOptions {\n debug?: boolean;\n}\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface Args {\n context: CmsContext;\n type: string;\n locale: I18NLocale;\n}\n\nconst DEFAULT_HEADERS: Record<string, string> = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n \"Access-Control-Allow-Methods\": \"OPTIONS,POST\",\n \"Content-Type\": \"application/json\",\n ...getWebinyVersionHeaders()\n};\n\nconst DEFAULT_CACHE_MAX_AGE = 30758400; // 1 year\n\nconst OPTIONS_HEADERS: Record<string, string> = {\n \"Access-Control-Max-Age\": `${DEFAULT_CACHE_MAX_AGE}`,\n \"Cache-Control\": `public, max-age=${DEFAULT_CACHE_MAX_AGE}`\n};\n\nconst respond = (http: HttpObject, result: unknown) => {\n return http.response({\n body: JSON.stringify(result),\n statusCode: 200,\n headers: DEFAULT_HEADERS\n });\n};\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: Args): Promise<string> => {\n const { context, locale, type } = args;\n const lastModelChange = await context.cms.getModelLastChange();\n return [locale.code, type, lastModelChange.toISOString()].join(\"#\");\n};\n\nconst generateSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context } = args;\n\n context.plugins.register(await buildSchemaPlugins(context));\n /**\n * Really hard to type this to satisfy the makeExecutableSchema\n */\n // TODO @ts-refactor\n const typeDefs: any = [];\n const resolvers: any = [];\n\n // Get schema definitions from plugins\n const schemaPlugins = context.plugins.byType<GraphQLSchemaPlugin>(GraphQLSchemaPlugin.type);\n for (const pl of schemaPlugins) {\n typeDefs.push(pl.schema.typeDefs);\n resolvers.push(pl.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n\n// gets an existing schema or rewrites existing one or creates a completely new one\n// depending on the schemaId created from type and locale parameters\nconst getSchema = async (args: Args): Promise<GraphQLSchema> => {\n const { context, type, locale } = args;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(args);\n if (!schemaList.has(id)) {\n const schema = await generateSchema(args);\n\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n }\n /**\n * Safe to cast because check was done few lines up.\n */\n const cache = schemaList.get(id) as SchemaCache;\n if (cache.key === cacheKey) {\n return cache.schema;\n }\n const schema = await generateSchema(args);\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n};\n\nconst checkEndpointAccess = async (context: CmsContext): Promise<void> => {\n const permission = await context.security.getPermission(`cms.endpoint.${context.cms.type}`);\n if (!permission) {\n throw new NotAuthorizedError({\n data: {\n reason: `Not allowed to access \"${context.cms.type}\" endpoint.`\n }\n });\n }\n};\n\nexport const graphQLHandlerFactory = (\n options: CreateGraphQLHandlerOptions = {}\n): PluginCollection => {\n const debug = boolean(options.debug);\n\n const handler: HandlerPlugin = {\n type: \"handler\",\n name: \"handler-graphql-content-model\",\n async handle(context: CmsContext, next) {\n const { http } = context;\n\n if (!http || !http.request) {\n return next();\n }\n\n const method = (http.request.method || \"\").toLowerCase();\n /**\n * In case of OPTIONS method we just return the headers since there is no need to go further.\n */\n if (method.toLowerCase() === \"options\") {\n return http.response({\n statusCode: 204,\n headers: {\n ...DEFAULT_HEADERS,\n ...OPTIONS_HEADERS\n }\n });\n }\n /**\n * We expect, and allow, only POST method to access our GraphQL\n */\n if (method !== \"post\") {\n return next();\n }\n\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return respond(http, new NotAuthorizedResponse(ex));\n }\n\n const schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type\n });\n\n const body: GraphQLRequestBody | GraphQLRequestBody[] = JSON.parse(http.request.body);\n\n const result = await processRequestBody(body, schema, context);\n return respond(http, result);\n }\n };\n\n return [...(debug ? debugPlugins() : []), handler];\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { AfterModelCreateFromTopicParams, CmsContext } from "../../../../types";
2
+ import { Topic } from "@webiny/pubsub/types";
3
+ interface AssignAfterModelCreateFromParams {
4
+ onAfterModelCreateFrom: Topic<AfterModelCreateFromTopicParams>;
5
+ context: CmsContext;
6
+ }
7
+ export declare const assignAfterModelCreateFrom: (params: AssignAfterModelCreateFromParams) => void;
8
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.assignAfterModelCreateFrom = void 0;
7
+
8
+ const assignAfterModelCreateFrom = params => {
9
+ const {
10
+ onAfterModelCreateFrom,
11
+ context
12
+ } = params;
13
+ onAfterModelCreateFrom.subscribe(async () => {
14
+ await context.cms.updateModelLastChange();
15
+ });
16
+ };
17
+
18
+ exports.assignAfterModelCreateFrom = assignAfterModelCreateFrom;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["afterCreateFrom.ts"],"names":["assignAfterModelCreateFrom","params","onAfterModelCreateFrom","context","subscribe","cms","updateModelLastChange"],"mappings":";;;;;;;AAOO,MAAMA,0BAA0B,GAAIC,MAAD,IAA8C;AACpF,QAAM;AAAEC,IAAAA,sBAAF;AAA0BC,IAAAA;AAA1B,MAAsCF,MAA5C;AAEAC,EAAAA,sBAAsB,CAACE,SAAvB,CAAiC,YAAY;AACzC,UAAMD,OAAO,CAACE,GAAR,CAAYC,qBAAZ,EAAN;AACH,GAFD;AAGH,CANM","sourcesContent":["import { AfterModelCreateFromTopicParams, CmsContext } from \"~/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\n\ninterface AssignAfterModelCreateFromParams {\n onAfterModelCreateFrom: Topic<AfterModelCreateFromTopicParams>;\n context: CmsContext;\n}\nexport const assignAfterModelCreateFrom = (params: AssignAfterModelCreateFromParams) => {\n const { onAfterModelCreateFrom, context } = params;\n\n onAfterModelCreateFrom.subscribe(async () => {\n await context.cms.updateModelLastChange();\n });\n};\n"]}
@@ -41,6 +41,8 @@ var _afterUpdate = require("./contentModel/afterUpdate");
41
41
 
42
42
  var _afterDelete = require("./contentModel/afterDelete");
43
43
 
44
+ var _afterCreateFrom = require("./contentModel/afterCreateFrom");
45
+
44
46
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
47
 
46
48
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -214,6 +216,10 @@ const createModelsCrud = params => {
214
216
  context,
215
217
  onAfterModelUpdate
216
218
  });
219
+ (0, _afterCreateFrom.assignAfterModelCreateFrom)({
220
+ context,
221
+ onAfterModelCreateFrom
222
+ });
217
223
  (0, _beforeDelete.assignBeforeModelDelete)({
218
224
  onBeforeModelDelete,
219
225
  plugins: context.plugins,
@@ -1 +1 @@
1
- {"version":3,"sources":["contentModel.crud.ts"],"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","managers","Map","updateManager","manager","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","clearAll","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","Object","keys","length","groupData","modelFields","deleteModel","delete","ex","WebinyError","message","error","getManagers"],"mappings":"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","sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description,\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString() as any,\n savedOn: new Date().toISOString() as any,\n fields: [],\n lockedFields: [],\n layout: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as any,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input: {} as any\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as any,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description,\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString() as any,\n savedOn: new Date().toISOString() as any,\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n return {} as any;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const modelFields = await createFieldModels(original, inputData);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields: modelFields,\n savedOn: new Date().toISOString() as any\n };\n validateLayout(model, modelFields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getManagers: () => managers\n };\n};\n"]}
1
+ {"version":3,"sources":["contentModel.crud.ts"],"names":["createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","model","managers","Map","updateManager","manager","set","modelId","checkModelPermissions","check","utils","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","t","l","contentModel","webinyVersion","WEBINY_VERSION","modelsGet","pluginModel","find","get","NotFoundError","modelsList","databaseModels","load","pluginsModels","concat","permission","filterAsync","validateOwnership","validateModelAccess","getModel","checkOwnership","checkModelAccess","getModelManager","target","has","m","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","inputData","createdData","CreateContentModelModel","populate","validate","input","toJSON","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","clearAll","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","data","CreateContentModelModelFrom","i18n","groups","updateModel","updatedData","UpdateContentModelModel","onlyDirty","Object","keys","length","groupData","modelFields","deleteModel","delete","ex","WebinyError","message","error","getManagers"],"mappings":";;;;;;;;;;;AAmBA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AASO,MAAMA,gBAAgB,GAAIC,MAAD,IAAqD;AACjF,QAAM;AAAEC,IAAAA,SAAF;AAAaC,IAAAA,WAAb;AAA0BC,IAAAA,SAA1B;AAAqCC,IAAAA,iBAArC;AAAwDC,IAAAA;AAAxD,MAAoEL,MAA1E;AAEA,QAAMM,OAAO,GAAG;AACZC,IAAAA,UAAU,EAAE,IAAIC,mBAAJ,CAAe,YAAY;AACnC,YAAMC,MAAM,GAAG,MAAML,iBAAiB,CAACK,MAAlB,CAAyBC,IAAzB,CAA8B;AAC/CC,QAAAA,KAAK,EAAE;AACHC,UAAAA,MAAM,EAAEX,SAAS,GAAGY,EADjB;AAEHC,UAAAA,MAAM,EAAEX,SAAS,GAAGY;AAFjB;AADwC,OAA9B,CAArB;AAMA,aAAO,CACHN,MAAM,CAACO,GAAP,CAAWC,KAAK,IAAI;AAChB,+CACOA,KADP;AAEIL,UAAAA,MAAM,EAAEK,KAAK,CAACL,MAAN,IAAgBX,SAAS,GAAGY,EAFxC;AAGIC,UAAAA,MAAM,EAAEG,KAAK,CAACH,MAAN,IAAgBX,SAAS,GAAGY;AAHxC;AAKH,OAND,CADG,CAAP;AASH,KAhBW;AADA,GAAhB;AAoBA,QAAMG,QAAQ,GAAG,IAAIC,GAAJ,EAAjB;;AACA,QAAMC,aAAa,GAAG,OAClBf,OADkB,EAElBY,KAFkB,KAGS;AAC3B,UAAMI,OAAO,GAAG,MAAM,4DAA2BhB,OAA3B,EAAoCY,KAApC,CAAtB;AACAC,IAAAA,QAAQ,CAACI,GAAT,CAAaL,KAAK,CAACM,OAAnB,EAA4BF,OAA5B;AACA,WAAOA,OAAP;AACH,GAPD;;AASA,QAAMG,qBAAqB,GAAIC,KAAD,IAAgD;AAC1E,WAAOC,KAAK,CAACC,gBAAN,CAAuBtB,OAAvB,EAAgC,kBAAhC,EAAoD;AAAEuB,MAAAA,GAAG,EAAEH;AAAP,KAApD,CAAP;AACH,GAFD;;AAIA,QAAMI,kBAAkB,GAAG,MAAkB;AACzC,UAAMjB,MAAM,GAAGX,SAAS,GAAGY,EAA3B;AACA,UAAMC,MAAM,GAAGX,SAAS,GAAGY,IAA3B;AAEA,WACIV,OAAO,CAACyB,OAAR,CACKC,MADL,CAC4BC,+BAAeC,IAD3C;AAEI;AAChB;AACA;AACA;AALY,KAMKC,MANL,CAMYC,MAAM,IAAI;AACd,YAAM;AAAEvB,QAAAA,MAAM,EAAEwB,CAAV;AAAatB,QAAAA,MAAM,EAAEuB;AAArB,UAA2BF,MAAM,CAACG,YAAxC;;AACA,UAAIF,CAAC,IAAIA,CAAC,KAAKxB,MAAf,EAAuB;AACnB,eAAO,KAAP;AACH,OAFD,MAEO,IAAIyB,CAAC,IAAIA,CAAC,KAAKvB,MAAf,EAAuB;AAC1B,eAAO,KAAP;AACH;;AACD,aAAO,IAAP;AACH,KAdL,EAeKE,GAfL,CAemBmB,MAAM,IAAI;AACrB,6CACOA,MAAM,CAACG,YADd;AAEI1B,QAAAA,MAFJ;AAGIE,QAAAA,MAHJ;AAIIyB,QAAAA,aAAa,EAAElC,OAAO,CAACmC;AAJ3B;AAMH,KAtBL,CADJ;AAyBH,GA7BD;;AA+BA,QAAMC,SAAS,GAAG,MAAOlB,OAAP,IAA8C;AAC5D,UAAMmB,WAAW,GAAGb,kBAAkB,GAAGc,IAArB,CAA0B1B,KAAK,IAAIA,KAAK,CAACM,OAAN,KAAkBA,OAArD,CAApB;;AAEA,QAAImB,WAAJ,EAAiB;AACb,aAAOA,WAAP;AACH;;AAED,UAAMzB,KAAK,GAAG,MAAMb,iBAAiB,CAACK,MAAlB,CAAyBmC,GAAzB,CAA6B;AAC7ChC,MAAAA,MAAM,EAAEX,SAAS,GAAGY,EADyB;AAE7CC,MAAAA,MAAM,EAAEX,SAAS,GAAGY,IAFyB;AAG7CQ,MAAAA;AAH6C,KAA7B,CAApB;;AAMA,QAAI,CAACN,KAAL,EAAY;AACR,YAAM,IAAI4B,6BAAJ,CAAmB,kBAAiBtB,OAAQ,kBAA5C,CAAN;AACH;;AAED,2CACON,KADP;AAEIL,MAAAA,MAAM,EAAEK,KAAK,CAACL,MAAN,IAAgBX,SAAS,GAAGY,EAFxC;AAGIC,MAAAA,MAAM,EAAEG,KAAK,CAACH,MAAN,IAAgBX,SAAS,GAAGY;AAHxC;AAKH,GAtBD;;AAwBA,QAAM+B,UAAU,GAAG,YAAiC;AAChD,UAAMC,cAAc,GAAG,MAAMzC,OAAO,CAACC,UAAR,CAAmByC,IAAnB,CAAwB,YAAxB,CAA7B;AAEA,UAAMC,aAAa,GAAGpB,kBAAkB,EAAxC;AAEA,WAAOkB,cAAc,CAACG,MAAf,CAAsBD,aAAtB,CAAP;AACH,GAND;;AAQA,QAAM1C,UAAU,GAAG,YAAY;AAC3B,UAAM4C,UAAU,GAAG,MAAM3B,qBAAqB,CAAC,GAAD,CAA9C;AACA,UAAMf,MAAM,GAAG,MAAMqC,UAAU,EAA/B;AACA,WAAOpB,KAAK,CAAC0B,WAAN,CAAkB3C,MAAlB,EAA0B,MAAMQ,KAAN,IAAe;AAC5C,UAAI,CAACS,KAAK,CAAC2B,iBAAN,CAAwBhD,OAAxB,EAAiC8C,UAAjC,EAA6ClC,KAA7C,CAAL,EAA0D;AACtD,eAAO,KAAP;AACH;;AACD,aAAOS,KAAK,CAAC4B,mBAAN,CAA0BjD,OAA1B,EAAmCY,KAAnC,CAAP;AACH,KALM,CAAP;AAMH,GATD;;AAWA,QAAMsC,QAAQ,GAAG,MAAOhC,OAAP,IAA8C;AAC3D,UAAM4B,UAAU,GAAG,MAAM3B,qBAAqB,CAAC,GAAD,CAA9C;AAEA,UAAMP,KAAK,GAAG,MAAMwB,SAAS,CAAClB,OAAD,CAA7B;AAEAG,IAAAA,KAAK,CAAC8B,cAAN,CAAqBnD,OAArB,EAA8B8C,UAA9B,EAA0ClC,KAA1C;AACA,UAAMS,KAAK,CAAC+B,gBAAN,CAAuBpD,OAAvB,EAAgCY,KAAhC,CAAN;AAEA,WAAOA,KAAP;AACH,GATD;;AAWA,QAAMyC,eAAmD,GAAG,MACxDC,MADwD,IAE7B;AAC3B,UAAMpC,OAAO,GAAG,OAAOoC,MAAP,KAAkB,QAAlB,GAA6BA,MAA7B,GAAsCA,MAAM,CAACpC,OAA7D;;AACA,QAAIL,QAAQ,CAAC0C,GAAT,CAAarC,OAAb,CAAJ,EAA2B;AACvB,aAAOL,QAAQ,CAAC0B,GAAT,CAAarB,OAAb,CAAP;AACH;;AACD,UAAMd,MAAM,GAAG,MAAMqC,UAAU,EAA/B;AACA,UAAM7B,KAAK,GAAGR,MAAM,CAACkC,IAAP,CAAYkB,CAAC,IAAIA,CAAC,CAACtC,OAAF,KAAcA,OAA/B,CAAd;;AACA,QAAI,CAACN,KAAL,EAAY;AACR,YAAM,IAAI4B,6BAAJ,CAAmB,8BAA6BtB,OAAQ,IAAxD,CAAN;AACH;;AACD,WAAO,MAAMH,aAAa,CAACf,OAAD,EAAUY,KAAV,CAA1B;AACH,GAbD;;AAeA,QAAM6C,mBAAmB,GAAG,0BAA5B;AACA,QAAMC,kBAAkB,GAAG,0BAA3B;AACA,QAAMC,uBAAuB,GAAG,0BAAhC;AACA,QAAMC,sBAAsB,GAAG,0BAA/B;AACA,QAAMC,mBAAmB,GAAG,0BAA5B;AACA,QAAMC,kBAAkB,GAAG,0BAA3B;AACA,QAAMC,mBAAmB,GAAG,0BAA5B;AACA,QAAMC,kBAAkB,GAAG,0BAA3B;AACA;AACJ;AACA;;AACI,6CAAwB;AACpBP,IAAAA,mBADoB;AAEpBE,IAAAA,uBAFoB;AAGpBlC,IAAAA,OAAO,EAAEzB,OAAO,CAACyB,OAHG;AAIpB1B,IAAAA;AAJoB,GAAxB;AAMA,2CAAuB;AACnBC,IAAAA,OADmB;AAEnB0D,IAAAA;AAFmB,GAAvB;AAIA,6CAAwB;AACpBG,IAAAA,mBADoB;AAEpBpC,IAAAA,OAAO,EAAEzB,OAAO,CAACyB,OAFG;AAGpB1B,IAAAA;AAHoB,GAAxB;AAKA,2CAAuB;AACnBC,IAAAA,OADmB;AAEnB8D,IAAAA;AAFmB,GAAvB;AAIA,mDAA2B;AACvB9D,IAAAA,OADuB;AAEvB4D,IAAAA;AAFuB,GAA3B;AAIA,6CAAwB;AACpBG,IAAAA,mBADoB;AAEpBtC,IAAAA,OAAO,EAAEzB,OAAO,CAACyB,OAFG;AAGpB1B,IAAAA;AAHoB,GAAxB;AAKA,2CAAuB;AACnBC,IAAAA,OADmB;AAEnBgE,IAAAA;AAFmB,GAAvB;AAKA,SAAO;AACHP,IAAAA,mBADG;AAEHC,IAAAA,kBAFG;AAGHC,IAAAA,uBAHG;AAIHC,IAAAA,sBAJG;AAKHC,IAAAA,mBALG;AAMHC,IAAAA,kBANG;AAOHC,IAAAA,mBAPG;AAQHC,IAAAA,kBARG;AASHd,IAAAA,QATG;AAUHhD,IAAAA,UAVG;;AAWH,UAAM+D,WAAN,CAAkBC,SAAlB,EAA6B;AACzB,YAAM/C,qBAAqB,CAAC,GAAD,CAA3B;AAEA,YAAMgD,WAAW,GAAG,IAAIC,+BAAJ,GAA8BC,QAA9B,CAAuCH,SAAvC,CAApB;AACA,YAAMC,WAAW,CAACG,QAAZ,EAAN;AACA,YAAMC,KAA0B,GAAG,MAAMJ,WAAW,CAACK,MAAZ,EAAzC;AAEAxE,MAAAA,OAAO,CAACyE,QAAR,CAAiBC,oBAAjB;AACA,YAAMC,KAAK,GAAG,MAAM3E,OAAO,CAAC4E,GAAR,CAAYC,QAAZ,CAAqBN,KAAK,CAACI,KAA3B,CAApB;AACA3E,MAAAA,OAAO,CAACyE,QAAR,CAAiBK,mBAAjB;;AACA,UAAI,CAACH,KAAL,EAAY;AACR,cAAM,IAAInC,6BAAJ,CAAmB,sBAAqB+B,KAAK,CAACI,KAAM,IAApD,CAAN;AACH;;AAED,YAAMI,QAAQ,GAAGlF,WAAW,EAA5B;AACA,YAAMe,KAAe,GAAG;AACpBoE,QAAAA,IAAI,EAAET,KAAK,CAACS,IADQ;AAEpBC,QAAAA,WAAW,EAAEV,KAAK,CAACU,WAFC;AAGpB/D,QAAAA,OAAO,EAAEqD,KAAK,CAACrD,OAAN,IAAiB,EAHN;AAIpBgE,QAAAA,YAAY,EAAE,IAJM;AAKpBzE,QAAAA,MAAM,EAAEX,SAAS,GAAGY,IALA;AAMpBH,QAAAA,MAAM,EAAEX,SAAS,GAAGY,EANA;AAOpBmE,QAAAA,KAAK,EAAE;AACHnE,UAAAA,EAAE,EAAEmE,KAAK,CAACnE,EADP;AAEHwE,UAAAA,IAAI,EAAEL,KAAK,CAACK;AAFT,SAPa;AAWpBG,QAAAA,SAAS,EAAE;AACP3E,UAAAA,EAAE,EAAEuE,QAAQ,CAACvE,EADN;AAEP4E,UAAAA,WAAW,EAAEL,QAAQ,CAACK,WAFf;AAGPxD,UAAAA,IAAI,EAAEmD,QAAQ,CAACnD;AAHR,SAXS;AAgBpByD,QAAAA,SAAS,EAAE,IAAIC,IAAJ,GAAWC,WAAX,EAhBS;AAiBpBC,QAAAA,OAAO,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EAjBW;AAkBpBE,QAAAA,MAAM,EAAE,EAlBY;AAmBpBC,QAAAA,YAAY,EAAE,EAnBM;AAoBpBC,QAAAA,MAAM,EAAE,EApBY;AAqBpBzD,QAAAA,aAAa,EAAElC,OAAO,CAACmC;AArBH,OAAxB;AAwBA,YAAMsB,mBAAmB,CAACmC,OAApB,CAA4B;AAC9BrB,QAAAA,KAD8B;AAE9B3D,QAAAA;AAF8B,OAA5B,CAAN;AAKA,YAAMiF,YAAY,GAAG,MAAM9F,iBAAiB,CAACK,MAAlB,CAAyB0F,MAAzB,CAAgC;AACvDvB,QAAAA,KADuD;AAEvD3D,QAAAA;AAFuD,OAAhC,CAA3B;AAKAX,MAAAA,OAAO,CAACC,UAAR,CAAmB6F,QAAnB;AAEA,YAAMhF,aAAa,CAACf,OAAD,EAAUY,KAAV,CAAnB;AAEA,YAAM8C,kBAAkB,CAACkC,OAAnB,CAA2B;AAC7BrB,QAAAA,KAD6B;AAE7B3D,QAAAA,KAAK,EAAEiF;AAFsB,OAA3B,CAAN;AAKA,aAAOA,YAAP;AACH,KAtEE;;AAuEH;AACR;AACA;AACA;AACQ,UAAMG,iBAAN,CAAwBrG,MAAxB,EAAgC;AAC5B,YAAM;AAAEiB,QAAAA,KAAK,EAAEqF,YAAT;AAAuBC,QAAAA;AAAvB,UAAoCvG,MAA1C;;AAEA,YAAMiB,KAAe,mCACdqF,YADc;AAEjB1F,QAAAA,MAAM,EAAE0F,YAAY,CAAC1F,MAAb,IAAuBX,SAAS,GAAGY,EAF1B;AAGjBC,QAAAA,MAAM,EAAEwF,YAAY,CAACxF,MAAb,IAAuBX,SAAS,GAAGY,IAH1B;AAIjBwB,QAAAA,aAAa,EAAElC,OAAO,CAACmC;AAJN,QAArB;;AAOA,YAAM0B,mBAAmB,CAAC+B,OAApB,CAA4B;AAC9BrB,QAAAA,KAAK,EAAE,EADuB;AAE9B2B,QAAAA,QAF8B;AAG9BtF,QAAAA;AAH8B,OAA5B,CAAN;AAMA,YAAMuF,WAAW,GAAG,MAAMpG,iBAAiB,CAACK,MAAlB,CAAyBgG,MAAzB,CAAgC;AACtDF,QAAAA,QADsD;AAEtDtF,QAAAA,KAFsD;AAGtD2D,QAAAA,KAAK,EAAE;AAH+C,OAAhC,CAA1B;AAMA,YAAMxD,aAAa,CAACf,OAAD,EAAUmG,WAAV,CAAnB;AAEAlG,MAAAA,OAAO,CAACC,UAAR,CAAmB6F,QAAnB;AAEA,YAAMjC,kBAAkB,CAAC8B,OAAnB,CAA2B;AAC7BrB,QAAAA,KAAK,EAAE,EADsB;AAE7B2B,QAAAA,QAF6B;AAG7BtF,QAAAA,KAAK,EAAEuF;AAHsB,OAA3B,CAAN;AAMA,aAAOA,WAAP;AACH,KA5GE;;AA6GH,UAAME,eAAN,CAAsBnF,OAAtB,EAA+BoF,IAA/B,EAAqC;AACjC,YAAMnF,qBAAqB,CAAC,GAAD,CAA3B;AACA;AACZ;AACA;;AACY,YAAM+E,QAAQ,GAAG,MAAMhD,QAAQ,CAAChC,OAAD,CAA/B;AAEA,YAAMiD,WAAW,GAAG,IAAIoC,mCAAJ,GAAkClC,QAAlC,CAA2C;AAC3DW,QAAAA,IAAI,EAAEsB,IAAI,CAACtB,IADgD;AAE3D9D,QAAAA,OAAO,EAAEoF,IAAI,CAACpF,OAF6C;AAG3D+D,QAAAA,WAAW,EAAEqB,IAAI,CAACrB,WAAL,IAAoBiB,QAAQ,CAACjB,WAHiB;AAI3DN,QAAAA,KAAK,EAAE2B,IAAI,CAAC3B,KAJ+C;AAK3DlE,QAAAA,MAAM,EAAE6F,IAAI,CAAC7F;AAL8C,OAA3C,CAApB;AAQA,YAAM0D,WAAW,CAACG,QAAZ,EAAN;AACA,YAAMC,KAA8B,GAAG,MAAMJ,WAAW,CAACK,MAAZ,EAA7C;AAEA,YAAM/D,MAAM,GAAG,MAAMT,OAAO,CAACwG,IAAR,CAAa1G,SAAb,CAAuByE,KAAK,CAAC9D,MAAN,IAAgByF,QAAQ,CAACzF,MAAhD,CAArB;;AACA,UAAI,CAACA,MAAL,EAAa;AACT,cAAM,IAAI+B,6BAAJ,CAAmB,uBAAsB+B,KAAK,CAAC9D,MAAO,IAAtD,CAAN;AACH;AACD;AACZ;AACA;;;AACY,YAAMkE,KAAK,GAAG,MAAM3E,OAAO,CAAC4E,GAAR,CAAY7E,iBAAZ,CAA8B0G,MAA9B,CAAqClE,GAArC,CAAyC;AACzD/B,QAAAA,EAAE,EAAE+D,KAAK,CAACI,KAD+C;AAEzDpE,QAAAA,MAAM,EAAE2F,QAAQ,CAAC3F,MAFwC;AAGzDE,QAAAA,MAAM,EAAEA,MAAM,CAACC;AAH0C,OAAzC,CAApB;;AAKA,UAAI,CAACiE,KAAL,EAAY;AACR,cAAM,IAAInC,6BAAJ,CAAmB,sBAAqB+B,KAAK,CAACI,KAAM,IAApD,CAAN;AACH;;AAED,YAAMI,QAAQ,GAAGlF,WAAW,EAA5B;;AACA,YAAMe,KAAe,mCACdsF,QADc;AAEjBzF,QAAAA,MAAM,EAAEA,MAAM,CAACC,IAFE;AAGjBiE,QAAAA,KAAK,EAAE;AACHnE,UAAAA,EAAE,EAAEmE,KAAK,CAACnE,EADP;AAEHwE,UAAAA,IAAI,EAAEL,KAAK,CAACK;AAFT,SAHU;AAOjBA,QAAAA,IAAI,EAAET,KAAK,CAACS,IAPK;AAQjB9D,QAAAA,OAAO,EAAEqD,KAAK,CAACrD,OAAN,IAAiB,EART;AASjB+D,QAAAA,WAAW,EAAEV,KAAK,CAACU,WATF;AAUjBE,QAAAA,SAAS,EAAE;AACP3E,UAAAA,EAAE,EAAEuE,QAAQ,CAACvE,EADN;AAEP4E,UAAAA,WAAW,EAAEL,QAAQ,CAACK,WAFf;AAGPxD,UAAAA,IAAI,EAAEmD,QAAQ,CAACnD;AAHR,SAVM;AAejByD,QAAAA,SAAS,EAAE,IAAIC,IAAJ,GAAWC,WAAX,EAfM;AAgBjBC,QAAAA,OAAO,EAAE,IAAIF,IAAJ,GAAWC,WAAX,EAhBQ;AAiBjBG,QAAAA,YAAY,EAAE,EAjBG;AAkBjBxD,QAAAA,aAAa,EAAElC,OAAO,CAACmC;AAlBN,QAArB;;AAqBA,YAAMwB,uBAAuB,CAACiC,OAAxB,CAAgC;AAClCrB,QAAAA,KADkC;AAElC3D,QAAAA,KAFkC;AAGlCsF,QAAAA;AAHkC,OAAhC,CAAN;AAMA,YAAML,YAAY,GAAG,MAAM9F,iBAAiB,CAACK,MAAlB,CAAyB0F,MAAzB,CAAgC;AACvDvB,QAAAA,KADuD;AAEvD3D,QAAAA;AAFuD,OAAhC,CAA3B;AAKAX,MAAAA,OAAO,CAACC,UAAR,CAAmB6F,QAAnB;AAEA,YAAMhF,aAAa,CAACf,OAAD,EAAUY,KAAV,CAAnB;AAEA,YAAMgD,sBAAsB,CAACgC,OAAvB,CAA+B;AACjCrB,QAAAA,KADiC;AAEjC2B,QAAAA,QAFiC;AAGjCtF,QAAAA,KAAK,EAAEiF;AAH0B,OAA/B,CAAN;AAMA,aAAOA,YAAP;AACH,KA3LE;;AA4LH,UAAMa,WAAN,CAAkBxF,OAAlB,EAA2BgD,SAA3B,EAAsC;AAClC,YAAM/C,qBAAqB,CAAC,GAAD,CAA3B,CADkC,CAGlC;;AACA,YAAM+E,QAAQ,GAAG,MAAMhD,QAAQ,CAAChC,OAAD,CAA/B;AAEA,YAAMyF,WAAW,GAAG,IAAIC,+BAAJ,GAA8BvC,QAA9B,CAAuCH,SAAvC,CAApB;AACA,YAAMyC,WAAW,CAACrC,QAAZ,EAAN;AAEA,YAAMC,KAA0B,GAAG,MAAMoC,WAAW,CAACnC,MAAZ,CAAmB;AAAEqC,QAAAA,SAAS,EAAE;AAAb,OAAnB,CAAzC;;AACA,UAAIC,MAAM,CAACC,IAAP,CAAYxC,KAAZ,EAAmByC,MAAnB,KAA8B,CAAlC,EAAqC;AACjC,eAAO,EAAP;AACH;;AACD,UAAIrC,KAAwB,GAAG;AAC3BnE,QAAAA,EAAE,EAAE0F,QAAQ,CAACvB,KAAT,CAAenE,EADQ;AAE3BwE,QAAAA,IAAI,EAAEkB,QAAQ,CAACvB,KAAT,CAAeK;AAFM,OAA/B;;AAIA,UAAIT,KAAK,CAACI,KAAV,EAAiB;AACb3E,QAAAA,OAAO,CAACyE,QAAR,CAAiBC,oBAAjB;AACA,cAAMuC,SAAS,GAAG,MAAMjH,OAAO,CAAC4E,GAAR,CAAYC,QAAZ,CAAqBN,KAAK,CAACI,KAA3B,CAAxB;AACA3E,QAAAA,OAAO,CAACyE,QAAR,CAAiBK,mBAAjB;;AACA,YAAI,CAACmC,SAAL,EAAgB;AACZ,gBAAM,IAAIzE,6BAAJ,CAAmB,sBAAqB+B,KAAK,CAACI,KAAM,IAApD,CAAN;AACH;;AACDA,QAAAA,KAAK,GAAG;AACJnE,UAAAA,EAAE,EAAEyG,SAAS,CAACzG,EADV;AAEJwE,UAAAA,IAAI,EAAEiC,SAAS,CAACjC;AAFZ,SAAR;AAIH;;AACD,YAAMkC,WAAW,GAAG,MAAM,0CAAkBhB,QAAlB,EAA4BhC,SAA5B,CAA1B;;AACA,YAAMtD,KAAe,iDACdsF,QADc,GAEd3B,KAFc;AAGjBI,QAAAA,KAHiB;AAIjBpE,QAAAA,MAAM,EAAE2F,QAAQ,CAAC3F,MAAT,IAAmBX,SAAS,GAAGY,EAJtB;AAKjBC,QAAAA,MAAM,EAAEyF,QAAQ,CAACzF,MAAT,IAAmBX,SAAS,GAAGY,IALtB;AAMjBwB,QAAAA,aAAa,EAAElC,OAAO,CAACmC,cANN;AAOjBsD,QAAAA,MAAM,EAAEyB,WAPS;AAQjB1B,QAAAA,OAAO,EAAE,IAAIF,IAAJ,GAAWC,WAAX;AARQ,QAArB;;AAUA,0CAAe3E,KAAf,EAAsBsG,WAAtB;AAEA,YAAMrD,mBAAmB,CAAC+B,OAApB,CAA4B;AAC9BrB,QAAAA,KAD8B;AAE9B2B,QAAAA,QAF8B;AAG9BtF,QAAAA;AAH8B,OAA5B,CAAN;AAMA,YAAMuF,WAAW,GAAG,MAAMpG,iBAAiB,CAACK,MAAlB,CAAyBgG,MAAzB,CAAgC;AACtDF,QAAAA,QADsD;AAEtDtF,QAAAA,KAFsD;AAGtD2D,QAAAA;AAHsD,OAAhC,CAA1B;AAMA,YAAMxD,aAAa,CAACf,OAAD,EAAUmG,WAAV,CAAnB;AAEA,YAAMrC,kBAAkB,CAAC8B,OAAnB,CAA2B;AAC7BrB,QAAAA,KAD6B;AAE7B2B,QAAAA,QAF6B;AAG7BtF,QAAAA,KAAK,EAAEuF;AAHsB,OAA3B,CAAN;AAMA,aAAOA,WAAP;AACH,KA3PE;;AA4PH,UAAMgB,WAAN,CAAkBjG,OAAlB,EAA2B;AACvB,YAAMC,qBAAqB,CAAC,GAAD,CAA3B;AAEA,YAAMP,KAAK,GAAG,MAAMsC,QAAQ,CAAChC,OAAD,CAA5B;AAEA,YAAM6C,mBAAmB,CAAC6B,OAApB,CAA4B;AAC9BhF,QAAAA;AAD8B,OAA5B,CAAN;;AAIA,UAAI;AACA,cAAMb,iBAAiB,CAACK,MAAlB,CAAyBgH,MAAzB,CAAgC;AAClCxG,UAAAA;AADkC,SAAhC,CAAN;AAGH,OAJD,CAIE,OAAOyG,EAAP,EAAW;AACT,cAAM,IAAIC,cAAJ,CACFD,EAAE,CAACE,OAAH,IAAc,oCADZ,EAEFF,EAAE,CAAC3G,IAAH,IAAW,4BAFT,EAGF;AACI8G,UAAAA,KAAK,EAAEH,EADX;AAEInG,UAAAA,OAAO,EAAEN,KAAK,CAACM;AAFnB,SAHE,CAAN;AAQH;;AAED,YAAM8C,kBAAkB,CAAC4B,OAAnB,CAA2B;AAC7BhF,QAAAA;AAD6B,OAA3B,CAAN;AAIAC,MAAAA,QAAQ,CAACuG,MAAT,CAAgBxG,KAAK,CAACM,OAAtB;AACH,KAzRE;;AA0RHmC,IAAAA,eA1RG;AA2RHoE,IAAAA,WAAW,EAAE,MAAM5G;AA3RhB,GAAP;AA6RH,CAldM","sourcesContent":["import {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n CmsModelPermission,\n HeadlessCmsStorageOperations,\n BeforeModelCreateTopicParams,\n AfterModelCreateTopicParams,\n BeforeModelUpdateTopicParams,\n AfterModelUpdateTopicParams,\n BeforeModelDeleteTopicParams,\n AfterModelDeleteTopicParams,\n BeforeModelCreateFromTopicParams,\n AfterModelCreateFromTopicParams,\n CmsModelCreateInput,\n CmsModelUpdateInput,\n CmsModelCreateFromInput\n} from \"~/types\";\nimport * as utils from \"~/utils\";\nimport DataLoader from \"dataloader\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\nimport {\n CreateContentModelModel,\n CreateContentModelModelFrom,\n UpdateContentModelModel\n} from \"./contentModel/models\";\nimport { createFieldModels } from \"./contentModel/createFieldModels\";\nimport { validateLayout } from \"./contentModel/validateLayout\";\nimport WebinyError from \"@webiny/error\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { assignBeforeModelCreate } from \"./contentModel/beforeCreate\";\nimport { assignBeforeModelUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignBeforeModelDelete } from \"./contentModel/beforeDelete\";\nimport { assignAfterModelCreate } from \"./contentModel/afterCreate\";\nimport { assignAfterModelUpdate } from \"./contentModel/afterUpdate\";\nimport { assignAfterModelDelete } from \"./contentModel/afterDelete\";\nimport { assignAfterModelCreateFrom } from \"~/content/plugins/crud/contentModel/afterCreateFrom\";\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { getTenant, getIdentity, getLocale, storageOperations, context } = params;\n\n const loaders = {\n listModels: new DataLoader(async () => {\n const models = await storageOperations.models.list({\n where: {\n tenant: getTenant().id,\n locale: getLocale().code\n }\n });\n return [\n models.map(model => {\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const managers = new Map<string, CmsModelManager>();\n const updateManager = async (\n context: CmsContext,\n model: CmsModel\n ): Promise<CmsModelManager> => {\n const manager = await contentModelManagerFactory(context, model);\n managers.set(model.modelId, manager);\n return manager;\n };\n\n const checkModelPermissions = (check: string): Promise<CmsModelPermission> => {\n return utils.checkPermissions(context, \"cms.contentModel\", { rwd: check });\n };\n\n const getModelsAsPlugins = (): CmsModel[] => {\n const tenant = getTenant().id;\n const locale = getLocale().code;\n\n return (\n context.plugins\n .byType<CmsModelPlugin>(CmsModelPlugin.type)\n /**\n * We need to filter out models that are not for this tenant or locale.\n * If it does not have tenant or locale define, it is for every locale and tenant\n */\n .filter(plugin => {\n const { tenant: t, locale: l } = plugin.contentModel;\n if (t && t !== tenant) {\n return false;\n } else if (l && l !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string): Promise<CmsModel> => {\n const pluginModel = getModelsAsPlugins().find(model => model.modelId === modelId);\n\n if (pluginModel) {\n return pluginModel;\n }\n\n const model = await storageOperations.models.get({\n tenant: getTenant().id,\n locale: getLocale().code,\n modelId\n });\n\n if (!model) {\n throw new NotFoundError(`Content model \"${modelId}\" was not found!`);\n }\n\n return {\n ...model,\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n };\n\n const modelsList = async (): Promise<CmsModel[]> => {\n const databaseModels = await loaders.listModels.load(\"listModels\");\n\n const pluginsModels = getModelsAsPlugins();\n\n return databaseModels.concat(pluginsModels);\n };\n\n const listModels = async () => {\n const permission = await checkModelPermissions(\"r\");\n const models = await modelsList();\n return utils.filterAsync(models, async model => {\n if (!utils.validateOwnership(context, permission, model)) {\n return false;\n }\n return utils.validateModelAccess(context, model);\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n const permission = await checkModelPermissions(\"r\");\n\n const model = await modelsGet(modelId);\n\n utils.checkOwnership(context, permission, model);\n await utils.checkModelAccess(context, model);\n\n return model;\n };\n\n const getModelManager: CmsModelContext[\"getModelManager\"] = async (\n target\n ): Promise<CmsModelManager> => {\n const modelId = typeof target === \"string\" ? target : target.modelId;\n if (managers.has(modelId)) {\n return managers.get(modelId) as CmsModelManager;\n }\n const models = await modelsList();\n const model = models.find(m => m.modelId === modelId);\n if (!model) {\n throw new NotFoundError(`There is no content model \"${modelId}\".`);\n }\n return await updateManager(context, model);\n };\n\n const onBeforeModelCreate = createTopic<BeforeModelCreateTopicParams>();\n const onAfterModelCreate = createTopic<AfterModelCreateTopicParams>();\n const onBeforeModelCreateFrom = createTopic<BeforeModelCreateFromTopicParams>();\n const onAfterModelCreateFrom = createTopic<AfterModelCreateFromTopicParams>();\n const onBeforeModelUpdate = createTopic<BeforeModelUpdateTopicParams>();\n const onAfterModelUpdate = createTopic<AfterModelUpdateTopicParams>();\n const onBeforeModelDelete = createTopic<BeforeModelDeleteTopicParams>();\n const onAfterModelDelete = createTopic<AfterModelDeleteTopicParams>();\n /**\n * We need to assign some default behaviors.\n */\n assignBeforeModelCreate({\n onBeforeModelCreate,\n onBeforeModelCreateFrom,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelCreate({\n context,\n onAfterModelCreate\n });\n assignBeforeModelUpdate({\n onBeforeModelUpdate,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelUpdate({\n context,\n onAfterModelUpdate\n });\n assignAfterModelCreateFrom({\n context,\n onAfterModelCreateFrom\n });\n assignBeforeModelDelete({\n onBeforeModelDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignAfterModelDelete({\n context,\n onAfterModelDelete\n });\n\n return {\n onBeforeModelCreate,\n onAfterModelCreate,\n onBeforeModelCreateFrom,\n onAfterModelCreateFrom,\n onBeforeModelUpdate,\n onAfterModelUpdate,\n onBeforeModelDelete,\n onAfterModelDelete,\n getModel,\n listModels,\n async createModel(inputData) {\n await checkModelPermissions(\"w\");\n\n const createdData = new CreateContentModelModel().populate(inputData);\n await createdData.validate();\n const input: CmsModelCreateInput = await createdData.toJSON();\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: input.name,\n description: input.description,\n modelId: input.modelId || \"\",\n titleFieldId: \"id\",\n locale: getLocale().code,\n tenant: getTenant().id,\n group: {\n id: group.id,\n name: group.name\n },\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString() as any,\n savedOn: new Date().toISOString() as any,\n fields: [],\n lockedFields: [],\n layout: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreate.publish({\n input,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreate.publish({\n input,\n model: createdModel\n });\n\n return createdModel;\n },\n /**\n * Method does not check for permissions or ownership.\n * @internal\n */\n async updateModelDirect(params) {\n const { model: initialModel, original } = params;\n\n const model: CmsModel = {\n ...initialModel,\n tenant: initialModel.tenant || getTenant().id,\n locale: initialModel.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelUpdate.publish({\n input: {} as any,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input: {} as any\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onAfterModelUpdate.publish({\n input: {} as any,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async createModelFrom(modelId, data) {\n await checkModelPermissions(\"w\");\n /**\n * Get a model record; this will also perform ownership validation.\n */\n const original = await getModel(modelId);\n\n const createdData = new CreateContentModelModelFrom().populate({\n name: data.name,\n modelId: data.modelId,\n description: data.description || original.description,\n group: data.group,\n locale: data.locale\n });\n\n await createdData.validate();\n const input: CmsModelCreateFromInput = await createdData.toJSON();\n\n const locale = await context.i18n.getLocale(input.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${input.locale}\".`);\n }\n /**\n * Use storage operations directly because we cannot get group from different locale via context methods.\n */\n const group = await context.cms.storageOperations.groups.get({\n id: input.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n name: input.name,\n modelId: input.modelId || \"\",\n description: input.description,\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n createdOn: new Date().toISOString(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n await onBeforeModelCreateFrom.publish({\n input,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n input,\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onAfterModelCreateFrom.publish({\n input,\n original,\n model: createdModel\n });\n\n return createdModel;\n },\n async updateModel(modelId, inputData) {\n await checkModelPermissions(\"w\");\n\n // Get a model record; this will also perform ownership validation.\n const original = await getModel(modelId);\n\n const updatedData = new UpdateContentModelModel().populate(inputData);\n await updatedData.validate();\n\n const input: CmsModelUpdateInput = await updatedData.toJSON({ onlyDirty: true });\n if (Object.keys(input).length === 0) {\n return {} as any;\n }\n let group: CmsModel[\"group\"] = {\n id: original.group.id,\n name: original.group.name\n };\n if (input.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(input.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${input.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const modelFields = await createFieldModels(original, inputData);\n const model: CmsModel = {\n ...original,\n ...input,\n group,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n fields: modelFields,\n savedOn: new Date().toISOString() as any\n };\n validateLayout(model, modelFields);\n\n await onBeforeModelUpdate.publish({\n input,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n original,\n model,\n input\n });\n\n await updateManager(context, resultModel);\n\n await onAfterModelUpdate.publish({\n input,\n original,\n model: resultModel\n });\n\n return resultModel;\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n await onBeforeModelDelete.publish({\n model\n });\n\n try {\n await storageOperations.models.delete({\n model\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the content model\",\n ex.code || \"CONTENT_MODEL_DELETE_ERROR\",\n {\n error: ex,\n modelId: model.modelId\n }\n );\n }\n\n await onAfterModelDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n },\n getModelManager,\n getManagers: () => managers\n };\n};\n"]}
@@ -74,6 +74,11 @@ const baseSchema = context => {
74
74
  displayName: String
75
75
  type: String
76
76
  }
77
+
78
+ enum CmsEntryStatusType {
79
+ latest
80
+ published
81
+ }
77
82
  `,
78
83
  resolvers: _objectSpread(_objectSpread({}, scalars.reduce((acc, s) => {
79
84
  acc[s.name] = s;
@@ -1 +1 @@
1
- {"version":3,"sources":["baseSchema.ts"],"names":["baseSchema","context","scalars","plugins","byType","map","item","scalar","GraphQLSchemaPlugin","typeDefs","name","join","resolvers","reduce","acc","s","JSON","JsonScalar","Long","LongScalar","RefInput","Number","NumberScalar","Any","AnyScalar","DateTime","DateTimeScalar","DateTimeZ","DateTimeZScalar","Date","DateScalar","Time","TimeScalar","Mutation","_empty"],"mappings":";;;;;;;;;;;AAEA;;AAWA;;;;;;AAGA,MAAMA,UAAU,GAAIC,OAAD,IAA8C;AAC7D,QAAMC,OAAO,GAAGD,OAAO,CAACE,OAAR,CACXC,MADW,CACiB,gBADjB,EAEXC,GAFW,CAEPC,IAAI,IAAIA,IAAI,CAACC,MAFN,CAAhB;AAIA,SAAO,IAAIC,wCAAJ,CAAwB;AAC3BC,IAAAA,QAAQ;AAAE;AAAe;AACjC,cAAcP,OAAO,CAACG,GAAR,CAAYE,MAAM,IAAK,UAASA,MAAM,CAACG,IAAK,EAA5C,EAA+CC,IAA/C,CAAoD,GAApD,CAAyD;AACvE;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,SArDmC;AAsD3BC,IAAAA,SAAS,kCACFV,OAAO,CAACW,MAAR,CAAe,CAACC,GAAD,EAAMC,CAAN,KAAY;AAC1BD,MAAAA,GAAG,CAACC,CAAC,CAACL,IAAH,CAAH,GAAcK,CAAd;AACA,aAAOD,GAAP;AACH,KAHE,EAGA,EAHA,CADE;AAKLE,MAAAA,IAAI,EAAEC,wBALD;AAMLC,MAAAA,IAAI,EAAEC,wBAND;AAOLC,MAAAA,QAAQ,EAARA,sBAPK;AAQLC,MAAAA,MAAM,EAAEC,oBARH;AASLC,MAAAA,GAAG,EAAEC,iBATA;AAULC,MAAAA,QAAQ,EAAEC,4BAVL;AAWLC,MAAAA,SAAS,EAAEC,6BAXN;AAYLC,MAAAA,IAAI,EAAEC,wBAZD;AAaLC,MAAAA,IAAI,EAAEC,wBAbD;AAcLC,MAAAA,QAAQ,EAAE;AACNC,QAAAA,MAAM,EAAE,MAAM;AADR;AAdL;AAtDkB,GAAxB,CAAP;AAyEH,CA9ED;;eAgFelC,U","sourcesContent":["import { GraphQLScalarPlugin } from \"@webiny/handler-graphql/types\";\nimport { CmsContext } from \"~/types\";\nimport {\n RefInput,\n Number as NumberScalar,\n Any as AnyScalar,\n DateTimeScalar,\n DateScalar,\n TimeScalar,\n LongScalar,\n JsonScalar,\n DateTimeZScalar\n} from \"@webiny/handler-graphql/builtInTypes\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { GraphQLScalarType } from \"graphql\";\n\nconst baseSchema = (context: CmsContext): GraphQLSchemaPlugin => {\n const scalars = context.plugins\n .byType<GraphQLScalarPlugin>(\"graphql-scalar\")\n .map(item => item.scalar);\n\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n ${scalars.map(scalar => `scalar ${scalar.name}`).join(\" \")}\n scalar JSON\n scalar Long\n scalar RefInput\n scalar Number\n scalar Any\n scalar Date\n scalar DateTime\n scalar DateTimeZ\n scalar Time\n\n type Query\n\n type Mutation {\n _empty: String\n }\n\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsCreatedBy {\n id: String\n displayName: String\n type: String\n }\n\n type CmsOwnedBy {\n id: String\n displayName: String\n type: String\n }\n `,\n resolvers: {\n ...scalars.reduce((acc, s) => {\n acc[s.name] = s;\n return acc;\n }, {} as Record<string, GraphQLScalarType>),\n JSON: JsonScalar,\n Long: LongScalar,\n RefInput,\n Number: NumberScalar,\n Any: AnyScalar,\n DateTime: DateTimeScalar,\n DateTimeZ: DateTimeZScalar,\n Date: DateScalar,\n Time: TimeScalar,\n Mutation: {\n _empty: () => \"_empty\"\n }\n }\n });\n};\n\nexport default baseSchema;\n"]}
1
+ {"version":3,"sources":["baseSchema.ts"],"names":["baseSchema","context","scalars","plugins","byType","map","item","scalar","GraphQLSchemaPlugin","typeDefs","name","join","resolvers","reduce","acc","s","JSON","JsonScalar","Long","LongScalar","RefInput","Number","NumberScalar","Any","AnyScalar","DateTime","DateTimeScalar","DateTimeZ","DateTimeZScalar","Date","DateScalar","Time","TimeScalar","Mutation","_empty"],"mappings":";;;;;;;;;;;AAEA;;AAWA;;;;;;AAGA,MAAMA,UAAU,GAAIC,OAAD,IAA8C;AAC7D,QAAMC,OAAO,GAAGD,OAAO,CAACE,OAAR,CACXC,MADW,CACiB,gBADjB,EAEXC,GAFW,CAEPC,IAAI,IAAIA,IAAI,CAACC,MAFN,CAAhB;AAIA,SAAO,IAAIC,wCAAJ,CAAwB;AAC3BC,IAAAA,QAAQ;AAAE;AAAe;AACjC,cAAcP,OAAO,CAACG,GAAR,CAAYE,MAAM,IAAK,UAASA,MAAM,CAACG,IAAK,EAA5C,EAA+CC,IAA/C,CAAoD,GAApD,CAAyD;AACvE;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,SA1DmC;AA2D3BC,IAAAA,SAAS,kCACFV,OAAO,CAACW,MAAR,CAAe,CAACC,GAAD,EAAMC,CAAN,KAAY;AAC1BD,MAAAA,GAAG,CAACC,CAAC,CAACL,IAAH,CAAH,GAAcK,CAAd;AACA,aAAOD,GAAP;AACH,KAHE,EAGA,EAHA,CADE;AAKLE,MAAAA,IAAI,EAAEC,wBALD;AAMLC,MAAAA,IAAI,EAAEC,wBAND;AAOLC,MAAAA,QAAQ,EAARA,sBAPK;AAQLC,MAAAA,MAAM,EAAEC,oBARH;AASLC,MAAAA,GAAG,EAAEC,iBATA;AAULC,MAAAA,QAAQ,EAAEC,4BAVL;AAWLC,MAAAA,SAAS,EAAEC,6BAXN;AAYLC,MAAAA,IAAI,EAAEC,wBAZD;AAaLC,MAAAA,IAAI,EAAEC,wBAbD;AAcLC,MAAAA,QAAQ,EAAE;AACNC,QAAAA,MAAM,EAAE,MAAM;AADR;AAdL;AA3DkB,GAAxB,CAAP;AA8EH,CAnFD;;eAqFelC,U","sourcesContent":["import { GraphQLScalarPlugin } from \"@webiny/handler-graphql/types\";\nimport { CmsContext } from \"~/types\";\nimport {\n RefInput,\n Number as NumberScalar,\n Any as AnyScalar,\n DateTimeScalar,\n DateScalar,\n TimeScalar,\n LongScalar,\n JsonScalar,\n DateTimeZScalar\n} from \"@webiny/handler-graphql/builtInTypes\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { GraphQLScalarType } from \"graphql\";\n\nconst baseSchema = (context: CmsContext): GraphQLSchemaPlugin => {\n const scalars = context.plugins\n .byType<GraphQLScalarPlugin>(\"graphql-scalar\")\n .map(item => item.scalar);\n\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n ${scalars.map(scalar => `scalar ${scalar.name}`).join(\" \")}\n scalar JSON\n scalar Long\n scalar RefInput\n scalar Number\n scalar Any\n scalar Date\n scalar DateTime\n scalar DateTimeZ\n scalar Time\n\n type Query\n\n type Mutation {\n _empty: String\n }\n\n type CmsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type CmsListMeta {\n cursor: String\n hasMoreItems: Boolean\n totalCount: Int\n }\n\n type CmsDeleteResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsBooleanResponse {\n data: Boolean\n error: CmsError\n }\n\n type CmsCreatedBy {\n id: String\n displayName: String\n type: String\n }\n\n type CmsOwnedBy {\n id: String\n displayName: String\n type: String\n }\n\n enum CmsEntryStatusType {\n latest\n published\n }\n `,\n resolvers: {\n ...scalars.reduce((acc, s) => {\n acc[s.name] = s;\n return acc;\n }, {} as Record<string, GraphQLScalarType>),\n JSON: JsonScalar,\n Long: LongScalar,\n RefInput,\n Number: NumberScalar,\n Any: AnyScalar,\n DateTime: DateTimeScalar,\n DateTimeZ: DateTimeZScalar,\n Date: DateScalar,\n Time: TimeScalar,\n Mutation: {\n _empty: () => \"_empty\"\n }\n }\n });\n};\n\nexport default baseSchema;\n"]}