@webiny/api-headless-cms 0.0.0-unstable.496cf268ac → 0.0.0-unstable.606fc9c866
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/context.js +47 -43
- package/context.js.map +1 -1
- package/crud/contentEntry/referenceFieldsMapping.js +34 -5
- package/crud/contentEntry/referenceFieldsMapping.js.map +1 -1
- package/crud/contentEntry.crud.d.ts +6 -4
- package/crud/contentEntry.crud.js +896 -821
- package/crud/contentEntry.crud.js.map +1 -1
- package/crud/contentModel/beforeCreate.js +38 -79
- package/crud/contentModel/beforeCreate.js.map +1 -1
- package/crud/contentModel/beforeDelete.d.ts +1 -1
- package/crud/contentModel/beforeDelete.js +1 -5
- package/crud/contentModel/beforeDelete.js.map +1 -1
- package/crud/contentModel/beforeUpdate.js +30 -6
- package/crud/contentModel/beforeUpdate.js.map +1 -1
- package/crud/contentModel/validate/endingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/endingAllowed.js +26 -0
- package/crud/contentModel/validate/endingAllowed.js.map +1 -0
- package/crud/contentModel/validate/isModelEndingAllowed.d.ts +6 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js +24 -0
- package/crud/contentModel/validate/isModelEndingAllowed.js.map +1 -0
- package/crud/contentModel/validate/modelId.d.ts +11 -0
- package/crud/contentModel/validate/modelId.js +36 -0
- package/crud/contentModel/validate/modelId.js.map +1 -0
- package/crud/contentModel/validate/pluralApiName.d.ts +7 -0
- package/crud/contentModel/validate/pluralApiName.js +24 -0
- package/crud/contentModel/validate/pluralApiName.js.map +1 -0
- package/crud/contentModel/validate/singularApiName.d.ts +7 -0
- package/crud/contentModel/validate/singularApiName.js +24 -0
- package/crud/contentModel/validate/singularApiName.js.map +1 -0
- package/crud/contentModel/validateModelFields.js +6 -7
- package/crud/contentModel/validateModelFields.js.map +1 -1
- package/crud/contentModel/validation.d.ts +127 -95
- package/crud/contentModel/validation.js +4 -4
- package/crud/contentModel/validation.js.map +1 -1
- package/crud/contentModel.crud.js +334 -296
- package/crud/contentModel.crud.js.map +1 -1
- package/crud/contentModelGroup/validation.d.ts +4 -4
- package/crud/contentModelGroup.crud.js +170 -142
- package/crud/contentModelGroup.crud.js.map +1 -1
- package/crud/settings.crud.d.ts +1 -1
- package/crud/settings.crud.js +5 -10
- package/crud/settings.crud.js.map +1 -1
- package/graphql/checkEndpointAccess.d.ts +2 -0
- package/graphql/checkEndpointAccess.js +18 -0
- package/graphql/checkEndpointAccess.js.map +1 -0
- package/graphql/createExecutableSchema.d.ts +2 -3
- package/graphql/createExecutableSchema.js.map +1 -1
- package/graphql/createRequestBody.d.ts +2 -0
- package/graphql/createRequestBody.js +14 -0
- package/graphql/createRequestBody.js.map +1 -0
- package/graphql/formatErrorPayload.d.ts +1 -0
- package/graphql/formatErrorPayload.js +25 -0
- package/graphql/formatErrorPayload.js.map +1 -0
- package/graphql/generateSchema.js.map +1 -1
- package/graphql/getSchema.d.ts +17 -0
- package/graphql/getSchema.js +102 -0
- package/graphql/getSchema.js.map +1 -0
- package/graphql/graphQLHandlerFactory.js +6 -150
- package/graphql/graphQLHandlerFactory.js.map +1 -1
- package/graphql/handleRequest.d.ts +11 -0
- package/graphql/handleRequest.js +81 -0
- package/graphql/handleRequest.js.map +1 -0
- package/graphql/index.d.ts +1 -1
- package/graphql/schema/contentModelGroups.js +6 -6
- package/graphql/schema/contentModelGroups.js.map +1 -1
- package/graphql/schema/contentModels.js +3 -3
- package/graphql/schema/contentModels.js.map +1 -1
- package/graphql/schema/createFieldResolvers.js +2 -1
- package/graphql/schema/createFieldResolvers.js.map +1 -1
- package/graphql/schema/createManageResolvers.js +6 -0
- package/graphql/schema/createManageResolvers.js.map +1 -1
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.d.ts +4 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +18 -0
- package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -0
- package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +1 -1
- package/graphqlFields/dynamicZone/dynamicZoneField.js +44 -17
- package/graphqlFields/dynamicZone/dynamicZoneField.js.map +1 -1
- package/graphqlFields/object.js +14 -1
- package/graphqlFields/object.js.map +1 -1
- package/graphqlFields/ref.js +7 -7
- package/graphqlFields/ref.js.map +1 -1
- package/index.d.ts +3 -1
- package/index.js +24 -0
- package/index.js.map +1 -1
- package/package.json +22 -22
- package/plugins/CmsModelPlugin.d.ts +15 -7
- package/plugins/CmsModelPlugin.js +21 -6
- package/plugins/CmsModelPlugin.js.map +1 -1
- package/plugins/StorageOperationsCmsModelPlugin.d.ts +23 -0
- package/plugins/StorageOperationsCmsModelPlugin.js +42 -0
- package/plugins/StorageOperationsCmsModelPlugin.js.map +1 -0
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +11 -0
- package/plugins/index.js.map +1 -1
- package/types.d.ts +72 -48
- package/types.js +4 -0
- package/types.js.map +1 -1
- package/utils/converters/valueKeyStorageConverter.d.ts +1 -5
- package/utils/converters/valueKeyStorageConverter.js +19 -17
- package/utils/converters/valueKeyStorageConverter.js.map +1 -1
- package/utils/createTypeFromFields.js +1 -2
- package/utils/createTypeFromFields.js.map +1 -1
- package/utils/createTypeName.d.ts +0 -2
- package/utils/createTypeName.js +2 -10
- package/utils/createTypeName.js.map +1 -1
- package/utils/incrementEntryIdVersion.d.ts +5 -0
- package/utils/incrementEntryIdVersion.js +29 -0
- package/utils/incrementEntryIdVersion.js.map +1 -0
- package/crud/contentModel/createFieldModels.d.ts +0 -2
- package/crud/contentModel/createFieldModels.js +0 -26
- package/crud/contentModel/createFieldModels.js.map +0 -1
- package/crud/contentModel/fieldIdValidation.d.ts +0 -1
- package/crud/contentModel/fieldIdValidation.js +0 -25
- package/crud/contentModel/fieldIdValidation.js.map +0 -1
- package/crud/contentModel/idValidation.d.ts +0 -1
- package/crud/contentModel/idValidation.js +0 -22
- package/crud/contentModel/idValidation.js.map +0 -1
- package/crud/contentModel/models.d.ts +0 -4
- package/crud/contentModel/models.js +0 -192
- package/crud/contentModel/models.js.map +0 -1
- package/crud/contentModel/systemFields.d.ts +0 -1
- package/crud/contentModel/systemFields.js +0 -8
- package/crud/contentModel/systemFields.js.map +0 -1
- package/upgrades/5.33.0/index.d.ts +0 -3
- package/upgrades/5.33.0/index.js +0 -182
- package/upgrades/5.33.0/index.js.map +0 -1
- package/upgrades/index.d.ts +0 -1
- package/upgrades/index.js +0 -12
- package/upgrades/index.js.map +0 -1
- package/utils/pluralizedTypeName.d.ts +0 -1
- package/utils/pluralizedTypeName.js +0 -26
- package/utils/pluralizedTypeName.js.map +0 -1
- package/utils/removeNullValues.d.ts +0 -1
- package/utils/removeNullValues.js +0 -17
- package/utils/removeNullValues.js.map +0 -1
- package/utils/removeUndefinedValues.d.ts +0 -1
- package/utils/removeUndefinedValues.js +0 -17
- package/utils/removeUndefinedValues.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["transformNameToSingularApiName","name","upperFirst","camelCase","transformNameToPluralApiName","pluralize","CmsModelPlugin","Plugin","constructor","contentModel","options","buildModel","input","model","isPrivate","singularApiName","pluralApiName","fields","buildFields","validateLayout","inputFields","length","WebinyError","modelId","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","createFieldStorageId","settings","childFields","type","push","total","row","layout","count","filter","cell","id","createCmsModel"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\n\nconst transformNameToSingularApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst transformNameToPluralApiName = (name: string) => {\n return pluralize(transformNameToSingularApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * News ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\ninterface CmsApiModel\n extends Omit<CmsModelBase, \"isPrivate\" | \"locale\" | \"tenant\" | \"webinyVersion\" | \"fields\"> {\n isPrivate?: never;\n fields: CmsModelFieldInput[];\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsPrivateModel\n extends Omit<\n CmsModelBase,\n | \"isPrivate\"\n | \"singularApiName\"\n | \"pluralApiName\"\n | \"locale\"\n | \"tenant\"\n | \"webinyVersion\"\n | \"fields\"\n > {\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n locale?: string;\n tenant?: string;\n}\n\ntype CmsModelInput = CmsApiModel | CmsPrivateModel;\n\ninterface CmsModel extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModel {\n const model: CmsModel = {\n ...input,\n isPrivate: input.isPrivate || false,\n singularApiName: input.singularApiName || transformNameToSingularApiName(input.name),\n pluralApiName: input.pluralApiName || transformNameToPluralApiName(input.name),\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId) === true) {\n throw new WebinyError(\n `Field's \"fieldId\" is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId ? lodashCamelCase(input.storageId) : null;\n /**\n * If defined, storageId MUST be camel cased string - for backward compatibility.\n */\n if (\n storageId &&\n (storageId.match(/^([a-zA-Z-0-9]+)$/) === null || storageId !== input.storageId)\n ) {\n throw new WebinyError(\n `Field's \"storageId\" of the field with \"fieldId\" ${input.fieldId} is not camel cased string in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_NOT_CAMEL_CASED_ERROR\",\n {\n model,\n storageId,\n field: input\n }\n );\n } else if (!storageId) {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId) === true) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-ignore\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createApiName","name","upperFirst","camelCase","createPluralApiName","pluralize","CmsModelPlugin","Plugin","constructor","contentModel","options","buildModel","input","isPrivate","singularApiName","pluralApiName","noValidate","model","fields","buildFields","validateLayout","inputFields","length","WebinyError","modelId","storageIdList","fieldIdList","fieldId","trim","field","lodashCamelCase","match","includes","storageId","createFieldStorageId","settings","childFields","type","push","total","row","layout","count","filter","cell","id","createCmsModel"],"sources":["CmsModelPlugin.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport lodashCamelCase from \"lodash/camelCase\";\nimport camelCase from \"lodash/camelCase\";\nimport upperFirst from \"lodash/upperFirst\";\nimport pluralize from \"pluralize\";\nimport { Plugin } from \"@webiny/plugins\";\nimport {\n CmsModel as CmsModelBase,\n CmsModelField as CmsModelFieldBase,\n CmsModelFieldSettings as BaseCmsModelFieldSettings\n} from \"~/types\";\nimport { createFieldStorageId } from \"~/crud/contentModel/createFieldStorageId\";\n\nconst createApiName = (name: string) => {\n return upperFirst(camelCase(name));\n};\n\nconst createPluralApiName = (name: string) => {\n return pluralize(createApiName(name));\n};\n\ninterface CmsModelFieldSettings extends Omit<BaseCmsModelFieldSettings, \"fields\"> {\n /**\n * Object field has child fields.\n */\n fields?: CmsModelFieldInput[];\n}\n\ninterface CmsModelFieldInput extends Omit<CmsModelFieldBase, \"storageId\" | \"settings\"> {\n /**\n * If defined, it must be camelCased string.\n * This is for backwards compatibility - before fields had storageId.\n *\n * This should only be populated in old model fields.\n * News ones must have this empty.\n */\n storageId?: string;\n /**\n * We must have a possibility to have a nested field defined without the storageId.\n */\n settings?: CmsModelFieldSettings;\n}\n\nexport interface CmsApiModel\n extends Omit<CmsModel, \"isPrivate\" | \"fields\" | \"singularApiName\" | \"pluralApiName\"> {\n isPrivate?: never;\n noValidate?: never;\n singularApiName?: string;\n pluralApiName?: string;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsApiModelFull extends Omit<CmsApiModel, \"fields\" | \"noValidate\"> {\n noValidate: true;\n fields: CmsModelFieldBase[];\n}\n\ninterface CmsPrivateModel\n extends Omit<CmsModel, \"isPrivate\" | \"singularApiName\" | \"pluralApiName\" | \"fields\"> {\n noValidate?: never;\n singularApiName?: never;\n pluralApiName?: never;\n isPrivate: true;\n fields: CmsModelFieldInput[];\n}\n\nexport interface CmsPrivateModelFull extends Omit<CmsPrivateModel, \"fields\" | \"noValidate\"> {\n fields: CmsModelFieldBase[];\n noValidate: true;\n}\n\nexport type CmsModelInput = CmsApiModel | CmsPrivateModel | CmsApiModelFull | CmsPrivateModelFull;\n\ninterface CmsModel extends Omit<CmsModelBase, \"locale\" | \"tenant\" | \"webinyVersion\"> {\n locale?: string;\n tenant?: string;\n}\n\ninterface CmsModelPluginOptions {\n validateLayout?: boolean;\n}\n\nexport class CmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms-content-model\";\n public readonly contentModel: CmsModel;\n\n private readonly options: CmsModelPluginOptions;\n\n constructor(contentModel: CmsModelInput, options?: CmsModelPluginOptions) {\n super();\n this.options = options || {};\n this.contentModel = this.buildModel(contentModel);\n }\n\n private buildModel(input: CmsModelInput): CmsModel {\n const isPrivate = input.isPrivate || false;\n const singularApiName = input.singularApiName\n ? createApiName(input.singularApiName)\n : createApiName(input.name);\n const pluralApiName = input.pluralApiName\n ? createApiName(input.pluralApiName)\n : createPluralApiName(input.name);\n\n if (input.noValidate) {\n /**\n * We can safely ignore this error, because we are sure noValidate is not a model field.\n */\n // @ts-ignore\n delete input[\"noValidate\"];\n return {\n ...input,\n isPrivate,\n singularApiName,\n pluralApiName\n };\n }\n\n const model: CmsModel = {\n ...input,\n isPrivate,\n singularApiName,\n pluralApiName,\n fields: this.buildFields(input, input.fields)\n };\n this.validateLayout(model);\n return model;\n }\n\n private buildFields(\n model: CmsModelInput,\n inputFields: CmsModelFieldInput[]\n ): CmsModelFieldBase[] {\n if (inputFields.length === 0) {\n throw new WebinyError(\n `Missing fields for the defined model \"${model.modelId}\".`,\n \"MISSING_FIELDS\",\n {\n model\n }\n );\n }\n const fields: CmsModelFieldBase[] = [];\n const storageIdList: string[] = [];\n const fieldIdList: string[] = [];\n for (const input of inputFields) {\n /**\n * Field must contain an fieldId. It is required in the graphql, but lets check it just in case\n */\n if (!(input.fieldId || \"\").trim()) {\n throw new WebinyError(\n `Field's \"storageId\" is not defined for the content model \"${model.modelId}\".`,\n \"FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n const fieldId = lodashCamelCase(input.fieldId);\n /**\n * FieldID must be in correct pattern.\n */\n if (fieldId.match(/^[0-9]/) !== null) {\n throw new WebinyError(\n `Field's \"fieldId\" does not match correct pattern in the content model \"${model.modelId}\" - cannot start with a number.`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * FieldID also must be camelCased.\n */\n if (fieldId !== input.fieldId) {\n throw new WebinyError(\n `Field's \"fieldId\" must be a camel cased string in the content model \"${model.modelId}\".`,\n \"FIELD_FIELD_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n /**\n * ... and fieldId must be unique.\n */\n if (fieldIdList.includes(fieldId) === true) {\n throw new WebinyError(\n `Field's \"fieldId\" is not unique in the content model \"${model.modelId}\".`,\n \"FIELD_ID_NOT_UNIQUE_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n let storageId = input.storageId ? lodashCamelCase(input.storageId) : null;\n /**\n * If defined, storageId MUST be camel cased string - for backward compatibility.\n */\n if (\n storageId &&\n (storageId.match(/^([a-zA-Z-0-9]+)$/) === null || storageId !== input.storageId)\n ) {\n throw new WebinyError(\n `Field's \"storageId\" of the field with \"fieldId\" ${input.fieldId} is not camel cased string in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_NOT_CAMEL_CASED_ERROR\",\n {\n model,\n storageId,\n field: input\n }\n );\n } else if (!storageId) {\n storageId = createFieldStorageId(input);\n }\n\n /**\n * Fields storageId must be unique.\n */\n if (storageIdList.includes(storageId) === true) {\n throw new WebinyError(\n `Field's \"storageId\" is not unique in the content model \"${model.modelId}\".`,\n \"STORAGE_ID_ERROR\",\n {\n model,\n field: input\n }\n );\n }\n\n /**\n * We can safely ignore error because we are going through the fields and making sure each has storageId.\n */\n // @ts-ignore\n let settings: BaseCmsModelFieldSettings = input.settings;\n\n const childFields = settings?.fields || [];\n if (input.type === \"object\" && childFields.length > 0) {\n settings = {\n ...(settings || {}),\n fields: this.buildFields(model, childFields)\n };\n }\n\n const field: CmsModelFieldBase = {\n ...input,\n settings,\n storageId\n };\n /**\n * Add all relevant data to arrays.\n */\n fields.push(field);\n storageIdList.push(field.storageId);\n fieldIdList.push(field.fieldId);\n }\n return fields;\n }\n\n private validateLayout(model: CmsModel): void {\n /**\n * Only skip validation if option.validateLayout was set as false, explicitly.\n */\n if (this.options.validateLayout === false) {\n return;\n }\n for (const field of model.fields) {\n let total = 0;\n for (const row of model.layout) {\n const count = row.filter(cell => cell === field.id).length;\n total = total + count;\n }\n if (total === 1) {\n continue;\n } else if (total > 1) {\n throw new WebinyError(\n `Field \"${field.id}\" is in more than one layout cell.`,\n \"DUPLICATE_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n throw new WebinyError(\n `Missing field \"${field.id}\" in layout.`,\n \"MISSING_FIELD_IN_LAYOUT\",\n {\n model,\n field\n }\n );\n }\n }\n}\n\nexport const createCmsModel = (\n model: CmsModelInput,\n options?: CmsModelPluginOptions\n): CmsModelPlugin => {\n return new CmsModelPlugin(model, options);\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Plugin } from "@webiny/plugins";
|
|
2
|
+
import { CmsModel, StorageOperationsCmsModel } from "../types";
|
|
3
|
+
export interface StorageOperationsCmsModelPluginCallable {
|
|
4
|
+
(model: CmsModel): StorageOperationsCmsModel;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* This plugin should be initialized only once and hence the name.
|
|
8
|
+
*/
|
|
9
|
+
export declare class StorageOperationsCmsModelPlugin extends Plugin {
|
|
10
|
+
static readonly type: string;
|
|
11
|
+
name: string;
|
|
12
|
+
private readonly models;
|
|
13
|
+
private readonly cb;
|
|
14
|
+
constructor(cb: StorageOperationsCmsModelPluginCallable);
|
|
15
|
+
getModel(input: CmsModel): StorageOperationsCmsModel;
|
|
16
|
+
/**
|
|
17
|
+
* We can cache the converters by having a cache key that is a combination of model ID and savedOn.
|
|
18
|
+
* The models created via the code will not have savedOn, so they will be unknown - and that is ok as they cannot change in the middle of the call.
|
|
19
|
+
*
|
|
20
|
+
* The models created via the CRUD operations might get changed in the middle of the call, so we need to re-create the SO model.
|
|
21
|
+
*/
|
|
22
|
+
private createCacheKey;
|
|
23
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.StorageOperationsCmsModelPlugin = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _plugins = require("@webiny/plugins");
|
|
10
|
+
/**
|
|
11
|
+
* This plugin should be initialized only once and hence the name.
|
|
12
|
+
*/
|
|
13
|
+
class StorageOperationsCmsModelPlugin extends _plugins.Plugin {
|
|
14
|
+
constructor(cb) {
|
|
15
|
+
super();
|
|
16
|
+
(0, _defineProperty2.default)(this, "name", "cms.storageOperations.model");
|
|
17
|
+
(0, _defineProperty2.default)(this, "models", {});
|
|
18
|
+
(0, _defineProperty2.default)(this, "cb", void 0);
|
|
19
|
+
this.cb = cb;
|
|
20
|
+
}
|
|
21
|
+
getModel(input) {
|
|
22
|
+
const cacheKey = this.createCacheKey(input);
|
|
23
|
+
if (this.models[cacheKey]) {
|
|
24
|
+
return this.models[cacheKey];
|
|
25
|
+
}
|
|
26
|
+
const model = this.cb(input);
|
|
27
|
+
this.models[cacheKey] = model;
|
|
28
|
+
return model;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* We can cache the converters by having a cache key that is a combination of model ID and savedOn.
|
|
33
|
+
* The models created via the code will not have savedOn, so they will be unknown - and that is ok as they cannot change in the middle of the call.
|
|
34
|
+
*
|
|
35
|
+
* The models created via the CRUD operations might get changed in the middle of the call, so we need to re-create the SO model.
|
|
36
|
+
*/
|
|
37
|
+
createCacheKey(model) {
|
|
38
|
+
return [model.tenant, model.locale, model.modelId, model.savedOn || "unknown"].join("#");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.StorageOperationsCmsModelPlugin = StorageOperationsCmsModelPlugin;
|
|
42
|
+
(0, _defineProperty2.default)(StorageOperationsCmsModelPlugin, "type", "cms.storageOperations.model");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StorageOperationsCmsModelPlugin","Plugin","constructor","cb","getModel","input","cacheKey","createCacheKey","models","model","tenant","locale","modelId","savedOn","join"],"sources":["StorageOperationsCmsModelPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { CmsModel, StorageOperationsCmsModel } from \"~/types\";\n\nexport interface StorageOperationsCmsModelPluginCallable {\n (model: CmsModel): StorageOperationsCmsModel;\n}\n\n/**\n * This plugin should be initialized only once and hence the name.\n */\nexport class StorageOperationsCmsModelPlugin extends Plugin {\n public static override readonly type: string = \"cms.storageOperations.model\";\n public override name = \"cms.storageOperations.model\";\n\n private readonly models: Record<string, StorageOperationsCmsModel> = {};\n private readonly cb: StorageOperationsCmsModelPluginCallable;\n\n public constructor(cb: StorageOperationsCmsModelPluginCallable) {\n super();\n this.cb = cb;\n }\n\n public getModel(input: CmsModel) {\n const cacheKey = this.createCacheKey(input);\n if (this.models[cacheKey]) {\n return this.models[cacheKey];\n }\n const model = this.cb(input);\n\n this.models[cacheKey] = model;\n\n return model;\n }\n\n /**\n * We can cache the converters by having a cache key that is a combination of model ID and savedOn.\n * The models created via the code will not have savedOn, so they will be unknown - and that is ok as they cannot change in the middle of the call.\n *\n * The models created via the CRUD operations might get changed in the middle of the call, so we need to re-create the SO model.\n */\n private createCacheKey(model: CmsModel): string {\n return [model.tenant, model.locale, model.modelId, model.savedOn || \"unknown\"].join(\"#\");\n }\n}\n"],"mappings":";;;;;;;;AAAA;AAOA;AACA;AACA;AACO,MAAMA,+BAA+B,SAASC,eAAM,CAAC;EAOjDC,WAAW,CAACC,EAA2C,EAAE;IAC5D,KAAK,EAAE;IAAC,4CANW,6BAA6B;IAAA,8CAEiB,CAAC,CAAC;IAAA;IAKnE,IAAI,CAACA,EAAE,GAAGA,EAAE;EAChB;EAEOC,QAAQ,CAACC,KAAe,EAAE;IAC7B,MAAMC,QAAQ,GAAG,IAAI,CAACC,cAAc,CAACF,KAAK,CAAC;IAC3C,IAAI,IAAI,CAACG,MAAM,CAACF,QAAQ,CAAC,EAAE;MACvB,OAAO,IAAI,CAACE,MAAM,CAACF,QAAQ,CAAC;IAChC;IACA,MAAMG,KAAK,GAAG,IAAI,CAACN,EAAE,CAACE,KAAK,CAAC;IAE5B,IAAI,CAACG,MAAM,CAACF,QAAQ,CAAC,GAAGG,KAAK;IAE7B,OAAOA,KAAK;EAChB;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACYF,cAAc,CAACE,KAAe,EAAU;IAC5C,OAAO,CAACA,KAAK,CAACC,MAAM,EAAED,KAAK,CAACE,MAAM,EAAEF,KAAK,CAACG,OAAO,EAAEH,KAAK,CAACI,OAAO,IAAI,SAAS,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;EAC5F;AACJ;AAAC;AAAA,8BAjCYd,+BAA+B,UACO,6BAA6B"}
|
package/plugins/index.d.ts
CHANGED
package/plugins/index.js
CHANGED
|
@@ -79,4 +79,15 @@ Object.keys(_CmsGraphQLSchemaSorterPlugin).forEach(function (key) {
|
|
|
79
79
|
return _CmsGraphQLSchemaSorterPlugin[key];
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
|
+
});
|
|
83
|
+
var _StorageOperationsCmsModelPlugin = require("./StorageOperationsCmsModelPlugin");
|
|
84
|
+
Object.keys(_StorageOperationsCmsModelPlugin).forEach(function (key) {
|
|
85
|
+
if (key === "default" || key === "__esModule") return;
|
|
86
|
+
if (key in exports && exports[key] === _StorageOperationsCmsModelPlugin[key]) return;
|
|
87
|
+
Object.defineProperty(exports, key, {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () {
|
|
90
|
+
return _StorageOperationsCmsModelPlugin[key];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
82
93
|
});
|
package/plugins/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./CmsGroupPlugin\";\nexport * from \"./CmsModelPlugin\";\nexport * from \"./StorageTransformPlugin\";\nexport * from \"./CmsParametersPlugin\";\nexport * from \"./CmsModelFieldConverterPlugin\";\nexport * from \"./CmsGraphQLSchemaPlugin\";\nexport * from \"./CmsGraphQLSchemaSorterPlugin\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./CmsGroupPlugin\";\nexport * from \"./CmsModelPlugin\";\nexport * from \"./StorageTransformPlugin\";\nexport * from \"./CmsParametersPlugin\";\nexport * from \"./CmsModelFieldConverterPlugin\";\nexport * from \"./CmsGraphQLSchemaPlugin\";\nexport * from \"./CmsGraphQLSchemaSorterPlugin\";\nexport * from \"./StorageOperationsCmsModelPlugin\";\n"],"mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
|
package/types.d.ts
CHANGED
|
@@ -118,6 +118,7 @@ export interface CmsModelFieldSettings {
|
|
|
118
118
|
*/
|
|
119
119
|
[key: string]: any;
|
|
120
120
|
}
|
|
121
|
+
export declare type CmsModelFieldType = "boolean" | "datetime" | "file" | "long-text" | "number" | "object" | "ref" | "rich-text" | "text" | "dynamicZone" | string;
|
|
121
122
|
/**
|
|
122
123
|
* A definition for content model field. This type exists on the app side as well.
|
|
123
124
|
*
|
|
@@ -138,18 +139,16 @@ export interface CmsModelField {
|
|
|
138
139
|
* A type of the field.
|
|
139
140
|
* We are defining our built-in fields, so people know which are available by the default.
|
|
140
141
|
*/
|
|
141
|
-
type:
|
|
142
|
+
type: CmsModelFieldType;
|
|
142
143
|
/**
|
|
143
144
|
* A unique storage ID for storing actual values.
|
|
144
|
-
* Must in form of a-zA-Z0-9@a-zA-Z0-9
|
|
145
|
+
* Must in form of a-zA-Z0-9@a-zA-Z0-9
|
|
145
146
|
*
|
|
146
147
|
* This is an auto-generated value: uses `id` and `type`
|
|
147
148
|
*
|
|
148
149
|
* This is used as path for the entry value.
|
|
149
|
-
*
|
|
150
|
-
* @internal
|
|
151
150
|
*/
|
|
152
|
-
storageId: string;
|
|
151
|
+
storageId: `${string}@${string}` | string;
|
|
153
152
|
/**
|
|
154
153
|
* Field identifier for the model field that will be available to the outside world.
|
|
155
154
|
* `storageId` is used as path (or column) to store the data.
|
|
@@ -515,6 +514,7 @@ interface CmsModelFieldToGraphQLCreateResolverParams<TField> {
|
|
|
515
514
|
graphQLType: string;
|
|
516
515
|
field: TField;
|
|
517
516
|
createFieldResolvers: any;
|
|
517
|
+
fieldTypePlugins: CmsFieldTypePlugins;
|
|
518
518
|
}
|
|
519
519
|
export interface CmsModelFieldToGraphQLCreateResolver<TField = CmsModelField> {
|
|
520
520
|
(params: CmsModelFieldToGraphQLCreateResolverParams<TField>): GraphQLFieldResolver | {
|
|
@@ -894,7 +894,7 @@ export interface CmsSettingsContext {
|
|
|
894
894
|
/**
|
|
895
895
|
* Get the datetime when content model last changed.
|
|
896
896
|
*/
|
|
897
|
-
getModelLastChange: () => Promise<Date>;
|
|
897
|
+
getModelLastChange: () => Promise<Date | null>;
|
|
898
898
|
}
|
|
899
899
|
export interface OnSystemBeforeInstallTopicParams {
|
|
900
900
|
tenant: string;
|
|
@@ -1311,7 +1311,7 @@ export interface CmsModelFieldInput {
|
|
|
1311
1311
|
/**
|
|
1312
1312
|
* @see CmsModelField.listValidation
|
|
1313
1313
|
*/
|
|
1314
|
-
listValidation
|
|
1314
|
+
listValidation?: CmsModelFieldValidation[];
|
|
1315
1315
|
/**
|
|
1316
1316
|
* User defined settings.
|
|
1317
1317
|
*/
|
|
@@ -1882,12 +1882,12 @@ export interface CmsEntryMeta {
|
|
|
1882
1882
|
export interface OnEntryBeforeCreateTopicParams {
|
|
1883
1883
|
input: CreateCmsEntryInput;
|
|
1884
1884
|
entry: CmsEntry;
|
|
1885
|
-
model:
|
|
1885
|
+
model: CmsModel;
|
|
1886
1886
|
}
|
|
1887
1887
|
export interface OnEntryAfterCreateTopicParams {
|
|
1888
1888
|
input: CreateCmsEntryInput;
|
|
1889
1889
|
entry: CmsEntry;
|
|
1890
|
-
model:
|
|
1890
|
+
model: CmsModel;
|
|
1891
1891
|
storageEntry: CmsEntry;
|
|
1892
1892
|
}
|
|
1893
1893
|
export interface OnEntryCreateErrorTopicParams {
|
|
@@ -1903,13 +1903,13 @@ export interface OnEntryRevisionBeforeCreateTopicParams {
|
|
|
1903
1903
|
input: CreateFromCmsEntryInput;
|
|
1904
1904
|
entry: CmsEntry;
|
|
1905
1905
|
original: CmsEntry;
|
|
1906
|
-
model:
|
|
1906
|
+
model: CmsModel;
|
|
1907
1907
|
}
|
|
1908
1908
|
export interface OnEntryRevisionAfterCreateTopicParams {
|
|
1909
1909
|
input: CreateFromCmsEntryInput;
|
|
1910
1910
|
entry: CmsEntry;
|
|
1911
1911
|
original: CmsEntry;
|
|
1912
|
-
model:
|
|
1912
|
+
model: CmsModel;
|
|
1913
1913
|
storageEntry: CmsEntry;
|
|
1914
1914
|
}
|
|
1915
1915
|
export interface OnEntryCreateRevisionErrorTopicParams {
|
|
@@ -1926,13 +1926,13 @@ export interface OnEntryBeforeUpdateTopicParams {
|
|
|
1926
1926
|
input: UpdateCmsEntryInput;
|
|
1927
1927
|
original: CmsEntry;
|
|
1928
1928
|
entry: CmsEntry;
|
|
1929
|
-
model:
|
|
1929
|
+
model: CmsModel;
|
|
1930
1930
|
}
|
|
1931
1931
|
export interface OnEntryAfterUpdateTopicParams {
|
|
1932
1932
|
input: UpdateCmsEntryInput;
|
|
1933
1933
|
original: CmsEntry;
|
|
1934
1934
|
entry: CmsEntry;
|
|
1935
|
-
model:
|
|
1935
|
+
model: CmsModel;
|
|
1936
1936
|
storageEntry: CmsEntry;
|
|
1937
1937
|
}
|
|
1938
1938
|
export interface OnEntryUpdateErrorTopicParams {
|
|
@@ -1946,45 +1946,45 @@ export interface OnEntryUpdateErrorTopicParams {
|
|
|
1946
1946
|
*/
|
|
1947
1947
|
export interface OnEntryBeforePublishTopicParams {
|
|
1948
1948
|
entry: CmsEntry;
|
|
1949
|
-
model:
|
|
1949
|
+
model: CmsModel;
|
|
1950
1950
|
}
|
|
1951
1951
|
export interface OnEntryAfterPublishTopicParams {
|
|
1952
1952
|
entry: CmsEntry;
|
|
1953
|
-
model:
|
|
1953
|
+
model: CmsModel;
|
|
1954
1954
|
storageEntry: CmsEntry;
|
|
1955
1955
|
}
|
|
1956
1956
|
export interface OnEntryPublishErrorTopicParams {
|
|
1957
1957
|
error: Error;
|
|
1958
1958
|
entry: CmsEntry;
|
|
1959
|
-
model:
|
|
1959
|
+
model: CmsModel;
|
|
1960
1960
|
}
|
|
1961
1961
|
/**
|
|
1962
1962
|
* Republish
|
|
1963
1963
|
*/
|
|
1964
1964
|
export interface OnEntryBeforeRepublishTopicParams {
|
|
1965
1965
|
entry: CmsEntry;
|
|
1966
|
-
model:
|
|
1966
|
+
model: CmsModel;
|
|
1967
1967
|
}
|
|
1968
1968
|
export interface OnEntryAfterRepublishTopicParams {
|
|
1969
1969
|
entry: CmsEntry;
|
|
1970
|
-
model:
|
|
1970
|
+
model: CmsModel;
|
|
1971
1971
|
storageEntry: CmsEntry;
|
|
1972
1972
|
}
|
|
1973
1973
|
export interface OnEntryRepublishErrorTopicParams {
|
|
1974
1974
|
error: Error;
|
|
1975
1975
|
entry: CmsEntry;
|
|
1976
|
-
model:
|
|
1976
|
+
model: CmsModel;
|
|
1977
1977
|
}
|
|
1978
1978
|
/**
|
|
1979
1979
|
* Unpublish
|
|
1980
1980
|
*/
|
|
1981
1981
|
export interface OnEntryBeforeUnpublishTopicParams {
|
|
1982
1982
|
entry: CmsEntry;
|
|
1983
|
-
model:
|
|
1983
|
+
model: CmsModel;
|
|
1984
1984
|
}
|
|
1985
1985
|
export interface OnEntryAfterUnpublishTopicParams {
|
|
1986
1986
|
entry: CmsEntry;
|
|
1987
|
-
model:
|
|
1987
|
+
model: CmsModel;
|
|
1988
1988
|
storageEntry: CmsEntry;
|
|
1989
1989
|
}
|
|
1990
1990
|
export interface OnEntryUnpublishErrorTopicParams {
|
|
@@ -1994,37 +1994,37 @@ export interface OnEntryUnpublishErrorTopicParams {
|
|
|
1994
1994
|
}
|
|
1995
1995
|
export interface OnEntryBeforeDeleteTopicParams {
|
|
1996
1996
|
entry: CmsEntry;
|
|
1997
|
-
model:
|
|
1997
|
+
model: CmsModel;
|
|
1998
1998
|
}
|
|
1999
1999
|
export interface OnEntryAfterDeleteTopicParams {
|
|
2000
2000
|
entry: CmsEntry;
|
|
2001
|
-
model:
|
|
2001
|
+
model: CmsModel;
|
|
2002
2002
|
}
|
|
2003
2003
|
export interface OnEntryDeleteErrorTopicParams {
|
|
2004
2004
|
error: Error;
|
|
2005
2005
|
entry: CmsEntry;
|
|
2006
|
-
model:
|
|
2006
|
+
model: CmsModel;
|
|
2007
2007
|
}
|
|
2008
2008
|
export interface OnEntryRevisionBeforeDeleteTopicParams {
|
|
2009
2009
|
entry: CmsEntry;
|
|
2010
|
-
model:
|
|
2010
|
+
model: CmsModel;
|
|
2011
2011
|
}
|
|
2012
2012
|
export interface OnEntryRevisionAfterDeleteTopicParams {
|
|
2013
2013
|
entry: CmsEntry;
|
|
2014
|
-
model:
|
|
2014
|
+
model: CmsModel;
|
|
2015
2015
|
}
|
|
2016
2016
|
export interface OnEntryRevisionDeleteErrorTopicParams {
|
|
2017
2017
|
error: Error;
|
|
2018
2018
|
entry: CmsEntry;
|
|
2019
|
-
model:
|
|
2019
|
+
model: CmsModel;
|
|
2020
2020
|
}
|
|
2021
2021
|
export interface OnEntryBeforeGetTopicParams {
|
|
2022
|
-
model:
|
|
2022
|
+
model: CmsModel;
|
|
2023
2023
|
where: CmsEntryListWhere;
|
|
2024
2024
|
}
|
|
2025
2025
|
export interface EntryBeforeListTopicParams {
|
|
2026
2026
|
where: CmsEntryListWhere;
|
|
2027
|
-
model:
|
|
2027
|
+
model: CmsModel;
|
|
2028
2028
|
}
|
|
2029
2029
|
/**
|
|
2030
2030
|
* @category Context
|
|
@@ -2048,6 +2048,14 @@ export interface CreateFromCmsEntryInput {
|
|
|
2048
2048
|
export interface UpdateCmsEntryInput {
|
|
2049
2049
|
[key: string]: any;
|
|
2050
2050
|
}
|
|
2051
|
+
/**
|
|
2052
|
+
* @category Context
|
|
2053
|
+
* @category CmsEntry
|
|
2054
|
+
*/
|
|
2055
|
+
export interface GetUniqueFieldValuesParams {
|
|
2056
|
+
where: CmsEntryListWhere;
|
|
2057
|
+
fieldId: string;
|
|
2058
|
+
}
|
|
2051
2059
|
/**
|
|
2052
2060
|
* Cms Entry CRUD methods in the context.
|
|
2053
2061
|
*
|
|
@@ -2125,7 +2133,13 @@ export interface CmsEntryContext {
|
|
|
2125
2133
|
*/
|
|
2126
2134
|
getEntryRevisions: (model: CmsModel, id: string) => Promise<CmsEntry[]>;
|
|
2127
2135
|
/**
|
|
2128
|
-
*
|
|
2136
|
+
* List all unique values for a given field.
|
|
2137
|
+
*
|
|
2138
|
+
* @internal
|
|
2139
|
+
*/
|
|
2140
|
+
getUniqueFieldValues: (model: CmsModel, params: GetUniqueFieldValuesParams) => Promise<string[]>;
|
|
2141
|
+
/**
|
|
2142
|
+
* Lifecycle events - deprecated.
|
|
2129
2143
|
*/
|
|
2130
2144
|
/**
|
|
2131
2145
|
* @deprecated
|
|
@@ -2497,6 +2511,10 @@ export interface CmsEntryStorageOperationsUnpublishParams<T extends CmsStorageEn
|
|
|
2497
2511
|
*/
|
|
2498
2512
|
storageEntry: T;
|
|
2499
2513
|
}
|
|
2514
|
+
export interface CmsEntryStorageOperationsGetUniqueFieldValuesParams {
|
|
2515
|
+
where: CmsEntryListWhere;
|
|
2516
|
+
fieldId: string;
|
|
2517
|
+
}
|
|
2500
2518
|
export interface CmsEntryStorageOperationsGetByIdsParams {
|
|
2501
2519
|
ids: readonly string[];
|
|
2502
2520
|
}
|
|
@@ -2553,71 +2571,77 @@ export interface CmsEntryStorageOperations<T extends CmsStorageEntry = CmsStorag
|
|
|
2553
2571
|
/**
|
|
2554
2572
|
* Get all the entries of the ids.
|
|
2555
2573
|
*/
|
|
2556
|
-
getByIds: (model:
|
|
2574
|
+
getByIds: (model: CmsModel, params: CmsEntryStorageOperationsGetByIdsParams) => Promise<T[]>;
|
|
2557
2575
|
/**
|
|
2558
2576
|
* Get all the published entries of the ids.
|
|
2559
2577
|
*/
|
|
2560
|
-
getPublishedByIds: (model:
|
|
2578
|
+
getPublishedByIds: (model: CmsModel, params: CmsEntryStorageOperationsGetPublishedByIdsParams) => Promise<T[]>;
|
|
2561
2579
|
/**
|
|
2562
2580
|
* Get all the latest entries of the ids.
|
|
2563
2581
|
*/
|
|
2564
|
-
getLatestByIds: (model:
|
|
2582
|
+
getLatestByIds: (model: CmsModel, params: CmsEntryStorageOperationsGetLatestByIdsParams) => Promise<T[]>;
|
|
2565
2583
|
/**
|
|
2566
2584
|
* Get all revisions of the given entry id.
|
|
2567
2585
|
*/
|
|
2568
|
-
getRevisions: (model:
|
|
2586
|
+
getRevisions: (model: CmsModel, params: CmsEntryStorageOperationsGetRevisionsParams) => Promise<T[]>;
|
|
2569
2587
|
/**
|
|
2570
2588
|
* Get the entry by the given revision id.
|
|
2571
2589
|
*/
|
|
2572
|
-
getRevisionById: (model:
|
|
2590
|
+
getRevisionById: (model: CmsModel, params: CmsEntryStorageOperationsGetRevisionParams) => Promise<T | null>;
|
|
2573
2591
|
/**
|
|
2574
2592
|
* Get the published entry by given entryId.
|
|
2575
2593
|
*/
|
|
2576
|
-
getPublishedRevisionByEntryId: (model:
|
|
2594
|
+
getPublishedRevisionByEntryId: (model: CmsModel, params: CmsEntryStorageOperationsGetPublishedRevisionParams) => Promise<T | null>;
|
|
2577
2595
|
/**
|
|
2578
2596
|
* Get the latest entry by given entryId.
|
|
2579
2597
|
*/
|
|
2580
|
-
getLatestRevisionByEntryId: (model:
|
|
2598
|
+
getLatestRevisionByEntryId: (model: CmsModel, params: CmsEntryStorageOperationsGetLatestRevisionParams) => Promise<T | null>;
|
|
2581
2599
|
/**
|
|
2582
2600
|
* Get the revision of the entry before given one.
|
|
2583
2601
|
*/
|
|
2584
|
-
getPreviousRevision: (model:
|
|
2602
|
+
getPreviousRevision: (model: CmsModel, params: CmsEntryStorageOperationsGetPreviousRevisionParams) => Promise<T | null>;
|
|
2585
2603
|
/**
|
|
2586
2604
|
* Gets entry by given params.
|
|
2587
2605
|
*/
|
|
2588
|
-
get: (model:
|
|
2606
|
+
get: (model: CmsModel, params: CmsEntryStorageOperationsGetParams) => Promise<T | null>;
|
|
2589
2607
|
/**
|
|
2590
2608
|
* List all entries. Filterable via params.
|
|
2591
2609
|
*/
|
|
2592
|
-
list: (model:
|
|
2610
|
+
list: (model: CmsModel, params: CmsEntryStorageOperationsListParams) => Promise<CmsEntryStorageOperationsListResponse<T>>;
|
|
2593
2611
|
/**
|
|
2594
2612
|
* Create a new entry.
|
|
2595
2613
|
*/
|
|
2596
|
-
create: (model:
|
|
2614
|
+
create: (model: CmsModel, params: CmsEntryStorageOperationsCreateParams<T>) => Promise<T>;
|
|
2597
2615
|
/**
|
|
2598
2616
|
* Create a new entry from existing one.
|
|
2599
2617
|
*/
|
|
2600
|
-
createRevisionFrom: (model:
|
|
2618
|
+
createRevisionFrom: (model: CmsModel, params: CmsEntryStorageOperationsCreateRevisionFromParams<T>) => Promise<T>;
|
|
2601
2619
|
/**
|
|
2602
2620
|
* Update existing entry.
|
|
2603
2621
|
*/
|
|
2604
|
-
update: (model:
|
|
2622
|
+
update: (model: CmsModel, params: CmsEntryStorageOperationsUpdateParams<T>) => Promise<T>;
|
|
2605
2623
|
/**
|
|
2606
2624
|
* Delete the entry revision.
|
|
2607
2625
|
*/
|
|
2608
|
-
deleteRevision: (model:
|
|
2626
|
+
deleteRevision: (model: CmsModel, params: CmsEntryStorageOperationsDeleteRevisionParams<T>) => Promise<void>;
|
|
2609
2627
|
/**
|
|
2610
2628
|
* Delete the entry.
|
|
2611
2629
|
*/
|
|
2612
|
-
delete: (model:
|
|
2630
|
+
delete: (model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) => Promise<void>;
|
|
2613
2631
|
/**
|
|
2614
2632
|
* Publish the entry.
|
|
2615
2633
|
*/
|
|
2616
|
-
publish: (model:
|
|
2634
|
+
publish: (model: CmsModel, params: CmsEntryStorageOperationsPublishParams<T>) => Promise<T>;
|
|
2617
2635
|
/**
|
|
2618
2636
|
* Unpublish the entry.
|
|
2619
2637
|
*/
|
|
2620
|
-
unpublish: (model:
|
|
2638
|
+
unpublish: (model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams<T>) => Promise<T>;
|
|
2639
|
+
/**
|
|
2640
|
+
* Method to list all the unique values for the given field id.
|
|
2641
|
+
* Simplest use case would be to aggregate tags for some content.
|
|
2642
|
+
* @internal
|
|
2643
|
+
*/
|
|
2644
|
+
getUniqueFieldValues: (model: CmsModel, params: CmsEntryStorageOperationsGetUniqueFieldValuesParams) => Promise<string[]>;
|
|
2621
2645
|
}
|
|
2622
2646
|
export declare enum CONTENT_ENTRY_STATUS {
|
|
2623
2647
|
DRAFT = "draft",
|
|
@@ -2689,7 +2713,7 @@ export interface HeadlessCmsStorageOperations<C = CmsContext> {
|
|
|
2689
2713
|
/**
|
|
2690
2714
|
* Either attach something from the storage operations or run something in it.
|
|
2691
2715
|
*/
|
|
2692
|
-
beforeInit
|
|
2716
|
+
beforeInit: (context: C) => Promise<void>;
|
|
2693
2717
|
init?: (context: C) => Promise<void>;
|
|
2694
2718
|
}
|
|
2695
2719
|
export {};
|