@webiny/api-headless-cms 5.32.0-beta.0 → 5.33.0-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 (107) hide show
  1. package/crud/contentEntry/entryDataValidation.js +1 -0
  2. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  3. package/crud/contentEntry/markLockedFields.js +2 -2
  4. package/crud/contentEntry/markLockedFields.js.map +1 -1
  5. package/crud/contentEntry.crud.js +170 -60
  6. package/crud/contentEntry.crud.js.map +1 -1
  7. package/crud/contentModel/beforeCreate.js +11 -4
  8. package/crud/contentModel/beforeCreate.js.map +1 -1
  9. package/crud/contentModel/beforeDelete.js +6 -1
  10. package/crud/contentModel/beforeDelete.js.map +1 -1
  11. package/crud/contentModel/beforeUpdate.js +18 -4
  12. package/crud/contentModel/beforeUpdate.js.map +1 -1
  13. package/crud/contentModel/createFieldStorageId.d.ts +2 -0
  14. package/crud/contentModel/createFieldStorageId.js +16 -0
  15. package/crud/contentModel/createFieldStorageId.js.map +1 -0
  16. package/crud/contentModel/fieldIdValidation.d.ts +1 -0
  17. package/crud/contentModel/fieldIdValidation.js +25 -0
  18. package/crud/contentModel/fieldIdValidation.js.map +1 -0
  19. package/crud/contentModel/models.js +9 -8
  20. package/crud/contentModel/models.js.map +1 -1
  21. package/crud/contentModel/systemFields.d.ts +1 -0
  22. package/crud/contentModel/systemFields.js +8 -0
  23. package/crud/contentModel/systemFields.js.map +1 -0
  24. package/crud/contentModel/validateLayout.d.ts +1 -1
  25. package/crud/contentModel/validateLayout.js +1 -2
  26. package/crud/contentModel/validateLayout.js.map +1 -1
  27. package/crud/contentModel/validateModel.d.ts +9 -0
  28. package/crud/contentModel/validateModel.js +32 -0
  29. package/crud/contentModel/validateModel.js.map +1 -0
  30. package/crud/contentModel/validateModelFields.d.ts +3 -2
  31. package/crud/contentModel/validateModelFields.js +200 -38
  32. package/crud/contentModel/validateModelFields.js.map +1 -1
  33. package/crud/contentModel.crud.js +59 -5
  34. package/crud/contentModel.crud.js.map +1 -1
  35. package/crud/contentModelGroup/beforeCreate.js +3 -3
  36. package/crud/contentModelGroup/beforeCreate.js.map +1 -1
  37. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.d.ts +7 -0
  38. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js +66 -0
  39. package/fieldConverters/CmsModelDefaultFieldConverterPlugin.js.map +1 -0
  40. package/fieldConverters/CmsModelObjectFieldConverterPlugin.d.ts +11 -0
  41. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +306 -0
  42. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -0
  43. package/fieldConverters/index.d.ts +3 -0
  44. package/fieldConverters/index.js +16 -0
  45. package/fieldConverters/index.js.map +1 -0
  46. package/graphql/schema/contentModels.js +6 -0
  47. package/graphql/schema/contentModels.js.map +1 -1
  48. package/graphql/schema/createFieldResolvers.js +13 -1
  49. package/graphql/schema/createFieldResolvers.js.map +1 -1
  50. package/graphql/schema/createReadSDL.js +3 -2
  51. package/graphql/schema/createReadSDL.js.map +1 -1
  52. package/graphql/schema/schemaPlugins.js +7 -1
  53. package/graphql/schema/schemaPlugins.js.map +1 -1
  54. package/graphqlFields/datetime.js +6 -1
  55. package/graphqlFields/datetime.js.map +1 -1
  56. package/graphqlFields/helpers.js +1 -1
  57. package/graphqlFields/helpers.js.map +1 -1
  58. package/graphqlFields/object.js +1 -1
  59. package/graphqlFields/object.js.map +1 -1
  60. package/index.d.ts +1 -1
  61. package/index.js +3 -1
  62. package/index.js.map +1 -1
  63. package/package.json +24 -24
  64. package/plugins/CmsGroupPlugin.d.ts +1 -1
  65. package/plugins/CmsGroupPlugin.js.map +1 -1
  66. package/plugins/CmsModelFieldConverterPlugin.d.ts +14 -0
  67. package/plugins/CmsModelFieldConverterPlugin.js +17 -0
  68. package/plugins/CmsModelFieldConverterPlugin.js.map +1 -0
  69. package/plugins/CmsModelPlugin.d.ts +32 -4
  70. package/plugins/CmsModelPlugin.js +160 -1
  71. package/plugins/CmsModelPlugin.js.map +1 -1
  72. package/plugins/index.d.ts +1 -0
  73. package/plugins/index.js +13 -0
  74. package/plugins/index.js.map +1 -1
  75. package/types.d.ts +143 -81
  76. package/types.js +24 -0
  77. package/types.js.map +1 -1
  78. package/upgrades/5.33.0/index.d.ts +3 -0
  79. package/upgrades/5.33.0/index.js +186 -0
  80. package/upgrades/5.33.0/index.js.map +1 -0
  81. package/upgrades/index.d.ts +1 -1
  82. package/upgrades/index.js +3 -1
  83. package/upgrades/index.js.map +1 -1
  84. package/utils/converters/Converter.d.ts +27 -0
  85. package/utils/converters/Converter.js +71 -0
  86. package/utils/converters/Converter.js.map +1 -0
  87. package/utils/converters/ConverterCollection.d.ts +24 -0
  88. package/utils/converters/ConverterCollection.js +115 -0
  89. package/utils/converters/ConverterCollection.js.map +1 -0
  90. package/utils/converters/valueKeyStorageConverter.d.ts +18 -0
  91. package/utils/converters/valueKeyStorageConverter.js +152 -0
  92. package/utils/converters/valueKeyStorageConverter.js.map +1 -0
  93. package/utils/filterModelFields.d.ts +16 -0
  94. package/utils/filterModelFields.js +81 -0
  95. package/utils/filterModelFields.js.map +1 -0
  96. package/utils/getEntryTitle.js +6 -5
  97. package/utils/getEntryTitle.js.map +1 -1
  98. package/utils/ownership.js +4 -2
  99. package/utils/ownership.js.map +1 -1
  100. package/utils/renderGetFilterFields.js +3 -3
  101. package/utils/renderGetFilterFields.js.map +1 -1
  102. package/utils/renderListFilterFields.js +6 -5
  103. package/utils/renderListFilterFields.js.map +1 -1
  104. package/utils/renderSortEnum.js +4 -4
  105. package/utils/renderSortEnum.js.map +1 -1
  106. package/validators/unique.js +1 -0
  107. package/validators/unique.js.map +1 -1
