@webiny/api-headless-cms 5.24.0-beta.0 → 5.25.0-beta.1

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 (187) hide show
  1. package/content/contextSetup.js.map +1 -0
  2. package/content/graphQLHandlerFactory.js +4 -0
  3. package/content/graphQLHandlerFactory.js.map +1 -0
  4. package/content/parameterPlugins.js.map +1 -0
  5. package/content/plugins/CmsGroupPlugin.js.map +1 -0
  6. package/content/plugins/CmsModelPlugin.js.map +1 -0
  7. package/content/plugins/CmsParametersPlugin.d.ts +1 -1
  8. package/content/plugins/CmsParametersPlugin.js.map +1 -0
  9. package/content/plugins/buildSchemaPlugins.js.map +1 -0
  10. package/content/plugins/crud/contentEntry/afterDelete.js +2 -1
  11. package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -0
  12. package/content/plugins/crud/contentEntry/beforeCreate.js.map +1 -0
  13. package/content/plugins/crud/contentEntry/beforeUpdate.js.map +1 -0
  14. package/content/plugins/crud/contentEntry/entryDataValidation.d.ts +2 -2
  15. package/content/plugins/crud/contentEntry/entryDataValidation.js +2 -3
  16. package/content/plugins/crud/contentEntry/entryDataValidation.js.map +1 -0
  17. package/content/plugins/crud/contentEntry/markLockedFields.js +1 -1
  18. package/content/plugins/crud/contentEntry/markLockedFields.js.map +1 -0
  19. package/content/plugins/crud/contentEntry/referenceFieldsMapping.js +7 -3
  20. package/content/plugins/crud/contentEntry/referenceFieldsMapping.js.map +1 -0
  21. package/content/plugins/crud/contentEntry.crud.d.ts +2 -2
  22. package/content/plugins/crud/contentEntry.crud.js +24 -13
  23. package/content/plugins/crud/contentEntry.crud.js.map +1 -0
  24. package/content/plugins/crud/contentModel/afterCreate.js.map +1 -0
  25. package/content/plugins/crud/contentModel/afterDelete.js.map +1 -0
  26. package/content/plugins/crud/contentModel/afterUpdate.js.map +1 -0
  27. package/content/plugins/crud/contentModel/beforeCreate.d.ts +2 -2
  28. package/content/plugins/crud/contentModel/beforeCreate.js +1 -1
  29. package/content/plugins/crud/contentModel/beforeCreate.js.map +1 -0
  30. package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -0
  31. package/content/plugins/crud/contentModel/beforeUpdate.js +12 -4
  32. package/content/plugins/crud/contentModel/beforeUpdate.js.map +1 -0
  33. package/content/plugins/crud/contentModel/contentModelManagerFactory.js.map +1 -0
  34. package/content/plugins/crud/contentModel/createFieldModels.js.map +1 -0
  35. package/content/plugins/crud/contentModel/idValidation.js.map +1 -0
  36. package/content/plugins/crud/contentModel/models.js.map +1 -0
  37. package/content/plugins/crud/contentModel/validateLayout.js.map +1 -0
  38. package/content/plugins/crud/contentModel.crud.d.ts +2 -2
  39. package/content/plugins/crud/contentModel.crud.js +2 -2
  40. package/content/plugins/crud/contentModel.crud.js.map +1 -0
  41. package/content/plugins/crud/contentModelGroup/beforeCreate.js.map +1 -0
  42. package/content/plugins/crud/contentModelGroup/beforeDelete.js.map +1 -0
  43. package/content/plugins/crud/contentModelGroup/beforeUpdate.js.map +1 -0
  44. package/content/plugins/crud/contentModelGroup.crud.d.ts +2 -2
  45. package/content/plugins/crud/contentModelGroup.crud.js.map +1 -0
  46. package/content/plugins/crud/index.d.ts +2 -2
  47. package/content/plugins/crud/index.js.map +1 -0
  48. package/content/plugins/graphqlFields/boolean.js +2 -6
  49. package/content/plugins/graphqlFields/boolean.js.map +1 -0
  50. package/content/plugins/graphqlFields/datetime.js +2 -2
  51. package/content/plugins/graphqlFields/datetime.js.map +1 -0
  52. package/content/plugins/graphqlFields/file.js +2 -6
  53. package/content/plugins/graphqlFields/file.js.map +1 -0
  54. package/content/plugins/graphqlFields/helpers.d.ts +6 -0
  55. package/content/plugins/graphqlFields/helpers.js +49 -0
  56. package/content/plugins/graphqlFields/helpers.js.map +1 -0
  57. package/content/plugins/graphqlFields/index.js.map +1 -0
  58. package/content/plugins/graphqlFields/longText.js +2 -6
  59. package/content/plugins/graphqlFields/longText.js.map +1 -0
  60. package/content/plugins/graphqlFields/number.js +2 -6
  61. package/content/plugins/graphqlFields/number.js.map +1 -0
  62. package/content/plugins/graphqlFields/object.js +11 -5
  63. package/content/plugins/graphqlFields/object.js.map +1 -0
  64. package/content/plugins/graphqlFields/ref.js +26 -13
  65. package/content/plugins/graphqlFields/ref.js.map +1 -0
  66. package/content/plugins/graphqlFields/richText.js +2 -6
  67. package/content/plugins/graphqlFields/richText.js.map +1 -0
  68. package/content/plugins/graphqlFields/text.js +2 -6
  69. package/content/plugins/graphqlFields/text.js.map +1 -0
  70. package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js.map +1 -0
  71. package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js.map +1 -0
  72. package/content/plugins/modelManager/DefaultCmsModelManager.js.map +1 -0
  73. package/content/plugins/modelManager/index.js.map +1 -0
  74. package/content/plugins/schema/baseSchema.js +1 -0
  75. package/content/plugins/schema/baseSchema.js.map +1 -0
  76. package/content/plugins/schema/contentEntries.js +12 -5
  77. package/content/plugins/schema/contentEntries.js.map +1 -0
  78. package/content/plugins/schema/contentModelGroups.js +1 -2
  79. package/content/plugins/schema/contentModelGroups.js.map +1 -0
  80. package/content/plugins/schema/contentModels.js +2 -3
  81. package/content/plugins/schema/contentModels.js.map +1 -0
  82. package/content/plugins/schema/createFieldResolvers.js.map +1 -0
  83. package/content/plugins/schema/createManageResolvers.js.map +1 -0
  84. package/content/plugins/schema/createManageSDL.js.map +1 -0
  85. package/content/plugins/schema/createPreviewResolvers.js.map +1 -0
  86. package/content/plugins/schema/createReadResolvers.js.map +1 -0
  87. package/content/plugins/schema/createReadSDL.js.map +1 -0
  88. package/content/plugins/schema/resolvers/commonFieldResolvers.d.ts +1 -1
  89. package/content/plugins/schema/resolvers/commonFieldResolvers.js.map +1 -0
  90. package/content/plugins/schema/resolvers/manage/resolveCreate.js.map +1 -0
  91. package/content/plugins/schema/resolvers/manage/resolveCreateFrom.js.map +1 -0
  92. package/content/plugins/schema/resolvers/manage/resolveDelete.js.map +1 -0
  93. package/content/plugins/schema/resolvers/manage/resolveGet.js.map +1 -0
  94. package/content/plugins/schema/resolvers/manage/resolveGetByIds.js.map +1 -0
  95. package/content/plugins/schema/resolvers/manage/resolveGetRevisions.js.map +1 -0
  96. package/content/plugins/schema/resolvers/manage/resolveList.js.map +1 -0
  97. package/content/plugins/schema/resolvers/manage/resolvePublish.js.map +1 -0
  98. package/content/plugins/schema/resolvers/manage/resolveRepublish.js.map +1 -0
  99. package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js.map +1 -0
  100. package/content/plugins/schema/resolvers/manage/resolveRequestReview.js.map +1 -0
  101. package/content/plugins/schema/resolvers/manage/resolveUnpublish.js.map +1 -0
  102. package/content/plugins/schema/resolvers/manage/resolveUpdate.js.map +1 -0
  103. package/content/plugins/schema/resolvers/preview/resolveGet.js.map +1 -0
  104. package/content/plugins/schema/resolvers/preview/resolveList.js.map +1 -0
  105. package/content/plugins/schema/resolvers/read/resolveGet.js.map +1 -0
  106. package/content/plugins/schema/resolvers/read/resolveList.js.map +1 -0
  107. package/content/plugins/schema/schemaPlugins.js.map +1 -0
  108. package/content/plugins/storage/StorageTransformPlugin.js.map +1 -0
  109. package/content/plugins/storage/default.js.map +1 -0
  110. package/content/plugins/storage/object.js +6 -2
  111. package/content/plugins/storage/object.js.map +1 -0
  112. package/content/plugins/utils/createTypeName.js.map +1 -0
  113. package/content/plugins/utils/entryStorage.d.ts +2 -2
  114. package/content/plugins/utils/entryStorage.js +0 -4
  115. package/content/plugins/utils/entryStorage.js.map +1 -0
  116. package/content/plugins/utils/getEntryTitle.js +1 -1
  117. package/content/plugins/utils/getEntryTitle.js.map +1 -0
  118. package/content/plugins/utils/getSchemaFromFieldPlugins.js +8 -3
  119. package/content/plugins/utils/getSchemaFromFieldPlugins.js.map +1 -0
  120. package/content/plugins/utils/pluralizedTypeName.js.map +1 -0
  121. package/content/plugins/utils/renderFields.js.map +1 -0
  122. package/content/plugins/utils/renderGetFilterFields.js +5 -0
  123. package/content/plugins/utils/renderGetFilterFields.js.map +1 -0
  124. package/content/plugins/utils/renderInputFields.d.ts +1 -1
  125. package/content/plugins/utils/renderInputFields.js.map +1 -0
  126. package/content/plugins/utils/renderListFilterFields.js.map +1 -0
  127. package/content/plugins/utils/renderSortEnum.js.map +1 -0
  128. package/content/plugins/validators/dateGte.js +1 -1
  129. package/content/plugins/validators/dateGte.js.map +1 -0
  130. package/content/plugins/validators/dateLte.js +1 -1
  131. package/content/plugins/validators/dateLte.js.map +1 -0
  132. package/content/plugins/validators/gte.js +3 -1
  133. package/content/plugins/validators/gte.js.map +1 -0
  134. package/content/plugins/validators/in.js +3 -1
  135. package/content/plugins/validators/in.js.map +1 -0
  136. package/content/plugins/validators/index.js.map +1 -0
  137. package/content/plugins/validators/lte.js +3 -1
  138. package/content/plugins/validators/lte.js.map +1 -0
  139. package/content/plugins/validators/maxLength.js +3 -1
  140. package/content/plugins/validators/maxLength.js.map +1 -0
  141. package/content/plugins/validators/minLength.js +3 -1
  142. package/content/plugins/validators/minLength.js.map +1 -0
  143. package/content/plugins/validators/pattern.js +2 -2
  144. package/content/plugins/validators/pattern.js.map +1 -0
  145. package/content/plugins/validators/patternPlugins/email.js.map +1 -0
  146. package/content/plugins/validators/patternPlugins/index.js.map +1 -0
  147. package/content/plugins/validators/patternPlugins/lowerCase.js.map +1 -0
  148. package/content/plugins/validators/patternPlugins/lowerCaseSpace.js.map +1 -0
  149. package/content/plugins/validators/patternPlugins/upperCase.js.map +1 -0
  150. package/content/plugins/validators/patternPlugins/upperCaseSpace.js.map +1 -0
  151. package/content/plugins/validators/patternPlugins/url.js.map +1 -0
  152. package/content/plugins/validators/required.js.map +1 -0
  153. package/content/plugins/validators/timeGte.js +3 -1
  154. package/content/plugins/validators/timeGte.js.map +1 -0
  155. package/content/plugins/validators/timeLte.js +3 -1
  156. package/content/plugins/validators/timeLte.js.map +1 -0
  157. package/content/plugins/validators/unique.js +1 -0
  158. package/content/plugins/validators/unique.js.map +1 -0
  159. package/index.d.ts +3 -3
  160. package/index.js.map +1 -0
  161. package/migrateCMSPermissions.js.map +1 -0
  162. package/package.json +26 -26
  163. package/plugins/context.js +8 -3
  164. package/plugins/context.js.map +1 -0
  165. package/plugins/crud/index.d.ts +2 -2
  166. package/plugins/crud/index.js.map +1 -0
  167. package/plugins/crud/settings.crud.d.ts +2 -2
  168. package/plugins/crud/settings.crud.js.map +1 -0
  169. package/plugins/crud/system.crud.d.ts +3 -2
  170. package/plugins/crud/system.crud.js +2 -2
  171. package/plugins/crud/system.crud.js.map +1 -0
  172. package/plugins/graphql/system.d.ts +1 -1
  173. package/plugins/graphql/system.js.map +1 -0
  174. package/plugins/graphql.js +7 -0
  175. package/plugins/graphql.js.map +1 -0
  176. package/plugins/upgrades/index.js.map +1 -0
  177. package/plugins/upgrades/v5.5.0/helpers.js.map +1 -0
  178. package/plugins/upgrades/v5.5.0/index.js +1 -0
  179. package/plugins/upgrades/v5.5.0/index.js.map +1 -0
  180. package/transformers.js.map +1 -0
  181. package/types.d.ts +58 -28
  182. package/types.js +6 -0
  183. package/types.js.map +1 -0
  184. package/utils.d.ts +12 -14
  185. package/utils.js.map +1 -0
  186. package/content/plugins/graphqlFields/requiredField.d.ts +0 -2
  187. package/content/plugins/graphqlFields/requiredField.js +0 -24
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["contextSetup.ts"],"names":["getParameters","context","plugins","byType","CmsParametersPlugin","type","plugin","result","WebinyError","ContextPlugin","http","request","method","locale","systemLocale","i18n","getLocale","cms","READ","PREVIEW","MANAGE"],"mappings":";;;;;;;;;;;AACA;;AACA;;AACA;;;;;;AAKA,MAAMA,aAAa,GAAG,MAAOC,OAAP,IAAqE;AACvF,QAAMC,OAAO,GAAGD,OAAO,CAACC,OAAR,CAAgBC,MAAhB,CAA4CC,yCAAoBC,IAAhE,CAAhB;;AAEA,OAAK,MAAMC,MAAX,IAAqBJ,OAArB,EAA8B;AAC1B,UAAMK,MAAM,GAAG,MAAMD,MAAM,CAACN,aAAP,CAAqBC,OAArB,CAArB;;AACA,QAAIM,MAAM,KAAK,IAAf,EAAqB;AACjB,aAAOA,MAAP;AACH;AACJ;;AACD,QAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,2BAFE,CAAN;AAIH,CAbD;;eAee,MAAM;AACjB,SAAO,IAAIC,sBAAJ,CAA8B,MAAMR,OAAN,IAAiB;AAAA;;AAClD,QAAI,kBAAAA,OAAO,CAACS,IAAR,yFAAcC,OAAd,gFAAuBC,MAAvB,MAAkC,SAAtC,EAAiD;AAC7C;AACH;;AAED,UAAM;AAAEP,MAAAA,IAAF;AAAQQ,MAAAA;AAAR,QAAmB,MAAMb,aAAa,CAACC,OAAD,CAA5C;AAEA,UAAMa,YAAY,GAAGb,OAAO,CAACc,IAAR,CAAaC,SAAb,CAAuBH,MAAvB,CAArB;;AACA,QAAI,CAACC,YAAL,EAAmB;AACf,YAAM,IAAIN,cAAJ,CAAiB,uBAAsBK,MAAO,kBAA9C,CAAN;AACH;;AAEDZ,IAAAA,OAAO,CAACgB,GAAR,mCACShB,OAAO,CAACgB,GAAR,IAAe,EADxB;AAEIZ,MAAAA,IAFJ;AAGIQ,MAAAA,MAHJ;AAIIG,MAAAA,SAAS,EAAE,MAAMF,YAJrB;AAKII,MAAAA,IAAI,EAAEb,IAAI,KAAK,MALnB;AAMIc,MAAAA,OAAO,EAAEd,IAAI,KAAK,SANtB;AAOIe,MAAAA,MAAM,EAAEf,IAAI,KAAK;AAPrB;AASH,GArBM,CAAP;AAsBH,C","sourcesContent":["import { CmsContext } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport {\n CmsParametersPlugin,\n CmsParametersPluginResponse\n} from \"~/content/plugins/CmsParametersPlugin\";\n\nconst getParameters = async (context: CmsContext): Promise<CmsParametersPluginResponse> => {\n const plugins = context.plugins.byType<CmsParametersPlugin>(CmsParametersPlugin.type);\n\n for (const plugin of plugins) {\n const result = await plugin.getParameters(context);\n if (result !== null) {\n return result;\n }\n }\n throw new WebinyError(\n \"Could not determine locale and/or type of the CMS.\",\n \"CMS_LOCALE_AND_TYPE_ERROR\"\n );\n};\n\nexport default () => {\n return new ContextPlugin<CmsContext>(async context => {\n if (context.http?.request?.method === \"OPTIONS\") {\n return;\n }\n\n const { type, locale } = await getParameters(context);\n\n const systemLocale = context.i18n.getLocale(locale);\n if (!systemLocale) {\n throw new WebinyError(`There is no locale \"${locale}\" in the system.`);\n }\n\n context.cms = {\n ...((context.cms || {}) as any),\n type,\n locale,\n getLocale: () => systemLocale,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\"\n } as any;\n });\n};\n"]}
@@ -109,6 +109,10 @@ const getSchema = async args => {
109
109
  });
