@webiny/api-headless-cms 0.0.0-unstable.d7f521b032 → 0.0.0-unstable.df6d94b531

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/crud/contentEntry/markLockedFields.d.ts +1 -1
  2. package/crud/contentEntry/markLockedFields.js +3 -0
  3. package/crud/contentEntry/markLockedFields.js.map +1 -1
  4. package/crud/contentEntry.crud.d.ts +2 -1
  5. package/crud/contentEntry.crud.js +29 -23
  6. package/crud/contentEntry.crud.js.map +1 -1
  7. package/crud/contentModel/beforeCreate.js +4 -0
  8. package/crud/contentModel/beforeCreate.js.map +1 -1
  9. package/crud/contentModel/beforeUpdate.js +4 -0
  10. package/crud/contentModel/beforeUpdate.js.map +1 -1
  11. package/crud/contentModel/compatibility/modelApiName.d.ts +3 -0
  12. package/crud/contentModel/compatibility/modelApiName.js +24 -0
  13. package/crud/contentModel/compatibility/modelApiName.js.map +1 -0
  14. package/crud/contentModel/defaultFields.d.ts +5 -0
  15. package/crud/contentModel/defaultFields.js +58 -0
  16. package/crud/contentModel/defaultFields.js.map +1 -0
  17. package/crud/contentModel/fields/descriptionField.d.ts +2 -0
  18. package/crud/contentModel/fields/descriptionField.js +42 -0
  19. package/crud/contentModel/fields/descriptionField.js.map +1 -0
  20. package/crud/contentModel/fields/imageField.d.ts +2 -0
  21. package/crud/contentModel/fields/imageField.js +46 -0
  22. package/crud/contentModel/fields/imageField.js.map +1 -0
  23. package/crud/contentModel/fields/titleField.d.ts +2 -0
  24. package/crud/contentModel/fields/titleField.js +58 -0
  25. package/crud/contentModel/fields/titleField.js.map +1 -0
  26. package/crud/contentModel/systemFields.js.map +1 -1
  27. package/crud/contentModel/validateModel.d.ts +1 -0
  28. package/crud/contentModel/validateModel.js.map +1 -1
  29. package/crud/contentModel/validateModelFields.d.ts +2 -1
  30. package/crud/contentModel/validateModelFields.js +17 -55
  31. package/crud/contentModel/validateModelFields.js.map +1 -1
  32. package/crud/contentModel/validation.d.ts +92 -50
  33. package/crud/contentModel/validation.js +59 -11
  34. package/crud/contentModel/validation.js.map +1 -1
  35. package/crud/contentModel.crud.js +40 -18
  36. package/crud/contentModel.crud.js.map +1 -1
  37. package/crud/system.crud.js +0 -60
  38. package/crud/system.crud.js.map +1 -1
  39. package/graphql/createExecutableSchema.d.ts +2 -3
  40. package/graphql/createExecutableSchema.js.map +1 -1
  41. package/graphql/graphQLHandlerFactory.js +13 -8
  42. package/graphql/graphQLHandlerFactory.js.map +1 -1
  43. package/graphql/schema/baseContentSchema.js +1 -7
  44. package/graphql/schema/baseContentSchema.js.map +1 -1
  45. package/graphql/schema/contentEntries.js +90 -53
  46. package/graphql/schema/contentEntries.js.map +1 -1
  47. package/graphql/schema/contentModelGroups.js +1 -1
  48. package/graphql/schema/contentModelGroups.js.map +1 -1
  49. package/graphql/schema/contentModels.js +20 -1
  50. package/graphql/schema/contentModels.js.map +1 -1
  51. package/graphql/schema/createManageResolvers.d.ts +1 -1
  52. package/graphql/schema/createManageResolvers.js +33 -17
  53. package/graphql/schema/createManageResolvers.js.map +1 -1
  54. package/graphql/schema/createManageSDL.d.ts +1 -0
  55. package/graphql/schema/createManageSDL.js +55 -49
  56. package/graphql/schema/createManageSDL.js.map +1 -1
  57. package/graphql/schema/createPreviewResolvers.js +3 -7
  58. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  59. package/graphql/schema/createReadResolvers.js +4 -8
  60. package/graphql/schema/createReadResolvers.js.map +1 -1
  61. package/graphql/schema/createReadSDL.d.ts +1 -0
  62. package/graphql/schema/createReadSDL.js +24 -22
  63. package/graphql/schema/createReadSDL.js.map +1 -1
  64. package/graphql/schema/resolvers/commonFieldResolvers.d.ts +3 -2
  65. package/graphql/schema/resolvers/commonFieldResolvers.js +2 -1
  66. package/graphql/schema/resolvers/commonFieldResolvers.js.map +1 -1
  67. package/graphql/schema/schemaPlugins.js +12 -12
  68. package/graphql/schema/schemaPlugins.js.map +1 -1
  69. package/graphql/system.js +0 -16
  70. package/graphql/system.js.map +1 -1
  71. package/graphqlFields/dynamicZone/dynamicZoneField.js +12 -4
  72. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
  73. package/graphqlFields/object.js +21 -2
  74. package/graphqlFields/object.js.map +1 -1
  75. package/graphqlFields/ref.js +42 -14
  76. package/graphqlFields/ref.js.map +1 -1
  77. package/index.d.ts +3 -1
  78. package/index.js +22 -3
  79. package/index.js.map +1 -1
  80. package/package.json +22 -23
  81. package/plugins/CmsModelPlugin.d.ts +11 -1
  82. package/plugins/CmsModelPlugin.js +13 -2
  83. package/plugins/CmsModelPlugin.js.map +1 -1
  84. package/types.d.ts +75 -21
  85. package/types.js +1 -1
  86. package/types.js.map +1 -1
  87. package/upgrades/5.33.0/index.js +26 -3
  88. package/upgrades/5.33.0/index.js.map +1 -1
  89. package/upgrades/index.js +3 -0
  90. package/upgrades/index.js.map +1 -1
  91. package/utils/converters/valueKeyStorageConverter.d.ts +1 -1
  92. package/utils/converters/valueKeyStorageConverter.js +2 -1
  93. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  94. package/utils/createTypeFromFields.d.ts +1 -0
  95. package/utils/createTypeFromFields.js +7 -4
  96. package/utils/createTypeFromFields.js.map +1 -1
  97. package/utils/getEntryDescription.d.ts +2 -0
  98. package/utils/getEntryDescription.js +17 -0
  99. package/utils/getEntryDescription.js.map +1 -0
  100. package/utils/getEntryImage.d.ts +2 -0
  101. package/utils/getEntryImage.js +17 -0
  102. package/utils/getEntryImage.js.map +1 -0
  103. package/utils/incrementEntryIdVersion.d.ts +5 -0
  104. package/utils/incrementEntryIdVersion.js +29 -0
  105. package/utils/incrementEntryIdVersion.js.map +1 -0
  106. package/utils/ownership.d.ts +3 -3
  107. package/utils/ownership.js.map +1 -1
  108. package/utils/pluralizedTypeName.js +6 -0
  109. package/utils/pluralizedTypeName.js.map +1 -1
  110. package/utils/renderFields.d.ts +2 -1
  111. package/utils/renderFields.js +8 -1
  112. package/utils/renderFields.js.map +1 -1
  113. package/utils/renderInputFields.d.ts +2 -1
  114. package/utils/renderInputFields.js +4 -0
  115. package/utils/renderInputFields.js.map +1 -1
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.createModelsCrud = void 0;
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
8
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
10
  var _dataloader = _interopRequireDefault(require("dataloader"));
10
11
  var _error = _interopRequireDefault(require("@webiny/error"));
@@ -25,6 +26,9 @@ var _ownership = require("../utils/ownership");
25
26
  var _access = require("../utils/access");
26
27
  var _validation = require("./contentModel/validation");
27
28
  var _utils = require("@webiny/utils");
