@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.
- package/content/contextSetup.js.map +1 -0
- package/content/graphQLHandlerFactory.js +4 -0
- package/content/graphQLHandlerFactory.js.map +1 -0
- package/content/parameterPlugins.js.map +1 -0
- package/content/plugins/CmsGroupPlugin.js.map +1 -0
- package/content/plugins/CmsModelPlugin.js.map +1 -0
- package/content/plugins/CmsParametersPlugin.d.ts +1 -1
- package/content/plugins/CmsParametersPlugin.js.map +1 -0
- package/content/plugins/buildSchemaPlugins.js.map +1 -0
- package/content/plugins/crud/contentEntry/afterDelete.js +2 -1
- package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -0
- package/content/plugins/crud/contentEntry/beforeCreate.js.map +1 -0
- package/content/plugins/crud/contentEntry/beforeUpdate.js.map +1 -0
- package/content/plugins/crud/contentEntry/entryDataValidation.d.ts +2 -2
- package/content/plugins/crud/contentEntry/entryDataValidation.js +2 -3
- package/content/plugins/crud/contentEntry/entryDataValidation.js.map +1 -0
- package/content/plugins/crud/contentEntry/markLockedFields.js +1 -1
- package/content/plugins/crud/contentEntry/markLockedFields.js.map +1 -0
- package/content/plugins/crud/contentEntry/referenceFieldsMapping.js +7 -3
- package/content/plugins/crud/contentEntry/referenceFieldsMapping.js.map +1 -0
- package/content/plugins/crud/contentEntry.crud.d.ts +2 -2
- package/content/plugins/crud/contentEntry.crud.js +24 -13
- package/content/plugins/crud/contentEntry.crud.js.map +1 -0
- package/content/plugins/crud/contentModel/afterCreate.js.map +1 -0
- package/content/plugins/crud/contentModel/afterDelete.js.map +1 -0
- package/content/plugins/crud/contentModel/afterUpdate.js.map +1 -0
- package/content/plugins/crud/contentModel/beforeCreate.d.ts +2 -2
- package/content/plugins/crud/contentModel/beforeCreate.js +1 -1
- package/content/plugins/crud/contentModel/beforeCreate.js.map +1 -0
- package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -0
- package/content/plugins/crud/contentModel/beforeUpdate.js +12 -4
- package/content/plugins/crud/contentModel/beforeUpdate.js.map +1 -0
- package/content/plugins/crud/contentModel/contentModelManagerFactory.js.map +1 -0
- package/content/plugins/crud/contentModel/createFieldModels.js.map +1 -0
- package/content/plugins/crud/contentModel/idValidation.js.map +1 -0
- package/content/plugins/crud/contentModel/models.js.map +1 -0
- package/content/plugins/crud/contentModel/validateLayout.js.map +1 -0
- package/content/plugins/crud/contentModel.crud.d.ts +2 -2
- package/content/plugins/crud/contentModel.crud.js +2 -2
- package/content/plugins/crud/contentModel.crud.js.map +1 -0
- package/content/plugins/crud/contentModelGroup/beforeCreate.js.map +1 -0
- package/content/plugins/crud/contentModelGroup/beforeDelete.js.map +1 -0
- package/content/plugins/crud/contentModelGroup/beforeUpdate.js.map +1 -0
- package/content/plugins/crud/contentModelGroup.crud.d.ts +2 -2
- package/content/plugins/crud/contentModelGroup.crud.js.map +1 -0
- package/content/plugins/crud/index.d.ts +2 -2
- package/content/plugins/crud/index.js.map +1 -0
- package/content/plugins/graphqlFields/boolean.js +2 -6
- package/content/plugins/graphqlFields/boolean.js.map +1 -0
- package/content/plugins/graphqlFields/datetime.js +2 -2
- package/content/plugins/graphqlFields/datetime.js.map +1 -0
- package/content/plugins/graphqlFields/file.js +2 -6
- package/content/plugins/graphqlFields/file.js.map +1 -0
- package/content/plugins/graphqlFields/helpers.d.ts +6 -0
- package/content/plugins/graphqlFields/helpers.js +49 -0
- package/content/plugins/graphqlFields/helpers.js.map +1 -0
- package/content/plugins/graphqlFields/index.js.map +1 -0
- package/content/plugins/graphqlFields/longText.js +2 -6
- package/content/plugins/graphqlFields/longText.js.map +1 -0
- package/content/plugins/graphqlFields/number.js +2 -6
- package/content/plugins/graphqlFields/number.js.map +1 -0
- package/content/plugins/graphqlFields/object.js +11 -5
- package/content/plugins/graphqlFields/object.js.map +1 -0
- package/content/plugins/graphqlFields/ref.js +26 -13
- package/content/plugins/graphqlFields/ref.js.map +1 -0
- package/content/plugins/graphqlFields/richText.js +2 -6
- package/content/plugins/graphqlFields/richText.js.map +1 -0
- package/content/plugins/graphqlFields/text.js +2 -6
- package/content/plugins/graphqlFields/text.js.map +1 -0
- package/content/plugins/internalSecurity/InternalAuthenticationPlugin.js.map +1 -0
- package/content/plugins/internalSecurity/InternalAuthorizationPlugin.js.map +1 -0
- package/content/plugins/modelManager/DefaultCmsModelManager.js.map +1 -0
- package/content/plugins/modelManager/index.js.map +1 -0
- package/content/plugins/schema/baseSchema.js +1 -0
- package/content/plugins/schema/baseSchema.js.map +1 -0
- package/content/plugins/schema/contentEntries.js +12 -5
- package/content/plugins/schema/contentEntries.js.map +1 -0
- package/content/plugins/schema/contentModelGroups.js +1 -2
- package/content/plugins/schema/contentModelGroups.js.map +1 -0
- package/content/plugins/schema/contentModels.js +2 -3
- package/content/plugins/schema/contentModels.js.map +1 -0
- package/content/plugins/schema/createFieldResolvers.js.map +1 -0
- package/content/plugins/schema/createManageResolvers.js.map +1 -0
- package/content/plugins/schema/createManageSDL.js.map +1 -0
- package/content/plugins/schema/createPreviewResolvers.js.map +1 -0
- package/content/plugins/schema/createReadResolvers.js.map +1 -0
- package/content/plugins/schema/createReadSDL.js.map +1 -0
- package/content/plugins/schema/resolvers/commonFieldResolvers.d.ts +1 -1
- package/content/plugins/schema/resolvers/commonFieldResolvers.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveCreate.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveCreateFrom.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveDelete.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveGet.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveGetByIds.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveGetRevisions.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveList.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolvePublish.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveRepublish.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveRequestChanges.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveRequestReview.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveUnpublish.js.map +1 -0
- package/content/plugins/schema/resolvers/manage/resolveUpdate.js.map +1 -0
- package/content/plugins/schema/resolvers/preview/resolveGet.js.map +1 -0
- package/content/plugins/schema/resolvers/preview/resolveList.js.map +1 -0
- package/content/plugins/schema/resolvers/read/resolveGet.js.map +1 -0
- package/content/plugins/schema/resolvers/read/resolveList.js.map +1 -0
- package/content/plugins/schema/schemaPlugins.js.map +1 -0
- package/content/plugins/storage/StorageTransformPlugin.js.map +1 -0
- package/content/plugins/storage/default.js.map +1 -0
- package/content/plugins/storage/object.js +6 -2
- package/content/plugins/storage/object.js.map +1 -0
- package/content/plugins/utils/createTypeName.js.map +1 -0
- package/content/plugins/utils/entryStorage.d.ts +2 -2
- package/content/plugins/utils/entryStorage.js +0 -4
- package/content/plugins/utils/entryStorage.js.map +1 -0
- package/content/plugins/utils/getEntryTitle.js +1 -1
- package/content/plugins/utils/getEntryTitle.js.map +1 -0
- package/content/plugins/utils/getSchemaFromFieldPlugins.js +8 -3
- package/content/plugins/utils/getSchemaFromFieldPlugins.js.map +1 -0
- package/content/plugins/utils/pluralizedTypeName.js.map +1 -0
- package/content/plugins/utils/renderFields.js.map +1 -0
- package/content/plugins/utils/renderGetFilterFields.js +5 -0
- package/content/plugins/utils/renderGetFilterFields.js.map +1 -0
- package/content/plugins/utils/renderInputFields.d.ts +1 -1
- package/content/plugins/utils/renderInputFields.js.map +1 -0
- package/content/plugins/utils/renderListFilterFields.js.map +1 -0
- package/content/plugins/utils/renderSortEnum.js.map +1 -0
- package/content/plugins/validators/dateGte.js +1 -1
- package/content/plugins/validators/dateGte.js.map +1 -0
- package/content/plugins/validators/dateLte.js +1 -1
- package/content/plugins/validators/dateLte.js.map +1 -0
- package/content/plugins/validators/gte.js +3 -1
- package/content/plugins/validators/gte.js.map +1 -0
- package/content/plugins/validators/in.js +3 -1
- package/content/plugins/validators/in.js.map +1 -0
- package/content/plugins/validators/index.js.map +1 -0
- package/content/plugins/validators/lte.js +3 -1
- package/content/plugins/validators/lte.js.map +1 -0
- package/content/plugins/validators/maxLength.js +3 -1
- package/content/plugins/validators/maxLength.js.map +1 -0
- package/content/plugins/validators/minLength.js +3 -1
- package/content/plugins/validators/minLength.js.map +1 -0
- package/content/plugins/validators/pattern.js +2 -2
- package/content/plugins/validators/pattern.js.map +1 -0
- package/content/plugins/validators/patternPlugins/email.js.map +1 -0
- package/content/plugins/validators/patternPlugins/index.js.map +1 -0
- package/content/plugins/validators/patternPlugins/lowerCase.js.map +1 -0
- package/content/plugins/validators/patternPlugins/lowerCaseSpace.js.map +1 -0
- package/content/plugins/validators/patternPlugins/upperCase.js.map +1 -0
- package/content/plugins/validators/patternPlugins/upperCaseSpace.js.map +1 -0
- package/content/plugins/validators/patternPlugins/url.js.map +1 -0
- package/content/plugins/validators/required.js.map +1 -0
- package/content/plugins/validators/timeGte.js +3 -1
- package/content/plugins/validators/timeGte.js.map +1 -0
- package/content/plugins/validators/timeLte.js +3 -1
- package/content/plugins/validators/timeLte.js.map +1 -0
- package/content/plugins/validators/unique.js +1 -0
- package/content/plugins/validators/unique.js.map +1 -0
- package/index.d.ts +3 -3
- package/index.js.map +1 -0
- package/migrateCMSPermissions.js.map +1 -0
- package/package.json +26 -26
- package/plugins/context.js +8 -3
- package/plugins/context.js.map +1 -0
- package/plugins/crud/index.d.ts +2 -2
- package/plugins/crud/index.js.map +1 -0
- package/plugins/crud/settings.crud.d.ts +2 -2
- package/plugins/crud/settings.crud.js.map +1 -0
- package/plugins/crud/system.crud.d.ts +3 -2
- package/plugins/crud/system.crud.js +2 -2
- package/plugins/crud/system.crud.js.map +1 -0
- package/plugins/graphql/system.d.ts +1 -1
- package/plugins/graphql/system.js.map +1 -0
- package/plugins/graphql.js +7 -0
- package/plugins/graphql.js.map +1 -0
- package/plugins/upgrades/index.js.map +1 -0
- package/plugins/upgrades/v5.5.0/helpers.js.map +1 -0
- package/plugins/upgrades/v5.5.0/index.js +1 -0
- package/plugins/upgrades/v5.5.0/index.js.map +1 -0
- package/transformers.js.map +1 -0
- package/types.d.ts +58 -28
- package/types.js +6 -0
- package/types.js.map +1 -0
- package/utils.d.ts +12 -14
- package/utils.js.map +1 -0
- package/content/plugins/graphqlFields/requiredField.d.ts +0 -2
- 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"]}
|
|
@@ -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"]}
|
|
@@ -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
|
|
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:
|
|
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 = []
|
|
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
|
|
8
|
+
export interface CreateContentEntryCrudParams {
|
|
9
9
|
storageOperations: HeadlessCmsStorageOperations;
|
|
10
10
|
context: CmsContext;
|
|
11
11
|
getIdentity: () => SecurityIdentity;
|
|
12
12
|
}
|
|
13
|
-
export declare const createContentEntryCrud: (params:
|
|
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:
|
|
628
|
+
publishedOn: undefined,
|
|
618
629
|
status: STATUS_DRAFT,
|
|
619
630
|
values
|
|
620
631
|
});
|
|
621
632
|
|
|
622
|
-
let storageEntry =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
1133
|
+
let storageEntry = null;
|
|
1123
1134
|
|
|
1124
1135
|
try {
|
|
1125
1136
|
await onBeforeEntryUnpublish.publish({
|