@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.
Files changed (35) hide show
  1. package/content/graphQLHandlerFactory.js +3 -1
  2. package/content/graphQLHandlerFactory.js.map +1 -1
  3. package/content/plugins/crud/contentEntry/afterDelete.js +1 -2
  4. package/content/plugins/crud/contentEntry/afterDelete.js.map +1 -1
  5. package/content/plugins/crud/contentEntry.crud.d.ts +2 -0
  6. package/content/plugins/crud/contentEntry.crud.js +71 -72
  7. package/content/plugins/crud/contentEntry.crud.js.map +1 -1
  8. package/content/plugins/crud/contentModel/beforeDelete.js +0 -2
  9. package/content/plugins/crud/contentModel/beforeDelete.js.map +1 -1
  10. package/content/plugins/crud/contentModel.crud.js +21 -12
  11. package/content/plugins/crud/contentModel.crud.js.map +1 -1
  12. package/content/plugins/crud/contentModelGroup.crud.js +38 -45
  13. package/content/plugins/crud/contentModelGroup.crud.js.map +1 -1
  14. package/content/plugins/crud/index.js +5 -3
  15. package/content/plugins/crud/index.js.map +1 -1
  16. package/content/plugins/graphqlFields/longText.js +1 -0
  17. package/content/plugins/graphqlFields/longText.js.map +1 -1
  18. package/content/plugins/graphqlFields/text.js +1 -0
  19. package/content/plugins/graphqlFields/text.js.map +1 -1
  20. package/content/plugins/schema/contentEntries.js +6 -9
  21. package/content/plugins/schema/contentEntries.js.map +1 -1
  22. package/content/plugins/validators/unique.js +0 -1
  23. package/content/plugins/validators/unique.js.map +1 -1
  24. package/package.json +24 -25
  25. package/plugins/context.js +9 -3
  26. package/plugins/context.js.map +1 -1
  27. package/plugins/crud/index.js +7 -4
  28. package/plugins/crud/index.js.map +1 -1
  29. package/plugins/crud/settings.crud.js +0 -1
  30. package/plugins/crud/settings.crud.js.map +1 -1
  31. package/plugins/crud/system.crud.d.ts +2 -0
  32. package/plugins/crud/system.crud.js +5 -4
  33. package/plugins/crud/system.crud.js.map +1 -1
  34. package/types.d.ts +51 -105
  35. 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"]}
@@ -42,7 +42,6 @@ var _default = () => {
42
42
  const [items] = await manager.listLatest({
43
43
  where: {
44
44
  entryId_not: entry ? entry.entryId : undefined,
45
- tenant: model.tenant,
46
45
  [field.fieldId]: value
47
46
  },
48
47
  limit: 1
@@ -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","tenant","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;AAEHC,cAAAA,MAAM,EAAEZ,KAAK,CAACY,MAFX;AAGH,eAAChB,KAAK,CAACiB,OAAP,GAAiBhB;AAHd,aAD8B;AAMrCiB,YAAAA,KAAK,EAAE;AAN8B,WAAnB,CAAtB;AAQA,iBAAOR,KAAK,CAACS,MAAN,KAAiB,CAAxB;AACH,SAVD,CAUE,OAAOC,EAAP,EAAW;AACT,gBAAM,IAAIC,cAAJ,CACF,oDADE,EAEF,oBAFE,EAGF;AACIrB,YAAAA,KADJ;AAEIC,YAAAA,KAFJ;AAGIG,YAAAA;AAHJ,WAHE,CAAN;AASH;AACJ;AAjCM;AAHR,GAAP;AAuCH,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 tenant: model.tenant,\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"]}
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.17.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-content": "5.25.0",
27
- "@webiny/api-i18n-ddb": "5.25.0",
28
- "@webiny/api-security": "5.25.0",
29
- "@webiny/api-tenancy": "5.25.0",
30
- "@webiny/api-upgrade": "5.25.0",
31
- "@webiny/error": "5.25.0",
32
- "@webiny/handler": "5.25.0",
33
- "@webiny/handler-aws": "5.25.0",
34
- "@webiny/handler-db": "5.25.0",
35
- "@webiny/handler-graphql": "5.25.0",
36
- "@webiny/handler-http": "5.25.0",
37
- "@webiny/plugins": "5.25.0",
38
- "@webiny/pubsub": "5.25.0",
39
- "@webiny/utils": "5.25.0",
40
- "@webiny/validation": "5.25.0",
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": "4622d2aafbbecea051ab404859ced09a0a97434e"
80
+ "gitHead": "887c9678ec12921eb00edb033e9f2c1a13e35fa5"
82
81
  }
@@ -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
- locale: locale ? locale.code : "en-US",
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: "en-US",
33
+ code: DEFAULT_LOCALE_CODE,
28
34
  default: true
29
35
  };
30
36
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["context.ts"],"names":["ContextPlugin","context","locale","i18nContent","getCurrentLocale","cms","code","getLocale","default"],"mappings":";;;;;;;;;;;AAAA;;;;;;eAGe,MAAM;AACjB,SAAO,IAAIA,sBAAJ,CAA8BC,OAAO,IAAI;AAC5C,UAAMC,MAAM,GAAGD,OAAO,CAACE,WAAR,CAAoBC,gBAApB,EAAf;AAEAH,IAAAA,OAAO,CAACI,GAAR,mCACQJ,OAAO,CAACI,GAAR,IAAgB,EADxB;AAEIH,MAAAA,MAAM,EAAEA,MAAM,GAAGA,MAAM,CAACI,IAAV,GAAiB,OAFnC;;AAGIC,MAAAA,SAAS,GAAG;AACR,YAAI,CAACL,MAAL,EAAa;AACT,iBAAO;AACHI,YAAAA,IAAI,EAAE,OADH;AAEHE,YAAAA,OAAO,EAAE;AAFN,WAAP;AAIH;;AACD,eAAON,MAAP;AACH;;AAXL;AAaH,GAhBM,CAAP;AAiBH,C","sourcesContent":["import { ContextPlugin } from \"@webiny/handler\";\nimport { CmsContext } from \"~/types\";\n\nexport default () => {\n return new ContextPlugin<CmsContext>(context => {\n const locale = context.i18nContent.getCurrentLocale();\n\n context.cms = {\n ...(context.cms || ({} as any)),\n locale: locale ? locale.code : \"en-US\",\n getLocale() {\n if (!locale) {\n return {\n code: \"en-US\",\n default: true\n };\n }\n return locale;\n }\n };\n });\n};\n"]}
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"]}
@@ -49,7 +49,8 @@ const createAdminCruds = params => {
49
49
  }