110
110
  return schema;
111
111
  }
112
+ /**
113
+ * Safe to cast because check was done few lines up.
114
+ */
115
+
112
116
 
113
117
  const cache = schemaList.get(id);
114
118
 
@@ -0,0 +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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["parameterPlugins.ts"],"names":["createRequestPlugin","CmsParametersPlugin","context","http","request","path","parameters","key","WebinyError","type","locale","split","createManualPlugin","params","endpointType","createParametersPlugins"],"mappings":";;;;;;;;;;;AAAA;;AACA;;;;;;AAUA,MAAMA,mBAAmB,GAAG,MAAM;AAC9B,SAAO,IAAIC,wCAAJ,CAAwB,MAAMC,OAAN,IAAiB;AAC5C;AACR;AACA;AACQ,QACI,CAACA,OAAO,CAACC,IAAT,IACA,CAACD,OAAO,CAACC,IAAR,CAAaC,OADd,IAEA,CAACF,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAFtB,IAGA,CAACH,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAArB,CAA0BC,UAJ/B,EAKE;AACE,aAAO,IAAP;AACH;;AAED,UAAM;AAAEC,MAAAA;AAAF,QAAUL,OAAO,CAACC,IAAR,CAAaC,OAAb,CAAqBC,IAArB,CAA0BC,UAA1C;;AACA,QAAI,OAAOC,GAAP,KAAe,QAAnB,EAA6B;AACzB,YAAM,IAAIC,cAAJ,CACF,2EADE,EAEF,eAFE,EAGF;AACID,QAAAA;AADJ,OAHE,CAAN;AAOH;;AACD,UAAM,CAACE,IAAD,EAAOC,MAAP,IAAiBH,GAAG,CAACI,KAAJ,CAAU,GAAV,CAAvB;;AACA,QAAI,CAACF,IAAL,EAAW;AACP,YAAM,IAAID,cAAJ,CACD,oEADC,CAAN;AAGH,KAJD,MAIO,IAAI,CAACE,MAAL,EAAa;AAChB,YAAM,IAAIF,cAAJ,CAAiB,4DAAjB,CAAN;AACH;;AAED,WAAO;AACHC,MAAAA,IADG;AAEHC,MAAAA;AAFG,KAAP;AAIH,GApCM,CAAP;AAqCH,CAtCD;;AAwCA,MAAME,kBAAkB,GAAIC,MAAD,IAAgE;AACvF,SAAO,IAAIZ,wCAAJ,CAAwB,YAAY;AACvC;AACR;AACA;AACQ,QAAI,CAACY,MAAM,CAACC,YAAR,IAAwB,CAACD,MAAM,CAACH,MAApC,EAA4C;AACxC,aAAO,IAAP;AACH,KAFD,MAEO,IAAI,CAACG,MAAM,CAACC,YAAZ,EAA0B;AAC7B,YAAM,IAAIN,cAAJ,CACD,4DADC,EAEF,yBAFE,oBAIKK,MAJL,EAAN;AAOH,KARM,MAQA,IAAI,CAACA,MAAM,CAACH,MAAZ,EAAoB;AACvB,YAAM,IAAIF,cAAJ,CACD,4DADC,EAEF,uBAFE,oBAIKK,MAJL,EAAN;AAOH;;AAED,WAAO;AACHJ,MAAAA,IAAI,EAAEI,MAAM,CAACC,YADV;AAEHJ,MAAAA,MAAM,EAAEG,MAAM,CAACH;AAFZ,KAAP;AAIH,GA5BM,CAAP;AA6BH,CA9BD;;AA+BO,MAAMK,uBAAuB,GAChCF,MADmC,IAEX;AACxB,SAAO,CAACD,kBAAkB,CAACC,MAAD,CAAnB,EAA6Bb,mBAAmB,EAAhD,CAAP;AACH,CAJM","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n CmsParametersPlugin,\n CmsParametersPluginResponse\n} from \"~/content/plugins/CmsParametersPlugin\";\n\nexport interface CreateParametersPluginsParams {\n endpointType?: CmsParametersPluginResponse[\"type\"];\n locale?: CmsParametersPluginResponse[\"locale\"];\n}\n\nconst createRequestPlugin = () => {\n return new CmsParametersPlugin(async context => {\n /**\n * If any of the properties is not defined, just ignore this plugin\n */\n if (\n !context.http ||\n !context.http.request ||\n !context.http.request.path ||\n !context.http.request.path.parameters\n ) {\n return null;\n }\n\n const { key } = context.http.request.path.parameters;\n if (typeof key !== \"string\") {\n throw new WebinyError(\n \"The key property in context.http.request.path.parameters is not a string.\",\n \"MALFORMED_KEY\",\n {\n key\n }\n );\n }\n const [type, locale] = key.split(\"/\");\n if (!type) {\n throw new WebinyError(\n `Missing context.http.request.path.parameters.key parameter \"type\".`\n );\n } else if (!locale) {\n throw new WebinyError(`Missing context.http.request.path.parameters.key \"locale\".`);\n }\n\n return {\n type,\n locale\n };\n });\n};\n\nconst createManualPlugin = (params: CreateParametersPluginsParams): CmsParametersPlugin => {\n return new CmsParametersPlugin(async () => {\n /**\n * if both of parameters are not existing, just skip this plugin.\n */\n if (!params.endpointType && !params.locale) {\n return null;\n } else if (!params.endpointType) {\n throw new WebinyError(\n `There is defined locale CMS parameter but no endpointType.`,\n \"MALFORMED_ENDPOINT_TYPE\",\n {\n ...params\n }\n );\n } else if (!params.locale) {\n throw new WebinyError(\n `There is defined endpointType CMS parameter but no locale.`,\n \"MALFORMED_LOCALE_TYPE\",\n {\n ...params\n }\n );\n }\n\n return {\n type: params.endpointType,\n locale: params.locale\n };\n });\n};\nexport const createParametersPlugins = (\n params: CreateParametersPluginsParams\n): CmsParametersPlugin[] => {\n return [createManualPlugin(params), createRequestPlugin()];\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsGroupPlugin.ts"],"names":["CmsGroupPlugin","Plugin","constructor","contentModelGroup"],"mappings":";;;;;;;;;;;AAAA;;AAOO,MAAMA,cAAN,SAA6BC,eAA7B,CAAoC;AAIvCC,EAAAA,WAAW,CAACC,iBAAD,EAA8B;AACrC;AADqC;AAErC,SAAKA,iBAAL,GAAyBA,iBAAzB;AACH;;AAPsC;;;8BAA9BH,c,UACsC,yB","sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsGroup as BaseCmsGroup } from \"~/types\";\n\nexport interface CmsGroup extends Omit<BaseCmsGroup, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n tenant?: string;\n locale?: string;\n}\nexport class CmsGroupPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model-group\";\n contentModelGroup: CmsGroup;\n\n constructor(contentModelGroup: CmsGroup) {\n super();\n this.contentModelGroup = contentModelGroup;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsModelPlugin.ts"],"names":["CmsModelPlugin","Plugin","constructor","contentModel"],"mappings":";;;;;;;;;;;AAAA;;AAQO,MAAMA,cAAN,SAA6BC,eAA7B,CAAoC;AAIvCC,EAAAA,WAAW,CAACC,YAAD,EAAyB;AAChC;AADgC;AAEhC,SAAKA,YAAL,GAAoBA,YAApB;AACH;;AAPsC;;;8BAA9BH,c,UACsC,mB","sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsModel as CmsModelBase } from \"~/types\";\n\nexport interface CmsModel extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n contentModel: CmsModel;\n\n constructor(contentModel: CmsModel) {\n super();\n this.contentModel = contentModel;\n }\n}\n"]}
@@ -5,7 +5,7 @@ export interface CmsParametersPluginResponse {
5
5
  locale: string;
6
6
  }
