@webiny/api-headless-cms 5.25.0 → 5.25.1-beta.0
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/graphQLHandlerFactory.js +3 -1
- package/content/graphQLHandlerFactory.js.map +1 -1
- package/content/plugins/crud/contentEntry/afterDelete.js +1 -2
- package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
- package/content/plugins/crud/contentEntry.crud.d.ts +2 -0
- package/content/plugins/crud/contentEntry.crud.js +71 -72
- package/content/plugins/crud/contentEntry.crud.js.map +1 -1
- package/content/plugins/crud/contentModel/beforeDelete.js +0 -2
- package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
- package/content/plugins/crud/contentModel.crud.js +21 -12
- package/content/plugins/crud/contentModel.crud.js.map +1 -1
- package/content/plugins/crud/contentModelGroup.crud.js +38 -45
- package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
- package/content/plugins/crud/index.js +5 -3
- package/content/plugins/crud/index.js.map +1 -1
- package/content/plugins/graphqlFields/longText.js +1 -0
- package/content/plugins/graphqlFields/longText.js.map +1 -1
- package/content/plugins/graphqlFields/text.js +1 -0
- package/content/plugins/graphqlFields/text.js.map +1 -1
- package/content/plugins/schema/contentEntries.js +6 -9
- package/content/plugins/schema/contentEntries.js.map +1 -1
- package/content/plugins/validators/unique.js +0 -1
- package/content/plugins/validators/unique.js.map +1 -1
- package/package.json +24 -25
- package/plugins/context.js +9 -3
- package/plugins/context.js.map +1 -1
- package/plugins/crud/index.js +7 -4
- package/plugins/crud/index.js.map +1 -1
- package/plugins/crud/settings.crud.js +0 -1
- package/plugins/crud/settings.crud.js.map +1 -1
- package/plugins/crud/system.crud.d.ts +2 -0
- package/plugins/crud/system.crud.js +5 -4
- package/plugins/crud/system.crud.js.map +1 -1
- package/types.d.ts +51 -105
- package/types.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["contentEntries.ts"],"names":["getFetchMethod","type","context","getContentEntriesMethods","WebinyError","methodName","cms","GetContentEntryMethods","latest","published","exact","getContentEntries","params","args","method","models","listModels","modelsMap","reduce","collection","model","modelId","argsEntries","entries","entriesByModel","ref","includes","id","push","getters","Object","keys","map","length","Response","results","Promise","all","items","concat","item","entryId","name","status","title","filter","Boolean","getContentEntry","entry","find","m","NotAuthorizedResponse","data","result","shift","plugin","MANAGE","GraphQLSchemaPlugin","typeDefs","resolvers","CmsContentEntry","parent","_","getPublishedEntriesByIds","ex","Query","searchContentEntries","modelIds","query","limit","modelManager","getModelManager","where","tenant","titleFieldId","listLatest","savedOn","then","sort","a","b","Date","parse","slice","getLatestContentEntry","getPublishedContentEntry","getLatestContentEntries","getPublishedContentEntries"],"mappings":"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","sourcesContent":["import { Response } from \"@webiny/handler-graphql\";\nimport { CmsEntry, CmsContext, CmsModel, CmsEntryListWhere } from \"~/types\";\nimport { NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { getEntryTitle } from \"~/content/plugins/utils/getEntryTitle\";\nimport WebinyError from \"@webiny/error\";\n\ninterface EntriesByModel {\n [key: string]: string[];\n}\n\ntype GetContentEntryType = \"latest\" | \"published\" | \"exact\";\n\ninterface CmsEntryRecord {\n id: string;\n entryId: string;\n model: {\n modelId: string;\n name: string;\n };\n status: string;\n title: string;\n}\n\ninterface FetchMethod {\n (model: CmsModel, ids: string[]): Promise<CmsEntry[]>;\n}\n\nconst getFetchMethod = (type: GetContentEntryType, context: CmsContext): FetchMethod => {\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntries method \"${type}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type\n }\n );\n }\n const methodName = getContentEntriesMethods[type] as GetContentEntryMethods;\n if (!context.cms[methodName]) {\n throw new WebinyError(\n `Unknown context.cms method \"${methodName}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type,\n methodName\n }\n );\n }\n\n return context.cms[methodName];\n};\n/**\n * Function to get the list of content entries depending on latest, published or exact GraphQL queries.\n */\ninterface GetContentEntriesParams {\n args: {\n entries: Pick<CmsEntry, \"id\" | \"modelId\">[];\n };\n context: CmsContext;\n type: GetContentEntryType;\n}\nenum GetContentEntryMethods {\n getLatestEntriesByIds = \"getLatestEntriesByIds\",\n getPublishedEntriesByIds = \"getPublishedEntriesByIds\",\n getEntriesByIds = \"getEntriesByIds\"\n}\nconst getContentEntriesMethods = {\n latest: \"getLatestEntriesByIds\",\n published: \"getPublishedEntriesByIds\",\n exact: \"getEntriesByIds\"\n};\nconst getContentEntries = async (params: GetContentEntriesParams): Promise<Response> => {\n const { args, context, type } = params;\n\n const method = getFetchMethod(type, context);\n\n const models = await context.cms.listModels();\n\n const modelsMap = models.reduce((collection, model) => {\n collection[model.modelId] = model;\n return collection;\n }, {} as Record<string, CmsModel>);\n\n const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n\n const entriesByModel = argsEntries.reduce((collection, ref) => {\n if (!collection[ref.modelId]) {\n collection[ref.modelId] = [];\n } else if (collection[ref.modelId].includes(ref.id)) {\n return collection;\n }\n collection[ref.modelId].push(ref.id);\n return collection;\n }, {} as EntriesByModel);\n\n const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(async modelId => {\n return method(modelsMap[modelId], entriesByModel[modelId]);\n });\n\n if (getters.length === 0) {\n return new Response([]);\n }\n\n const results = await Promise.all(getters);\n\n const entries = results\n .reduce((collection, items) => {\n return collection.concat(\n items.map(item => {\n const model = modelsMap[item.modelId];\n\n return {\n id: item.id,\n entryId: item.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: item.status,\n title: getEntryTitle(model, item)\n };\n })\n );\n }, [] as CmsEntryRecord[])\n .filter(Boolean);\n\n return new Response(entries);\n};\n\n/**\n * Function to fetch a single content entry depending on latest, published or exact GraphQL query.\n */\ninterface GetContentEntryParams {\n args: {\n entry: Pick<CmsEntry, \"id\" | \"modelId\">;\n };\n context: CmsContext;\n type: \"latest\" | \"published\" | \"exact\";\n}\nconst getContentEntry = async (\n params: GetContentEntryParams\n): Promise<Response | NotAuthorizedResponse> => {\n const { args, context, type } = params;\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntry method \"${type}\". Could not fetch content entry.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n args,\n type\n }\n );\n }\n\n const method = getFetchMethod(type, context);\n\n const { modelId, id } = args.entry;\n const models = await context.cms.listModels();\n const model = models.find(m => m.modelId === modelId);\n\n if (!model) {\n return new NotAuthorizedResponse({\n data: {\n modelId\n }\n });\n }\n\n const result = await method(model, [id]);\n\n const entry = result.shift();\n if (!entry) {\n return new Response(null);\n }\n\n return new Response({\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry)\n });\n};\n\nconst plugin = (context: CmsContext): GraphQLSchemaPlugin<CmsContext> => {\n if (!context.cms.MANAGE) {\n return new GraphQLSchemaPlugin({\n typeDefs: \"\",\n resolvers: {}\n });\n }\n\n return new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: /* GraphQL */ `\n type CmsModelMeta {\n modelId: String\n name: String\n }\n\n type CmsPublishedContentEntry {\n id: ID!\n entryId: String!\n title: String\n }\n\n type CmsContentEntry {\n id: ID!\n entryId: String!\n model: CmsModelMeta\n status: String\n title: String\n published: CmsPublishedContentEntry\n }\n\n type CmsContentEntriesResponse {\n data: [CmsContentEntry]\n error: CmsError\n }\n\n type CmsContentEntryResponse {\n data: CmsContentEntry\n error: CmsError\n }\n\n input CmsModelEntryInput {\n modelId: ID!\n id: ID!\n }\n\n extend type Query {\n # Search content entries for given content models using the query string.\n searchContentEntries(\n modelIds: [ID!]!\n query: String\n limit: Int\n ): CmsContentEntriesResponse\n\n # Get content entry meta data\n getContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n\n getLatestContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n getPublishedContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n\n # Get content entries meta data\n getContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse\n getLatestContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse\n getPublishedContentEntries(\n entries: [CmsModelEntryInput!]!\n ): CmsContentEntriesResponse\n }\n `,\n resolvers: {\n CmsContentEntry: {\n published: async (parent, _, context) => {\n try {\n const models = await context.cms.listModels();\n const model = models.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const [entry] = await context.cms.getPublishedEntriesByIds(model, [\n parent.id\n ]);\n if (!entry) {\n return null;\n }\n return {\n id: entry.id,\n entryId: entry.entryId,\n title: getEntryTitle(model, entry)\n };\n } catch (ex) {\n return null;\n }\n }\n },\n Query: {\n async searchContentEntries(_, args: any, context) {\n const { modelIds, query, limit = 10 } = args;\n const models = await context.cms.listModels();\n\n const getters = models\n .filter(model => modelIds.includes(model.modelId))\n .map(async model => {\n const modelManager = await context.cms.getModelManager(model.modelId);\n const where: CmsEntryListWhere = {\n tenant: model.tenant\n };\n if (!!query) {\n where[`${model.titleFieldId}_contains`] = query;\n }\n const [items] = await modelManager.listLatest({\n limit,\n where\n });\n\n return items.map((entry: CmsEntry) => {\n return {\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry),\n // We need `savedOn` to sort entries from latest to oldest\n savedOn: entry.savedOn\n };\n });\n });\n\n const entries = await Promise.all(getters).then(results =>\n results.reduce((result, item) => result.concat(item), [])\n );\n\n return new Response(\n entries\n .sort((a, b) => Date.parse(b.savedOn) - Date.parse(a.savedOn))\n .slice(0, limit)\n );\n },\n async getContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"published\"\n });\n },\n async getContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"exact\"\n });\n // const models = await context.cms.listModels();\n //\n // const modelsMap = models.reduce((collection, model) => {\n // collection[model.modelId] = model;\n // return collection;\n // }, {} as Record<string, CmsModel>);\n //\n // const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n //\n // const entriesByModel = argsEntries.reduce((collection, ref) => {\n // if (!collection[ref.modelId]) {\n // collection[ref.modelId] = [];\n // } else if (collection[ref.modelId].includes(ref.id)) {\n // return collection;\n // }\n // collection[ref.modelId].push(ref.id);\n // return collection;\n // }, {} as EntriesByModel);\n //\n // const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(\n // async modelId => {\n // return context.cms.getEntriesByIds(\n // modelsMap[modelId],\n // entriesByModel[modelId]\n // );\n // }\n // );\n //\n // if (getters.length === 0) {\n // return new Response([]);\n // }\n //\n // const results = await Promise.all(getters);\n //\n // const entries = results.reduce((collection, items) => {\n // return collection.concat(\n // items.map(item => {\n // const model = modelsMap[item.modelId];\n //\n // return {\n // id: item.id,\n // model: {\n // modelId: model.modelId,\n // name: model.name\n // },\n // status: item.status,\n // title: getEntryTitle(model, item)\n // };\n // })\n // );\n // }, [] as any[]);\n //\n // return new Response(entries);\n },\n async getLatestContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"published\"\n });\n }\n }\n }\n });\n};\n\nexport default plugin;\n"]}
|
|
1
|
+
{"version":3,"sources":["contentEntries.ts"],"names":["getFetchMethod","type","context","getContentEntriesMethods","WebinyError","methodName","cms","GetContentEntryMethods","latest","published","exact","getContentEntries","params","args","method","models","listModels","modelsMap","reduce","collection","model","modelId","argsEntries","entries","entriesByModel","ref","includes","id","push","getters","Object","keys","map","length","Response","results","Promise","all","items","concat","item","entryId","name","status","title","filter","Boolean","getContentEntry","entry","find","m","NotAuthorizedResponse","data","result","shift","plugin","MANAGE","GraphQLSchemaPlugin","typeDefs","resolvers","CmsContentEntry","parent","_","getPublishedEntriesByIds","ex","Query","searchContentEntries","modelIds","fields","query","limit","modelManager","getModelManager","where","listLatest","search","undefined","savedOn","then","sort","a","b","Date","parse","slice","getLatestContentEntry","getPublishedContentEntry","getLatestContentEntries","getPublishedContentEntries"],"mappings":"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","sourcesContent":["import { Response } from \"@webiny/handler-graphql\";\nimport { CmsEntry, CmsContext, CmsModel, CmsEntryListWhere } from \"~/types\";\nimport { NotAuthorizedResponse } from \"@webiny/api-security\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/plugins/GraphQLSchemaPlugin\";\nimport { getEntryTitle } from \"~/content/plugins/utils/getEntryTitle\";\nimport WebinyError from \"@webiny/error\";\n\ninterface EntriesByModel {\n [key: string]: string[];\n}\n\ntype GetContentEntryType = \"latest\" | \"published\" | \"exact\";\n\ninterface CmsEntryRecord {\n id: string;\n entryId: string;\n model: {\n modelId: string;\n name: string;\n };\n status: string;\n title: string;\n}\n\ninterface FetchMethod {\n (model: CmsModel, ids: string[]): Promise<CmsEntry[]>;\n}\n\nconst getFetchMethod = (type: GetContentEntryType, context: CmsContext): FetchMethod => {\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntries method \"${type}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type\n }\n );\n }\n const methodName = getContentEntriesMethods[type] as GetContentEntryMethods;\n if (!context.cms[methodName]) {\n throw new WebinyError(\n `Unknown context.cms method \"${methodName}\". Could not fetch content entries.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n type,\n methodName\n }\n );\n }\n\n return context.cms[methodName];\n};\n/**\n * Function to get the list of content entries depending on latest, published or exact GraphQL queries.\n */\ninterface GetContentEntriesParams {\n args: {\n entries: Pick<CmsEntry, \"id\" | \"modelId\">[];\n };\n context: CmsContext;\n type: GetContentEntryType;\n}\nenum GetContentEntryMethods {\n getLatestEntriesByIds = \"getLatestEntriesByIds\",\n getPublishedEntriesByIds = \"getPublishedEntriesByIds\",\n getEntriesByIds = \"getEntriesByIds\"\n}\nconst getContentEntriesMethods = {\n latest: \"getLatestEntriesByIds\",\n published: \"getPublishedEntriesByIds\",\n exact: \"getEntriesByIds\"\n};\nconst getContentEntries = async (params: GetContentEntriesParams): Promise<Response> => {\n const { args, context, type } = params;\n\n const method = getFetchMethod(type, context);\n\n const models = await context.cms.listModels();\n\n const modelsMap = models.reduce((collection, model) => {\n collection[model.modelId] = model;\n return collection;\n }, {} as Record<string, CmsModel>);\n\n const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n\n const entriesByModel = argsEntries.reduce((collection, ref) => {\n if (!collection[ref.modelId]) {\n collection[ref.modelId] = [];\n } else if (collection[ref.modelId].includes(ref.id)) {\n return collection;\n }\n collection[ref.modelId].push(ref.id);\n return collection;\n }, {} as EntriesByModel);\n\n const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(async modelId => {\n return method(modelsMap[modelId], entriesByModel[modelId]);\n });\n\n if (getters.length === 0) {\n return new Response([]);\n }\n\n const results = await Promise.all(getters);\n\n const entries = results\n .reduce((collection, items) => {\n return collection.concat(\n items.map(item => {\n const model = modelsMap[item.modelId];\n\n return {\n id: item.id,\n entryId: item.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: item.status,\n title: getEntryTitle(model, item)\n };\n })\n );\n }, [] as CmsEntryRecord[])\n .filter(Boolean);\n\n return new Response(entries);\n};\n\n/**\n * Function to fetch a single content entry depending on latest, published or exact GraphQL query.\n */\ninterface GetContentEntryParams {\n args: {\n entry: Pick<CmsEntry, \"id\" | \"modelId\">;\n };\n context: CmsContext;\n type: \"latest\" | \"published\" | \"exact\";\n}\nconst getContentEntry = async (\n params: GetContentEntryParams\n): Promise<Response | NotAuthorizedResponse> => {\n const { args, context, type } = params;\n if (!getContentEntriesMethods[type]) {\n throw new WebinyError(\n `Unknown getContentEntry method \"${type}\". Could not fetch content entry.`,\n \"UNKNOWN_METHOD_ERROR\",\n {\n args,\n type\n }\n );\n }\n\n const method = getFetchMethod(type, context);\n\n const { modelId, id } = args.entry;\n const models = await context.cms.listModels();\n const model = models.find(m => m.modelId === modelId);\n\n if (!model) {\n return new NotAuthorizedResponse({\n data: {\n modelId\n }\n });\n }\n\n const result = await method(model, [id]);\n\n const entry = result.shift();\n if (!entry) {\n return new Response(null);\n }\n\n return new Response({\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry)\n });\n};\n\nconst plugin = (context: CmsContext): GraphQLSchemaPlugin<CmsContext> => {\n if (!context.cms.MANAGE) {\n return new GraphQLSchemaPlugin({\n typeDefs: \"\",\n resolvers: {}\n });\n }\n\n return new GraphQLSchemaPlugin<CmsContext>({\n typeDefs: /* GraphQL */ `\n type CmsModelMeta {\n modelId: String\n name: String\n }\n\n type CmsPublishedContentEntry {\n id: ID!\n entryId: String!\n title: String\n }\n\n type CmsContentEntry {\n id: ID!\n entryId: String!\n model: CmsModelMeta\n status: String\n title: String\n published: CmsPublishedContentEntry\n }\n\n type CmsContentEntriesResponse {\n data: [CmsContentEntry]\n error: CmsError\n }\n\n type CmsContentEntryResponse {\n data: CmsContentEntry\n error: CmsError\n }\n\n input CmsModelEntryInput {\n modelId: ID!\n id: ID!\n }\n\n extend type Query {\n # Search content entries for given content models using the query string.\n searchContentEntries(\n modelIds: [ID!]!\n query: String\n fields: [String!]\n limit: Int\n ): CmsContentEntriesResponse\n\n # Get content entry meta data\n getContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n\n getLatestContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n getPublishedContentEntry(entry: CmsModelEntryInput!): CmsContentEntryResponse\n\n # Get content entries meta data\n getContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse\n getLatestContentEntries(entries: [CmsModelEntryInput!]!): CmsContentEntriesResponse\n getPublishedContentEntries(\n entries: [CmsModelEntryInput!]!\n ): CmsContentEntriesResponse\n }\n `,\n resolvers: {\n CmsContentEntry: {\n published: async (parent, _, context) => {\n try {\n const models = await context.cms.listModels();\n const model = models.find(({ modelId }) => {\n return parent.model.modelId === modelId;\n });\n if (!model) {\n return null;\n }\n const [entry] = await context.cms.getPublishedEntriesByIds(model, [\n parent.id\n ]);\n if (!entry) {\n return null;\n }\n return {\n id: entry.id,\n entryId: entry.entryId,\n title: getEntryTitle(model, entry)\n };\n } catch (ex) {\n return null;\n }\n }\n },\n Query: {\n async searchContentEntries(_, args: any, context) {\n const { modelIds, fields, query, limit = 10 } = args;\n const models = await context.cms.listModels();\n\n const getters = models\n .filter(model => modelIds.includes(model.modelId))\n .map(async model => {\n const modelManager = await context.cms.getModelManager(model.modelId);\n const where: CmsEntryListWhere = {};\n\n const [items] = await modelManager.listLatest({\n limit,\n where,\n search: !!query ? query : undefined,\n fields: fields || []\n });\n\n return items.map((entry: CmsEntry) => {\n return {\n id: entry.id,\n entryId: entry.entryId,\n model: {\n modelId: model.modelId,\n name: model.name\n },\n status: entry.status,\n title: getEntryTitle(model, entry),\n // We need `savedOn` to sort entries from latest to oldest\n savedOn: entry.savedOn\n };\n });\n });\n\n const entries = await Promise.all(getters).then(results =>\n results.reduce((result, item) => result.concat(item), [])\n );\n\n return new Response(\n entries\n .sort((a, b) => Date.parse(b.savedOn) - Date.parse(a.savedOn))\n .slice(0, limit)\n );\n },\n async getContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"exact\"\n });\n },\n async getLatestContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntry(_, args: any, context) {\n return getContentEntry({\n args,\n context,\n type: \"published\"\n });\n },\n async getContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"exact\"\n });\n // const models = await context.cms.listModels();\n //\n // const modelsMap = models.reduce((collection, model) => {\n // collection[model.modelId] = model;\n // return collection;\n // }, {} as Record<string, CmsModel>);\n //\n // const argsEntries = args.entries as Pick<CmsEntry, \"id\" | \"modelId\">[];\n //\n // const entriesByModel = argsEntries.reduce((collection, ref) => {\n // if (!collection[ref.modelId]) {\n // collection[ref.modelId] = [];\n // } else if (collection[ref.modelId].includes(ref.id)) {\n // return collection;\n // }\n // collection[ref.modelId].push(ref.id);\n // return collection;\n // }, {} as EntriesByModel);\n //\n // const getters: Promise<CmsEntry[]>[] = Object.keys(entriesByModel).map(\n // async modelId => {\n // return context.cms.getEntriesByIds(\n // modelsMap[modelId],\n // entriesByModel[modelId]\n // );\n // }\n // );\n //\n // if (getters.length === 0) {\n // return new Response([]);\n // }\n //\n // const results = await Promise.all(getters);\n //\n // const entries = results.reduce((collection, items) => {\n // return collection.concat(\n // items.map(item => {\n // const model = modelsMap[item.modelId];\n //\n // return {\n // id: item.id,\n // model: {\n // modelId: model.modelId,\n // name: model.name\n // },\n // status: item.status,\n // title: getEntryTitle(model, item)\n // };\n // })\n // );\n // }, [] as any[]);\n //\n // return new Response(entries);\n },\n async getLatestContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"latest\"\n });\n },\n async getPublishedContentEntries(_, args: any, context) {\n return getContentEntries({\n args,\n context,\n type: \"published\"\n });\n }\n }\n }\n });\n};\n\nexport default plugin;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["unique.ts"],"names":["type","name","validator","validate","field","value","initialValue","context","model","entry","manager","cms","getModelManager","trim","items","listLatest","where","entryId_not","entryId","undefined","
|
|
1
|
+
{"version":3,"sources":["unique.ts"],"names":["type","name","validator","validate","field","value","initialValue","context","model","entry","manager","cms","getModelManager","trim","items","listLatest","where","entryId_not","entryId","undefined","fieldId","limit","length","ex","WebinyError"],"mappings":";;;;;;;;;AAAA;;AAGA;AACA;AACA;AACA;eACe,MAAoC;AAC/C,SAAO;AACHA,IAAAA,IAAI,EAAE,2BADH;AAEHC,IAAAA,IAAI,EAAE,kCAFH;AAGHC,IAAAA,SAAS,EAAE;AACPD,MAAAA,IAAI,EAAE,QADC;AAEPE,MAAAA,QAAQ,EAAE,OAAO;AAAEC,QAAAA,KAAF;AAASC,QAAAA,KAAK,EAAEC,YAAhB;AAA8BC,QAAAA,OAA9B;AAAuCC,QAAAA,KAAvC;AAA8CC,QAAAA;AAA9C,OAAP,KAAiE;AACvE,cAAMC,OAAO,GAAG,MAAMH,OAAO,CAACI,GAAR,CAAYC,eAAZ,CAA4BJ,KAA5B,CAAtB;AACA;AAChB;AACA;AACA;;AACgB,cAAMH,KAAK,GAAG,CAACC,YAAY,IAAI,EAAjB,EAAqBO,IAArB,EAAd;;AACA,YAAI,CAACR,KAAL,EAAY;AACR,iBAAO,IAAP;AACH;;AACD,YAAI;AACA,gBAAM,CAACS,KAAD,IAAU,MAAMJ,OAAO,CAACK,UAAR,CAAmB;AACrCC,YAAAA,KAAK,EAAE;AACHC,cAAAA,WAAW,EAAER,KAAK,GAAGA,KAAK,CAACS,OAAT,GAAmBC,SADlC;AAEH,eAACf,KAAK,CAACgB,OAAP,GAAiBf;AAFd,aAD8B;AAKrCgB,YAAAA,KAAK,EAAE;AAL8B,WAAnB,CAAtB;AAOA,iBAAOP,KAAK,CAACQ,MAAN,KAAiB,CAAxB;AACH,SATD,CASE,OAAOC,EAAP,EAAW;AACT,gBAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,oBAFE,EAGF;AACIpB,YAAAA,KADJ;AAEIC,YAAAA,KAFJ;AAGIG,YAAAA;AAHJ,WAHE,CAAN;AASH;AACJ;AAhCM;AAHR,GAAP;AAsCH,C","sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsModelFieldValidatorPlugin } from \"~/types\";\n\n/**\n * Validation if the field value is unique.\n * Be aware of using this in DynamoDB only environment as all records will be loaded to check for the unique value.\n */\nexport default (): CmsModelFieldValidatorPlugin => {\n return {\n type: \"cms-model-field-validator\",\n name: \"cms-model-field-validator-unique\",\n validator: {\n name: \"unique\",\n validate: async ({ field, value: initialValue, context, model, entry }) => {\n const manager = await context.cms.getModelManager(model);\n /**\n * If there is no value passed, we are assuming that user does not want any value to be validated.\n * If user needs something to passed into a unique field, they must add \"required\" validator.\n */\n const value = (initialValue || \"\").trim();\n if (!value) {\n return true;\n }\n try {\n const [items] = await manager.listLatest({\n where: {\n entryId_not: entry ? entry.entryId : undefined,\n [field.fieldId]: value\n },\n limit: 1\n });\n return items.length === 0;\n } catch (ex) {\n throw new WebinyError(\n \"Error while checking if the field value is unique.\",\n \"UNIQUE_CHECK_ERROR\",\n {\n field,\n value,\n model\n }\n );\n }\n }\n }\n };\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms",
|
|
3
|
-
"version": "5.25.0",
|
|
3
|
+
"version": "5.25.1-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cms:base"
|
|
@@ -18,27 +18,26 @@
|
|
|
18
18
|
],
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@babel/runtime": "7.
|
|
21
|
+
"@babel/runtime": "7.16.7",
|
|
22
22
|
"@commodo/fields": "1.1.2-beta.20",
|
|
23
23
|
"@graphql-tools/schema": "7.1.5",
|
|
24
|
-
"@webiny/api-file-manager": "5.25.0",
|
|
25
|
-
"@webiny/api-i18n": "5.25.0",
|
|
26
|
-
"@webiny/api-i18n-
|
|
27
|
-
"@webiny/api-
|
|
28
|
-
"@webiny/api-
|
|
29
|
-
"@webiny/api-
|
|
30
|
-
"@webiny/
|
|
31
|
-
"@webiny/
|
|
32
|
-
"@webiny/handler": "5.25.0",
|
|
33
|
-
"@webiny/handler-
|
|
34
|
-
"@webiny/handler-
|
|
35
|
-
"@webiny/handler-
|
|
36
|
-
"@webiny/
|
|
37
|
-
"@webiny/
|
|
38
|
-
"@webiny/
|
|
39
|
-
"@webiny/
|
|
40
|
-
"
|
|
41
|
-
"boolean": "3.2.0",
|
|
24
|
+
"@webiny/api-file-manager": "5.25.1-beta.0",
|
|
25
|
+
"@webiny/api-i18n": "5.25.1-beta.0",
|
|
26
|
+
"@webiny/api-i18n-ddb": "5.25.1-beta.0",
|
|
27
|
+
"@webiny/api-security": "5.25.1-beta.0",
|
|
28
|
+
"@webiny/api-tenancy": "5.25.1-beta.0",
|
|
29
|
+
"@webiny/api-upgrade": "5.25.1-beta.0",
|
|
30
|
+
"@webiny/error": "5.25.1-beta.0",
|
|
31
|
+
"@webiny/handler": "5.25.1-beta.0",
|
|
32
|
+
"@webiny/handler-aws": "5.25.1-beta.0",
|
|
33
|
+
"@webiny/handler-db": "5.25.1-beta.0",
|
|
34
|
+
"@webiny/handler-graphql": "5.25.1-beta.0",
|
|
35
|
+
"@webiny/handler-http": "5.25.1-beta.0",
|
|
36
|
+
"@webiny/plugins": "5.25.1-beta.0",
|
|
37
|
+
"@webiny/pubsub": "5.25.1-beta.0",
|
|
38
|
+
"@webiny/utils": "5.25.1-beta.0",
|
|
39
|
+
"@webiny/validation": "5.25.1-beta.0",
|
|
40
|
+
"boolean": "3.1.4",
|
|
42
41
|
"commodo-fields-object": "1.0.6",
|
|
43
42
|
"dataloader": "2.0.0",
|
|
44
43
|
"dot-prop": "6.0.1",
|
|
@@ -55,10 +54,10 @@
|
|
|
55
54
|
"@babel/core": "^7.16.0",
|
|
56
55
|
"@babel/preset-env": "^7.16.4",
|
|
57
56
|
"@babel/preset-flow": "^7.16.0",
|
|
58
|
-
"@webiny/api-security-so-ddb": "^5.25.0",
|
|
59
|
-
"@webiny/api-tenancy-so-ddb": "^5.25.0",
|
|
60
|
-
"@webiny/cli": "^5.25.0",
|
|
61
|
-
"@webiny/project-utils": "^5.25.0",
|
|
57
|
+
"@webiny/api-security-so-ddb": "^5.25.1-beta.0",
|
|
58
|
+
"@webiny/api-tenancy-so-ddb": "^5.25.1-beta.0",
|
|
59
|
+
"@webiny/cli": "^5.25.1-beta.0",
|
|
60
|
+
"@webiny/project-utils": "^5.25.1-beta.0",
|
|
62
61
|
"apollo-graphql": "^0.9.5",
|
|
63
62
|
"get-yarn-workspaces": "^1.0.2",
|
|
64
63
|
"graphql": "^15.7.2",
|
|
@@ -78,5 +77,5 @@
|
|
|
78
77
|
"build": "yarn webiny run build",
|
|
79
78
|
"watch": "yarn webiny run watch"
|
|
80
79
|
},
|
|
81
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "887c9678ec12921eb00edb033e9f2c1a13e35fa5"
|
|
82
81
|
}
|
package/plugins/context.js
CHANGED
|
@@ -15,16 +15,22 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
15
15
|
|
|
16
16
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
17
|
|
|
18
|
+
const DEFAULT_LOCALE_CODE = "en-US";
|
|
19
|
+
|
|
18
20
|
var _default = () => {
|
|
19
21
|
return new _handler.ContextPlugin(context => {
|
|
20
|
-
const locale = context.i18nContent.getCurrentLocale();
|
|
21
22
|
context.cms = _objectSpread(_objectSpread({}, context.cms || {}), {}, {
|
|
22
|
-
|
|
23
|
+
get locale() {
|
|
24
|
+
const locale = context.i18n.getContentLocale();
|
|
25
|
+
return locale ? locale.code : DEFAULT_LOCALE_CODE;
|
|
26
|
+
},
|
|
23
27
|
|
|
24
28
|
getLocale() {
|
|
29
|
+
const locale = context.i18n.getContentLocale();
|
|
30
|
+
|
|
25
31
|
if (!locale) {
|
|
26
32
|
return {
|
|
27
|
-
code:
|
|
33
|
+
code: DEFAULT_LOCALE_CODE,
|
|
28
34
|
default: true
|
|
29
35
|
};
|
|
30
36
|
}
|
package/plugins/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["context.ts"],"names":["ContextPlugin","context","
|
|
1
|
+
{"version":3,"sources":["context.ts"],"names":["DEFAULT_LOCALE_CODE","ContextPlugin","context","cms","locale","i18n","getContentLocale","code","getLocale","default"],"mappings":";;;;;;;;;;;AAAA;;;;;;AAGA,MAAMA,mBAAmB,GAAG,OAA5B;;eAEe,MAAM;AACjB,SAAO,IAAIC,sBAAJ,CAA8BC,OAAO,IAAI;AAC5CA,IAAAA,OAAO,CAACC,GAAR,mCACQD,OAAO,CAACC,GAAR,IAAgB,EADxB;AAEI,UAAIC,MAAJ,GAAa;AACT,cAAMA,MAAM,GAAGF,OAAO,CAACG,IAAR,CAAaC,gBAAb,EAAf;AAEA,eAAOF,MAAM,GAAGA,MAAM,CAACG,IAAV,GAAiBP,mBAA9B;AACH,OANL;;AAOIQ,MAAAA,SAAS,GAAG;AACR,cAAMJ,MAAM,GAAGF,OAAO,CAACG,IAAR,CAAaC,gBAAb,EAAf;;AAEA,YAAI,CAACF,MAAL,EAAa;AACT,iBAAO;AACHG,YAAAA,IAAI,EAAEP,mBADH;AAEHS,YAAAA,OAAO,EAAE;AAFN,WAAP;AAIH;;AACD,eAAOL,MAAP;AACH;;AAjBL;AAmBH,GApBM,CAAP;AAqBH,C","sourcesContent":["import { ContextPlugin } from \"@webiny/handler\";\nimport { CmsContext } from \"~/types\";\n\nconst DEFAULT_LOCALE_CODE = \"en-US\";\n\nexport default () => {\n return new ContextPlugin<CmsContext>(context => {\n context.cms = {\n ...(context.cms || ({} as any)),\n get locale() {\n const locale = context.i18n.getContentLocale();\n\n return locale ? locale.code : DEFAULT_LOCALE_CODE;\n },\n getLocale() {\n const locale = context.i18n.getContentLocale();\n\n if (!locale) {\n return {\n code: DEFAULT_LOCALE_CODE,\n default: true\n };\n }\n return locale;\n }\n };\n });\n};\n"]}
|
package/plugins/crud/index.js
CHANGED
|
@@ -49,7 +49,8 @@ const createAdminCruds = params => {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
const getLocale = () => {
|
|
52
|
-
|
|
52
|
+
// Casting into I18NLocale because we're sure that, at this point, we will have a locale.
|
|
53
|
+
return context.i18n.getContentLocale();
|
|
53
54
|
};
|
|
54
55
|
|
|
55
56
|
const getIdentity = () => {
|
|
@@ -60,8 +61,8 @@ const createAdminCruds = params => {
|
|
|
60
61
|
return context.tenancy.getCurrentTenant();
|
|
61
62
|
};
|
|
62
63
|
|
|
63
|
-
if (storageOperations.
|
|
64
|
-
|
|
64
|
+
if (storageOperations.beforeInit) {
|
|
65
|
+
await storageOperations.beforeInit(context);
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
context.cms = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, context.cms), {}, {
|
|
@@ -69,6 +70,7 @@ const createAdminCruds = params => {
|
|
|
69
70
|
}, (0, _system.createSystemCrud)({
|
|
70
71
|
context,
|
|
71
72
|
getTenant,
|
|
73
|
+
getLocale,
|
|
72
74
|
getIdentity,
|
|
73
75
|
storageOperations
|
|
74
76
|
})), (0, _settings.createSettingsCrud)({
|
|
@@ -91,6 +93,7 @@ const createAdminCruds = params => {
|
|
|
91
93
|
})), (0, _contentEntry.createContentEntryCrud)({
|
|
92
94
|
context,
|
|
93
95
|
getIdentity,
|
|
96
|
+
getTenant,
|
|
94
97
|
storageOperations
|
|
95
98
|
}));
|
|
96
99
|
|
|
@@ -98,7 +101,7 @@ const createAdminCruds = params => {
|
|
|
98
101
|
return;
|
|
99
102
|
}
|
|
100
103
|
|
|
101
|
-
await storageOperations.init(context
|
|
104
|
+
await storageOperations.init(context);
|
|
102
105
|
});
|
|
103
106
|
};
|
|
104
107
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["debug","process","env","DEBUG","createAdminCruds","params","storageOperations","ContextPlugin","context","http","request","method","cms","console","log","getLocale","
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["debug","process","env","DEBUG","createAdminCruds","params","storageOperations","ContextPlugin","context","http","request","method","cms","console","log","getLocale","i18n","getContentLocale","getIdentity","security","getTenant","tenancy","getCurrentTenant","beforeInit","init"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAGA,MAAMA,KAAK,GAAGC,OAAO,CAACC,GAAR,CAAYC,KAAZ,KAAsB,MAApC;;AAMO,MAAMC,gBAAgB,GAAIC,MAAD,IAAoC;AAChE,QAAM;AAAEC,IAAAA;AAAF,MAAwBD,MAA9B;AACA,SAAO,IAAIE,sBAAJ,CAA8B,MAAMC,OAAN,IAAiB;AAAA;;AAClD,QAAI,kBAAAA,OAAO,CAACC,IAAR,yFAAcC,OAAd,gFAAuBC,MAAvB,MAAkC,SAAtC,EAAiD;AAC7C;AACH;AAED;AACR;AACA;AACA;;;AACQ,QAAI,CAACH,OAAO,CAACI,GAAb,EAAkB;AACdZ,MAAAA,KAAK,IACDa,OAAO,CAACC,GAAR,CACK,iGADL,CADJ;AAIA;AACH;;AACD,UAAMC,SAAS,GAAG,MAAM;AACpB;AACA,aAAOP,OAAO,CAACQ,IAAR,CAAaC,gBAAb,EAAP;AACH,KAHD;;AAKA,UAAMC,WAAW,GAAG,MAAM;AACtB,aAAOV,OAAO,CAACW,QAAR,CAAiBD,WAAjB,EAAP;AACH,KAFD;;AAIA,UAAME,SAAS,GAAG,MAAM;AACpB,aAAOZ,OAAO,CAACa,OAAR,CAAgBC,gBAAhB,EAAP;AACH,KAFD;;AAIA,QAAIhB,iBAAiB,CAACiB,UAAtB,EAAkC;AAC9B,YAAMjB,iBAAiB,CAACiB,UAAlB,CAA6Bf,OAA7B,CAAN;AACH;;AAEDA,IAAAA,OAAO,CAACI,GAAR,2FACOJ,OAAO,CAACI,GADf;AAEIN,MAAAA;AAFJ,OAGO,8BAAiB;AAChBE,MAAAA,OADgB;AAEhBY,MAAAA,SAFgB;AAGhBL,MAAAA,SAHgB;AAIhBG,MAAAA,WAJgB;AAKhBZ,MAAAA;AALgB,KAAjB,CAHP,GAUO,kCAAmB;AAClBE,MAAAA,OADkB;AAElBY,MAAAA,SAFkB;AAGlBL,MAAAA,SAHkB;AAIlBT,MAAAA;AAJkB,KAAnB,CAVP,GAgBO,8CAAsB;AACrBE,MAAAA,OADqB;AAErBY,MAAAA,SAFqB;AAGrBL,MAAAA,SAHqB;AAIrBG,MAAAA,WAJqB;AAKrBZ,MAAAA;AALqB,KAAtB,CAhBP,GAuBO,oCAAiB;AAChBE,MAAAA,OADgB;AAEhBY,MAAAA,SAFgB;AAGhBL,MAAAA,SAHgB;AAIhBG,MAAAA,WAJgB;AAKhBZ,MAAAA;AALgB,KAAjB,CAvBP,GA8BO,0CAAuB;AACtBE,MAAAA,OADsB;AAEtBU,MAAAA,WAFsB;AAGtBE,MAAAA,SAHsB;AAItBd,MAAAA;AAJsB,KAAvB,CA9BP;;AAsCA,QAAI,CAACA,iBAAiB,CAACkB,IAAvB,EAA6B;AACzB;AACH;;AACD,UAAMlB,iBAAiB,CAACkB,IAAlB,CAAuBhB,OAAvB,CAAN;AACH,GA3EM,CAAP;AA4EH,CA9EM","sourcesContent":["import { createSettingsCrud } from \"./settings.crud\";\nimport { createSystemCrud } from \"./system.crud\";\nimport { CmsContext, HeadlessCmsStorageOperations } from \"~/types\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport { createModelGroupsCrud } from \"~/content/plugins/crud/contentModelGroup.crud\";\nimport { createModelsCrud } from \"~/content/plugins/crud/contentModel.crud\";\nimport { createContentEntryCrud } from \"~/content/plugins/crud/contentEntry.crud\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst debug = process.env.DEBUG === \"true\";\n\nexport interface CreateAdminCrudsParams {\n storageOperations: HeadlessCmsStorageOperations;\n}\n\nexport const createAdminCruds = (params: CreateAdminCrudsParams) => {\n const { storageOperations } = params;\n return new ContextPlugin<CmsContext>(async context => {\n if (context.http?.request?.method === \"OPTIONS\") {\n return;\n }\n\n /**\n * This should never happen in the actual project.\n * It is to make sure that we load setup context before the CRUD init in our internal code.\n */\n if (!context.cms) {\n debug &&\n console.log(\n `Missing initial \"cms\" on the context. Make sure that you set it up before creating Admin CRUDs.`\n );\n return;\n }\n const getLocale = () => {\n // Casting into I18NLocale because we're sure that, at this point, we will have a locale.\n return context.i18n.getContentLocale() as I18NLocale;\n };\n\n const getIdentity = () => {\n return context.security.getIdentity();\n };\n\n const getTenant = () => {\n return context.tenancy.getCurrentTenant();\n };\n\n if (storageOperations.beforeInit) {\n await storageOperations.beforeInit(context);\n }\n\n context.cms = {\n ...context.cms,\n storageOperations,\n ...createSystemCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createSettingsCrud({\n context,\n getTenant,\n getLocale,\n storageOperations\n }),\n ...createModelGroupsCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createModelsCrud({\n context,\n getTenant,\n getLocale,\n getIdentity,\n storageOperations\n }),\n ...createContentEntryCrud({\n context,\n getIdentity,\n getTenant,\n storageOperations\n })\n };\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context);\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["settings.crud.ts"],"names":["createSettingsCrud","params","storageOperations","context","getTenant","getLocale","checkPermissions","utils","getSettings","settings","get","tenant","id","locale","code","updateModelLastChange","original","contentModelLastChange","Date","create","update","getModelLastChange","ex","console","log","error","message","data"],"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;AAiBO,MAAMA,kBAAkB,GAAIC,MAAD,IAA0D;AACxF,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA,OAArB;AAA8BC,IAAAA,SAA9B;AAAyCC,IAAAA;AAAzC,MAAuDJ,MAA7D;;AAEA,QAAMK,gBAAgB,GAAG,MAAsC;AAC3D,WAAOC,KAAK,CAACD,gBAAN,CAAuBH,OAAvB,EAAgC,cAAhC,CAAP;AACH,GAFD;;AAIA,SAAO;AACHK,IAAAA,WAAW,EAAE,YAAyC;AAClD,YAAMF,gBAAgB,EAAtB;AACA,aAAO,MAAMJ,iBAAiB,CAACO,QAAlB,CAA2BC,GAA3B,CAA+B;AACxCC,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EADoB;AAExCC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAFoB,OAA/B,CAAb;AAIH,KAPE;AAQHC,IAAAA,qBAAqB,EAAE,YAA2B;AAC9C,YAAMC,QAAQ,GAAG,MAAMd,iBAAiB,CAACO,QAAlB,CAA2BC,GAA3B,CAA+B;AAClDC,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EAD8B;AAElDC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAF8B,OAA/B,CAAvB;;AAKA,YAAML,QAAqB,mCACnBO,QAAQ,IAAI,EADO;AAEvBC,QAAAA,sBAAsB,EAAE,IAAIC,IAAJ,EAFD;AAGvBP,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EAHG;AAIvBC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAJG,QAA3B;;AAOA,UAAI,CAACE,QAAL,EAAe;AACX,cAAMd,iBAAiB,CAACO,QAAlB,CAA2BU,MAA3B,CAAkC;AAAEV,UAAAA;AAAF,SAAlC,CAAN;AACA;AACH;;AAED,YAAMP,iBAAiB,CAACO,QAAlB,CAA2BW,MAA3B,CAAkC;
|
|
1
|
+
{"version":3,"sources":["settings.crud.ts"],"names":["createSettingsCrud","params","storageOperations","context","getTenant","getLocale","checkPermissions","utils","getSettings","settings","get","tenant","id","locale","code","updateModelLastChange","original","contentModelLastChange","Date","create","update","getModelLastChange","ex","console","log","error","message","data"],"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;AAiBO,MAAMA,kBAAkB,GAAIC,MAAD,IAA0D;AACxF,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA,OAArB;AAA8BC,IAAAA,SAA9B;AAAyCC,IAAAA;AAAzC,MAAuDJ,MAA7D;;AAEA,QAAMK,gBAAgB,GAAG,MAAsC;AAC3D,WAAOC,KAAK,CAACD,gBAAN,CAAuBH,OAAvB,EAAgC,cAAhC,CAAP;AACH,GAFD;;AAIA,SAAO;AACHK,IAAAA,WAAW,EAAE,YAAyC;AAClD,YAAMF,gBAAgB,EAAtB;AACA,aAAO,MAAMJ,iBAAiB,CAACO,QAAlB,CAA2BC,GAA3B,CAA+B;AACxCC,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EADoB;AAExCC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAFoB,OAA/B,CAAb;AAIH,KAPE;AAQHC,IAAAA,qBAAqB,EAAE,YAA2B;AAC9C,YAAMC,QAAQ,GAAG,MAAMd,iBAAiB,CAACO,QAAlB,CAA2BC,GAA3B,CAA+B;AAClDC,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EAD8B;AAElDC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAF8B,OAA/B,CAAvB;;AAKA,YAAML,QAAqB,mCACnBO,QAAQ,IAAI,EADO;AAEvBC,QAAAA,sBAAsB,EAAE,IAAIC,IAAJ,EAFD;AAGvBP,QAAAA,MAAM,EAAEP,SAAS,GAAGQ,EAHG;AAIvBC,QAAAA,MAAM,EAAER,SAAS,GAAGS;AAJG,QAA3B;;AAOA,UAAI,CAACE,QAAL,EAAe;AACX,cAAMd,iBAAiB,CAACO,QAAlB,CAA2BU,MAA3B,CAAkC;AAAEV,UAAAA;AAAF,SAAlC,CAAN;AACA;AACH;;AAED,YAAMP,iBAAiB,CAACO,QAAlB,CAA2BW,MAA3B,CAAkC;AACpCX,QAAAA;AADoC,OAAlC,CAAN;AAGH,KA7BE;AA8BHY,IAAAA,kBAAkB,EAAE,YAA2B;AAC3C,UAAI;AACA,cAAMZ,QAAQ,GAAG,MAAMP,iBAAiB,CAACO,QAAlB,CAA2BC,GAA3B,CAA+B;AAClDC,UAAAA,MAAM,EAAEP,SAAS,GAAGQ,EAD8B;AAElDC,UAAAA,MAAM,EAAER,SAAS,GAAGS;AAF8B,SAA/B,CAAvB;;AAIA,YAAI,CAACL,QAAD,IAAa,CAACA,QAAQ,CAACQ,sBAA3B,EAAmD;AAC/C,iBAAO,IAAIC,IAAJ,EAAP;AACH;;AACD,eAAOT,QAAQ,CAACQ,sBAAhB;AACH,OATD,CASE,OAAOK,EAAP,EAAW;AACTC,QAAAA,OAAO,CAACC,GAAR,CAAY;AACRC,UAAAA,KAAK,EAAE;AACHC,YAAAA,OAAO,EAAEJ,EAAE,CAACI,OADT;AAEHZ,YAAAA,IAAI,EAAEQ,EAAE,CAACR,IAAH,IAAW,2CAFd;AAGHa,YAAAA,IAAI,EAAEL;AAHH;AADC,SAAZ;AAOH;;AACD,aAAO,IAAIJ,IAAJ,EAAP;AACH;AAlDE,GAAP;AAoDH,CA3DM","sourcesContent":["import * as utils from \"~/utils\";\nimport {\n CmsContext,\n CmsSettingsPermission,\n CmsSettings,\n HeadlessCmsStorageOperations,\n CmsSettingsContext\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nexport interface CreateSettingsCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n}\nexport const createSettingsCrud = (params: CreateSettingsCrudParams): CmsSettingsContext => {\n const { storageOperations, context, getTenant, getLocale } = params;\n\n const checkPermissions = (): Promise<CmsSettingsPermission> => {\n return utils.checkPermissions(context, \"cms.settings\");\n };\n\n return {\n getSettings: async (): Promise<CmsSettings | null> => {\n await checkPermissions();\n return await storageOperations.settings.get({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n },\n updateModelLastChange: async (): Promise<void> => {\n const original = await storageOperations.settings.get({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n const settings: CmsSettings = {\n ...(original || {}),\n contentModelLastChange: new Date(),\n tenant: getTenant().id,\n locale: getLocale().code\n };\n\n if (!original) {\n await storageOperations.settings.create({ settings });\n return;\n }\n\n await storageOperations.settings.update({\n settings\n });\n },\n getModelLastChange: async (): Promise<Date> => {\n try {\n const settings = await storageOperations.settings.get({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n if (!settings || !settings.contentModelLastChange) {\n return new Date();\n }\n return settings.contentModelLastChange;\n } catch (ex) {\n console.log({\n error: {\n message: ex.message,\n code: ex.code || \"COULD_NOT_FETCH_CONTENT_MODEL_LAST_CHANGE\",\n data: ex\n }\n });\n }\n return new Date();\n }\n };\n};\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CmsContext, CmsSystemContext, HeadlessCmsStorageOperations } from "../../types";
|
|
2
2
|
import { Tenant } from "@webiny/api-tenancy/types";
|
|
3
3
|
import { SecurityIdentity } from "@webiny/api-security/types";
|
|
4
|
+
import { I18NLocale } from "@webiny/api-i18n/types";
|
|
4
5
|
interface CreateSystemCrudParams {
|
|
5
6
|
getTenant: () => Tenant;
|
|
7
|
+
getLocale: () => I18NLocale;
|
|
6
8
|
storageOperations: HeadlessCmsStorageOperations;
|
|
7
9
|
context: CmsContext;
|
|
8
10
|
getIdentity: () => SecurityIdentity;
|
|
@@ -33,6 +33,7 @@ const initialContentModelGroup = {
|
|
|
33
33
|
const createSystemCrud = params => {
|
|
34
34
|
const {
|
|
35
35
|
getTenant,
|
|
36
|
+
getLocale,
|
|
36
37
|
storageOperations,
|
|
37
38
|
context,
|
|
38
39
|
getIdentity
|
|
@@ -73,7 +74,6 @@ const createSystemCrud = params => {
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
await storageOperations.system.update({
|
|
76
|
-
original,
|
|
77
77
|
system
|
|
78
78
|
});
|
|
79
79
|
};
|
|
@@ -100,7 +100,6 @@ const createSystemCrud = params => {
|
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
await storageOperations.system.update({
|
|
103
|
-
original,
|
|
104
103
|
system
|
|
105
104
|
});
|
|
106
105
|
return readAPIKey;
|
|
@@ -126,7 +125,8 @@ const createSystemCrud = params => {
|
|
|
126
125
|
|
|
127
126
|
|
|
128
127
|
await onBeforeInstall.publish({
|
|
129
|
-
tenant: getTenant().id
|
|
128
|
+
tenant: getTenant().id,
|
|
129
|
+
locale: getLocale().code
|
|
130
130
|
});
|
|
131
131
|
/**
|
|
132
132
|
* Add default content model group.
|
|
@@ -157,7 +157,8 @@ const createSystemCrud = params => {
|
|
|
157
157
|
*/
|
|
158
158
|
|
|
159
159
|
await onAfterInstall.publish({
|
|
160
|
-
tenant: getTenant().id
|
|
160
|
+
tenant: getTenant().id,
|
|
161
|
+
locale: getLocale().code
|
|
161
162
|
});
|
|
162
163
|
},
|
|
163
164
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["system.crud.ts"],"names":["initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","storageOperations","context","getIdentity","onBeforeInstall","onAfterInstall","createReadAPIKey","crypto","randomBytes","Math","ceil","toString","getVersion","system","get","tenant","id","version","setVersion","original","create","update","onBeforeSystemInstall","onAfterSystemInstall","getSystemVersion","setSystemVersion","getReadAPIKey","readAPIKey","installSystem","identity","NotAuthorizedError","publish","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","upgradeSystem","upgradePlugins","plugins","byType","filter","pl","app","installedAppVersion","plugin","undefined","deployedVersion","upgradeToVersion","code","ErrorCode","UPGRADE_NOT_AVAILABLE","apply"],"mappings":"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","sourcesContent":["import crypto from \"crypto\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { ErrorCode, getApplicablePlugin } from \"@webiny/api-upgrade\";\nimport { UpgradePlugin } from \"@webiny/api-upgrade/types\";\nimport WebinyError from \"@webiny/error\";\nimport {\n AfterInstallTopicParams,\n BeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCms,\n HeadlessCmsStorageOperations\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, storageOperations, context, getIdentity } = params;\n\n const onBeforeInstall = createTopic<BeforeInstallTopicParams>();\n const onAfterInstall = createTopic<AfterInstallTopicParams>();\n\n const createReadAPIKey = () => {\n return crypto.randomBytes(Math.ceil(48 / 2)).toString(\"hex\");\n };\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system ? system.version || null : null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n original,\n system\n });\n };\n\n return {\n onBeforeSystemInstall: onBeforeInstall,\n onAfterSystemInstall: onAfterInstall,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n getReadAPIKey: async () => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n if (!original) {\n return null;\n }\n\n if (!original.readAPIKey) {\n const readAPIKey = createReadAPIKey();\n const system: CmsSystem = {\n ...original,\n readAPIKey\n };\n await storageOperations.system.update({\n original,\n system\n });\n return readAPIKey;\n }\n\n return original.readAPIKey;\n },\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n /**\n * First trigger before install event.\n */\n await onBeforeInstall.publish({\n tenant: getTenant().id\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(ex.message, \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\", {\n group: initialContentModelGroup\n });\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n readAPIKey: createReadAPIKey(),\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onAfterInstall.publish({\n tenant: getTenant().id\n });\n },\n async upgradeSystem(this: HeadlessCms, version) {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const upgradePlugins = context.plugins\n .byType<UpgradePlugin>(\"api-upgrade\")\n .filter(pl => pl.app === \"headless-cms\");\n\n const installedAppVersion = await this.getSystemVersion();\n\n let plugin: UpgradePlugin | undefined = undefined;\n try {\n plugin = getApplicablePlugin({\n deployedVersion: context.WEBINY_VERSION,\n installedAppVersion,\n upgradePlugins,\n upgradeToVersion: version\n });\n } catch (ex) {\n /**\n * We just let the error disappear if is UPGRADE_NOT_AVAILABLE code\n * and rethrow if is not.\n * This is because we want upgrade to pass if there is no plugin available.\n */\n if (ex.code !== ErrorCode.UPGRADE_NOT_AVAILABLE) {\n throw ex;\n }\n }\n\n if (plugin) {\n await plugin.apply(context);\n }\n\n /**\n * Store new app version.\n */\n await setVersion(version);\n\n return true;\n }\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["system.crud.ts"],"names":["initialContentModelGroup","name","slug","description","icon","createSystemCrud","params","getTenant","getLocale","storageOperations","context","getIdentity","onBeforeInstall","onAfterInstall","createReadAPIKey","crypto","randomBytes","Math","ceil","toString","getVersion","system","get","tenant","id","version","setVersion","original","create","update","onBeforeSystemInstall","onAfterSystemInstall","getSystemVersion","setSystemVersion","getReadAPIKey","readAPIKey","installSystem","identity","NotAuthorizedError","publish","locale","code","cms","createGroup","ex","WebinyError","message","group","WEBINY_VERSION","upgradeSystem","upgradePlugins","plugins","byType","filter","pl","app","installedAppVersion","plugin","undefined","deployedVersion","upgradeToVersion","ErrorCode","UPGRADE_NOT_AVAILABLE","apply"],"mappings":"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","sourcesContent":["import crypto from \"crypto\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\nimport { ErrorCode, getApplicablePlugin } from \"@webiny/api-upgrade\";\nimport { UpgradePlugin } from \"@webiny/api-upgrade/types\";\nimport WebinyError from \"@webiny/error\";\nimport {\n AfterInstallTopicParams,\n BeforeInstallTopicParams,\n CmsContext,\n CmsSystem,\n CmsSystemContext,\n HeadlessCms,\n HeadlessCmsStorageOperations\n} from \"~/types\";\nimport { Tenant } from \"@webiny/api-tenancy/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createTopic } from \"@webiny/pubsub\";\nimport { I18NLocale } from \"@webiny/api-i18n/types\";\n\nconst initialContentModelGroup = {\n name: \"Ungrouped\",\n slug: \"ungrouped\",\n description: \"A generic content model group\",\n icon: \"fas/star\"\n};\n\ninterface CreateSystemCrudParams {\n getTenant: () => Tenant;\n getLocale: () => I18NLocale;\n storageOperations: HeadlessCmsStorageOperations;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n}\nexport const createSystemCrud = (params: CreateSystemCrudParams): CmsSystemContext => {\n const { getTenant, getLocale, storageOperations, context, getIdentity } = params;\n\n const onBeforeInstall = createTopic<BeforeInstallTopicParams>();\n const onAfterInstall = createTopic<AfterInstallTopicParams>();\n\n const createReadAPIKey = () => {\n return crypto.randomBytes(Math.ceil(48 / 2)).toString(\"hex\");\n };\n\n const getVersion = async () => {\n if (!getTenant()) {\n return null;\n }\n\n const system = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n return system ? system.version || null : null;\n };\n\n const setVersion = async (version: string) => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n const system: CmsSystem = {\n ...(original || {}),\n version,\n tenant: getTenant().id\n };\n if (!original) {\n await storageOperations.system.create({\n system\n });\n return;\n }\n await storageOperations.system.update({\n system\n });\n };\n\n return {\n onBeforeSystemInstall: onBeforeInstall,\n onAfterSystemInstall: onAfterInstall,\n getSystemVersion: getVersion,\n setSystemVersion: setVersion,\n getReadAPIKey: async () => {\n const original = await storageOperations.system.get({\n tenant: getTenant().id\n });\n\n if (!original) {\n return null;\n }\n\n if (!original.readAPIKey) {\n const readAPIKey = createReadAPIKey();\n const system: CmsSystem = {\n ...original,\n readAPIKey\n };\n await storageOperations.system.update({\n system\n });\n return readAPIKey;\n }\n\n return original.readAPIKey;\n },\n installSystem: async (): Promise<void> => {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const version = await getVersion();\n if (version) {\n return;\n }\n /**\n * First trigger before install event.\n */\n await onBeforeInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n\n /**\n * Add default content model group.\n */\n try {\n await context.cms.createGroup(initialContentModelGroup);\n } catch (ex) {\n throw new WebinyError(ex.message, \"CMS_INSTALLATION_CONTENT_MODEL_GROUP_ERROR\", {\n group: initialContentModelGroup\n });\n }\n\n const system: CmsSystem = {\n version: context.WEBINY_VERSION,\n readAPIKey: createReadAPIKey(),\n tenant: getTenant().id\n };\n /**\n * We need to create the system data.\n */\n await storageOperations.system.create({\n system\n });\n /**\n * And trigger after install event.\n */\n await onAfterInstall.publish({\n tenant: getTenant().id,\n locale: getLocale().code\n });\n },\n async upgradeSystem(this: HeadlessCms, version) {\n const identity = getIdentity();\n if (!identity) {\n throw new NotAuthorizedError();\n }\n\n const upgradePlugins = context.plugins\n .byType<UpgradePlugin>(\"api-upgrade\")\n .filter(pl => pl.app === \"headless-cms\");\n\n const installedAppVersion = await this.getSystemVersion();\n\n let plugin: UpgradePlugin | undefined = undefined;\n try {\n plugin = getApplicablePlugin({\n deployedVersion: context.WEBINY_VERSION,\n installedAppVersion,\n upgradePlugins,\n upgradeToVersion: version\n });\n } catch (ex) {\n /**\n * We just let the error disappear if is UPGRADE_NOT_AVAILABLE code\n * and rethrow if is not.\n * This is because we want upgrade to pass if there is no plugin available.\n */\n if (ex.code !== ErrorCode.UPGRADE_NOT_AVAILABLE) {\n throw ex;\n }\n }\n\n if (plugin) {\n await plugin.apply(context);\n }\n\n /**\n * Store new app version.\n */\n await setVersion(version);\n\n return true;\n }\n };\n};\n"]}
|