@@ -191,6 +191,7 @@ const validateModelEntryData = async params => {
191
191
 
192
192
  invalidFields.push({
193
193
  fieldId: field.fieldId,
194
+ storageId: field.storageId,
194
195
  error
195
196
  });
196
197
  }
@@ -1 +1 @@
1
- {"version":3,"names":["validateValue","args","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","predefinedValue","runFieldMultipleValuesValidations","data","fieldId","valuesError","listValidation","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","params","plugins","byType","reduce","acc","plugin","push","invalidFields","fields","WebinyError"],"sources":["entryDataValidation.ts"],"sourcesContent":["import {\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsContext,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams,\n CmsEntry\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ValidateArgs {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async (\n args: ValidateArgs,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n\n const { validatorList, context, field, model, entry } = args;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n }\n for (const predefinedValue of predefinedValues) {\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { field, data } = args;\n const values = data[field.fieldId] || [];\n if (Array.isArray(values) === false) {\n return `Value of the field \"${field.fieldId}\" is not an array.`;\n }\n const valuesError = await validateValue(args, field.listValidation || [], values);\n if (valuesError) {\n return valuesError;\n }\n for (const value of values) {\n const valueError = await validateValue(args, field.validation || [], value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { data, field } = args;\n const value = data[field.fieldId];\n const error = await validateValue(args, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (args: ValidateArgs): Promise<string | null> => {\n if (args.field.multipleValues) {\n return await runFieldMultipleValuesValidations(args);\n }\n return await runFieldValueValidations(args);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n}\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data } = params;\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = context.plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .reduce((acc, plugin) => {\n const name = plugin.validator.name;\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(plugin.validator.validate);\n\n return acc;\n }, {} as PluginValidationList);\n\n /**\n * Loop through model fields and validate the corresponding data.\n * Run validation only if the field has validation configured.\n */\n const invalidFields = [];\n for (const field of model.fields) {\n const error = await execValidation({\n model,\n validatorList,\n field,\n data: {\n ...(entry?.values || {}),\n ...data\n },\n context,\n entry\n });\n if (!error) {\n continue;\n }\n invalidFields.push({\n fieldId: field.fieldId,\n error\n });\n }\n\n if (invalidFields.length > 0) {\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["validateValue","args","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","predefinedValue","runFieldMultipleValuesValidations","data","fieldId","valuesError","listValidation","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","multipleValues","validateModelEntryData","params","plugins","byType","reduce","acc","plugin","push","invalidFields","fields","storageId","WebinyError"],"sources":["entryDataValidation.ts"],"sourcesContent":["import {\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsContext,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams,\n CmsEntry\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\ntype InputData = Record<string, any>;\n\ninterface ValidateArgs {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n data: InputData;\n context: CmsContext;\n entry?: CmsEntry;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async (\n args: ValidateArgs,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n\n const { validatorList, context, field, model, entry } = args;\n try {\n for (const fieldValidator of fieldValidators) {\n const name = fieldValidator.name;\n const validations = validatorList[name];\n if (!validations || validations.length === 0) {\n return `There are no \"${name}\" validators defined.`;\n }\n for (const validate of validations) {\n const result = await validate({\n value,\n context,\n validator: fieldValidator,\n field,\n model,\n entry\n });\n if (!result) {\n return fieldValidator.message;\n }\n }\n }\n } catch (ex) {\n return ex.message;\n }\n\n return null;\n};\n\nconst validatePredefinedValue = (field: CmsModelField, value: any | any[]): string | null => {\n const { enabled = false, values: predefinedValues = [] } = field.predefinedValues || {};\n if (!enabled) {\n return null;\n } else if (Array.isArray(predefinedValues) === false || predefinedValues.length === 0) {\n return \"Missing predefined values to validate against.\";\n }\n for (const predefinedValue of predefinedValues) {\n if (predefinedValue.value == value) {\n return null;\n }\n }\n return \"Value sent does not match any of the available predefined values.\";\n};\n/**\n * When multiple values is selected we must run validations on the array containing the values\n * And then on each value in the array\n */\nconst runFieldMultipleValuesValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { field, data } = args;\n const values = data[field.fieldId] || [];\n if (Array.isArray(values) === false) {\n return `Value of the field \"${field.fieldId}\" is not an array.`;\n }\n const valuesError = await validateValue(args, field.listValidation || [], values);\n if (valuesError) {\n return valuesError;\n }\n for (const value of values) {\n const valueError = await validateValue(args, field.validation || [], value);\n if (valueError) {\n return valueError;\n }\n const predefinedValueError = validatePredefinedValue(field, value);\n if (predefinedValueError) {\n return predefinedValueError;\n }\n }\n return null;\n};\n/**\n * Runs validation on given value.\n */\nconst runFieldValueValidations = async (args: ValidateArgs): Promise<string | null> => {\n const { data, field } = args;\n const value = data[field.fieldId];\n const error = await validateValue(args, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (args: ValidateArgs): Promise<string | null> => {\n if (args.field.multipleValues) {\n return await runFieldMultipleValuesValidations(args);\n }\n return await runFieldValueValidations(args);\n};\n\nexport interface ValidateModelEntryDataParams {\n context: CmsContext;\n model: CmsModel;\n data: InputData;\n entry?: CmsEntry;\n}\nexport const validateModelEntryData = async (params: ValidateModelEntryDataParams) => {\n const { context, model, entry, data } = params;\n /**\n * To later simplify searching for the validations we map them to a name.\n * @see CmsModelFieldValidatorPlugin.validator.validate\n */\n const validatorList: PluginValidationList = context.plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .reduce((acc, plugin) => {\n const name = plugin.validator.name;\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(plugin.validator.validate);\n\n return acc;\n }, {} as PluginValidationList);\n\n /**\n * Loop through model fields and validate the corresponding data.\n * Run validation only if the field has validation configured.\n */\n const invalidFields = [];\n for (const field of model.fields) {\n const error = await execValidation({\n model,\n validatorList,\n field,\n data: {\n ...(entry?.values || {}),\n ...data\n },\n context,\n entry\n });\n if (!error) {\n continue;\n }\n invalidFields.push({\n fieldId: field.fieldId,\n storageId: field.storageId,\n error\n });\n }\n\n if (invalidFields.length > 0) {\n throw new WebinyError(\"Validation failed.\", \"VALIDATION_FAILED\", invalidFields);\n }\n};\n"],"mappings":"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"}
@@ -37,7 +37,7 @@ const markLockedFields = async params => {
37
37
  const lockedFields = [];
38
38
 
39
39
  for (const field of model.fields) {
40
- const alreadyLocked = existingLockedFields.some(lockedField => lockedField.fieldId === field.fieldId);
40
+ const alreadyLocked = existingLockedFields.some(lockedField => lockedField.fieldId === field.storageId);
41
41
 
42
42
  if (alreadyLocked) {
43
43
  continue;
@@ -58,7 +58,7 @@ const markLockedFields = async params => {
58
58
  }
59
59
 
60
60
  lockedFields.push(_objectSpread({
61
- fieldId: field.fieldId,
61
+ fieldId: field.storageId,
62
62
  multipleValues: !!field.multipleValues,
63
63
  type: field.type
64
64
  }, lockedFieldData));
@@ -1 +1 @@
1
- {"version":3,"names":["markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","alreadyLocked","some","lockedField","fieldId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsContext, CmsModelLockedFieldPlugin, LockedField } from \"~/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.fieldId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === field.type);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.fieldId,\n multipleValues: !!field.multipleValues,\n type: field.type,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: newLockedFields\n }\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: []\n }\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["markLockedFields","params","model","context","plugins","byType","CmsModelPlugin","type","find","plugin","contentModel","modelId","cmsLockedFieldPlugins","existingLockedFields","lockedFields","field","fields","alreadyLocked","some","lockedField","fieldId","storageId","lockedFieldData","lockedFieldPlugins","filter","pl","fieldType","getLockedFieldData","data","push","multipleValues","length","newLockedFields","concat","cms","updateModelDirect","original","ex","WebinyError","markUnlockedFields"],"sources":["markLockedFields.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, CmsContext, CmsModelLockedFieldPlugin, LockedField } from \"~/types\";\nimport { CmsModelPlugin } from \"~/plugins/CmsModelPlugin\";\n\ninterface MarkLockedFieldsParams {\n model: CmsModel;\n entry: CmsEntry;\n context: CmsContext;\n}\nexport const markLockedFields = async (params: MarkLockedFieldsParams): Promise<void> => {\n const { model, context } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n const cmsLockedFieldPlugins =\n context.plugins.byType<CmsModelLockedFieldPlugin>(\"cms-model-locked-field\");\n\n const existingLockedFields = model.lockedFields || [];\n const lockedFields: LockedField[] = [];\n for (const field of model.fields) {\n const alreadyLocked = existingLockedFields.some(\n lockedField => lockedField.fieldId === field.storageId\n );\n if (alreadyLocked) {\n continue;\n }\n\n let lockedFieldData = {};\n\n const lockedFieldPlugins = cmsLockedFieldPlugins.filter(pl => pl.fieldType === field.type);\n for (const plugin of lockedFieldPlugins) {\n if (typeof plugin.getLockedFieldData !== \"function\") {\n continue;\n }\n const data = plugin.getLockedFieldData({\n field\n });\n lockedFieldData = { ...lockedFieldData, ...data };\n }\n\n lockedFields.push({\n fieldId: field.storageId,\n multipleValues: !!field.multipleValues,\n type: field.type,\n ...lockedFieldData\n });\n }\n // no need to update anything if no locked fields were added\n if (lockedFields.length === 0) {\n return;\n }\n\n const newLockedFields = existingLockedFields.concat(lockedFields);\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: newLockedFields\n }\n });\n model.lockedFields = newLockedFields;\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with new locked fields.`,\n \"MODEL_LOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n\nexport interface MarkFieldsUnlockedParams {\n context: CmsContext;\n model: CmsModel;\n}\nexport const markUnlockedFields = async (params: MarkFieldsUnlockedParams) => {\n const { context, model } = params;\n /**\n * If the model is registered via a plugin, we don't need do process anything.\n */\n const plugins = context.plugins.byType<CmsModelPlugin>(CmsModelPlugin.type);\n if (plugins.find(plugin => plugin.contentModel.modelId === model.modelId)) {\n return;\n }\n\n try {\n await context.cms.updateModelDirect({\n original: model,\n model: {\n ...model,\n lockedFields: []\n }\n });\n model.lockedFields = [];\n } catch (ex) {\n throw new WebinyError(\n `Could not update model \"${model.modelId}\" with unlocked fields.`,\n \"MODEL_UNLOCKED_FIELDS_UPDATE_FAILED\",\n ex\n );\n }\n};\n"],"mappings":"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"}
@@ -39,6 +39,8 @@ var _ownership = require("../utils/ownership");
39
39
 
40
40
  var _entryStorage = require("../utils/entryStorage");
41
41
 
42
+ var _valueKeyStorageConverter = require("../utils/converters/valueKeyStorageConverter");
43
+
42
44
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
45
 
44
46
  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; }
@@ -113,8 +115,18 @@ const getDefaultValue = field => {
113
115
  */
114
116
 
115
117
 
116
- const cleanInputData = (model, input) => {
118
+ const mapAndCleanCreateInputData = (model, input) => {
117
119
  return model.fields.reduce((acc, field) => {
120
+ /**
121
+ * This should never happen, but let's make it sure.
122
+ * The fix would be for the user to add the fieldId on the field definition.
123
+ */
124
+ if (!field.fieldId) {
125
+ throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
126
+ field
127
+ });
128
+ }
129
+
118
130
  const value = input[field.fieldId];
119
131
  /**
120
132
  * We set the default value on create input if value is not defined.
@@ -129,16 +141,29 @@ const cleanInputData = (model, input) => {
129
141
  */
130
142
 
131
143
 
132
- const cleanUpdatedInputData = (model, input) => {
144
+ const mapAndCleanUpdatedInputData = (model, input) => {
133
145
  return model.fields.reduce((acc, field) => {
134
146
  /**
135
- * We cannot set default value here because user might want to updated only certain field values.
147
+ * This should never happen, but let's make it sure.
148
+ * The fix would be for the user to add the fieldId on the field definition.
136
149
  */
137
- if (input[field.fieldId] === undefined) {
150
+ if (!field.fieldId) {
151
+ throw new _error.default("Field does not have an fieldId.", "MISSING_FIELD_ID", {
152
+ field
153
+ });
154
+ }
155
+ /**
156
+ * We cannot set default value here because user might want to update only certain field values.
157
+ */
158
+
159
+
160
+ const value = input[field.fieldId];
161
+
162
+ if (value === undefined) {
138
163
  return acc;
139
164
  }
140
165
 
141
- acc[field.fieldId] = input[field.fieldId];
166
+ acc[field.fieldId] = value;
142
167
  return acc;
143
168
  }, {});
144
169
  };
@@ -207,6 +232,10 @@ const getSearchableFields = params => {
207
232
  return collection;
208
233
  }, {});
209
234
  return model.fields.filter(field => {
235
+ if (!field.fieldId) {
236
+ return false;
237
+ }
238
+
210
239
  const plugin = fieldPluginMap[field.type];
211
240
 
212
241
  if (!plugin) {
@@ -228,6 +257,9 @@ const createContentEntryCrud = params => {
228
257
  getIdentity,
229
258
  getTenant
230
259
  } = params;
260
+ const {
261
+ plugins
262
+ } = context;
231
263
  const onBeforeEntryCreate = (0, _pubsub.createTopic)();
232
264
  const onAfterEntryCreate = (0, _pubsub.createTopic)();
233
265
  const onBeforeEntryCreateRevision = (0, _pubsub.createTopic)();
@@ -302,11 +334,15 @@ const createContentEntryCrud = params => {
302
334
  */
303
335
 
304
336
 
305
- const getEntriesByIds = async (model, ids) => {
337
+ const getEntriesByIds = async (initialModel, ids) => {
306
338
  const permission = await checkEntryPermissions({
307
339
  rwd: "r"
308
340
  });
309
- await (0, _access.checkModelAccess)(context, model);
341
+ await (0, _access.checkModelAccess)(context, initialModel);
342
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
343
+ model: initialModel,
344
+ plugins
345
+ });
310
346
  const entries = await storageOperations.entries.getByIds(model, {
311
347
  ids
312
348
  });
@@ -343,10 +379,14 @@ const createContentEntryCrud = params => {
343
379
  /**
344
380
  * Get a single entry by revision ID from the database.
345
381
  */
346
- getEntryById: async (model, id) => {
382
+ getEntryById: async (initialModel, id) => {
347
383
  const where = {
348
384
  id
349
385
  };
386
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
387
+ model: initialModel,
388
+ plugins
389
+ });
350
390
  await onBeforeEntryGet.publish({
351
391
  where,
352
392
  model
@@ -363,11 +403,15 @@ const createContentEntryCrud = params => {
363
403
  /**
364
404
  * Get published revisions by entry IDs.
365
405
  */
366
- getPublishedEntriesByIds: async (model, ids) => {
406
+ getPublishedEntriesByIds: async (initialModel, ids) => {
367
407
  const permission = await checkEntryPermissions({
368
408
  rwd: "r"
369
409
  });
370
- await (0, _access.checkModelAccess)(context, model);
410
+ await (0, _access.checkModelAccess)(context, initialModel);
411
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
412
+ model: initialModel,
413
+ plugins
414
+ });
371
415
  const entries = await storageOperations.entries.getPublishedByIds(model, {
372
416
  ids
373
417
  });
@@ -377,17 +421,25 @@ const createContentEntryCrud = params => {
377
421
  /**
378
422
  * Get latest revisions by entry IDs.
379
423
  */
380
- getLatestEntriesByIds: async (model, ids) => {
424
+ getLatestEntriesByIds: async (initialModel, ids) => {
381
425
  const permission = await checkEntryPermissions({
382
426
  rwd: "r"
383
427
  });
384
- await (0, _access.checkModelAccess)(context, model);
428
+ await (0, _access.checkModelAccess)(context, initialModel);
429
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
430
+ model: initialModel,
431
+ plugins
432
+ });
385
433
  const entries = await storageOperations.entries.getLatestByIds(model, {
386
434
  ids
387
435
  });
388
436
  return entries.filter(entry => (0, _ownership.validateOwnership)(context, permission, entry));
389
437
  },
390
- getEntryRevisions: async (model, entryId) => {
438
+ getEntryRevisions: async (initialModel, entryId) => {
439
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
440
+ model: initialModel,
441
+ plugins
442
+ });
391
443
  return storageOperations.entries.getRevisions(model, {
392
444
  id: entryId
393
445
  });
@@ -398,10 +450,14 @@ const createContentEntryCrud = params => {
398
450
  *
399
451
  * @internal
400
452
  */
401
- getEntry: async (model, params) => {
453
+ getEntry: async (initialModel, params) => {
402
454
  await checkEntryPermissions({
403
455
  rwd: "r"
404
456
  });
457
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
458
+ model: initialModel,
459
+ plugins
460
+ });
405
461
  const {
406
462
  where,
407
463
  sort
@@ -428,11 +484,15 @@ const createContentEntryCrud = params => {
428
484
  *
429
485
  * @internal
430
486
  */
431
- listEntries: async (model, params) => {
487
+ listEntries: async (initialModel, params) => {
432
488
  const permission = await checkEntryPermissions({
433
489
  rwd: "r"
434
490
  });
435
- await (0, _access.checkModelAccess)(context, model);
491
+ await (0, _access.checkModelAccess)(context, initialModel);
492
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
493
+ model: initialModel,
494
+ plugins
495
+ });
436
496
  const {
437
497
  where: initialWhere
438
498
  } = params;
@@ -468,35 +528,45 @@ const createContentEntryCrud = params => {
468
528
  });
469
529
  }
470
530
 
471
- await onBeforeEntryList.publish({
472
- where,
473
- model
474
- });
475
531
  const fields = getSearchableFields({
476
532
  model,
477
533
  plugins: context.plugins,
478
534
  fields: params.fields || []
479
535
  });
480
- const {
481
- hasMoreItems,
482
- totalCount,
483
- cursor,
484
- items
485
- } = await storageOperations.entries.list(model, _objectSpread(_objectSpread({}, params), {}, {
486
- where,
487
- fields
488
- }));
489
- const meta = {
490
- hasMoreItems,
491
- totalCount,
492
-
493
- /**
494
- * Cursor should be null if there are no more items to load.
495
- * Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
496
- */
497
- cursor: hasMoreItems ? cursor : null
498
- };
499
- return [items, meta];
536
+
537
+ try {
538
+ await onBeforeEntryList.publish({
539
+ where,
540
+ model
541
+ });
542
+ const {
543
+ hasMoreItems,
544
+ totalCount,
545
+ cursor,
546
+ items
547
+ } = await storageOperations.entries.list(model, _objectSpread(_objectSpread({}, params), {}, {
548
+ where,
549
+ fields
550
+ }));
551
+ const meta = {
552
+ hasMoreItems,
553
+ totalCount,
554
+
555
+ /**
556
+ * Cursor should be null if there are no more items to load.
557
+ * Just make sure of that, disregarding what is returned from the storageOperations.entries.list method.
558
+ */
559
+ cursor: hasMoreItems ? cursor : null
560
+ };
561
+ return [items, meta];
562
+ } catch (ex) {
563
+ throw new _error.default("Error while fetching entries from storage.", "LIST_ENTRIES_ERROR", {
564
+ params,
565
+ error: ex,
566
+ model,
567
+ fields
568
+ });
569
+ }
500
570
  },
501
571
  listLatestEntries: async function (model, params) {
502
572
  const where = (params === null || params === void 0 ? void 0 : params.where) || {};
@@ -518,16 +588,20 @@ const createContentEntryCrud = params => {
518
588
  })
519
589
  }));
520
590
  },
521
- createEntry: async (model, inputData) => {
591
+ createEntry: async (initialModel, inputData) => {
522
592
  await checkEntryPermissions({
523
593
  rwd: "w"
524
594
  });
525
- await (0, _access.checkModelAccess)(context, model);
595
+ await (0, _access.checkModelAccess)(context, initialModel);
596
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
597
+ model: initialModel,
598
+ plugins
599
+ });
526
600
  /**
527
601
  * Make sure we only work with fields that are defined in the model.
528
602
  */
529
603
 
530
- const initialInput = cleanInputData(model, inputData);
604
+ const initialInput = mapAndCleanCreateInputData(model, inputData);
531
605
  await (0, _entryDataValidation.validateModelEntryData)({
532
606
  context,
533
607
  model,
@@ -596,16 +670,20 @@ const createContentEntryCrud = params => {
596
670
  });
597
671
  }
598
672
  },
599
- createEntryRevisionFrom: async (model, sourceId, inputData) => {
673
+ createEntryRevisionFrom: async (initialModel, sourceId, inputData) => {
600
674
  const permission = await checkEntryPermissions({
601
675
  rwd: "w"
602
676
  });
603
- await (0, _access.checkModelAccess)(context, model);
677
+ await (0, _access.checkModelAccess)(context, initialModel);
678
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
679
+ model: initialModel,
680
+ plugins
681
+ });
604
682
  /**
605
683
  * Make sure we only work with fields that are defined in the model.
606
684
  */
607
685
 
608
- const input = cleanUpdatedInputData(model, inputData);
686
+ const input = mapAndCleanUpdatedInputData(model, inputData);
609
687
  /**
610
688
  * Entries are identified by a common parent ID + Revision number.
611
689
  */
@@ -700,16 +778,20 @@ const createContentEntryCrud = params => {
700
778
  });
701
779
  }
702
780
  },
703
- updateEntry: async (model, id, inputData, metaInput) => {
781
+ updateEntry: async (initialModel, id, inputData, metaInput) => {
704
782
  const permission = await checkEntryPermissions({
705
783
  rwd: "w"
706
784
  });
707
- await (0, _access.checkModelAccess)(context, model);
785
+ await (0, _access.checkModelAccess)(context, initialModel);
786
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
787
+ model: initialModel,
788
+ plugins
789
+ });
708
790
  /**
709
791
  * Make sure we only work with fields that are defined in the model.
710
792
  */
711
793
 
712
- const input = cleanUpdatedInputData(model, inputData);
794
+ const input = mapAndCleanUpdatedInputData(model, inputData);
713
795
  /**
714
796
  * The entry we are going to update.
715
797
  */
@@ -790,11 +872,15 @@ const createContentEntryCrud = params => {
790
872
  });
791
873
  }
792
874
  },
793
- republishEntry: async (model, id) => {
875
+ republishEntry: async (initialModel, id) => {
794
876
  await checkEntryPermissions({
795
877
  rwd: "w"
796
878
  });
797
- await (0, _access.checkModelAccess)(context, model);
879
+ await (0, _access.checkModelAccess)(context, initialModel);
880
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
881
+ model: initialModel,
882
+ plugins
883
+ });
798
884
  /**
799
885
  * Fetch the entry from the storage.
800
886
  */
@@ -863,11 +949,15 @@ const createContentEntryCrud = params => {
863
949
  });
864
950
  }
865
951
  },
866
- deleteEntryRevision: async (model, revisionId) => {
952
+ deleteEntryRevision: async (initialModel, revisionId) => {
867
953
  const permission = await checkEntryPermissions({
868
954
  rwd: "d"
869
955
  });
870
- await (0, _access.checkModelAccess)(context, model);
956
+ await (0, _access.checkModelAccess)(context, initialModel);
957
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
958
+ model: initialModel,
959
+ plugins
960
+ });
871
961
  const {
872
962
  id: entryId,
873
963
  version
@@ -939,11 +1029,15 @@ const createContentEntryCrud = params => {
939
1029
  });
940
1030
  }
941
1031
  },
942
- deleteEntry: async (model, entryId) => {
1032
+ deleteEntry: async (initialModel, entryId) => {
943
1033
  const permission = await checkEntryPermissions({
944
1034
  rwd: "d"
945
1035
  });
946
- await (0, _access.checkModelAccess)(context, model);
1036
+ await (0, _access.checkModelAccess)(context, initialModel);
1037
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
1038
+ model: initialModel,
1039
+ plugins
1040
+ });
947
1041
  const storageEntry = await storageOperations.entries.getLatestRevisionByEntryId(model, {
948
1042
  id: entryId
949
1043
  });
@@ -959,11 +1053,15 @@ const createContentEntryCrud = params => {
959
1053
  entry
960
1054
  });