7
7
  export interface CmsParametersPluginCallable {
8
- (context: CmsContext): Promise<CmsParametersPluginResponse>;
8
+ (context: CmsContext): Promise<CmsParametersPluginResponse | null>;
9
9
  }
10
10
  export declare class CmsParametersPlugin extends Plugin {
11
11
  static readonly type: string;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["CmsParametersPlugin.ts"],"names":["CmsParametersPlugin","Plugin","constructor","callable","getParameters","context"],"mappings":";;;;;;;;;;;AAAA;;AAYO,MAAMA,mBAAN,SAAkCC,eAAlC,CAAyC;AAKrCC,EAAAA,WAAW,CAACC,QAAD,EAAwC;AACtD;AADsD;AAGtD,SAAKA,QAAL,GAAgBA,QAAhB;AACH;;AAEyB,QAAbC,aAAa,CAACC,OAAD,EAAmE;AACzF,WAAO,KAAKF,QAAL,CAAcE,OAAd,CAAP;AACH;;AAb2C;;;8BAAnCL,mB,UACsC,uB","sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsContext } from \"~/types\";\n\nexport interface CmsParametersPluginResponse {\n type: \"read\" | \"manage\" | \"preview\" | string;\n locale: string;\n}\n\nexport interface CmsParametersPluginCallable {\n (context: CmsContext): Promise<CmsParametersPluginResponse | null>;\n}\n\nexport class CmsParametersPlugin extends Plugin {\n public static override readonly type: string = \"cms-parameters-plugin\";\n\n private readonly callable: CmsParametersPluginCallable;\n\n public constructor(callable: CmsParametersPluginCallable) {\n super();\n\n this.callable = callable;\n }\n\n public async getParameters(context: CmsContext): Promise<CmsParametersPluginResponse | null> {\n return this.callable(context);\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["buildSchemaPlugins.ts"],"names":["context","filter","Boolean"],"mappings":";;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAEA;AACA;AACA;eACe,MAAOA,OAAP,IAA2E;AACtF,SAAO,CACH;AACA,2BAAWA,OAAX,CAFG,EAGH,4BAAcA,OAAd,CAHG,EAIH,6BAAeA,OAAf,CAJG,EAKH,iCAAmBA,OAAnB,CALG,EAMH;AACA,MAAI,MAAM,0CAAsBA,OAAtB,CAAV,CAPG,EAQLC,MARK,CAQEC,OARF,CAAP;AASH,C","sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { CmsContext } from \"~/types\";\nimport contentModels from \"./schema/contentModels\";\nimport contentEntries from \"./schema/contentEntries\";\nimport contentModelGroups from \"./schema/contentModelGroups\";\nimport baseSchema from \"./schema/baseSchema\";\nimport { generateSchemaPlugins } from \"./schema/schemaPlugins\";\n\n/**\n * This factory is called whenever we need to generate graphql-schema plugins using the current context.\n */\nexport default async (context: CmsContext): Promise<GraphQLSchemaPlugin<CmsContext>[]> => {\n return [\n // Base GQL types and scalars\n baseSchema(context),\n contentModels(context),\n contentEntries(context),\n contentModelGroups(context),\n // Dynamic schema\n ...(await generateSchemaPlugins(context))\n ].filter(Boolean);\n};\n"]}