29
+ var _defaultFields = require("./contentModel/defaultFields");
30
+ var _modelApiName = require("./contentModel/compatibility/modelApiName");
31
+ const _excluded = ["defaultFields"];
28
32
  /**
29
33
  * Given a model, return an array of tags ensuring the `type` tag is set.
30
34
  */
@@ -57,7 +61,13 @@ const createModelsCrud = params => {
57
61
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, model), {}, {
58
62
  tags: ensureTypeTag(model),
59
63
  tenant: model.tenant || getTenant().id,
60
- locale: model.locale || getLocale().code
64
+ locale: model.locale || getLocale().code,
65
+ /**
66
+ * TODO: remove in v5.36.0
67
+ * This is for backward compatibility while migrations are not yet executed.
68
+ */
69
+ singularApiName: (0, _modelApiName.ensureSingularApiName)(model),
70
+ pluralApiName: (0, _modelApiName.ensurePluralApiName)(model)
61
71
  });
62
72
  })];
63
73
  })
@@ -258,7 +268,17 @@ const createModelsCrud = params => {
258
268
  if (!result.success) {
259
269
  throw (0, _utils.createZodError)(result.error);
260
270
  }
261
- const data = result.data;
271
+ /**
272
+ * We need to extract the defaultFields because it is not for the CmsModel object.
273
+ */
274
+ const _removeUndefinedValue = (0, _utils.removeUndefinedValues)(result.data),
275
+ {
276
+ defaultFields
277
+ } = _removeUndefinedValue,
278
+ data = (0, _objectWithoutProperties2.default)(_removeUndefinedValue, _excluded);
279
+ if (defaultFields) {
280
+ (0, _defaultFields.assignModelDefaultFields)(data);
281
+ }
262
282
  context.security.disableAuthorization();
263
283
  const group = await context.cms.getGroup(data.group);
264
284
  context.security.enableAuthorization();
@@ -266,11 +286,14 @@ const createModelsCrud = params => {
266
286
  throw new _handlerGraphql.NotFoundError(`There is no group "${data.group}".`);
267
287
  }
268
288
  const identity = getIdentity();
269
- const model = {
270
- name: data.name,
271
- description: data.description || "",
289
+ const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, data), {}, {
272
290
  modelId: data.modelId || "",
291
+ singularApiName: data.singularApiName,
292
+ pluralApiName: data.pluralApiName,
273
293
  titleFieldId: "id",
294
+ descriptionFieldId: null,
295
+ imageFieldId: null,
296
+ description: data.description || "",
274
297
  locale: getLocale().code,
275
298
  tenant: getTenant().id,
276
299
  group: {
@@ -284,12 +307,9 @@ const createModelsCrud = params => {
284
307
  },
285
308
  createdOn: new Date().toISOString(),
286
309
  savedOn: new Date().toISOString(),
287
- fields: data.fields,
288
310
  lockedFields: [],
289
- layout: data.layout || [],
290
- tags: [...(data.tags || [])],
291
311
  webinyVersion: context.WEBINY_VERSION
292
- };
312
+ });
293
313
  model.tags = ensureTypeTag(model);