961
1055
  },
962
- publishEntry: async (model, id) => {
1056
+ publishEntry: async (initialModel, id) => {
963
1057
  const permission = await checkEntryPermissions({
964
1058
  pw: "p"
965
1059
  });
966
- await (0, _access.checkModelAccess)(context, model);
1060
+ await (0, _access.checkModelAccess)(context, initialModel);
1061
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
1062
+ model: initialModel,
1063
+ plugins
1064
+ });
967
1065
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
968
1066
  id
969
1067
  });
@@ -1011,10 +1109,14 @@ const createContentEntryCrud = params => {
1011
1109
  });
1012
1110
  }
1013
1111
  },
1014
- requestEntryChanges: async (model, id) => {
1112
+ requestEntryChanges: async (initialModel, id) => {
1015
1113
  const permission = await checkEntryPermissions({
1016
1114
  pw: "c"
1017
1115
  });
1116
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
1117
+ model: initialModel,
1118
+ plugins
1119
+ });
1018
1120
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
1019
1121
  id
1020
1122
  });
@@ -1066,13 +1168,17 @@ const createContentEntryCrud = params => {
1066
1168
  });
1067
1169
  }
1068
1170
  },
1069
- requestEntryReview: async (model, id) => {
1171
+ requestEntryReview: async (initialModel, id) => {
1070
1172
  const permission = await checkEntryPermissions({
1071
1173
  pw: "r"
1072
1174
  });
1073
1175
  const {
1074
1176
  id: entryId
1075
1177
  } = (0, _utils.parseIdentifier)(id);
1178
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
1179
+ model: initialModel,
1180
+ plugins
1181
+ });
1076
1182
  const originalStorageEntry = await storageOperations.entries.getRevisionById(model, {
1077
1183
  id
1078
1184
  });
@@ -1126,10 +1232,14 @@ const createContentEntryCrud = params => {
1126
1232
  });
1127
1233
  }
1128
1234
  },
1129
- unpublishEntry: async (model, id) => {
1235
+ unpublishEntry: async (initialModel, id) => {
1130
1236
  const permission = await checkEntryPermissions({
1131
1237
  pw: "u"
1132
1238
  });
1239
+ const model = (0, _valueKeyStorageConverter.attachCmsModelFieldConverters)({
1240
+ model: initialModel,
1241
+ plugins
1242
+ });
1133
1243
  const {
1134
1244
  id: entryId
1135
1245
  } = (0, _utils.parseIdentifier)(id);