@@ -22,7 +22,8 @@ const assignAfterEntryDelete = params => {
22
22
  } = await context.cms.storageOperations.entries.list(model, {
23
23
  where: {
24
24
  entryId_not: entry.entryId,
25
- latest: true
25
+ latest: true,
26
+ tenant: model.tenant
26
27
  },
27
28
  limit: 1
28
29
  });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["afterDelete.ts"],"names":["assignAfterEntryDelete","params","context","onAfterEntryDelete","subscribe","entry","model","items","cms","storageOperations","entries","list","where","entryId_not","entryId","latest","tenant","limit","length"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,sBAAsB,GAAIC,MAAD,IAA0C;AAC5E,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAkCF,MAAxC;AAEAE,EAAAA,kBAAkB,CAACC,SAAnB,CAA6B,MAAMH,MAAN,IAAgB;AACzC,UAAM;AAAEI,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAmBL,MAAzB;AAEA,UAAM;AAAEM,MAAAA;AAAF,QAAY,MAAML,OAAO,CAACM,GAAR,CAAYC,iBAAZ,CAA8BC,OAA9B,CAAsCC,IAAtC,CAA2CL,KAA3C,EAAkD;AACtEM,MAAAA,KAAK,EAAE;AACHC,QAAAA,WAAW,EAAER,KAAK,CAACS,OADhB;AAEHC,QAAAA,MAAM,EAAE,IAFL;AAGHC,QAAAA,MAAM,EAAEV,KAAK,CAACU;AAHX,OAD+D;AAMtEC,MAAAA,KAAK,EAAE;AAN+D,KAAlD,CAAxB;;AAQA,QAAIV,KAAK,CAACW,MAAN,GAAe,CAAnB,EAAsB;AAClB;AACH;;AACD,UAAM,0CAAmB;AACrBhB,MAAAA,OADqB;AAErBI,MAAAA;AAFqB,KAAnB,CAAN;AAIH,GAlBD;AAmBH,CAtBM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { AfterEntryDeleteTopicParams, CmsContext } from \"~/types\";\nimport { markUnlockedFields } from \"./markLockedFields\";\n\ninterface AssignAfterEntryDeleteParams {\n context: CmsContext;\n onAfterEntryDelete: Topic<AfterEntryDeleteTopicParams>;\n}\nexport const assignAfterEntryDelete = (params: AssignAfterEntryDeleteParams) => {\n const { context, onAfterEntryDelete } = params;\n\n onAfterEntryDelete.subscribe(async params => {\n const { entry, model } = params;\n\n const { items } = await context.cms.storageOperations.entries.list(model, {\n where: {\n entryId_not: entry.entryId,\n latest: true,\n tenant: model.tenant\n },\n limit: 1\n });\n if (items.length > 0) {\n return;\n }\n await markUnlockedFields({\n context,\n model\n });\n });\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["beforeCreate.ts"],"names":["assignBeforeEntryCreate","params","context","onBeforeEntryCreate","subscribe","entry","model"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAmCF,MAAzC;AAEAE,EAAAA,mBAAmB,CAACC,SAApB,CAA8B,MAAMH,MAAN,IAAgB;AAC1C,UAAM;AAAEI,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAmBL,MAAzB;AAEA,UAAM,wCAAiB;AACnBK,MAAAA,KADmB;AAEnBD,MAAAA,KAFmB;AAGnBH,MAAAA;AAHmB,KAAjB,CAAN;AAKH,GARD;AASH,CAZM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeEntryCreateTopicParams, CmsContext } from \"~/types\";\nimport { markLockedFields } from \"./markLockedFields\";\n\ninterface AssignBeforeEntryCreateParams {\n context: CmsContext;\n onBeforeEntryCreate: Topic<BeforeEntryCreateTopicParams>;\n}\nexport const assignBeforeEntryCreate = (params: AssignBeforeEntryCreateParams) => {\n const { context, onBeforeEntryCreate } = params;\n\n onBeforeEntryCreate.subscribe(async params => {\n const { entry, model } = params;\n\n await markLockedFields({\n model,\n entry,\n context\n });\n });\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["beforeUpdate.ts"],"names":["assignBeforeEntryUpdate","params","context","onBeforeEntryUpdate","subscribe","entry","model"],"mappings":";;;;;;;AAEA;;AAMO,MAAMA,uBAAuB,GAAIC,MAAD,IAA2C;AAC9E,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAmCF,MAAzC;AAEAE,EAAAA,mBAAmB,CAACC,SAApB,CAA8B,MAAMH,MAAN,IAAgB;AAC1C,UAAM;AAAEI,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAmBL,MAAzB;AAEA,UAAM,wCAAiB;AACnBK,MAAAA,KADmB;AAEnBD,MAAAA,KAFmB;AAGnBH,MAAAA;AAHmB,KAAjB,CAAN;AAKH,GARD;AASH,CAZM","sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { BeforeEntryUpdateTopicParams, CmsContext } from \"~/types\";\nimport { markLockedFields } from \"./markLockedFields\";\n\ninterface AssignBeforeEntryUpdateParams {\n context: CmsContext;\n onBeforeEntryUpdate: Topic<BeforeEntryUpdateTopicParams>;\n}\nexport const assignBeforeEntryUpdate = (params: AssignBeforeEntryUpdateParams) => {\n const { context, onBeforeEntryUpdate } = params;\n\n onBeforeEntryUpdate.subscribe(async params => {\n const { entry, model } = params;\n\n await markLockedFields({\n model,\n entry,\n context\n });\n });\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  import { CmsModel, CmsContext, CmsEntry } from "../../../../types";
2
2
  declare type InputData = Record<string, any>;
3
- export interface Params {
3
+ export interface ValidateModelEntryDataParams {
4
4
  context: CmsContext;
5
5
  model: CmsModel;
6
6
  data: InputData;
7
7
  entry?: CmsEntry;
8
8
  }
9
- export declare const validateModelEntryData: (params: Params) => Promise<void>;
9
+ export declare const validateModelEntryData: (params: ValidateModelEntryDataParams) => Promise<void>;
10
10
  export {};
@@ -66,7 +66,6 @@ const validatePredefinedValue = (field, value) => {
66
66
  }
67
67
 
68
68
  for (const predefinedValue of predefinedValues) {
69
- // console.log(field.fieldId, predefinedValue.value, value, predefinedValue.value == value);
70
69
  if (predefinedValue.value == value) {
71
70
  return null;
72
71
  }
@@ -85,7 +84,7 @@ const runFieldMultipleValuesValidations = async args => {
85
84
  field,
86
85
  data
87
86
  } = args;
88
- const values = data[field.fieldId];
87
+ const values = data[field.fieldId] || [];
89
88
 
90
89
  if (Array.isArray(values) === false) {
91
90
  return `Value of the field "${field.fieldId}" is not an array.`;
@@ -124,7 +123,7 @@ const runFieldValueValidations = async args => {
124
123
  field
125
124
  } = args;
126
125
  const value = data[field.fieldId];
127
- const error = await validateValue(args, field.validation, value);
126
+ const error = await validateValue(args, field.validation || [], value);
128
127
 
129
128
  if (error) {
130
129
  return error;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["entryDataValidation.ts"],"names":["validateValue","args","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","predefinedValue","runFieldMultipleValuesValidations","data","fieldId","valuesError","listValidation","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","params","plugins","byType","reduce","acc","plugin","push","invalidFields","fields","WebinyError"],"mappings":"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","sourcesContent":["import {\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsContext,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams,\n CmsEntry\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ValidateArgs {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\nconst validateValue = async (\n args: ValidateArgs,\n fieldValidators: CmsModelFieldValidation[],\n value: any\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n\n const { validatorList, context, field, model, entry } = args;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n }\n for (const predefinedValue of predefinedValues) {\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { field, data } = args;\n const values = data[field.fieldId] || [];\n if (Array.isArray(values) === false) {\n return `Value of the field \"${field.fieldId}\" is not an array.`;\n }\n const valuesError = await validateValue(args, field.listValidation || [], values);\n if (valuesError) {\n return valuesError;\n }\n for (const value of values) {\n const valueError = await validateValue(args, field.validation || [], value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { data, field } = args;\n const value = data[field.fieldId];\n const error = await validateValue(args, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (args: ValidateArgs): Promise<string | null> => {\n if (args.field.multipleValues) {\n return await runFieldMultipleValuesValidations(args);\n }\n return await runFieldValueValidations(args);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n}\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data } = params;\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = context.plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .reduce((acc, plugin) => {\n const name = plugin.validator.name;\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(plugin.validator.validate);\n\n return acc;\n }, {} as PluginValidationList);\n\n /**\n * Loop through model fields and validate the corresponding data.\n * Run validation only if the field has validation configured.\n */\n const invalidFields = [];\n for (const field of model.fields) {\n const error = await execValidation({\n model,\n validatorList,\n field,\n data,\n context,\n entry\n });\n if (!error) {\n continue;\n }\n invalidFields.push({\n fieldId: field.fieldId,\n error\n });\n }\n\n if (invalidFields.length > 0) {\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n }\n};\n"]}
@@ -59,7 +59,7 @@ const markLockedFields = async params => {
59
59
 
60
60
  lockedFields.push(_objectSpread({
61
61
  fieldId: field.fieldId,
62
- multipleValues: field.multipleValues,
62
+ multipleValues: !!field.multipleValues,
63
63
  type: field.type
64
64
  }, lockedFieldData));
65
65
  } // no need to update anything if no locked fields were added
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["markLockedFields.ts"],"names":["markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","alreadyLocked","some","lockedField","fieldId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","markUnlockedFields"],"mappings":"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","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsContext, CmsModelLockedFieldPlugin, LockedField } from \"~/types\";\nimport { CmsModelPlugin } from \"~/content/plugins/CmsModelPlugin\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.fieldId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === field.type);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.fieldId,\n multipleValues: !!field.multipleValues,\n type: field.type,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: newLockedFields\n }\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: []\n }\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n"]}
@@ -25,9 +25,11 @@ const buildReferenceFieldPaths = params => {
25
25
  parentPaths: initialParentPaths,
26
26
  input
27
27
  } = params;
28
- const parentPaths = [].concat(initialParentPaths);
28
+ const parentPaths = [...initialParentPaths];
29
29
  const isMultipleValues = Array.isArray(input);
30
30
  return fields.filter(field => ["object", "ref"].includes(field.type)).reduce((collection, field) => {
31
+ var _field$settings2;
32
+
31
33
  /**
32
34
  * First we check the ref field
33
35
  */
@@ -94,8 +96,10 @@ const buildReferenceFieldPaths = params => {
94
96
  }
95
97
 
96
98
  for (const key in objFieldInputValue) {
99
+ var _field$settings;
100
+
97
101
  const result = buildReferenceFieldPaths({
98
- fields: field.settings.fields,
102
+ fields: ((_field$settings = field.settings) === null || _field$settings === void 0 ? void 0 : _field$settings.fields) || [],
99
103
  input: objFieldInputValue[key],
100
104
  parentPaths: parentPaths.concat([field.fieldId, key])
101
105
  });
@@ -110,7 +114,7 @@ const buildReferenceFieldPaths = params => {
110
114
 
111
115
 
112
116
  const results = buildReferenceFieldPaths({
113
- fields: field.settings.fields,
117
+ fields: ((_field$settings2 = field.settings) === null || _field$settings2 === void 0 ? void 0 : _field$settings2.fields) || [],
114
118
  input: objFieldInputValue,
115
119
  parentPaths: parentPaths.concat([field.fieldId])
116
120
  });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["referenceFieldsMapping.ts"],"names":["buildReferenceFieldPaths","params","fields","parentPaths","initialParentPaths","input","isMultipleValues","Array","isArray","filter","field","includes","type","reduce","collection","parentPathsValue","length","join","multipleValues","inputValue","dotProp","get","fieldId","key","path","push","objFieldPath","objFieldInputValue","result","settings","concat","results","getReferenceFieldValue","ref","id","modelId","entryId","trim","referenceFieldsMapping","context","model","validateEntries","output","referenceFieldPaths","referencesByModel","pathsByReferenceId","Object","keys","models","cms","listModels","entries","promises","map","getEntriesByIds","Promise","all","records","entry","WebinyError","paths","set"],"mappings":"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","sourcesContent":["import { CmsContext, CmsModel, CmsModelField } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport dotProp from \"dot-prop\";\nimport { parseIdentifier } from \"@webiny/utils\";\n\ninterface CmsRefEntry {\n id: string;\n entryId: string;\n modelId: string;\n}\n\ninterface ReferenceObject {\n id: string;\n modelId: string;\n}\n\ninterface Params {\n context: CmsContext;\n model: CmsModel;\n input: Record<string, ReferenceObject | ReferenceObject[]>;\n validateEntries?: boolean;\n}\n\ninterface BuildReferenceFieldPaths {\n fields: CmsModelField[];\n parentPaths: string[];\n input: Record<string, any>;\n}\n\nconst buildReferenceFieldPaths = (params: BuildReferenceFieldPaths): string[] => {\n const { fields, parentPaths: initialParentPaths, input } = params;\n\n const parentPaths = [...initialParentPaths];\n\n const isMultipleValues = Array.isArray(input);\n\n return fields\n .filter(field => [\"object\", \"ref\"].includes(field.type))\n .reduce((collection, field) => {\n /**\n * First we check the ref field\n */\n if (field.type === \"ref\") {\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n if (field.multipleValues) {\n const inputValue = dotProp.get(input, `${field.fieldId}`, []);\n if (Array.isArray(inputValue) === false) {\n return collection;\n }\n for (const key in inputValue) {\n const path = `${parentPathsValue}${field.fieldId}.${key}`;\n collection.push(path);\n }\n return collection;\n }\n\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n collection.push(`${parentPathsValue}${field.fieldId}`);\n\n return collection;\n }\n /**\n * Then we move onto the object field\n */\n const parentPathsValue = parentPaths.length > 0 ? `${parentPaths.join(\".\")}.` : \"\";\n /**\n * This is if received input is array. We need to map key with fieldId at this point.\n */\n if (isMultipleValues) {\n for (const key in input) {\n const path = `${parentPathsValue}${key}.${field.fieldId}`;\n collection.push(path);\n }\n return collection;\n }\n\n const objFieldPath = `${field.fieldId}`;\n const objFieldInputValue = dotProp.get(input, objFieldPath, []);\n\n /**\n * If field is multiple values one, we need to go through the input and use the existing keys.\n */\n if (field.multipleValues) {\n if (Array.isArray(objFieldInputValue) === false) {\n return collection;\n }\n for (const key in objFieldInputValue) {\n const result = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue[key],\n parentPaths: parentPaths.concat([field.fieldId, key])\n });\n collection.push(...result);\n }\n\n return collection;\n }\n\n /**\n * Single value reference field.\n */\n const results = buildReferenceFieldPaths({\n fields: field.settings?.fields || [],\n input: objFieldInputValue,\n parentPaths: parentPaths.concat([field.fieldId])\n });\n\n return collection.concat(results);\n }, [] as string[]);\n};\n\nconst getReferenceFieldValue = (ref: any): { id: string | null; modelId: string | null } => {\n if (!ref) {\n return {\n id: null,\n modelId: null\n };\n }\n return {\n id: (ref.id || ref.entryId || \"\").trim() || null,\n modelId: (ref.modelId || \"\").trim() || null\n };\n};\n\nexport const referenceFieldsMapping = async (params: Params): Promise<Record<string, any>> => {\n const { context, model, input, validateEntries = false } = params;\n\n let output: Record<string, any> = {\n ...input\n };\n\n const referenceFieldPaths = buildReferenceFieldPaths({\n fields: model.fields,\n input,\n parentPaths: []\n });\n if (referenceFieldPaths.length === 0) {\n return output;\n }\n\n const referencesByModel: Record<string, string[]> = {};\n const pathsByReferenceId: Record<string, string[]> = {};\n\n for (const path of referenceFieldPaths) {\n const ref = dotProp.get(output, path) as ReferenceObject | any;\n\n const { id, modelId } = getReferenceFieldValue(ref);\n\n if (!id || !modelId) {\n continue;\n }\n if (!referencesByModel[modelId]) {\n referencesByModel[modelId] = [];\n }\n referencesByModel[modelId].push(id);\n if (!pathsByReferenceId[id]) {\n pathsByReferenceId[id] = [];\n }\n pathsByReferenceId[id].push(path);\n }\n\n /**\n * Again, no point in going further.\n */\n if (Object.keys(referencesByModel).length === 0) {\n return output;\n }\n /**\n * Load all models and use only those that are used in reference.\n */\n const models = (await context.cms.listModels()).filter(model => {\n const entries = referencesByModel[model.modelId];\n if (Array.isArray(entries) === false || entries.length === 0) {\n return false;\n }\n return true;\n });\n /**\n * Check for any model existence, just in case.\n */\n if (models.length === 0) {\n return output;\n }\n\n /**\n * Load all the entries by their ID\n */\n const promises = models.map(model => {\n return context.cms.getEntriesByIds(model, referencesByModel[model.modelId]);\n });\n\n const results = await Promise.all(promises);\n\n const records: Record<string, CmsRefEntry> = results.reduce((collection, entries) => {\n for (const entry of entries) {\n collection[entry.id] = {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n };\n }\n return collection;\n }, {} as Record<string, CmsRefEntry>);\n /**\n * Verify that all referenced entries actually exist.\n */\n for (const modelId in referencesByModel) {\n const entries = referencesByModel[modelId];\n for (const id of entries) {\n if (records[id]) {\n continue;\n } else if (validateEntries === true) {\n throw new WebinyError(\n `Missing referenced entry with id \"${id}\" in model \"${modelId}\".`,\n \"ENTRY_NOT_FOUND\",\n {\n id,\n model: modelId\n }\n );\n }\n const { id: entryId } = parseIdentifier(id);\n records[id] = {\n id,\n entryId,\n modelId\n };\n }\n }\n\n /**\n * In the end, assign the entryId, id and model values to the output.\n */\n for (const id in pathsByReferenceId) {\n const entry = records[id];\n const paths = pathsByReferenceId[id];\n if (!entry) {\n if (validateEntries === true) {\n throw new WebinyError(\"Missing entry in records.\", \"ENTRY_ERROR\", {\n id,\n paths\n });\n }\n continue;\n }\n for (const path of paths) {\n output = dotProp.set(output, path, {\n id: entry.id,\n entryId: entry.entryId,\n modelId: entry.modelId\n });\n }\n }\n\n return output;\n};\n"]}
@@ -5,9 +5,9 @@ export declare const STATUS_PUBLISHED = "published";
5
5
  export declare const STATUS_UNPUBLISHED = "unpublished";
6
6
  export declare const STATUS_CHANGES_REQUESTED = "changesRequested";
7
7
  export declare const STATUS_REVIEW_REQUESTED = "reviewRequested";
8
- export interface Params {
8
+ export interface CreateContentEntryCrudParams {
9
9
  storageOperations: HeadlessCmsStorageOperations;
10
10
  context: CmsContext;
11
11
  getIdentity: () => SecurityIdentity;
12
12
  }
13
- export declare const createContentEntryCrud: (params: Params) => CmsEntryContext;
13
+ export declare const createContentEntryCrud: (params: CreateContentEntryCrudParams) => CmsEntryContext;
@@ -301,7 +301,8 @@ const createContentEntryCrud = params => {
301
301
  */
302
302
  getEntryById: async (model, id) => {
303
303
  const where = {
304
- id
304
+ id,
305
+ tenant: model.tenant
305
306
  };
306
307
  await onBeforeEntryGet.publish({
307
308
  where,
@@ -448,7 +449,12 @@ const createContentEntryCrud = params => {
448
449
  return [items, meta];
449
450
  },
450
451
  listLatestEntries: async function (model, params) {
451
- const where = params ? params.where : {};
452
+ const where = (params === null || params === void 0 ? void 0 : params.where) || {};
453
+
454
+ if (!where.tenant) {
455
+ where.tenant = model.tenant;
456
+ }
457
+
452
458
  return context.cms.listEntries(model, _objectSpread(_objectSpread({
453
459
  sort: ["createdOn_DESC"]
454
460
  }, params || {}), {}, {
@@ -458,7 +464,12 @@ const createContentEntryCrud = params => {
458
464
  }));
459
465
  },
460
466
  listPublishedEntries: async function (model, params) {
461
- const where = params ? params.where : {};
467
+ const where = (params === null || params === void 0 ? void 0 : params.where) || {};
468
+
469
+ if (!where.tenant) {
470
+ where.tenant = model.tenant;
471
+ }
472
+
462
473
  return context.cms.listEntries(model, _objectSpread(_objectSpread({
463
474
  sort: ["createdOn_DESC"]
464
475
  }, params || {}), {}, {
@@ -595,7 +606,7 @@ const createContentEntryCrud = params => {
595
606
  validateEntries: false
596
607
  });
597
608
  utils.checkOwnership(context, permission, originalEntry);
598
- const latestEntry = await (0, _entryStorage.entryFromStorageTransform)(context, model, latestStorageEntry);
609
+ const latestEntry = latestStorageEntry ? await (0, _entryStorage.entryFromStorageTransform)(context, model, latestStorageEntry) : null;
599
610
  const identity = context.security.getIdentity();
600
611
  const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;
601
612
  const {
@@ -614,12 +625,12 @@ const createContentEntryCrud = params => {
614
625
  type: identity.type
615
626
  },
616
627
  locked: false,
617
- publishedOn: null,
628
+ publishedOn: undefined,
618
629
  status: STATUS_DRAFT,
619
630
  values
620
631
  });
621
632
 
622
- let storageEntry = undefined;
633
+ let storageEntry = null;
623
634
 
624
635
  try {
625
636
  await onBeforeEntryCreateRevision.publish({
@@ -707,7 +718,7 @@ const createContentEntryCrud = params => {
707
718
  values
708
719
  });
709
720
 
710
- let storageEntry = undefined;
721
+ let storageEntry = null;
711
722
 
712
723
  try {
713
724
  await onBeforeEntryUpdate.publish({
@@ -837,7 +848,7 @@ const createContentEntryCrud = params => {
837
848
  });
838
849
  const previousStorageEntry = await storageOperations.entries.getPreviousRevision(model, {
839
850
  entryId,
840
- version
851
+ version: version
841
852
  });
842
853
 
843
854
  if (!storageEntryToDelete) {
@@ -867,7 +878,7 @@ const createContentEntryCrud = params => {
867
878
  let entryToSetAsLatest = null;
868
879
  let storageEntryToSetAsLatest = null;
869
880
 
870
- if (entryToDelete.id === latestEntryRevisionId) {
881
+ if (entryToDelete.id === latestEntryRevisionId && previousStorageEntry) {
871
882
  entryToSetAsLatest = await (0, _entryStorage.entryFromStorageTransform)(context, model, previousStorageEntry);
872
883
  storageEntryToSetAsLatest = previousStorageEntry;
873
884
  }
@@ -942,7 +953,7 @@ const createContentEntryCrud = params => {
942
953
  publishedOn: currentDate
943
954
  });
944
955
 
945
- let storageEntry = undefined;
956
+ let storageEntry = null;
946
957
 
947
958
  try {
948
959
  await onBeforeEntryPublish.publish({
@@ -1002,7 +1013,7 @@ const createContentEntryCrud = params => {
1002
1013
  status: STATUS_CHANGES_REQUESTED
1003
1014
  });
1004
1015
 
1005
- let storageEntry = undefined;
1016
+ let storageEntry = null;
1006
1017
 
1007
1018
  try {
1008
1019
  await onBeforeEntryRequestChanges.publish({
@@ -1064,7 +1075,7 @@ const createContentEntryCrud = params => {
1064
1075
  status: STATUS_REVIEW_REQUESTED
1065
1076
  });
1066
1077
 
1067
- let storageEntry = undefined;
1078
+ let storageEntry = null;
1068
1079
 
1069
1080
  try {
1070
1081
  await onBeforeEntryRequestReview.publish({
@@ -1119,7 +1130,7 @@ const createContentEntryCrud = params => {
1119
1130
  status: STATUS_UNPUBLISHED
1120
1131
  });
1121
1132
 
1122
- let storageEntry = undefined;
1133
+ let storageEntry = null;
1123
1134
 
1124
1135
  try {
1125
1136
  await onBeforeEntryUnpublish.publish({