294
314
  try {
295
315
  await onModelBeforeCreate.publish({
@@ -362,17 +382,13 @@ const createModelsCrud = params => {
362
382
  * Get a model record; this will also perform ownership validation.
363
383
  */
364
384
  const original = await getModel(modelId);
365
- const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync({
366
- name: userInput.name,
367
- modelId: userInput.modelId,
368
- description: userInput.description || original.description,
369
- group: userInput.group,
370
- locale: userInput.locale
371
- });
385
+ const result = await (0, _validation.createModelCreateFromValidation)().safeParseAsync((0, _objectSpread2.default)((0, _objectSpread2.default)({}, userInput), {}, {
386
+ description: userInput.description || original.description
387
+ }));
372
388
  if (!result.success) {
373
389
  throw (0, _utils.createZodError)(result.error);
374
390
  }
375
- const data = result.data;
391
+ const data = (0, _utils.removeUndefinedValues)(result.data);
376
392
  const locale = await context.i18n.getLocale(data.locale || original.locale);
377
393
  if (!locale) {
378
394
  throw new _handlerGraphql.NotFoundError(`There is no locale "${data.locale}".`);
@@ -390,11 +406,14 @@ const createModelsCrud = params => {
390
406
  }
391
407
  const identity = getIdentity();
392
408
  const model = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
409
+ singularApiName: data.singularApiName,
410
+ pluralApiName: data.pluralApiName,
393
411
  locale: locale.code,
394
412
  group: {
395
413
  id: group.id,
396
414
  name: group.name
397
415
  },
416
+ icon: data.icon,
398
417
  name: data.name,
399
418
  modelId: data.modelId || "",
400
419
  description: data.description || "",
@@ -444,7 +463,7 @@ const createModelsCrud = params => {
444
463
  if (!result.success) {
445
464
  throw (0, _utils.createZodError)(result.error);
446
465
  }
447
- const data = result.data;
466
+ const data = (0, _utils.removeUndefinedValues)(result.data);
448
467
  if (Object.keys(data).length === 0) {
449
468
  /**
450
469
  * We need to return the original if nothing is to be updated.
@@ -468,6 +487,9 @@ const createModelsCrud = params => {
468
487
  };
469
488
  }
470
489
  const model = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), data), {}, {
490
+ titleFieldId: data.titleFieldId === undefined ? original.titleFieldId : data.titleFieldId,
491
+ descriptionFieldId: data.descriptionFieldId === undefined ? original.descriptionFieldId : data.descriptionFieldId,
492
+ imageFieldId: data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,
471
493
  group,
472
494
  description: data.description || original.description,
473
495
  tenant: original.tenant || getTenant().id,
@@ -1 +1 @@
1
- {"version":3,"names":["ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","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","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","data","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","name","description","titleFieldId","createdBy","displayName","createdOn","Date","toISOString","savedOn","fields","lockedFields","layout","publish","createdModel","create","ex","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","userInput","createModelCreateFromValidation","i18n","groups","updateModel","createModelUpdateValidation","keys","length","groupData","deleteModel","delete","WebinyError","message","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\n\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\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 { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\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 tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\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) => {\n return 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: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map<CmsModel>(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(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 tags: ensureTypeTag(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: CmsModel[] = 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 filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return 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 checkOwnership(context, permission, model);\n await 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 /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = result.data;\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n name: data.name,\n description: data.description || \"\",\n modelId: data.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(),\n savedOn: new Date().toISOString(),\n fields: data.fields,\n lockedFields: [],\n layout: data.layout || [],\n tags: [...(data.tags || [])],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\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 try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async createModelFrom(modelId, userInput) {\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 result = await createModelCreateFromValidation().safeParseAsync({\n name: userInput.name,\n modelId: userInput.modelId,\n description: userInput.description || original.description,\n group: userInput.group,\n locale: userInput.locale\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = result.data;\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.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: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.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: data.name,\n modelId: data.modelId || \"\",\n description: data.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 try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async updateModel(modelId, input) {\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 result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = result.data;\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n if (data.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.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 onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n },\n async initializeModel(modelId, data) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["ensureTypeTag","model","tags","some","tag","startsWith","push","createModelsCrud","params","getTenant","getIdentity","getLocale","storageOperations","context","loaders","listModels","DataLoader","models","list","where","tenant","id","locale","code","map","singularApiName","ensureSingularApiName","pluralApiName","ensurePluralApiName","clearModelsCache","loader","Object","values","clearAll","managers","Map","updateManager","manager","contentModelManagerFactory","set","modelId","checkModelPermissions","check","checkPermissions","rwd","getModelsAsPlugins","plugins","byType","CmsModelPlugin","type","filter","plugin","modelTenant","modelLocale","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","onModelBeforeCreate","createTopic","onModelAfterCreate","onModelCreateError","onModelBeforeCreateFrom","onModelAfterCreateFrom","onModelCreateFromError","onModelBeforeUpdate","onModelAfterUpdate","onModelUpdateError","onModelBeforeDelete","onModelAfterDelete","onModelDeleteError","onModelInitialize","assignModelBeforeCreate","assignModelAfterCreate","assignModelBeforeUpdate","assignModelAfterUpdate","assignModelAfterCreateFrom","assignModelBeforeDelete","assignModelAfterDelete","onBeforeModelCreate","onAfterModelCreate","onBeforeModelCreateFrom","onAfterModelCreateFrom","onBeforeModelUpdate","onAfterModelUpdate","onBeforeModelDelete","onAfterModelDelete","createModel","input","result","createModelCreateValidation","safeParseAsync","success","createZodError","error","removeUndefinedValues","data","defaultFields","assignModelDefaultFields","security","disableAuthorization","group","cms","getGroup","enableAuthorization","identity","titleFieldId","descriptionFieldId","imageFieldId","description","name","createdBy","displayName","createdOn","Date","toISOString","savedOn","lockedFields","publish","createdModel","create","ex","updateModelDirect","initialModel","original","resultModel","update","createModelFrom","userInput","createModelCreateFromValidation","i18n","groups","icon","updateModel","createModelUpdateValidation","keys","length","groupData","undefined","deleteModel","delete","WebinyError","message","initializeModel","getEntryManager","getManagers","getEntryManagers"],"sources":["contentModel.crud.ts"],"sourcesContent":["import DataLoader from \"dataloader\";\nimport WebinyError from \"@webiny/error\";\nimport {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelManager,\n HeadlessCmsStorageOperations,\n OnModelBeforeCreateTopicParams,\n OnModelAfterCreateTopicParams,\n OnModelBeforeUpdateTopicParams,\n OnModelAfterUpdateTopicParams,\n OnModelBeforeDeleteTopicParams,\n OnModelAfterDeleteTopicParams,\n OnModelInitializeParams,\n OnModelBeforeCreateFromTopicParams,\n OnModelAfterCreateFromTopicParams,\n CmsModelUpdateInput,\n OnModelCreateErrorTopicParams,\n OnModelCreateFromErrorParams,\n OnModelUpdateErrorTopicParams,\n OnModelDeleteErrorTopicParams,\n CmsModelGroup\n} from \"~/types\";\n\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { contentModelManagerFactory } from \"./contentModel/contentModelManagerFactory\";\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 { assignModelBeforeCreate } from \"./contentModel/beforeCreate\";\nimport { assignModelBeforeUpdate } from \"./contentModel/beforeUpdate\";\nimport { assignModelBeforeDelete } from \"./contentModel/beforeDelete\";\nimport { assignModelAfterCreate } from \"./contentModel/afterCreate\";\nimport { assignModelAfterUpdate } from \"./contentModel/afterUpdate\";\nimport { assignModelAfterDelete } from \"./contentModel/afterDelete\";\nimport { assignModelAfterCreateFrom } from \"./contentModel/afterCreateFrom\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\nimport { checkPermissions } from \"~/utils/permissions\";\nimport { filterAsync } from \"~/utils/filterAsync\";\nimport { checkOwnership, validateOwnership } from \"~/utils/ownership\";\nimport { checkModelAccess, validateModelAccess } from \"~/utils/access\";\nimport {\n createModelCreateFromValidation,\n createModelCreateValidation,\n createModelUpdateValidation\n} from \"~/crud/contentModel/validation\";\nimport { createZodError } from \"@webiny/utils\";\nimport { assignModelDefaultFields } from \"~/crud/contentModel/defaultFields\";\nimport { removeUndefinedValues } from \"@webiny/utils\";\nimport {\n ensurePluralApiName,\n ensureSingularApiName\n} from \"./contentModel/compatibility/modelApiName\";\n\n/**\n * Given a model, return an array of tags ensuring the `type` tag is set.\n */\nconst ensureTypeTag = (model: Pick<CmsModel, \"tags\">) => {\n // Let's make sure we have a `type` tag assigned.\n // If `type` tag is not set, set it to a default one (`model`).\n const tags = model.tags || [];\n if (!tags.some(tag => tag.startsWith(\"type:\"))) {\n tags.push(\"type:model\");\n }\n\n return tags;\n};\n\nexport interface CreateModelsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\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 tags: ensureTypeTag(model),\n tenant: model.tenant || getTenant().id,\n locale: model.locale || getLocale().code,\n /**\n * TODO: remove in v5.36.0\n * This is for backward compatibility while migrations are not yet executed.\n */\n singularApiName: ensureSingularApiName(model),\n pluralApiName: ensurePluralApiName(model)\n };\n })\n ];\n })\n };\n\n const clearModelsCache = (): void => {\n for (const loader of Object.values(loaders)) {\n loader.clearAll();\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) => {\n return 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: modelTenant, locale: modelLocale } = plugin.contentModel;\n if (modelTenant && modelTenant !== tenant) {\n return false;\n } else if (modelLocale && modelLocale !== locale) {\n return false;\n }\n return true;\n })\n .map(plugin => {\n return {\n ...plugin.contentModel,\n tags: ensureTypeTag(plugin.contentModel),\n tenant,\n locale,\n webinyVersion: context.WEBINY_VERSION\n };\n })\n );\n };\n\n const modelsGet = async (modelId: string) => {\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 tags: ensureTypeTag(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: CmsModel[] = 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 filterAsync(models, async model => {\n if (!validateOwnership(context, permission, model)) {\n return false;\n }\n return 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 checkOwnership(context, permission, model);\n await 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 /**\n * Create\n */\n const onModelBeforeCreate =\n createTopic<OnModelBeforeCreateTopicParams>(\"cms.onModelBeforeCreate\");\n const onModelAfterCreate = createTopic<OnModelAfterCreateTopicParams>(\"cms.onModelAfterCreate\");\n const onModelCreateError = createTopic<OnModelCreateErrorTopicParams>(\"cms.onModelCreateError\");\n /**\n * Create from / clone\n */\n const onModelBeforeCreateFrom = createTopic<OnModelBeforeCreateFromTopicParams>(\n \"cms.onModelBeforeCreateFrom\"\n );\n const onModelAfterCreateFrom = createTopic<OnModelAfterCreateFromTopicParams>(\n \"cms.onModelAfterCreateFrom\"\n );\n const onModelCreateFromError = createTopic<OnModelCreateFromErrorParams>(\n \"cms.onModelCreateFromError\"\n );\n /**\n * Update\n */\n const onModelBeforeUpdate =\n createTopic<OnModelBeforeUpdateTopicParams>(\"cms.onModelBeforeUpdate\");\n const onModelAfterUpdate = createTopic<OnModelAfterUpdateTopicParams>(\"cms.onModelAfterUpdate\");\n const onModelUpdateError = createTopic<OnModelUpdateErrorTopicParams>(\"cms.onModelUpdateError\");\n /**\n * Delete\n */\n const onModelBeforeDelete =\n createTopic<OnModelBeforeDeleteTopicParams>(\"cms.onModelBeforeDelete\");\n const onModelAfterDelete = createTopic<OnModelAfterDeleteTopicParams>(\"cms.onModelAfterDelete\");\n const onModelDeleteError = createTopic<OnModelDeleteErrorTopicParams>(\"cms.onModelDeleteError\");\n /**\n * Initialize\n */\n const onModelInitialize = createTopic<OnModelInitializeParams>(\"cms.onModelInitialize\");\n /**\n * We need to assign some default behaviors.\n */\n assignModelBeforeCreate({\n onModelBeforeCreate,\n onModelBeforeCreateFrom,\n context,\n storageOperations\n });\n assignModelAfterCreate({\n context,\n onModelAfterCreate\n });\n assignModelBeforeUpdate({\n onModelBeforeUpdate,\n context\n });\n assignModelAfterUpdate({\n context,\n onModelAfterUpdate\n });\n assignModelAfterCreateFrom({\n context,\n onModelAfterCreateFrom\n });\n assignModelBeforeDelete({\n onModelBeforeDelete,\n plugins: context.plugins,\n storageOperations\n });\n assignModelAfterDelete({\n context,\n onModelAfterDelete\n });\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeModelCreate: onModelBeforeCreate,\n onAfterModelCreate: onModelAfterCreate,\n onBeforeModelCreateFrom: onModelBeforeCreateFrom,\n onAfterModelCreateFrom: onModelAfterCreateFrom,\n onBeforeModelUpdate: onModelBeforeUpdate,\n onAfterModelUpdate: onModelAfterUpdate,\n onBeforeModelDelete: onModelBeforeDelete,\n onAfterModelDelete: onModelAfterDelete,\n /**\n * Released in 5.34.0\n */\n onModelBeforeCreate,\n onModelAfterCreate,\n onModelCreateError,\n onModelBeforeCreateFrom,\n onModelAfterCreateFrom,\n onModelCreateFromError,\n onModelBeforeUpdate,\n onModelAfterUpdate,\n onModelUpdateError,\n onModelBeforeDelete,\n onModelAfterDelete,\n onModelDeleteError,\n onModelInitialize,\n clearModelsCache,\n getModel,\n listModels,\n async createModel(input) {\n await checkModelPermissions(\"w\");\n\n const result = await createModelCreateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n /**\n * We need to extract the defaultFields because it is not for the CmsModel object.\n */\n const { defaultFields, ...data } = removeUndefinedValues(result.data);\n if (defaultFields) {\n assignModelDefaultFields(data);\n }\n\n context.security.disableAuthorization();\n const group = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...data,\n modelId: data.modelId || \"\",\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n titleFieldId: \"id\",\n descriptionFieldId: null,\n imageFieldId: null,\n description: data.description || \"\",\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(),\n savedOn: new Date().toISOString(),\n lockedFields: [],\n webinyVersion: context.WEBINY_VERSION\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeCreate.publish({\n input: data,\n model\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreate.publish({\n input: data,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateError.publish({\n input: data,\n model,\n error: ex\n });\n throw ex;\n }\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 try {\n await onModelBeforeUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n loaders.listModels.clearAll();\n\n await onModelAfterUpdate.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: {} as CmsModelUpdateInput,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async createModelFrom(modelId, userInput) {\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 result = await createModelCreateFromValidation().safeParseAsync({\n ...userInput,\n description: userInput.description || original.description\n });\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n const locale = await context.i18n.getLocale(data.locale || original.locale);\n if (!locale) {\n throw new NotFoundError(`There is no locale \"${data.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: data.group,\n tenant: original.tenant,\n locale: locale.code\n });\n if (!group) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n\n const identity = getIdentity();\n const model: CmsModel = {\n ...original,\n singularApiName: data.singularApiName,\n pluralApiName: data.pluralApiName,\n locale: locale.code,\n group: {\n id: group.id,\n name: group.name\n },\n icon: data.icon,\n name: data.name,\n modelId: data.modelId || \"\",\n description: data.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 try {\n await onModelBeforeCreateFrom.publish({\n input: data,\n model,\n original\n });\n\n const createdModel = await storageOperations.models.create({\n model\n });\n\n loaders.listModels.clearAll();\n\n await updateManager(context, model);\n\n await onModelAfterCreateFrom.publish({\n input: data,\n original,\n model: createdModel\n });\n\n return createdModel;\n } catch (ex) {\n await onModelCreateFromError.publish({\n input: data,\n original,\n model,\n error: ex\n });\n throw ex;\n }\n },\n async updateModel(modelId, input) {\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 result = await createModelUpdateValidation().safeParseAsync(input);\n if (!result.success) {\n throw createZodError(result.error);\n }\n\n const data = removeUndefinedValues(result.data);\n\n if (Object.keys(data).length === 0) {\n /**\n * We need to return the original if nothing is to be updated.\n */\n return original;\n }\n let group: CmsModelGroup = {\n id: original.group.id,\n name: original.group.name\n };\n if (data.group) {\n context.security.disableAuthorization();\n const groupData = await context.cms.getGroup(data.group);\n context.security.enableAuthorization();\n if (!groupData) {\n throw new NotFoundError(`There is no group \"${data.group}\".`);\n }\n group = {\n id: groupData.id,\n name: groupData.name\n };\n }\n const model: CmsModel = {\n ...original,\n ...data,\n titleFieldId:\n data.titleFieldId === undefined\n ? original.titleFieldId\n : (data.titleFieldId as string),\n descriptionFieldId:\n data.descriptionFieldId === undefined\n ? original.descriptionFieldId\n : data.descriptionFieldId,\n imageFieldId:\n data.imageFieldId === undefined ? original.imageFieldId : data.imageFieldId,\n group,\n description: data.description || original.description,\n tenant: original.tenant || getTenant().id,\n locale: original.locale || getLocale().code,\n webinyVersion: context.WEBINY_VERSION,\n savedOn: new Date().toISOString()\n };\n\n model.tags = ensureTypeTag(model);\n\n try {\n await onModelBeforeUpdate.publish({\n input: data,\n original,\n model\n });\n\n const resultModel = await storageOperations.models.update({\n model\n });\n\n await updateManager(context, resultModel);\n\n await onModelAfterUpdate.publish({\n input: data,\n original,\n model: resultModel\n });\n\n return resultModel;\n } catch (ex) {\n await onModelUpdateError.publish({\n input: data,\n model,\n original,\n error: ex\n });\n\n throw ex;\n }\n },\n async deleteModel(modelId) {\n await checkModelPermissions(\"d\");\n\n const model = await getModel(modelId);\n\n try {\n await onModelBeforeDelete.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 onModelAfterDelete.publish({\n model\n });\n\n managers.delete(model.modelId);\n } catch (ex) {\n await onModelDeleteError.publish({\n model,\n error: ex\n });\n throw ex;\n }\n },\n async initializeModel(modelId, data) {\n /**\n * We require that users have write permissions to initialize models.\n * Maybe introduce another permission for it?\n */\n await checkModelPermissions(\"w\");\n\n const model = await getModel(modelId);\n\n await onModelInitialize.publish({ model, data });\n\n return true;\n },\n getModelManager,\n getEntryManager: async model => {\n return getModelManager(model);\n },\n getManagers: () => managers,\n getEntryManagers: () => managers\n };\n};\n"],"mappings":"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"}
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createSystemCrud = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _crypto = _interopRequireDefault(require("crypto"));
10
9
  var _apiSecurity = require("@webiny/api-security");
11
- var _apiUpgrade = require("@webiny/api-upgrade");
12
10
  var _error = _interopRequireDefault(require("@webiny/error"));
13
11
  var _pubsub = require("@webiny/pubsub");
14
12
  const initialContentModelGroup = {
@@ -28,9 +26,6 @@ const createSystemCrud = params => {
28
26
  const onSystemBeforeInstall = (0, _pubsub.createTopic)("cms.onSystemBeforeInstall");
29
27
  const onSystemAfterInstall = (0, _pubsub.createTopic)("cms.onSystemAfterInstall");
30
28
  const onSystemInstallError = (0, _pubsub.createTopic)("cms.onSystemInstallError");
31
- const createReadAPIKey = () => {
32
- return _crypto.default.randomBytes(Math.ceil(48 / 2)).toString("hex");
33
- };
34
29
  const getVersion = async () => {
35
30
  if (!getTenant()) {
36
31
  return null;
@@ -72,25 +67,6 @@ const createSystemCrud = params => {
72
67
  onSystemInstallError,
73
68
  getSystemVersion: getVersion,
74
69
  setSystemVersion: setVersion,
75
- getReadAPIKey: async () => {
76
- const original = await storageOperations.system.get({
77
- tenant: getTenant().id
78
- });
79
- if (!original) {
80
- return null;
81
- }
82
- if (!original.readAPIKey) {
83
- const readAPIKey = createReadAPIKey();
84
- const system = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), {}, {
85
- readAPIKey
86
- });
87
- await storageOperations.system.update({
88
- system
89
- });
90
- return readAPIKey;
91
- }
92
- return original.readAPIKey;
93
- },
94
70
  installSystem: async () => {
95
71
  const identity = getIdentity();
96
72
  if (!identity) {
@@ -121,7 +97,6 @@ const createSystemCrud = params => {
121
97
  }
122
98
  const system = {
123
99
  version: context.WEBINY_VERSION,
124
- readAPIKey: createReadAPIKey(),
125
100
  tenant: getTenant().id
126
101
  };
127
102
  /**
@@ -145,41 +120,6 @@ const createSystemCrud = params => {
145
120
  });
146
121
  throw new _error.default(ex.message, ex.code, ex.data);
147
122
  }
148
- },
149
- async upgradeSystem(version) {
150
- const identity = getIdentity();
151
- if (!identity) {
152
- throw new _apiSecurity.NotAuthorizedError();
153
- }
154
- const upgradePlugins = context.plugins.byType("api-upgrade").filter(pl => pl.app === "headless-cms");
155
- const installedAppVersion = await this.getSystemVersion();
156
- let plugin = undefined;
157
- try {
158
- plugin = (0, _apiUpgrade.getApplicablePlugin)({
159
- deployedVersion: context.WEBINY_VERSION,
160
- installedAppVersion,
161
- upgradePlugins,
162
- upgradeToVersion: version
163
- });
164
- } catch (ex) {
165
- /**
166
- * We just let the error disappear if is UPGRADE_NOT_AVAILABLE code
167
- * and rethrow if is not.
168
- * This is because we want upgrade to pass if there is no plugin available.
169
- */
170
- if (ex.code !== _apiUpgrade.ErrorCode.UPGRADE_NOT_AVAILABLE) {
171
- throw ex;
172
- }
173
- }
174
- if (plugin) {
175
- await plugin.apply(context);
176
- }
177
-
178
- /**
179
- * Store new app version.
180
- */
181
- await setVersion(version);
182
- return true;
183
123
  }
184
124
  };
185
125
  };
@@ -1 +1 @@
1
- {"version":3,"names":["initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","createReadAPIKey","crypto","randomBytes","Math","ceil","toString","getVersion","system","get","tenant","id","version","setVersion","original","create","update","onBeforeSystemInstall","onAfterSystemInstall","getSystemVersion","setSystemVersion","getReadAPIKey","readAPIKey","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","error","data","upgradeSystem","upgradePlugins","plugins","byType","filter","pl","app","installedAppVersion","plugin","undefined","getApplicablePlugin","deployedVersion","upgradeToVersion","ErrorCode","UPGRADE_NOT_AVAILABLE","apply"],"sources":["system.crud.ts"],"sourcesContent":["import crypto from \"crypto\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { ErrorCode, getApplicablePlugin } from \"@webiny/api-upgrade\";\nimport { UpgradePlugin } from \"@webiny/api-upgrade/types\";\nimport WebinyError from \"@webiny/error\";\nimport {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCms,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const createReadAPIKey = () => {\n return crypto.randomBytes(Math.ceil(48 / 2)).toString(\"hex\");\n };\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeSystemInstall: onSystemBeforeInstall,\n onAfterSystemInstall: onSystemAfterInstall,\n /**\n * Released in 5.34.0\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n getReadAPIKey: async () => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n if (!original) {\n return null;\n }\n\n if (!original.readAPIKey) {\n const readAPIKey = createReadAPIKey();\n const system: CmsSystem = {\n ...original,\n readAPIKey\n };\n await storageOperations.system.update({\n system\n });\n return readAPIKey;\n }\n\n return original.readAPIKey;\n },\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n readAPIKey: createReadAPIKey(),\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n },\n async upgradeSystem(this: HeadlessCms, version) {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const upgradePlugins = context.plugins\n .byType<UpgradePlugin>(\"api-upgrade\")\n .filter(pl => pl.app === \"headless-cms\");\n\n const installedAppVersion = await this.getSystemVersion();\n\n let plugin: UpgradePlugin | undefined = undefined;\n try {\n plugin = getApplicablePlugin({\n deployedVersion: context.WEBINY_VERSION,\n installedAppVersion,\n upgradePlugins,\n upgradeToVersion: version\n });\n } catch (ex) {\n /**\n * We just let the error disappear if is UPGRADE_NOT_AVAILABLE code\n * and rethrow if is not.\n * This is because we want upgrade to pass if there is no plugin available.\n */\n if (ex.code !== ErrorCode.UPGRADE_NOT_AVAILABLE) {\n throw ex;\n }\n }\n\n if (plugin) {\n await plugin.apply(context);\n }\n\n /**\n * Store new app version.\n */\n await setVersion(version);\n\n return true;\n }\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onSystemBeforeInstall","createTopic","onSystemAfterInstall","onSystemInstallError","getVersion","system","get","tenant","id","version","setVersion","original","create","update","onBeforeSystemInstall","onAfterSystemInstall","getSystemVersion","setSystemVersion","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","error","data"],"sources":["system.crud.ts"],"sourcesContent":["import { NotAuthorizedError } from \"@webiny/api-security\";\nimport WebinyError from \"@webiny/error\";\nimport {\n OnSystemAfterInstallTopicParams,\n OnSystemBeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCmsStorageOperations,\n OnSystemInstallErrorTopicParams\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onSystemBeforeInstall = createTopic<OnSystemBeforeInstallTopicParams>(\n \"cms.onSystemBeforeInstall\"\n );\n const onSystemAfterInstall = createTopic<OnSystemAfterInstallTopicParams>(\n \"cms.onSystemAfterInstall\"\n );\n\n const onSystemInstallError = createTopic<OnSystemInstallErrorTopicParams>(\n \"cms.onSystemInstallError\"\n );\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system?.version || null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n /**\n * Deprecated - will be removed in 5.36.0\n */\n onBeforeSystemInstall: onSystemBeforeInstall,\n onAfterSystemInstall: onSystemAfterInstall,\n /**\n * Released in 5.34.0\n */\n onSystemBeforeInstall,\n onSystemAfterInstall,\n onSystemInstallError,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n try {\n /**\n * First trigger before install event.\n */\n await onSystemBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(\n ex.message,\n \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\",\n {\n group: initialContentModelGroup\n }\n );\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onSystemAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n } catch (ex) {\n await onSystemInstallError.publish({\n error: ex,\n tenant: getTenant().id,\n locale: getLocale().code\n });\n throw new WebinyError(ex.message, ex.code, ex.data);\n }\n }\n };\n};\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
- import { CmsContext } from "../types";
1
+ import { CmsGraphQLSchemaPlugin } from "../plugins";
3
2
  interface Params {
4
- plugins: GraphQLSchemaPlugin<CmsContext>[];
3
+ plugins: CmsGraphQLSchemaPlugin[];
5
4
  }
6
5
  export declare const createExecutableSchema: (params: Params) => import("graphql").GraphQLSchema;
7
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"names":["createExecutableSchema","params","plugins","typeDefs","resolvers","plugin","push","schema","makeExecutableSchema"],"sources":["createExecutableSchema.ts"],"sourcesContent":["import { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { CmsContext } from \"~/types\";\n\ninterface Params {\n plugins: GraphQLSchemaPlugin<CmsContext>[];\n}\nexport const createExecutableSchema = (params: Params) => {\n const { plugins } = params;\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 for (const plugin of plugins) {\n typeDefs.push(plugin.schema.typeDefs);\n resolvers.push(plugin.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n"],"mappings":";;;;;;AAAA;AAOO,MAAMA,sBAAsB,GAAIC,MAAc,IAAK;EACtD,MAAM;IAAEC;EAAQ,CAAC,GAAGD,MAAM;EAC1B;AACJ;AACA;EACI;EACA,MAAME,QAAa,GAAG,EAAE;EACxB,MAAMC,SAAc,GAAG,EAAE;;EAEzB;EACA,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;IAC1BC,QAAQ,CAACG,IAAI,CAACD,MAAM,CAACE,MAAM,CAACJ,QAAQ,CAAC;IACrCC,SAAS,CAACE,IAAI,CAACD,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC;EAC3C;EAEA,OAAO,IAAAI,4BAAoB,EAAC;IACxBL,QAAQ;IACRC;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["createExecutableSchema","params","plugins","typeDefs","resolvers","plugin","push","schema","makeExecutableSchema"],"sources":["createExecutableSchema.ts"],"sourcesContent":["import { makeExecutableSchema } from \"@graphql-tools/schema\";\nimport { CmsGraphQLSchemaPlugin } from \"~/plugins\";\n\ninterface Params {\n plugins: CmsGraphQLSchemaPlugin[];\n}\n\nexport const createExecutableSchema = (params: Params) => {\n const { plugins } = params;\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 for (const plugin of plugins) {\n typeDefs.push(plugin.schema.typeDefs);\n resolvers.push(plugin.schema.resolvers);\n }\n\n return makeExecutableSchema({\n typeDefs,\n resolvers\n });\n};\n"],"mappings":";;;;;;AAAA;AAOO,MAAMA,sBAAsB,GAAIC,MAAc,IAAK;EACtD,MAAM;IAAEC;EAAQ,CAAC,GAAGD,MAAM;EAC1B;AACJ;AACA;EACI;EACA,MAAME,QAAa,GAAG,EAAE;EACxB,MAAMC,SAAc,GAAG,EAAE;;EAEzB;EACA,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;IAC1BC,QAAQ,CAACG,IAAI,CAACD,MAAM,CAACE,MAAM,CAACJ,QAAQ,CAAC;IACrCC,SAAS,CAACE,IAAI,CAACD,MAAM,CAACE,MAAM,CAACH,SAAS,CAAC;EAC3C;EAEA,OAAO,IAAAI,4BAAoB,EAAC;IACxBL,QAAQ;IACRC;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
@@ -50,9 +50,14 @@ const getSchema = async params => {
50
50
  if ((cachedSchema === null || cachedSchema === void 0 ? void 0 : cachedSchema.key) === cacheKey) {
51
51
  return cachedSchema.schema;
52
52
  }
53
- // Load model data
53
+ /**
54
+ * We need all the API models.
55
+ * Private models are hidden in the GraphQL, so filter them out.
56
+ */
54
57
  context.security.disableAuthorization();
55
- const models = (await context.cms.listModels()).filter(model => model.isPrivate !== true);
58
+ const models = (await context.cms.listModels()).filter(model => {
59
+ return model.isPrivate !== true;
60
+ });
56
61
  context.security.enableAuthorization();
57
62
  try {
58
63
  const schema = await (0, _generateSchema.generateSchema)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, params), {}, {
@@ -138,24 +143,24 @@ const cmsRoutes = new _handler.RoutePlugin(({
138
143
  type: context.cms.type
139
144
  });
140
145
  } catch (ex) {
141
- console.log(`Error while generating the schema.`);
142
- console.log(formatErrorPayload(ex));
146
+ console.error(`Error while generating the schema.`);
147
+ console.error(formatErrorPayload(ex));
143
148
  throw ex;
144
149
  }
145
150
  let body = [];
146
151
  try {
147
152
  body = createRequestBody(request.body);
148
153
  } catch (ex) {
149
- console.log(`Error while creating the body request.`);
150
- console.log(formatErrorPayload(ex));
154
+ console.error(`Error while creating the body request.`);
155
+ console.error(formatErrorPayload(ex));
151
156
  throw ex;
152
157
  }
153
158
  try {
154
159
  const result = await (0, _processRequestBody.default)(body, schema, context);
155
160
  return reply.code(200).send(result);
156
161
  } catch (ex) {
157
- console.log(`Error while processing the body request.`);
158
- console.log(formatErrorPayload(ex));
162
+ console.error(`Error while processing the body request.`);
163
+ console.error(formatErrorPayload(ex));
159
164
  throw ex;
160
165
  }
161
166
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createRequestBody","body","JSON","parse","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","cachedSchema","get","key","schema","security","disableAuthorization","models","listModels","filter","model","isPrivate","enableAuthorization","generateSchema","set","err","Array","isArray","locations","WebinyError","message","data","location","invalidSegment","codeFrame","source","line","column","frameSize","checkEndpointAccess","permission","getPermission","NotAuthorizedError","reason","formatErrorPayload","error","stringify","name","stack","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","getLocale","console","log","result","processRequestBody","_","status","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { ApiEndpoint, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } 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 { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\n// @ts-ignore `code-frame` has no types\nimport codeFrame from \"code-frame\";\nimport { generateSchema } from \"~/graphql/generateSchema\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst createRequestBody = (body: unknown): GraphQLRequestBody | GraphQLRequestBody[] => {\n /**\n * We are trusting that the body payload is correct.\n * The `processRequestBody` will fail if it is not.\n */\n return typeof body === \"string\" ? JSON.parse(body) : body;\n};\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): 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\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\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n const cachedSchema = schemaList.get(id);\n if (cachedSchema?.key === cacheKey) {\n return cachedSchema.schema;\n }\n // Load model data\n context.security.disableAuthorization();\n const models = (await context.cms.listModels()).filter(model => model.isPrivate !== true);\n context.security.enableAuthorization();\n try {\n const schema = await generateSchema({\n ...params,\n models\n });\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n } catch (err) {\n if (!Array.isArray(err.locations)) {\n throw new WebinyError({\n message: err.message,\n code: err.code || \"INVALID_GRAPHQL_SCHEMA_LOCATIONS\",\n data: {\n ...(err.data || {}),\n locations: err.locations\n }\n });\n }\n const [location] = err.locations;\n\n throw new WebinyError({\n code: \"INVALID_GRAPHQL_SCHEMA\",\n message: err.message,\n data: {\n invalidSegment: codeFrame(err.source.body, location.line, location.column, {\n frameSize: 15\n })\n }\n });\n }\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\nconst formatErrorPayload = (error: Error): string => {\n if (error instanceof WebinyError) {\n return JSON.stringify({\n type: \"CmsGraphQLWebinyError\",\n message: error.message,\n code: error.code,\n data: error.data\n });\n }\n\n return JSON.stringify({\n type: \"Error\",\n name: error.name,\n message: error.message,\n stack: error.stack\n });\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n let schema: GraphQLSchema;\n try {\n schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n } catch (ex) {\n console.log(`Error while generating the schema.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n\n let body: GraphQLRequestBody | GraphQLRequestBody[] = [];\n try {\n body = createRequestBody(request.body);\n } catch (ex) {\n console.log(`Error while creating the body request.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n\n try {\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n } catch (ex) {\n console.log(`Error while processing the body request.`);\n console.log(formatErrorPayload(ex));\n throw ex;\n }\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.status(204).send({}).hijack();\n });\n});\n\ncmsRoutes.name = \"headless-cms.graphql.route.default\";\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createRequestBody","body","JSON","parse","schemaList","Map","generateCacheKey","args","context","locale","type","lastModelChange","cms","getModelLastChange","code","toISOString","join","getSchema","params","tenantId","tenancy","getCurrentTenant","id","cacheKey","cachedSchema","get","key","schema","security","disableAuthorization","models","listModels","filter","model","isPrivate","enableAuthorization","generateSchema","set","err","Array","isArray","locations","WebinyError","message","data","location","invalidSegment","codeFrame","source","line","column","frameSize","checkEndpointAccess","permission","getPermission","NotAuthorizedError","reason","formatErrorPayload","error","stringify","name","stack","cmsRoutes","RoutePlugin","onPost","onOptions","request","reply","ex","send","getLocale","console","result","processRequestBody","_","status","hijack","graphQLHandlerFactory","debug","debugPlugins"],"sources":["graphQLHandlerFactory.ts"],"sourcesContent":["import { GraphQLSchema } from \"graphql\";\nimport { ApiEndpoint, CmsModel, CmsContext } from \"~/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\nimport { NotAuthorizedError } 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 { GraphQLRequestBody } from \"@webiny/handler-graphql/types\";\nimport { RoutePlugin } from \"@webiny/handler\";\nimport WebinyError from \"@webiny/error\";\n// @ts-ignore `code-frame` has no types\nimport codeFrame from \"code-frame\";\nimport { generateSchema } from \"~/graphql/generateSchema\";\n\ninterface SchemaCache {\n key: string;\n schema: GraphQLSchema;\n}\n\ninterface GetSchemaParams {\n context: CmsContext;\n type: ApiEndpoint;\n locale: I18NLocale;\n}\n\nconst createRequestBody = (body: unknown): GraphQLRequestBody | GraphQLRequestBody[] => {\n /**\n * We are trusting that the body payload is correct.\n * The `processRequestBody` will fail if it is not.\n */\n return typeof body === \"string\" ? JSON.parse(body) : body;\n};\n\nconst schemaList = new Map<string, SchemaCache>();\n\nconst generateCacheKey = async (args: GetSchemaParams): 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\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\n */\nconst getSchema = async (params: GetSchemaParams): Promise<GraphQLSchema> => {\n const { context, type, locale } = params;\n const tenantId = context.tenancy.getCurrentTenant().id;\n const id = `${tenantId}#${type}#${locale.code}`;\n\n const cacheKey = await generateCacheKey(params);\n const cachedSchema = schemaList.get(id);\n if (cachedSchema?.key === cacheKey) {\n return cachedSchema.schema;\n }\n /**\n * We need all the API models.\n * Private models are hidden in the GraphQL, so filter them out.\n */\n context.security.disableAuthorization();\n const models = (await context.cms.listModels()).filter((model): model is CmsModel => {\n return model.isPrivate !== true;\n });\n context.security.enableAuthorization();\n try {\n const schema = await generateSchema({\n ...params,\n models\n });\n schemaList.set(id, {\n key: cacheKey,\n schema\n });\n return schema;\n } catch (err) {\n if (!Array.isArray(err.locations)) {\n throw new WebinyError({\n message: err.message,\n code: err.code || \"INVALID_GRAPHQL_SCHEMA_LOCATIONS\",\n data: {\n ...(err.data || {}),\n locations: err.locations\n }\n });\n }\n const [location] = err.locations;\n\n throw new WebinyError({\n code: \"INVALID_GRAPHQL_SCHEMA\",\n message: err.message,\n data: {\n invalidSegment: codeFrame(err.source.body, location.line, location.column, {\n frameSize: 15\n })\n }\n });\n }\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\nconst formatErrorPayload = (error: Error): string => {\n if (error instanceof WebinyError) {\n return JSON.stringify({\n type: \"CmsGraphQLWebinyError\",\n message: error.message,\n code: error.code,\n data: error.data\n });\n }\n\n return JSON.stringify({\n type: \"Error\",\n name: error.name,\n message: error.message,\n stack: error.stack\n });\n};\n\nexport interface GraphQLHandlerFactoryParams {\n debug?: boolean;\n}\n\nconst cmsRoutes = new RoutePlugin<CmsContext>(({ onPost, onOptions, context }) => {\n onPost(\"/cms/:type(^manage|preview|read$)/:locale\", async (request, reply) => {\n try {\n await checkEndpointAccess(context);\n } catch (ex) {\n return reply.code(401).send({\n data: null,\n error: {\n message: ex.message || \"Not authorized!\",\n code: ex.code || \"SECURITY_NOT_AUTHORIZED\",\n data: ex.data || null,\n stack: null\n }\n });\n }\n\n let schema: GraphQLSchema;\n try {\n schema = await getSchema({\n context,\n locale: context.cms.getLocale(),\n type: context.cms.type as ApiEndpoint\n });\n } catch (ex) {\n console.error(`Error while generating the schema.`);\n console.error(formatErrorPayload(ex));\n throw ex;\n }\n\n let body: GraphQLRequestBody | GraphQLRequestBody[] = [];\n try {\n body = createRequestBody(request.body);\n } catch (ex) {\n console.error(`Error while creating the body request.`);\n console.error(formatErrorPayload(ex));\n throw ex;\n }\n\n try {\n const result = await processRequestBody(body, schema, context);\n return reply.code(200).send(result);\n } catch (ex) {\n console.error(`Error while processing the body request.`);\n console.error(formatErrorPayload(ex));\n throw ex;\n }\n });\n\n onOptions(\"/cms/:type(^manage|preview|read$)/:locale\", async (_, reply) => {\n return reply.status(204).send({}).hijack();\n });\n});\n\ncmsRoutes.name = \"headless-cms.graphql.route.default\";\n\nexport const graphQLHandlerFactory = ({ debug }: GraphQLHandlerFactoryParams): PluginCollection => {\n return [\n ...(debug ? debugPlugins() : []),\n cmsRoutes,\n {\n type: \"wcp-telemetry-tracker\"\n }\n ];\n};\n"],"mappings":";;;;;;;;AAGA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAFA;;AAeA,MAAMA,iBAAiB,GAAIC,IAAa,IAAgD;EACpF;AACJ;AACA;AACA;EACI,OAAO,OAAOA,IAAI,KAAK,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC,GAAGA,IAAI;AAC7D,CAAC;AAED,MAAMG,UAAU,GAAG,IAAIC,GAAG,EAAuB;AAEjD,MAAMC,gBAAgB,GAAG,MAAOC,IAAqB,IAAsB;EACvE,MAAM;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAK,CAAC,GAAGH,IAAI;EACtC,MAAMI,eAAe,GAAG,MAAMH,OAAO,CAACI,GAAG,CAACC,kBAAkB,EAAE;EAC9D,OAAO,CAACJ,MAAM,CAACK,IAAI,EAAEJ,IAAI,EAAEC,eAAe,CAACI,WAAW,EAAE,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;AACvE,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAG,MAAOC,MAAuB,IAA6B;EACzE,MAAM;IAAEV,OAAO;IAAEE,IAAI;IAAED;EAAO,CAAC,GAAGS,MAAM;EACxC,MAAMC,QAAQ,GAAGX,OAAO,CAACY,OAAO,CAACC,gBAAgB,EAAE,CAACC,EAAE;EACtD,MAAMA,EAAE,GAAI,GAAEH,QAAS,IAAGT,IAAK,IAAGD,MAAM,CAACK,IAAK,EAAC;EAE/C,MAAMS,QAAQ,GAAG,MAAMjB,gBAAgB,CAACY,MAAM,CAAC;EAC/C,MAAMM,YAAY,GAAGpB,UAAU,CAACqB,GAAG,CAACH,EAAE,CAAC;EACvC,IAAI,CAAAE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEE,GAAG,MAAKH,QAAQ,EAAE;IAChC,OAAOC,YAAY,CAACG,MAAM;EAC9B;EACA;AACJ;AACA;AACA;EACInB,OAAO,CAACoB,QAAQ,CAACC,oBAAoB,EAAE;EACvC,MAAMC,MAAM,GAAG,CAAC,MAAMtB,OAAO,CAACI,GAAG,CAACmB,UAAU,EAAE,EAAEC,MAAM,CAAEC,KAAK,IAAwB;IACjF,OAAOA,KAAK,CAACC,SAAS,KAAK,IAAI;EACnC,CAAC,CAAC;EACF1B,OAAO,CAACoB,QAAQ,CAACO,mBAAmB,EAAE;EACtC,IAAI;IACA,MAAMR,MAAM,GAAG,MAAM,IAAAS,8BAAc,8DAC5BlB,MAAM;MACTY;IAAM,GACR;IACF1B,UAAU,CAACiC,GAAG,CAACf,EAAE,EAAE;MACfI,GAAG,EAAEH,QAAQ;MACbI;IACJ,CAAC,CAAC;IACF,OAAOA,MAAM;EACjB,CAAC,CAAC,OAAOW,GAAG,EAAE;IACV,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,GAAG,CAACG,SAAS,CAAC,EAAE;MAC/B,MAAM,IAAIC,cAAW,CAAC;QAClBC,OAAO,EAAEL,GAAG,CAACK,OAAO;QACpB7B,IAAI,EAAEwB,GAAG,CAACxB,IAAI,IAAI,kCAAkC;QACpD8B,IAAI,8DACIN,GAAG,CAACM,IAAI,IAAI,CAAC,CAAC;UAClBH,SAAS,EAAEH,GAAG,CAACG;QAAS;MAEhC,CAAC,CAAC;IACN;IACA,MAAM,CAACI,QAAQ,CAAC,GAAGP,GAAG,CAACG,SAAS;IAEhC,MAAM,IAAIC,cAAW,CAAC;MAClB5B,IAAI,EAAE,wBAAwB;MAC9B6B,OAAO,EAAEL,GAAG,CAACK,OAAO;MACpBC,IAAI,EAAE;QACFE,cAAc,EAAE,IAAAC,kBAAS,EAACT,GAAG,CAACU,MAAM,CAAC/C,IAAI,EAAE4C,QAAQ,CAACI,IAAI,EAAEJ,QAAQ,CAACK,MAAM,EAAE;UACvEC,SAAS,EAAE;QACf,CAAC;MACL;IACJ,CAAC,CAAC;EACN;AACJ,CAAC;AAED,MAAMC,mBAAmB,GAAG,MAAO5C,OAAmB,IAAoB;EACtE,MAAM6C,UAAU,GAAG,MAAM7C,OAAO,CAACoB,QAAQ,CAAC0B,aAAa,CAAE,gBAAe9C,OAAO,CAACI,GAAG,CAACF,IAAK,EAAC,CAAC;EAC3F,IAAI,CAAC2C,UAAU,EAAE;IACb,MAAM,IAAIE,+BAAkB,CAAC;MACzBX,IAAI,EAAE;QACFY,MAAM,EAAG,0BAAyBhD,OAAO,CAACI,GAAG,CAACF,IAAK;MACvD;IACJ,CAAC,CAAC;EACN;AACJ,CAAC;AAED,MAAM+C,kBAAkB,GAAIC,KAAY,IAAa;EACjD,IAAIA,KAAK,YAAYhB,cAAW,EAAE;IAC9B,OAAOxC,IAAI,CAACyD,SAAS,CAAC;MAClBjD,IAAI,EAAE,uBAAuB;MAC7BiC,OAAO,EAAEe,KAAK,CAACf,OAAO;MACtB7B,IAAI,EAAE4C,KAAK,CAAC5C,IAAI;MAChB8B,IAAI,EAAEc,KAAK,CAACd;IAChB,CAAC,CAAC;EACN;EAEA,OAAO1C,IAAI,CAACyD,SAAS,CAAC;IAClBjD,IAAI,EAAE,OAAO;IACbkD,IAAI,EAAEF,KAAK,CAACE,IAAI;IAChBjB,OAAO,EAAEe,KAAK,CAACf,OAAO;IACtBkB,KAAK,EAAEH,KAAK,CAACG;EACjB,CAAC,CAAC;AACN,CAAC;AAMD,MAAMC,SAAS,GAAG,IAAIC,oBAAW,CAAa,CAAC;EAAEC,MAAM;EAAEC,SAAS;EAAEzD;AAAQ,CAAC,KAAK;EAC9EwD,MAAM,CAAC,2CAA2C,EAAE,OAAOE,OAAO,EAAEC,KAAK,KAAK;IAC1E,IAAI;MACA,MAAMf,mBAAmB,CAAC5C,OAAO,CAAC;IACtC,CAAC,CAAC,OAAO4D,EAAE,EAAE;MACT,OAAOD,KAAK,CAACrD,IAAI,CAAC,GAAG,CAAC,CAACuD,IAAI,CAAC;QACxBzB,IAAI,EAAE,IAAI;QACVc,KAAK,EAAE;UACHf,OAAO,EAAEyB,EAAE,CAACzB,OAAO,IAAI,iBAAiB;UACxC7B,IAAI,EAAEsD,EAAE,CAACtD,IAAI,IAAI,yBAAyB;UAC1C8B,IAAI,EAAEwB,EAAE,CAACxB,IAAI,IAAI,IAAI;UACrBiB,KAAK,EAAE;QACX;MACJ,CAAC,CAAC;IACN;IAEA,IAAIlC,MAAqB;IACzB,IAAI;MACAA,MAAM,GAAG,MAAMV,SAAS,CAAC;QACrBT,OAAO;QACPC,MAAM,EAAED,OAAO,CAACI,GAAG,CAAC0D,SAAS,EAAE;QAC/B5D,IAAI,EAAEF,OAAO,CAACI,GAAG,CAACF;MACtB,CAAC,CAAC;IACN,CAAC,CAAC,OAAO0D,EAAE,EAAE;MACTG,OAAO,CAACb,KAAK,CAAE,oCAAmC,CAAC;MACnDa,OAAO,CAACb,KAAK,CAACD,kBAAkB,CAACW,EAAE,CAAC,CAAC;MACrC,MAAMA,EAAE;IACZ;IAEA,IAAInE,IAA+C,GAAG,EAAE;IACxD,IAAI;MACAA,IAAI,GAAGD,iBAAiB,CAACkE,OAAO,CAACjE,IAAI,CAAC;IAC1C,CAAC,CAAC,OAAOmE,EAAE,EAAE;MACTG,OAAO,CAACb,KAAK,CAAE,wCAAuC,CAAC;MACvDa,OAAO,CAACb,KAAK,CAACD,kBAAkB,CAACW,EAAE,CAAC,CAAC;MACrC,MAAMA,EAAE;IACZ;IAEA,IAAI;MACA,MAAMI,MAAM,GAAG,MAAM,IAAAC,2BAAkB,EAACxE,IAAI,EAAE0B,MAAM,EAAEnB,OAAO,CAAC;MAC9D,OAAO2D,KAAK,CAACrD,IAAI,CAAC,GAAG,CAAC,CAACuD,IAAI,CAACG,MAAM,CAAC;IACvC,CAAC,CAAC,OAAOJ,EAAE,EAAE;MACTG,OAAO,CAACb,KAAK,CAAE,0CAAyC,CAAC;MACzDa,OAAO,CAACb,KAAK,CAACD,kBAAkB,CAACW,EAAE,CAAC,CAAC;MACrC,MAAMA,EAAE;IACZ;EACJ,CAAC,CAAC;EAEFH,SAAS,CAAC,2CAA2C,EAAE,OAAOS,CAAC,EAAEP,KAAK,KAAK;IACvE,OAAOA,KAAK,CAACQ,MAAM,CAAC,GAAG,CAAC,CAACN,IAAI,CAAC,CAAC,CAAC,CAAC,CAACO,MAAM,EAAE;EAC9C,CAAC,CAAC;AACN,CAAC,CAAC;AAEFd,SAAS,CAACF,IAAI,GAAG,oCAAoC;AAE9C,MAAMiB,qBAAqB,GAAG,CAAC;EAAEC;AAAmC,CAAC,KAAuB;EAC/F,OAAO,CACH,IAAIA,KAAK,GAAG,IAAAC,qBAAY,GAAE,GAAG,EAAE,CAAC,EAChCjB,SAAS,EACT;IACIpD,IAAI,EAAE;EACV,CAAC,CACJ;AACL,CAAC;AAAC"}