50
50
 
51
51
  const getLocale = () => {
52
- return context.cms.getLocale();
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.plugins && storageOperations.plugins.length > 0) {
64
- context.plugins.register(storageOperations.plugins);
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.cms);
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","getIdentity","security","getTenant","tenancy","getCurrentTenant","plugins","length","register","init"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAEA,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,aAAOP,OAAO,CAACI,GAAR,CAAYG,SAAZ,EAAP;AACH,KAFD;;AAIA,UAAMC,WAAW,GAAG,MAAM;AACtB,aAAOR,OAAO,CAACS,QAAR,CAAiBD,WAAjB,EAAP;AACH,KAFD;;AAIA,UAAME,SAAS,GAAG,MAAM;AACpB,aAAOV,OAAO,CAACW,OAAR,CAAgBC,gBAAhB,EAAP;AACH,KAFD;;AAIA,QAAId,iBAAiB,CAACe,OAAlB,IAA6Bf,iBAAiB,CAACe,OAAlB,CAA0BC,MAA1B,GAAmC,CAApE,EAAuE;AACnEd,MAAAA,OAAO,CAACa,OAAR,CAAgBE,QAAhB,CAAyBjB,iBAAiB,CAACe,OAA3C;AACH;;AAEDb,IAAAA,OAAO,CAACI,GAAR,2FACOJ,OAAO,CAACI,GADf;AAEIN,MAAAA;AAFJ,OAGO,8BAAiB;AAChBE,MAAAA,OADgB;AAEhBU,MAAAA,SAFgB;AAGhBF,MAAAA,WAHgB;AAIhBV,MAAAA;AAJgB,KAAjB,CAHP,GASO,kCAAmB;AAClBE,MAAAA,OADkB;AAElBU,MAAAA,SAFkB;AAGlBH,MAAAA,SAHkB;AAIlBT,MAAAA;AAJkB,KAAnB,CATP,GAeO,8CAAsB;AACrBE,MAAAA,OADqB;AAErBU,MAAAA,SAFqB;AAGrBH,MAAAA,SAHqB;AAIrBC,MAAAA,WAJqB;AAKrBV,MAAAA;AALqB,KAAtB,CAfP,GAsBO,oCAAiB;AAChBE,MAAAA,OADgB;AAEhBU,MAAAA,SAFgB;AAGhBH,MAAAA,SAHgB;AAIhBC,MAAAA,WAJgB;AAKhBV,MAAAA;AALgB,KAAjB,CAtBP,GA6BO,0CAAuB;AACtBE,MAAAA,OADsB;AAEtBQ,MAAAA,WAFsB;AAGtBV,MAAAA;AAHsB,KAAvB,CA7BP;;AAoCA,QAAI,CAACA,iBAAiB,CAACkB,IAAvB,EAA6B;AACzB;AACH;;AACD,UAAMlB,iBAAiB,CAACkB,IAAlB,CAAuBhB,OAAO,CAACI,GAA/B,CAAN;AACH,GAxEM,CAAP;AAyEH,CA3EM","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\";\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 return context.cms.getLocale();\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.plugins && storageOperations.plugins.length > 0) {\n context.plugins.register(storageOperations.plugins);\n }\n\n context.cms = {\n ...context.cms,\n storageOperations,\n ...createSystemCrud({\n context,\n getTenant,\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 storageOperations\n })\n };\n\n if (!storageOperations.init) {\n return;\n }\n await storageOperations.init(context.cms);\n });\n};\n"]}
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"]}
@@ -59,7 +59,6 @@ const createSettingsCrud = params => {
59
59
  }
60
60
 
61
61
  await storageOperations.settings.update({
62
- original,
63
62
  settings
64
63
  });
65
64
  },
@@ -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;AACpCJ,QAAAA,QADoC;AAEpCP,QAAAA;AAFoC,OAAlC,CAAN;AAIH,KA9BE;AA+BHY,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;AAnDE,GAAP;AAqDH,CA5DM","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 original,\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
+ {"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"]}