@webiny/api-headless-cms 6.1.0 → 6.2.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 (577) hide show
  1. package/context.d.ts +2 -5
  2. package/context.js +16 -7
  3. package/context.js.map +1 -1
  4. package/crud/AccessControl/AccessControl.d.ts +18 -28
  5. package/crud/AccessControl/AccessControl.js.map +1 -1
  6. package/crud/contentEntry/entryDataFactories/createEntryData.js +17 -6
  7. package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
  8. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +9 -3
  9. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
  10. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  11. package/crud/contentEntry/entryDataValidation.js +16 -13
  12. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  13. package/crud/contentEntry/searchableFields.d.ts +2 -3
  14. package/crud/contentEntry/searchableFields.js +10 -18
  15. package/crud/contentEntry/searchableFields.js.map +1 -1
  16. package/crud/contentModel.crud.js +2 -1
  17. package/crud/contentModel.crud.js.map +1 -1
  18. package/domain/contentModel/validation/modelFields.js +15 -20
  19. package/domain/contentModel/validation/modelFields.js.map +1 -1
  20. package/exports/api/cms/graphql.d.ts +1 -0
  21. package/exports/api/cms/graphql.js +3 -0
  22. package/exports/api/cms/graphql.js.map +1 -0
  23. package/exports/api/cms/storage.d.ts +3 -0
  24. package/exports/api/cms/storage.js +5 -0
  25. package/exports/api/cms/storage.js.map +1 -0
  26. package/exports/api/cms/validation.d.ts +4 -0
  27. package/exports/api/cms/validation.js +6 -0
  28. package/exports/api/cms/validation.js.map +1 -0
  29. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -3
  30. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +3 -3
  31. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  32. package/features/contentEntry/CreateEntry/events.d.ts +2 -2
  33. package/features/contentEntry/CreateEntry/events.js +1 -1
  34. package/features/contentEntry/CreateEntry/events.js.map +1 -1
  35. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -3
  36. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +3 -3
  37. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  38. package/features/contentEntry/CreateEntryRevisionFrom/events.d.ts +2 -2
  39. package/features/contentEntry/CreateEntryRevisionFrom/events.js +1 -1
  40. package/features/contentEntry/CreateEntryRevisionFrom/events.js.map +1 -1
  41. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +1 -1
  42. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +1 -1
  43. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  44. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
  45. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
  46. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  47. package/features/contentEntry/DeleteEntry/events.d.ts +2 -2
  48. package/features/contentEntry/DeleteEntry/events.js +1 -1
  49. package/features/contentEntry/DeleteEntry/events.js.map +1 -1
  50. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +1 -1
  51. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +1 -1
  52. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  53. package/features/contentEntry/DeleteEntryRevision/events.d.ts +2 -2
  54. package/features/contentEntry/DeleteEntryRevision/events.js +1 -1
  55. package/features/contentEntry/DeleteEntryRevision/events.js.map +1 -1
  56. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +1 -1
  57. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +1 -1
  58. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  59. package/features/contentEntry/DeleteMultipleEntries/events.d.ts +2 -2
  60. package/features/contentEntry/DeleteMultipleEntries/events.js +1 -1
  61. package/features/contentEntry/DeleteMultipleEntries/events.js.map +1 -1
  62. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +6 -11
  63. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  64. package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +1 -1
  65. package/features/contentEntry/ListEntries/ListEntriesUseCase.js +1 -1
  66. package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
  67. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +1 -1
  68. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +1 -1
  69. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  70. package/features/contentEntry/MoveEntry/events.d.ts +2 -2
  71. package/features/contentEntry/MoveEntry/events.js +1 -1
  72. package/features/contentEntry/MoveEntry/events.js.map +1 -1
  73. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
  74. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
  75. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  76. package/features/contentEntry/PublishEntry/events.d.ts +2 -2
  77. package/features/contentEntry/PublishEntry/events.js +1 -1
  78. package/features/contentEntry/PublishEntry/events.js.map +1 -1
  79. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
  80. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
  81. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  82. package/features/contentEntry/RepublishEntry/events.d.ts +2 -2
  83. package/features/contentEntry/RepublishEntry/events.js +1 -1
  84. package/features/contentEntry/RepublishEntry/events.js.map +1 -1
  85. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
  86. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
  87. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  88. package/features/contentEntry/RestoreEntryFromBin/events.d.ts +2 -2
  89. package/features/contentEntry/RestoreEntryFromBin/events.js +1 -1
  90. package/features/contentEntry/RestoreEntryFromBin/events.js.map +1 -1
  91. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
  92. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
  93. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  94. package/features/contentEntry/UnpublishEntry/events.d.ts +2 -2
  95. package/features/contentEntry/UnpublishEntry/events.js +1 -1
  96. package/features/contentEntry/UnpublishEntry/events.js.map +1 -1
  97. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -3
  98. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -3
  99. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  100. package/features/contentEntry/UpdateEntry/events.d.ts +2 -2
  101. package/features/contentEntry/UpdateEntry/events.js +1 -1
  102. package/features/contentEntry/UpdateEntry/events.js.map +1 -1
  103. package/features/contentModel/CreateModel/CreateModelRepository.d.ts +1 -1
  104. package/features/contentModel/CreateModel/CreateModelRepository.js +1 -1
  105. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  106. package/features/contentModel/CreateModel/CreateModelUseCase.d.ts +3 -3
  107. package/features/contentModel/CreateModel/CreateModelUseCase.js +3 -3
  108. package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
  109. package/features/contentModel/CreateModel/events.d.ts +2 -2
  110. package/features/contentModel/CreateModel/events.js +1 -1
  111. package/features/contentModel/CreateModel/events.js.map +1 -1
  112. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +1 -1
  113. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +1 -1
  114. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  115. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.d.ts +3 -3
  116. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +4 -3
  117. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
  118. package/features/contentModel/CreateModelFrom/events.d.ts +2 -2
  119. package/features/contentModel/CreateModelFrom/events.js +1 -1
  120. package/features/contentModel/CreateModelFrom/events.js.map +1 -1
  121. package/features/contentModel/DeleteModel/DeleteModelUseCase.d.ts +1 -1
  122. package/features/contentModel/DeleteModel/DeleteModelUseCase.js +1 -1
  123. package/features/contentModel/DeleteModel/DeleteModelUseCase.js.map +1 -1
  124. package/features/contentModel/DeleteModel/events.d.ts +2 -2
  125. package/features/contentModel/DeleteModel/events.js +1 -1
  126. package/features/contentModel/DeleteModel/events.js.map +1 -1
  127. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.d.ts +3 -3
  128. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js +6 -6
  129. package/features/contentModel/ModelToAstConverter/ModelToAstConverter.js.map +1 -1
  130. package/features/contentModel/UpdateModel/UpdateModelUseCase.d.ts +2 -2
  131. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
  132. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  133. package/features/contentModel/UpdateModel/events.d.ts +2 -2
  134. package/features/contentModel/UpdateModel/events.js +1 -1
  135. package/features/contentModel/UpdateModel/events.js.map +1 -1
  136. package/features/contentModel/shared/ModelsFetcher.d.ts +1 -1
  137. package/features/contentModel/shared/ModelsFetcher.js +1 -1
  138. package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
  139. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +1 -1
  140. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +1 -1
  141. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
  142. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +3 -3
  143. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +3 -3
  144. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
  145. package/features/contentModelGroup/CreateGroup/events.d.ts +2 -2
  146. package/features/contentModelGroup/CreateGroup/events.js +1 -1
  147. package/features/contentModelGroup/CreateGroup/events.js.map +1 -1
  148. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +1 -1
  149. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +1 -1
  150. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
  151. package/features/contentModelGroup/DeleteGroup/events.d.ts +2 -2
  152. package/features/contentModelGroup/DeleteGroup/events.js +1 -1
  153. package/features/contentModelGroup/DeleteGroup/events.js.map +1 -1
  154. package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +2 -2
  155. package/features/contentModelGroup/GetGroup/GetGroupRepository.js +2 -2
  156. package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
  157. package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +2 -2
  158. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +2 -2
  159. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
  160. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +2 -2
  161. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -2
  162. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
  163. package/features/contentModelGroup/UpdateGroup/events.d.ts +2 -2
  164. package/features/contentModelGroup/UpdateGroup/events.js +1 -1
  165. package/features/contentModelGroup/UpdateGroup/events.js.map +1 -1
  166. package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +2 -2
  167. package/features/contentModelGroup/shared/PluginGroupsProvider.js +2 -2
  168. package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
  169. package/features/graphql/feature.d.ts +1 -0
  170. package/features/graphql/feature.js +34 -0
  171. package/features/graphql/feature.js.map +1 -0
  172. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.d.ts +13 -0
  173. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js +27 -0
  174. package/features/graphql/fields/CmsModelFieldToGraphQLRegistry.js.map +1 -0
  175. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +97 -0
  176. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js +4 -0
  177. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -0
  178. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.d.ts +10 -0
  179. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js +4 -0
  180. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQLRegistry.js.map +1 -0
  181. package/features/graphql/fields/base/BooleanToGraphQL.d.ts +26 -0
  182. package/features/graphql/fields/base/BooleanToGraphQL.js +68 -0
  183. package/features/graphql/fields/base/BooleanToGraphQL.js.map +1 -0
  184. package/features/graphql/fields/base/DateTimeToGraphQL.d.ts +26 -0
  185. package/features/graphql/fields/base/DateTimeToGraphQL.js +97 -0
  186. package/features/graphql/fields/base/DateTimeToGraphQL.js.map +1 -0
  187. package/features/graphql/fields/base/DynamicZoneToGraphQL.d.ts +30 -0
  188. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +280 -0
  189. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -0
  190. package/features/graphql/fields/base/FileToGraphQL.d.ts +22 -0
  191. package/features/graphql/fields/base/FileToGraphQL.js +39 -0
  192. package/features/graphql/fields/base/FileToGraphQL.js.map +1 -0
  193. package/features/graphql/fields/base/JsonToGraphQL.d.ts +24 -0
  194. package/features/graphql/fields/base/JsonToGraphQL.js +52 -0
  195. package/features/graphql/fields/base/JsonToGraphQL.js.map +1 -0
  196. package/features/graphql/fields/base/LongTextToGraphQL.d.ts +24 -0
  197. package/features/graphql/fields/base/LongTextToGraphQL.js +57 -0
  198. package/features/graphql/fields/base/LongTextToGraphQL.js.map +1 -0
  199. package/features/graphql/fields/base/NumberToGraphQL.d.ts +26 -0
  200. package/features/graphql/fields/base/NumberToGraphQL.js +78 -0
  201. package/features/graphql/fields/base/NumberToGraphQL.js.map +1 -0
  202. package/features/graphql/fields/base/ObjectToGraphQL.d.ts +31 -0
  203. package/features/graphql/fields/base/ObjectToGraphQL.js +264 -0
  204. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -0
  205. package/features/graphql/fields/base/RefToGraphQL.d.ts +29 -0
  206. package/features/graphql/fields/base/RefToGraphQL.js +261 -0
  207. package/features/graphql/fields/base/RefToGraphQL.js.map +1 -0
  208. package/features/graphql/fields/base/RichTextToGraphQL.d.ts +25 -0
  209. package/features/graphql/fields/base/RichTextToGraphQL.js +58 -0
  210. package/features/graphql/fields/base/RichTextToGraphQL.js.map +1 -0
  211. package/features/graphql/fields/base/SearchableJsonToGraphQL.d.ts +26 -0
  212. package/features/graphql/fields/base/SearchableJsonToGraphQL.js +62 -0
  213. package/features/graphql/fields/base/SearchableJsonToGraphQL.js.map +1 -0
  214. package/features/graphql/fields/base/TextToGraphQL.d.ts +26 -0
  215. package/features/graphql/fields/base/TextToGraphQL.js +74 -0
  216. package/features/graphql/fields/base/TextToGraphQL.js.map +1 -0
  217. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.d.ts +16 -0
  218. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js +37 -0
  219. package/features/graphql/fields/base/dynamicZone/createTypeDefsForTemplates.js.map +1 -0
  220. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.d.ts +3 -0
  221. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js +14 -0
  222. package/features/graphql/fields/base/dynamicZone/normalizeDynamicZoneInput.js.map +1 -0
  223. package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.d.ts +1 -1
  224. package/{graphqlFields → features/graphql/fields/base}/richText/richTextResolver.js +2 -2
  225. package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -0
  226. package/{graphqlFields/helpers.d.ts → features/graphql/fields/base/utils/createGraphQLInputField.d.ts} +1 -1
  227. package/features/graphql/fields/base/utils/createGraphQLInputField.js +17 -0
  228. package/features/graphql/fields/base/utils/createGraphQLInputField.js.map +1 -0
  229. package/features/graphql/index.d.ts +4 -0
  230. package/features/graphql/index.js +6 -0
  231. package/features/graphql/index.js.map +1 -0
  232. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.d.ts +13 -0
  233. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js +4 -0
  234. package/features/graphql/sort/abstractions/CmsGraphQLSchemaSorter.js.map +1 -0
  235. package/features/installer/CmsInstaller.d.ts +1 -1
  236. package/features/installer/CmsInstaller.js +1 -1
  237. package/features/installer/CmsInstaller.js.map +1 -1
  238. package/features/shared/abstractions.d.ts +9 -2
  239. package/features/shared/abstractions.js +1 -0
  240. package/features/shared/abstractions.js.map +1 -1
  241. package/features/storage/StorageTransformRegistry.d.ts +13 -0
  242. package/features/storage/StorageTransformRegistry.js +27 -0
  243. package/features/storage/StorageTransformRegistry.js.map +1 -0
  244. package/features/storage/abstractions/StorageTransform.d.ts +26 -0
  245. package/features/storage/abstractions/StorageTransform.js +4 -0
  246. package/features/storage/abstractions/StorageTransform.js.map +1 -0
  247. package/features/storage/abstractions/StorageTransformRegistry.d.ts +10 -0
  248. package/features/storage/abstractions/StorageTransformRegistry.js +4 -0
  249. package/features/storage/abstractions/StorageTransformRegistry.js.map +1 -0
  250. package/features/storage/feature.d.ts +1 -0
  251. package/features/storage/feature.js +24 -0
  252. package/features/storage/feature.js.map +1 -0
  253. package/features/storage/fields/DateStorageTransform.d.ts +10 -0
  254. package/features/storage/fields/DateStorageTransform.js +110 -0
  255. package/features/storage/fields/DateStorageTransform.js.map +1 -0
  256. package/features/storage/fields/DefaultStorageTransform.d.ts +10 -0
  257. package/features/storage/fields/DefaultStorageTransform.js +20 -0
  258. package/features/storage/fields/DefaultStorageTransform.js.map +1 -0
  259. package/features/storage/fields/DynamicZoneStorageTransform.d.ts +10 -0
  260. package/features/storage/fields/DynamicZoneStorageTransform.js +142 -0
  261. package/features/storage/fields/DynamicZoneStorageTransform.js.map +1 -0
  262. package/features/storage/fields/JsonStorageTransform.d.ts +13 -0
  263. package/features/storage/fields/JsonStorageTransform.js +31 -0
  264. package/features/storage/fields/JsonStorageTransform.js.map +1 -0
  265. package/features/storage/fields/LongTextStorageTransform.d.ts +18 -0
  266. package/features/storage/fields/LongTextStorageTransform.js +55 -0
  267. package/features/storage/fields/LongTextStorageTransform.js.map +1 -0
  268. package/features/storage/fields/ObjectStorageTransform.d.ts +10 -0
  269. package/features/storage/fields/ObjectStorageTransform.js +99 -0
  270. package/features/storage/fields/ObjectStorageTransform.js.map +1 -0
  271. package/features/storage/fields/RichTextStorageTransform.d.ts +13 -0
  272. package/features/storage/fields/RichTextStorageTransform.js +39 -0
  273. package/features/storage/fields/RichTextStorageTransform.js.map +1 -0
  274. package/features/storage/index.d.ts +3 -0
  275. package/features/storage/index.js +5 -0
  276. package/features/storage/index.js.map +1 -0
  277. package/features/validation/CmsModelFieldPatternValidatorRegistry.d.ts +12 -0
  278. package/features/validation/CmsModelFieldPatternValidatorRegistry.js +21 -0
  279. package/features/validation/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
  280. package/features/validation/CmsModelFieldValidatorRegistry.d.ts +12 -0
  281. package/features/validation/CmsModelFieldValidatorRegistry.js +23 -0
  282. package/features/validation/CmsModelFieldValidatorRegistry.js.map +1 -0
  283. package/features/validation/abstractions/CmsModelFieldPatternValidator.d.ts +13 -0
  284. package/features/validation/abstractions/CmsModelFieldPatternValidator.js +4 -0
  285. package/features/validation/abstractions/CmsModelFieldPatternValidator.js.map +1 -0
  286. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.d.ts +9 -0
  287. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js +4 -0
  288. package/features/validation/abstractions/CmsModelFieldPatternValidatorRegistry.js.map +1 -0
  289. package/features/validation/abstractions/CmsModelFieldValidator.d.ts +11 -0
  290. package/features/validation/abstractions/CmsModelFieldValidator.js +4 -0
  291. package/features/validation/abstractions/CmsModelFieldValidator.js.map +1 -0
  292. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.d.ts +9 -0
  293. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js +4 -0
  294. package/features/validation/abstractions/CmsModelFieldValidatorRegistry.js.map +1 -0
  295. package/features/validation/feature.d.ts +1 -0
  296. package/features/validation/feature.js +48 -0
  297. package/features/validation/feature.js.map +1 -0
  298. package/features/validation/index.d.ts +5 -0
  299. package/features/validation/index.js +7 -0
  300. package/features/validation/index.js.map +1 -0
  301. package/features/validation/validators/DateGteValidator.d.ts +10 -0
  302. package/features/validation/validators/DateGteValidator.js +26 -0
  303. package/features/validation/validators/DateGteValidator.js.map +1 -0
  304. package/features/validation/validators/DateLteValidator.d.ts +10 -0
  305. package/features/validation/validators/DateLteValidator.js +26 -0
  306. package/features/validation/validators/DateLteValidator.js.map +1 -0
  307. package/features/validation/validators/GteValidator.d.ts +10 -0
  308. package/features/validation/validators/GteValidator.js +21 -0
  309. package/features/validation/validators/GteValidator.js.map +1 -0
  310. package/features/validation/validators/InValidator.d.ts +10 -0
  311. package/features/validation/validators/InValidator.js +21 -0
  312. package/features/validation/validators/InValidator.js.map +1 -0
  313. package/features/validation/validators/LteValidator.d.ts +10 -0
  314. package/features/validation/validators/LteValidator.js +21 -0
  315. package/features/validation/validators/LteValidator.js.map +1 -0
  316. package/features/validation/validators/MaxLengthValidator.d.ts +10 -0
  317. package/features/validation/validators/MaxLengthValidator.js +21 -0
  318. package/features/validation/validators/MaxLengthValidator.js.map +1 -0
  319. package/features/validation/validators/MinLengthValidator.d.ts +10 -0
  320. package/features/validation/validators/MinLengthValidator.js +21 -0
  321. package/features/validation/validators/MinLengthValidator.js.map +1 -0
  322. package/features/validation/validators/PatternValidator.d.ts +13 -0
  323. package/features/validation/validators/PatternValidator.js +38 -0
  324. package/features/validation/validators/PatternValidator.js.map +1 -0
  325. package/features/validation/validators/RequiredValidator.d.ts +10 -0
  326. package/features/validation/validators/RequiredValidator.js +16 -0
  327. package/features/validation/validators/RequiredValidator.js.map +1 -0
  328. package/features/validation/validators/TimeGteValidator.d.ts +10 -0
  329. package/features/validation/validators/TimeGteValidator.js +21 -0
  330. package/features/validation/validators/TimeGteValidator.js.map +1 -0
  331. package/features/validation/validators/TimeLteValidator.d.ts +10 -0
  332. package/features/validation/validators/TimeLteValidator.js +21 -0
  333. package/features/validation/validators/TimeLteValidator.js.map +1 -0
  334. package/features/validation/validators/UniqueValidator.d.ts +10 -0
  335. package/features/validation/validators/UniqueValidator.js +47 -0
  336. package/features/validation/validators/UniqueValidator.js.map +1 -0
  337. package/features/validation/validators/patterns/EmailPattern.d.ts +12 -0
  338. package/features/validation/validators/patterns/EmailPattern.js +14 -0
  339. package/features/validation/validators/patterns/EmailPattern.js.map +1 -0
  340. package/features/validation/validators/patterns/LowerCasePattern.d.ts +12 -0
  341. package/features/validation/validators/patterns/LowerCasePattern.js +14 -0
  342. package/features/validation/validators/patterns/LowerCasePattern.js.map +1 -0
  343. package/features/validation/validators/patterns/LowerCaseSpacePattern.d.ts +12 -0
  344. package/features/validation/validators/patterns/LowerCaseSpacePattern.js +14 -0
  345. package/features/validation/validators/patterns/LowerCaseSpacePattern.js.map +1 -0
  346. package/features/validation/validators/patterns/UpperCasePattern.d.ts +12 -0
  347. package/features/validation/validators/patterns/UpperCasePattern.js +14 -0
  348. package/features/validation/validators/patterns/UpperCasePattern.js.map +1 -0
  349. package/features/validation/validators/patterns/UpperCaseSpacePattern.d.ts +12 -0
  350. package/features/validation/validators/patterns/UpperCaseSpacePattern.js +14 -0
  351. package/features/validation/validators/patterns/UpperCaseSpacePattern.js.map +1 -0
  352. package/features/validation/validators/patterns/UrlPattern.d.ts +12 -0
  353. package/features/validation/validators/patterns/UrlPattern.js +14 -0
  354. package/features/validation/validators/patterns/UrlPattern.js.map +1 -0
  355. package/graphql/getSchema/generateCacheKey.js +1 -1
  356. package/graphql/getSchema/generateCacheKey.js.map +1 -1
  357. package/graphql/schema/baseSchema.d.ts +2 -1
  358. package/graphql/schema/baseSchema.js +11 -9
  359. package/graphql/schema/baseSchema.js.map +1 -1
  360. package/graphql/schema/createFieldResolvers.d.ts +3 -2
  361. package/graphql/schema/createFieldResolvers.js +5 -4
  362. package/graphql/schema/createFieldResolvers.js.map +1 -1
  363. package/graphql/schema/createManageResolvers.d.ts +3 -2
  364. package/graphql/schema/createManageResolvers.js +3 -3
  365. package/graphql/schema/createManageResolvers.js.map +1 -1
  366. package/graphql/schema/createManageSDL.d.ts +4 -4
  367. package/graphql/schema/createManageSDL.js +8 -8
  368. package/graphql/schema/createManageSDL.js.map +1 -1
  369. package/graphql/schema/createPreviewResolvers.d.ts +3 -2
  370. package/graphql/schema/createPreviewResolvers.js +4 -4
  371. package/graphql/schema/createPreviewResolvers.js.map +1 -1
  372. package/graphql/schema/createReadResolvers.d.ts +3 -2
  373. package/graphql/schema/createReadResolvers.js +4 -4
  374. package/graphql/schema/createReadResolvers.js.map +1 -1
  375. package/graphql/schema/createReadSDL.d.ts +4 -4
  376. package/graphql/schema/createReadSDL.js +7 -7
  377. package/graphql/schema/createReadSDL.js.map +1 -1
  378. package/graphql/schema/createSingularResolvers.d.ts +3 -2
  379. package/graphql/schema/createSingularResolvers.js +3 -3
  380. package/graphql/schema/createSingularResolvers.js.map +1 -1
  381. package/graphql/schema/createSingularSDL.d.ts +3 -2
  382. package/graphql/schema/createSingularSDL.js +3 -3
  383. package/graphql/schema/createSingularSDL.js.map +1 -1
  384. package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js +6 -7
  385. package/graphql/schema/resolvers/manage/normalizeGraphQlInput.js.map +1 -1
  386. package/graphql/schema/schemaPlugins.js +14 -17
  387. package/graphql/schema/schemaPlugins.js.map +1 -1
  388. package/index.d.ts +1 -4
  389. package/index.js +2 -6
  390. package/index.js.map +1 -1
  391. package/package.json +25 -25
  392. package/plugins/index.d.ts +0 -2
  393. package/plugins/index.js +0 -2
  394. package/plugins/index.js.map +1 -1
  395. package/types/modelField.d.ts +1 -1
  396. package/types/modelField.js.map +1 -1
  397. package/types/plugins.d.ts +1 -305
  398. package/types/plugins.js.map +1 -1
  399. package/types/types.d.ts +4 -44
  400. package/types/types.js +0 -4
  401. package/types/types.js.map +1 -1
  402. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.d.ts +3 -2
  403. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js +3 -3
  404. package/utils/contentModelAst/CmsModelFieldToAstConverterFromPlugins.js.map +1 -1
  405. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.d.ts +4 -3
  406. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js +3 -3
  407. package/utils/contentModelAst/CmsModelFieldToAstFromPlugin.js.map +1 -1
  408. package/utils/converters/ConverterCollection.d.ts +2 -0
  409. package/utils/converters/ConverterCollection.js +3 -2
  410. package/utils/converters/ConverterCollection.js.map +1 -1
  411. package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -0
  412. package/utils/converters/valueKeyFromStorageConverter.js +4 -2
  413. package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
  414. package/utils/converters/valueKeyStorageConverter.d.ts +2 -3
  415. package/utils/converters/valueKeyStorageConverter.js +7 -3
  416. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  417. package/utils/converters/valueKeyToStorageConverter.d.ts +2 -0
  418. package/utils/converters/valueKeyToStorageConverter.js +4 -2
  419. package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
  420. package/utils/createTypeFromFields.d.ts +3 -2
  421. package/utils/createTypeFromFields.js +3 -3
  422. package/utils/createTypeFromFields.js.map +1 -1
  423. package/utils/entryStorage.d.ts +8 -15
  424. package/utils/entryStorage.js +31 -59
  425. package/utils/entryStorage.js.map +1 -1
  426. package/utils/getBaseFieldType.js +3 -0
  427. package/utils/getBaseFieldType.js.map +1 -1
  428. package/utils/getSchemaFromFieldPlugins.d.ts +3 -2
  429. package/utils/getSchemaFromFieldPlugins.js +5 -9
  430. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  431. package/utils/renderFields.d.ts +4 -3
  432. package/utils/renderFields.js +14 -9
  433. package/utils/renderFields.js.map +1 -1
  434. package/utils/renderGetFilterFields.d.ts +3 -2
  435. package/utils/renderGetFilterFields.js +2 -2
  436. package/utils/renderGetFilterFields.js.map +1 -1
  437. package/utils/renderInputFields.d.ts +4 -3
  438. package/utils/renderInputFields.js +5 -11
  439. package/utils/renderInputFields.js.map +1 -1
  440. package/utils/renderListFilterFields.d.ts +3 -2
  441. package/utils/renderListFilterFields.js +5 -3
  442. package/utils/renderListFilterFields.js.map +1 -1
  443. package/utils/renderSortEnum.d.ts +4 -4
  444. package/utils/renderSortEnum.js +11 -11
  445. package/utils/renderSortEnum.js.map +1 -1
  446. package/graphql/schema/createFieldTypePluginRecords.d.ts +0 -3
  447. package/graphql/schema/createFieldTypePluginRecords.js +0 -8
  448. package/graphql/schema/createFieldTypePluginRecords.js.map +0 -1
  449. package/graphqlFields/boolean.d.ts +0 -2
  450. package/graphqlFields/boolean.js +0 -52
  451. package/graphqlFields/boolean.js.map +0 -1
  452. package/graphqlFields/datetime.d.ts +0 -2
  453. package/graphqlFields/datetime.js +0 -71
  454. package/graphqlFields/datetime.js.map +0 -1
  455. package/graphqlFields/dynamicZone/dynamicZoneField.d.ts +0 -2
  456. package/graphqlFields/dynamicZone/dynamicZoneField.js +0 -313
  457. package/graphqlFields/dynamicZone/dynamicZoneField.js.map +0 -1
  458. package/graphqlFields/dynamicZone/index.d.ts +0 -1
  459. package/graphqlFields/dynamicZone/index.js +0 -3
  460. package/graphqlFields/dynamicZone/index.js.map +0 -1
  461. package/graphqlFields/file.d.ts +0 -2
  462. package/graphqlFields/file.js +0 -37
  463. package/graphqlFields/file.js.map +0 -1
  464. package/graphqlFields/helpers.js +0 -20
  465. package/graphqlFields/helpers.js.map +0 -1
  466. package/graphqlFields/index.d.ts +0 -2
  467. package/graphqlFields/index.js +0 -15
  468. package/graphqlFields/index.js.map +0 -1
  469. package/graphqlFields/json.d.ts +0 -2
  470. package/graphqlFields/json.js +0 -42
  471. package/graphqlFields/json.js.map +0 -1
  472. package/graphqlFields/longText.d.ts +0 -2
  473. package/graphqlFields/longText.js +0 -57
  474. package/graphqlFields/longText.js.map +0 -1
  475. package/graphqlFields/number.d.ts +0 -2
  476. package/graphqlFields/number.js +0 -63
  477. package/graphqlFields/number.js.map +0 -1
  478. package/graphqlFields/object.d.ts +0 -2
  479. package/graphqlFields/object.js +0 -245
  480. package/graphqlFields/object.js.map +0 -1
  481. package/graphqlFields/ref.d.ts +0 -2
  482. package/graphqlFields/ref.js +0 -286
  483. package/graphqlFields/ref.js.map +0 -1
  484. package/graphqlFields/richText/richTextResolver.js.map +0 -1
  485. package/graphqlFields/richText.d.ts +0 -2
  486. package/graphqlFields/richText.js +0 -48
  487. package/graphqlFields/richText.js.map +0 -1
  488. package/graphqlFields/searchableJson.d.ts +0 -2
  489. package/graphqlFields/searchableJson.js +0 -53
  490. package/graphqlFields/searchableJson.js.map +0 -1
  491. package/graphqlFields/text.d.ts +0 -2
  492. package/graphqlFields/text.js +0 -59
  493. package/graphqlFields/text.js.map +0 -1
  494. package/plugins/CmsGraphQLSchemaSorterPlugin.d.ts +0 -20
  495. package/plugins/CmsGraphQLSchemaSorterPlugin.js +0 -19
  496. package/plugins/CmsGraphQLSchemaSorterPlugin.js.map +0 -1
  497. package/plugins/StorageTransformPlugin.d.ts +0 -35
  498. package/plugins/StorageTransformPlugin.js +0 -26
  499. package/plugins/StorageTransformPlugin.js.map +0 -1
  500. package/storage/date.d.ts +0 -3
  501. package/storage/date.js +0 -110
  502. package/storage/date.js.map +0 -1
  503. package/storage/default.d.ts +0 -2
  504. package/storage/default.js +0 -19
  505. package/storage/default.js.map +0 -1
  506. package/storage/dynamicZone.d.ts +0 -2
  507. package/storage/dynamicZone.js +0 -149
  508. package/storage/dynamicZone.js.map +0 -1
  509. package/storage/index.d.ts +0 -1
  510. package/storage/index.js +0 -13
  511. package/storage/index.js.map +0 -1
  512. package/storage/json.d.ts +0 -2
  513. package/storage/json.js +0 -49
  514. package/storage/json.js.map +0 -1
  515. package/storage/object.d.ts +0 -2
  516. package/storage/object.js +0 -104
  517. package/storage/object.js.map +0 -1
  518. package/validators/dateGte.d.ts +0 -2
  519. package/validators/dateGte.js +0 -25
  520. package/validators/dateGte.js.map +0 -1
  521. package/validators/dateLte.d.ts +0 -2
  522. package/validators/dateLte.js +0 -25
  523. package/validators/dateLte.js.map +0 -1
  524. package/validators/gte.d.ts +0 -2
  525. package/validators/gte.js +0 -22
  526. package/validators/gte.js.map +0 -1
  527. package/validators/in.d.ts +0 -2
  528. package/validators/in.js +0 -22
  529. package/validators/in.js.map +0 -1
  530. package/validators/index.d.ts +0 -1
  531. package/validators/index.js +0 -16
  532. package/validators/index.js.map +0 -1
  533. package/validators/lte.d.ts +0 -2
  534. package/validators/lte.js +0 -22
  535. package/validators/lte.js.map +0 -1
  536. package/validators/maxLength.d.ts +0 -2
  537. package/validators/maxLength.js +0 -22
  538. package/validators/maxLength.js.map +0 -1
  539. package/validators/minLength.d.ts +0 -2
  540. package/validators/minLength.js +0 -22
  541. package/validators/minLength.js.map +0 -1
  542. package/validators/pattern.d.ts +0 -2
  543. package/validators/pattern.js +0 -36
  544. package/validators/pattern.js.map +0 -1
  545. package/validators/patternPlugins/email.d.ts +0 -2
  546. package/validators/patternPlugins/email.js +0 -13
  547. package/validators/patternPlugins/email.js.map +0 -1
  548. package/validators/patternPlugins/index.d.ts +0 -2
  549. package/validators/patternPlugins/index.js +0 -11
  550. package/validators/patternPlugins/index.js.map +0 -1
  551. package/validators/patternPlugins/lowerCase.d.ts +0 -2
  552. package/validators/patternPlugins/lowerCase.js +0 -13
  553. package/validators/patternPlugins/lowerCase.js.map +0 -1
  554. package/validators/patternPlugins/lowerCaseSpace.d.ts +0 -2
  555. package/validators/patternPlugins/lowerCaseSpace.js +0 -13
  556. package/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
  557. package/validators/patternPlugins/upperCase.d.ts +0 -2
  558. package/validators/patternPlugins/upperCase.js +0 -13
  559. package/validators/patternPlugins/upperCase.js.map +0 -1
  560. package/validators/patternPlugins/upperCaseSpace.d.ts +0 -2
  561. package/validators/patternPlugins/upperCaseSpace.js +0 -13
  562. package/validators/patternPlugins/upperCaseSpace.js.map +0 -1
  563. package/validators/patternPlugins/url.d.ts +0 -2
  564. package/validators/patternPlugins/url.js +0 -13
  565. package/validators/patternPlugins/url.js.map +0 -1
  566. package/validators/required.d.ts +0 -2
  567. package/validators/required.js +0 -17
  568. package/validators/required.js.map +0 -1
  569. package/validators/timeGte.d.ts +0 -2
  570. package/validators/timeGte.js +0 -20
  571. package/validators/timeGte.js.map +0 -1
  572. package/validators/timeLte.d.ts +0 -2
  573. package/validators/timeLte.js +0 -20
  574. package/validators/timeLte.js.map +0 -1
  575. package/validators/unique.d.ts +0 -6
  576. package/validators/unique.js +0 -57
  577. package/validators/unique.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["getDate","getIdentity","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","parseIdentifier","WebinyError","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","getSystem","createEntryRevisionFromData","sourceId","model","rawInput","options","context","getSecurityIdentity","originalEntry","latestStorageEntry","accessControl","initialValues","values","entry","skipValidators","validateEntries","latestId","id","version","nextVersion","increaseEntryIdVersion","currentIdentity","currentDateTime","Date","status","ensureCanAccessEntry","pw","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","createdOn","savedOn","modifiedOn","createdBy","savedBy","modifiedBy","revisionCreatedOn","revisionSavedOn","revisionModifiedOn","revisionCreatedBy","revisionSavedBy","revisionModifiedBy","system","input","original","live","structuredClone","entryId"],"sources":["createEntryRevisionFromData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { mapAndCleanUpdatedInputData } from \".//mapAndCleanUpdatedInputData.js\";\nimport { validateModelEntryDataOrThrow } from \"../entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"../referenceFieldsMapping.js\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { getSystem } from \"./system.js\";\n\ninterface CreateEntryRevisionFromDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n sourceId: string;\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n originalEntry: CmsEntry<TValues>;\n latestStorageEntry: CmsEntry<TValues>;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryRevisionFromDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryRevisionFromData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n sourceId,\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n originalEntry,\n latestStorageEntry,\n accessControl\n}: CreateEntryRevisionFromDataParams<TValues>): Promise<\n ICreateEntryRevisionFromDataResponse<TValues>\n> => {\n /**\n * Make sure we only work with fields that are defined in the model.\n *\n * Also, we can be certain to cast as TValues because originalValues and new ones are being merged.\n */\n const initialValues = {\n ...originalEntry.values,\n ...mapAndCleanUpdatedInputData<TValues>(model, rawInput.values)\n };\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: false\n });\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n await accessControl.ensureCanAccessEntry({ model, pw: \"p\" });\n } else if (status === STATUS_UNPUBLISHED) {\n // If setting the status other than draft, we have to check if the user has permissions to publish.\n await accessControl.ensureCanAccessEntry({ model, pw: \"u\" });\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, null),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, null),\n revisionFirstPublishedBy: getIdentity(rawInput.revisionFirstPublishedBy, null),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, null)\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, latestStorageEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, latestStorageEntry.lastPublishedBy)\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n id,\n version: nextVersion,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n ...revisionLevelPublishingMetaFields,\n\n locked,\n status,\n values,\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live\n };\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n\nconst increaseEntryIdVersion = (id: string) => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n"],"mappings":"AAQA,SAASA,OAAO;AAChB,SAASC,WAAW;AACpB,SAASC,2BAA2B;AACpC,SAASC,6BAA6B;AACtC,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB,EAAEC,eAAe,QAAQ,eAAe;AACjE,OAAOC,WAAW,MAAM,eAAe;AAGvC,SAASC,YAAY,EAAEC,gBAAgB,EAAEC,kBAAkB;AAE3D,SAASC,SAAS;AAoBlB,OAAO,MAAMC,2BAA2B,GAAG,MAAAA,CAAwD;EAC/FC,QAAQ;EACRC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,OAAO;EACPhB,WAAW,EAAEiB,mBAAmB;EAChCC,aAAa;EACbC,kBAAkB;EAClBC;AACwC,CAAC,KAExC;EACD;AACJ;AACA;AACA;AACA;EACI,MAAMC,aAAa,GAAG;IAClB,GAAGH,aAAa,CAACI,MAAM;IACvB,GAAGrB,2BAA2B,CAAUY,KAAK,EAAEC,QAAQ,CAACQ,MAAM;EAClE,CAAC;EAED,MAAMpB,6BAA6B,CAAC;IAChCc,OAAO;IACPH,KAAK;IACLS,MAAM,EAAED,aAAa;IACrBE,KAAK,EAAEL,aAAa;IACpBM,cAAc,EAAET,OAAO,EAAES;EAC7B,CAAC,CAAC;EAEF,MAAMF,MAAM,GAAG,MAAMnB,sBAAsB,CAAU;IACjDa,OAAO;IACPH,KAAK;IACLS,MAAM,EAAED,aAAa;IACrBI,eAAe,EAAE;EACrB,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGP,kBAAkB,GAAGA,kBAAkB,CAACQ,EAAE,GAAGf,QAAQ;EACtE,MAAM;IAAEe,EAAE;IAAEC,OAAO,EAAEC;EAAY,CAAC,GAAGC,sBAAsB,CAACJ,QAAQ,CAAC;EAErE,MAAMK,eAAe,GAAGd,mBAAmB,CAAC,CAAC;EAC7C,MAAMe,eAAe,GAAG,IAAIC,IAAI,CAAC,CAAC;;EAElC;AACJ;AACA;AACA;AACA;EACI,MAAMC,MAAM,GAAGpB,QAAQ,CAACoB,MAAM,IAAI3B,YAAY;EAC9C,IAAI2B,MAAM,KAAK3B,YAAY,EAAE;IACzB,IAAI2B,MAAM,KAAK1B,gBAAgB,EAAE;MAC7B,MAAMY,aAAa,CAACe,oBAAoB,CAAC;QAAEtB,KAAK;QAAEuB,EAAE,EAAE;MAAI,CAAC,CAAC;IAChE,CAAC,MAAM,IAAIF,MAAM,KAAKzB,kBAAkB,EAAE;MACtC;MACA,MAAMW,aAAa,CAACe,oBAAoB,CAAC;QAAEtB,KAAK;QAAEuB,EAAE,EAAE;MAAI,CAAC,CAAC;IAChE;EACJ;EAEA,MAAMC,MAAM,GAAGH,MAAM,KAAK3B,YAAY;EAEtC,IAAI+B,iCAMH,GAAG;IACAC,wBAAwB,EAAExC,OAAO,CAACe,QAAQ,CAACyB,wBAAwB,EAAE,IAAI,CAAC;IAC1EC,uBAAuB,EAAEzC,OAAO,CAACe,QAAQ,CAAC0B,uBAAuB,EAAE,IAAI,CAAC;IACxEC,wBAAwB,EAAEzC,WAAW,CAACc,QAAQ,CAAC2B,wBAAwB,EAAE,IAAI,CAAC;IAC9EC,uBAAuB,EAAE1C,WAAW,CAACc,QAAQ,CAAC4B,uBAAuB,EAAE,IAAI;EAC/E,CAAC;EAED,IAAIC,8BAGH,GAAG;IACAC,gBAAgB,EAAE7C,OAAO,CAACe,QAAQ,CAAC8B,gBAAgB,EAAEzB,kBAAkB,CAACyB,gBAAgB,CAAC;IACzFC,eAAe,EAAE9C,OAAO,CAACe,QAAQ,CAAC+B,eAAe,EAAE1B,kBAAkB,CAAC0B,eAAe,CAAC;IACtFC,gBAAgB,EAAE9C,WAAW,CACzBc,QAAQ,CAACgC,gBAAgB,EACzB3B,kBAAkB,CAAC2B,gBACvB,CAAC;IACDC,eAAe,EAAE/C,WAAW,CAACc,QAAQ,CAACiC,eAAe,EAAE5B,kBAAkB,CAAC4B,eAAe;EAC7F,CAAC;EAED,IAAIb,MAAM,KAAK1B,gBAAgB,EAAE;IAC7B8B,iCAAiC,GAAG;MAChCC,wBAAwB,EAAExC,OAAO,CAACe,QAAQ,CAACyB,wBAAwB,EAAEP,eAAe,CAAC;MACrFQ,uBAAuB,EAAEzC,OAAO,CAACe,QAAQ,CAAC0B,uBAAuB,EAAER,eAAe,CAAC;MACnFS,wBAAwB,EAAEzC,WAAW,CACjCc,QAAQ,CAAC2B,wBAAwB,EACjCV,eACJ,CAAC;MACDW,uBAAuB,EAAE1C,WAAW,CAACc,QAAQ,CAAC4B,uBAAuB,EAAEX,eAAe;IAC1F,CAAC;IAEDY,8BAA8B,GAAG;MAC7BC,gBAAgB,EAAE7C,OAAO,CACrBe,QAAQ,CAAC8B,gBAAgB,EACzBzB,kBAAkB,CAACyB,gBACvB,CAAC;MACDC,eAAe,EAAE9C,OAAO,CAACe,QAAQ,CAAC+B,eAAe,EAAEb,eAAe,CAAC;MACnEc,gBAAgB,EAAE9C,WAAW,CACzBc,QAAQ,CAACgC,gBAAgB,EACzB3B,kBAAkB,CAAC2B,gBACvB,CAAC;MACDC,eAAe,EAAE/C,WAAW,CAACc,QAAQ,CAACiC,eAAe,EAAEhB,eAAe;IAC1E,CAAC;EACL;EAEA,MAAMR,KAAwB,GAAG;IAC7B,GAAGL,aAAa;IAChBS,EAAE;IACFC,OAAO,EAAEC,WAAW;IAEpB;AACR;AACA;IACQmB,SAAS,EAAEjD,OAAO,CAACe,QAAQ,CAACkC,SAAS,EAAE7B,kBAAkB,CAAC6B,SAAS,CAAC;IACpEC,OAAO,EAAElD,OAAO,CAACe,QAAQ,CAACmC,OAAO,EAAEjB,eAAe,CAAC;IACnDkB,UAAU,EAAEnD,OAAO,CAACe,QAAQ,CAACoC,UAAU,EAAElB,eAAe,CAAC;IACzDmB,SAAS,EAAEnD,WAAW,CAACc,QAAQ,CAACqC,SAAS,EAAEhC,kBAAkB,CAACgC,SAAS,CAAE;IACzEC,OAAO,EAAEpD,WAAW,CAACc,QAAQ,CAACsC,OAAO,EAAErB,eAAe,CAAE;IACxDsB,UAAU,EAAErD,WAAW,CAACc,QAAQ,CAACuC,UAAU,EAAEtB,eAAe,CAAC;IAC7D,GAAGY,8BAA8B;IAEjC;AACR;AACA;IACQW,iBAAiB,EAAEvD,OAAO,CAACe,QAAQ,CAACwC,iBAAiB,EAAEtB,eAAe,CAAC;IACvEuB,eAAe,EAAExD,OAAO,CAACe,QAAQ,CAACyC,eAAe,EAAEvB,eAAe,CAAC;IACnEwB,kBAAkB,EAAEzD,OAAO,CAACe,QAAQ,CAAC0C,kBAAkB,EAAE,IAAI,CAAC;IAC9DC,iBAAiB,EAAEzD,WAAW,CAACc,QAAQ,CAAC2C,iBAAiB,EAAE1B,eAAe,CAAE;IAC5E2B,eAAe,EAAE1D,WAAW,CAACc,QAAQ,CAAC4C,eAAe,EAAE3B,eAAe,CAAE;IACxE4B,kBAAkB,EAAE3D,WAAW,CAACc,QAAQ,CAAC6C,kBAAkB,EAAE,IAAI,CAAC;IAClE,GAAGrB,iCAAiC;IAEpCD,MAAM;IACNH,MAAM;IACNZ,MAAM;IACNsC,MAAM,EAAElD,SAAS,CAAC;MACdmD,KAAK,EAAE/C,QAAQ;MACfgD,QAAQ,EAAE5C;IACd,CAAC,CAAC;IACF6C,IAAI,EAAE7C,aAAa,CAAC6C;EACxB,CAAC;EAED,OAAO;IACHxC,KAAK;IACLsC,KAAK,EAAE;MACH,GAAG/C,QAAQ;MACXQ,MAAM,EAAE0C,eAAe,CAAC1C,MAAM;IAClC;EACJ,CAAC;AACL,CAAC;AAED,MAAMQ,sBAAsB,GAAIH,EAAU,IAAK;EAC3C,MAAM;IAAEA,EAAE,EAAEsC,OAAO;IAAErC;EAAQ,CAAC,GAAGvB,eAAe,CAACsB,EAAE,CAAC;EACpD,IAAI,CAACC,OAAO,EAAE;IACV,MAAM,IAAItB,WAAW,CACjB,6DAA6D,EAC7D,UAAU,EACV;MACIqB;IACJ,CACJ,CAAC;EACL;EACA,OAAO;IACHsC,OAAO;IACPrC,OAAO,EAAEA,OAAO,GAAG,CAAC;IACpBD,EAAE,EAAEvB,gBAAgB,CAAC;MACjBuB,EAAE,EAAEsC,OAAO;MACXrC,OAAO,EAAEA,OAAO,GAAG;IACvB,CAAC;EACL,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getDate","getIdentity","mapAndCleanUpdatedInputData","validateModelEntryDataOrThrow","referenceFieldsMapping","createIdentifier","parseIdentifier","WebinyError","STATUS_DRAFT","STATUS_PUBLISHED","STATUS_UNPUBLISHED","NotAuthorizedError","getSystem","createEntryRevisionFromData","sourceId","model","rawInput","options","context","getSecurityIdentity","originalEntry","latestStorageEntry","accessControl","initialValues","values","entry","skipValidators","validateEntries","latestId","id","version","nextVersion","increaseEntryIdVersion","currentIdentity","currentDateTime","Date","status","canPublish","canAccessEntry","pw","modelId","canUnpublish","locked","revisionLevelPublishingMetaFields","revisionFirstPublishedOn","revisionLastPublishedOn","revisionFirstPublishedBy","revisionLastPublishedBy","entryLevelPublishingMetaFields","firstPublishedOn","lastPublishedOn","firstPublishedBy","lastPublishedBy","createdOn","savedOn","modifiedOn","createdBy","savedBy","modifiedBy","revisionCreatedOn","revisionSavedOn","revisionModifiedOn","revisionCreatedBy","revisionSavedBy","revisionModifiedBy","system","input","original","live","structuredClone","entryId"],"sources":["createEntryRevisionFromData.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { mapAndCleanUpdatedInputData } from \".//mapAndCleanUpdatedInputData.js\";\nimport { validateModelEntryDataOrThrow } from \"../entryDataValidation.js\";\nimport { referenceFieldsMapping } from \"../referenceFieldsMapping.js\";\nimport { createIdentifier, parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport type { SecurityIdentity } from \"@webiny/api-core/types/security.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\nimport { STATUS_DRAFT, STATUS_PUBLISHED, STATUS_UNPUBLISHED } from \"./statuses.js\";\nimport type { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { getSystem } from \"./system.js\";\n\ninterface CreateEntryRevisionFromDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n sourceId: string;\n model: CmsModel;\n rawInput: CreateCmsEntryInput<TValues>;\n options?: CreateCmsEntryOptionsInput;\n context: CmsContext;\n getIdentity: () => SecurityIdentity;\n getTenant: () => Tenant;\n originalEntry: CmsEntry<TValues>;\n latestStorageEntry: CmsEntry<TValues>;\n accessControl: AccessControl;\n}\n\ninterface ICreateEntryRevisionFromDataResponse<TValues extends CmsEntryValues = CmsEntryValues> {\n entry: CmsEntry<TValues>;\n input: CreateCmsEntryInput<TValues>;\n}\n\nexport const createEntryRevisionFromData = async <TValues extends CmsEntryValues = CmsEntryValues>({\n sourceId,\n model,\n rawInput,\n options,\n context,\n getIdentity: getSecurityIdentity,\n originalEntry,\n latestStorageEntry,\n accessControl\n}: CreateEntryRevisionFromDataParams<TValues>): Promise<\n ICreateEntryRevisionFromDataResponse<TValues>\n> => {\n /**\n * Make sure we only work with fields that are defined in the model.\n *\n * Also, we can be certain to cast as TValues because originalValues and new ones are being merged.\n */\n const initialValues = {\n ...originalEntry.values,\n ...mapAndCleanUpdatedInputData<TValues>(model, rawInput.values)\n };\n\n await validateModelEntryDataOrThrow({\n context,\n model,\n values: initialValues,\n entry: originalEntry,\n skipValidators: options?.skipValidators\n });\n\n const values = await referenceFieldsMapping<TValues>({\n context,\n model,\n values: initialValues,\n validateEntries: false\n });\n\n const latestId = latestStorageEntry ? latestStorageEntry.id : sourceId;\n const { id, version: nextVersion } = increaseEntryIdVersion(latestId);\n\n const currentIdentity = getSecurityIdentity();\n const currentDateTime = new Date();\n\n /**\n * Users can set the initial status of the entry. If so, we need to make\n * sure they have the required permissions and also that all the fields\n * are filled in correctly.\n */\n const status = rawInput.status || STATUS_DRAFT;\n if (status !== STATUS_DRAFT) {\n if (status === STATUS_PUBLISHED) {\n const canPublish = await accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canPublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n } else if (status === STATUS_UNPUBLISHED) {\n const canUnpublish = await accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canUnpublish) {\n throw new NotAuthorizedError(`Not allowed to access \"${model.modelId}\" entries.`);\n }\n }\n }\n\n const locked = status !== STATUS_DRAFT;\n\n let revisionLevelPublishingMetaFields: Pick<\n CmsEntry,\n | \"revisionFirstPublishedOn\"\n | \"revisionLastPublishedOn\"\n | \"revisionFirstPublishedBy\"\n | \"revisionLastPublishedBy\"\n > = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, null),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, null),\n revisionFirstPublishedBy: getIdentity(rawInput.revisionFirstPublishedBy, null),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, null)\n };\n\n let entryLevelPublishingMetaFields: Pick<\n CmsEntry,\n \"firstPublishedOn\" | \"lastPublishedOn\" | \"firstPublishedBy\" | \"lastPublishedBy\"\n > = {\n firstPublishedOn: getDate(rawInput.firstPublishedOn, latestStorageEntry.firstPublishedOn),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, latestStorageEntry.lastPublishedOn),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, latestStorageEntry.lastPublishedBy)\n };\n\n if (status === STATUS_PUBLISHED) {\n revisionLevelPublishingMetaFields = {\n revisionFirstPublishedOn: getDate(rawInput.revisionFirstPublishedOn, currentDateTime),\n revisionLastPublishedOn: getDate(rawInput.revisionLastPublishedOn, currentDateTime),\n revisionFirstPublishedBy: getIdentity(\n rawInput.revisionFirstPublishedBy,\n currentIdentity\n ),\n revisionLastPublishedBy: getIdentity(rawInput.revisionLastPublishedBy, currentIdentity)\n };\n\n entryLevelPublishingMetaFields = {\n firstPublishedOn: getDate(\n rawInput.firstPublishedOn,\n latestStorageEntry.firstPublishedOn\n ),\n lastPublishedOn: getDate(rawInput.lastPublishedOn, currentDateTime),\n firstPublishedBy: getIdentity(\n rawInput.firstPublishedBy,\n latestStorageEntry.firstPublishedBy\n ),\n lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)\n };\n }\n\n const entry: CmsEntry<TValues> = {\n ...originalEntry,\n id,\n version: nextVersion,\n\n /**\n * Entry-level meta fields. 👇\n */\n createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),\n savedOn: getDate(rawInput.savedOn, currentDateTime),\n modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),\n createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy)!,\n savedBy: getIdentity(rawInput.savedBy, currentIdentity)!,\n modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),\n ...entryLevelPublishingMetaFields,\n\n /**\n * Revision-level meta fields. 👇\n */\n revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),\n revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),\n revisionModifiedOn: getDate(rawInput.revisionModifiedOn, null),\n revisionCreatedBy: getIdentity(rawInput.revisionCreatedBy, currentIdentity)!,\n revisionSavedBy: getIdentity(rawInput.revisionSavedBy, currentIdentity)!,\n revisionModifiedBy: getIdentity(rawInput.revisionModifiedBy, null),\n ...revisionLevelPublishingMetaFields,\n\n locked,\n status,\n values,\n system: getSystem({\n input: rawInput,\n original: originalEntry\n }),\n live: originalEntry.live\n };\n\n return {\n entry,\n input: {\n ...rawInput,\n values: structuredClone(values)\n }\n };\n};\n\nconst increaseEntryIdVersion = (id: string) => {\n const { id: entryId, version } = parseIdentifier(id);\n if (!version) {\n throw new WebinyError(\n \"Cannot increase version on the ID without the version part.\",\n \"WRONG_ID\",\n {\n id\n }\n );\n }\n return {\n entryId,\n version: version + 1,\n id: createIdentifier({\n id: entryId,\n version: version + 1\n })\n };\n};\n"],"mappings":"AAQA,SAASA,OAAO;AAChB,SAASC,WAAW;AACpB,SAASC,2BAA2B;AACpC,SAASC,6BAA6B;AACtC,SAASC,sBAAsB;AAC/B,SAASC,gBAAgB,EAAEC,eAAe,QAAQ,eAAe;AACjE,OAAOC,WAAW,MAAM,eAAe;AAGvC,SAASC,YAAY,EAAEC,gBAAgB,EAAEC,kBAAkB;AAE3D,SAASC,kBAAkB;AAC3B,SAASC,SAAS;AAoBlB,OAAO,MAAMC,2BAA2B,GAAG,MAAAA,CAAwD;EAC/FC,QAAQ;EACRC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,OAAO;EACPjB,WAAW,EAAEkB,mBAAmB;EAChCC,aAAa;EACbC,kBAAkB;EAClBC;AACwC,CAAC,KAExC;EACD;AACJ;AACA;AACA;AACA;EACI,MAAMC,aAAa,GAAG;IAClB,GAAGH,aAAa,CAACI,MAAM;IACvB,GAAGtB,2BAA2B,CAAUa,KAAK,EAAEC,QAAQ,CAACQ,MAAM;EAClE,CAAC;EAED,MAAMrB,6BAA6B,CAAC;IAChCe,OAAO;IACPH,KAAK;IACLS,MAAM,EAAED,aAAa;IACrBE,KAAK,EAAEL,aAAa;IACpBM,cAAc,EAAET,OAAO,EAAES;EAC7B,CAAC,CAAC;EAEF,MAAMF,MAAM,GAAG,MAAMpB,sBAAsB,CAAU;IACjDc,OAAO;IACPH,KAAK;IACLS,MAAM,EAAED,aAAa;IACrBI,eAAe,EAAE;EACrB,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGP,kBAAkB,GAAGA,kBAAkB,CAACQ,EAAE,GAAGf,QAAQ;EACtE,MAAM;IAAEe,EAAE;IAAEC,OAAO,EAAEC;EAAY,CAAC,GAAGC,sBAAsB,CAACJ,QAAQ,CAAC;EAErE,MAAMK,eAAe,GAAGd,mBAAmB,CAAC,CAAC;EAC7C,MAAMe,eAAe,GAAG,IAAIC,IAAI,CAAC,CAAC;;EAElC;AACJ;AACA;AACA;AACA;EACI,MAAMC,MAAM,GAAGpB,QAAQ,CAACoB,MAAM,IAAI5B,YAAY;EAC9C,IAAI4B,MAAM,KAAK5B,YAAY,EAAE;IACzB,IAAI4B,MAAM,KAAK3B,gBAAgB,EAAE;MAC7B,MAAM4B,UAAU,GAAG,MAAMf,aAAa,CAACgB,cAAc,CAAC;QAAEvB,KAAK;QAAEwB,EAAE,EAAE;MAAI,CAAC,CAAC;MACzE,IAAI,CAACF,UAAU,EAAE;QACb,MAAM,IAAI1B,kBAAkB,CAAC,0BAA0BI,KAAK,CAACyB,OAAO,YAAY,CAAC;MACrF;IACJ,CAAC,MAAM,IAAIJ,MAAM,KAAK1B,kBAAkB,EAAE;MACtC,MAAM+B,YAAY,GAAG,MAAMnB,aAAa,CAACgB,cAAc,CAAC;QAAEvB,KAAK;QAAEwB,EAAE,EAAE;MAAI,CAAC,CAAC;MAC3E,IAAI,CAACE,YAAY,EAAE;QACf,MAAM,IAAI9B,kBAAkB,CAAC,0BAA0BI,KAAK,CAACyB,OAAO,YAAY,CAAC;MACrF;IACJ;EACJ;EAEA,MAAME,MAAM,GAAGN,MAAM,KAAK5B,YAAY;EAEtC,IAAImC,iCAMH,GAAG;IACAC,wBAAwB,EAAE5C,OAAO,CAACgB,QAAQ,CAAC4B,wBAAwB,EAAE,IAAI,CAAC;IAC1EC,uBAAuB,EAAE7C,OAAO,CAACgB,QAAQ,CAAC6B,uBAAuB,EAAE,IAAI,CAAC;IACxEC,wBAAwB,EAAE7C,WAAW,CAACe,QAAQ,CAAC8B,wBAAwB,EAAE,IAAI,CAAC;IAC9EC,uBAAuB,EAAE9C,WAAW,CAACe,QAAQ,CAAC+B,uBAAuB,EAAE,IAAI;EAC/E,CAAC;EAED,IAAIC,8BAGH,GAAG;IACAC,gBAAgB,EAAEjD,OAAO,CAACgB,QAAQ,CAACiC,gBAAgB,EAAE5B,kBAAkB,CAAC4B,gBAAgB,CAAC;IACzFC,eAAe,EAAElD,OAAO,CAACgB,QAAQ,CAACkC,eAAe,EAAE7B,kBAAkB,CAAC6B,eAAe,CAAC;IACtFC,gBAAgB,EAAElD,WAAW,CACzBe,QAAQ,CAACmC,gBAAgB,EACzB9B,kBAAkB,CAAC8B,gBACvB,CAAC;IACDC,eAAe,EAAEnD,WAAW,CAACe,QAAQ,CAACoC,eAAe,EAAE/B,kBAAkB,CAAC+B,eAAe;EAC7F,CAAC;EAED,IAAIhB,MAAM,KAAK3B,gBAAgB,EAAE;IAC7BkC,iCAAiC,GAAG;MAChCC,wBAAwB,EAAE5C,OAAO,CAACgB,QAAQ,CAAC4B,wBAAwB,EAAEV,eAAe,CAAC;MACrFW,uBAAuB,EAAE7C,OAAO,CAACgB,QAAQ,CAAC6B,uBAAuB,EAAEX,eAAe,CAAC;MACnFY,wBAAwB,EAAE7C,WAAW,CACjCe,QAAQ,CAAC8B,wBAAwB,EACjCb,eACJ,CAAC;MACDc,uBAAuB,EAAE9C,WAAW,CAACe,QAAQ,CAAC+B,uBAAuB,EAAEd,eAAe;IAC1F,CAAC;IAEDe,8BAA8B,GAAG;MAC7BC,gBAAgB,EAAEjD,OAAO,CACrBgB,QAAQ,CAACiC,gBAAgB,EACzB5B,kBAAkB,CAAC4B,gBACvB,CAAC;MACDC,eAAe,EAAElD,OAAO,CAACgB,QAAQ,CAACkC,eAAe,EAAEhB,eAAe,CAAC;MACnEiB,gBAAgB,EAAElD,WAAW,CACzBe,QAAQ,CAACmC,gBAAgB,EACzB9B,kBAAkB,CAAC8B,gBACvB,CAAC;MACDC,eAAe,EAAEnD,WAAW,CAACe,QAAQ,CAACoC,eAAe,EAAEnB,eAAe;IAC1E,CAAC;EACL;EAEA,MAAMR,KAAwB,GAAG;IAC7B,GAAGL,aAAa;IAChBS,EAAE;IACFC,OAAO,EAAEC,WAAW;IAEpB;AACR;AACA;IACQsB,SAAS,EAAErD,OAAO,CAACgB,QAAQ,CAACqC,SAAS,EAAEhC,kBAAkB,CAACgC,SAAS,CAAC;IACpEC,OAAO,EAAEtD,OAAO,CAACgB,QAAQ,CAACsC,OAAO,EAAEpB,eAAe,CAAC;IACnDqB,UAAU,EAAEvD,OAAO,CAACgB,QAAQ,CAACuC,UAAU,EAAErB,eAAe,CAAC;IACzDsB,SAAS,EAAEvD,WAAW,CAACe,QAAQ,CAACwC,SAAS,EAAEnC,kBAAkB,CAACmC,SAAS,CAAE;IACzEC,OAAO,EAAExD,WAAW,CAACe,QAAQ,CAACyC,OAAO,EAAExB,eAAe,CAAE;IACxDyB,UAAU,EAAEzD,WAAW,CAACe,QAAQ,CAAC0C,UAAU,EAAEzB,eAAe,CAAC;IAC7D,GAAGe,8BAA8B;IAEjC;AACR;AACA;IACQW,iBAAiB,EAAE3D,OAAO,CAACgB,QAAQ,CAAC2C,iBAAiB,EAAEzB,eAAe,CAAC;IACvE0B,eAAe,EAAE5D,OAAO,CAACgB,QAAQ,CAAC4C,eAAe,EAAE1B,eAAe,CAAC;IACnE2B,kBAAkB,EAAE7D,OAAO,CAACgB,QAAQ,CAAC6C,kBAAkB,EAAE,IAAI,CAAC;IAC9DC,iBAAiB,EAAE7D,WAAW,CAACe,QAAQ,CAAC8C,iBAAiB,EAAE7B,eAAe,CAAE;IAC5E8B,eAAe,EAAE9D,WAAW,CAACe,QAAQ,CAAC+C,eAAe,EAAE9B,eAAe,CAAE;IACxE+B,kBAAkB,EAAE/D,WAAW,CAACe,QAAQ,CAACgD,kBAAkB,EAAE,IAAI,CAAC;IAClE,GAAGrB,iCAAiC;IAEpCD,MAAM;IACNN,MAAM;IACNZ,MAAM;IACNyC,MAAM,EAAErD,SAAS,CAAC;MACdsD,KAAK,EAAElD,QAAQ;MACfmD,QAAQ,EAAE/C;IACd,CAAC,CAAC;IACFgD,IAAI,EAAEhD,aAAa,CAACgD;EACxB,CAAC;EAED,OAAO;IACH3C,KAAK;IACLyC,KAAK,EAAE;MACH,GAAGlD,QAAQ;MACXQ,MAAM,EAAE6C,eAAe,CAAC7C,MAAM;IAClC;EACJ,CAAC;AACL,CAAC;AAED,MAAMQ,sBAAsB,GAAIH,EAAU,IAAK;EAC3C,MAAM;IAAEA,EAAE,EAAEyC,OAAO;IAAExC;EAAQ,CAAC,GAAGxB,eAAe,CAACuB,EAAE,CAAC;EACpD,IAAI,CAACC,OAAO,EAAE;IACV,MAAM,IAAIvB,WAAW,CACjB,6DAA6D,EAC7D,UAAU,EACV;MACIsB;IACJ,CACJ,CAAC;EACL;EACA,OAAO;IACHyC,OAAO;IACPxC,OAAO,EAAEA,OAAO,GAAG,CAAC;IACpBD,EAAE,EAAExB,gBAAgB,CAAC;MACjBwB,EAAE,EAAEyC,OAAO;MACXxC,OAAO,EAAEA,OAAO,GAAG;IACvB,CAAC;EACL,CAAC;AACL,CAAC","ignoreList":[]}
@@ -6,7 +6,7 @@ interface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntr
6
6
  entry?: CmsEntry<TValues>;
7
7
  skipValidators?: string[];
8
8
  }
9
- export declare const validateModelEntryData: <TValues extends CmsEntryValues = CmsEntryValues>(params: IValidateModelEntryDataParams) => Promise<FieldError[]>;
9
+ export declare const validateModelEntryData: <TValues extends CmsEntryValues = CmsEntryValues>(params: IValidateModelEntryDataParams<TValues>) => Promise<FieldError[]>;
10
10
  export declare const validateModelEntryDataOrThrow: <TValues extends CmsEntryValues = CmsEntryValues>(params: IValidateModelEntryDataParams<TValues>) => Promise<void>;
11
11
  /**
12
12
  *
@@ -1,5 +1,6 @@
1
1
  import camelCase from "lodash/camelCase.js";
2
2
  import { EntryValidationError } from "../../domain/contentEntry/errors.js";
3
+ import { CmsModelFieldValidatorRegistry } from "../../features/validation/index.js";
3
4
  const validateValue = async (params, fieldValidators, value) => {
4
5
  if (!fieldValidators) {
5
6
  return null;
@@ -127,30 +128,32 @@ export const validateModelEntryData = async params => {
127
128
  values,
128
129
  skipValidators
129
130
  } = params;
130
- const isValidatorSkipped = plugin => {
131
+ const isValidatorSkipped = validator => {
131
132
  if (!skipValidators) {
132
133
  return false;
133
134
  }
134
- return skipValidators.includes(camelCase(plugin.validator.name));
135
+ return skipValidators.includes(camelCase(validator.name));
135
136
  };
136
137
  const skippedValidators = new Set();
137
-
138
- /**
139
- * To later simplify searching for the validations we map them to a name.
140
- * @see CmsModelFieldValidatorPlugin.validator.validate
141
- */
142
138
  const validatorList = {};
143
- const validators = context.plugins.byType("cms-model-field-validator");
144
- for (const plugin of validators) {
145
- const name = plugin.validator.name;
139
+ const registry = context.container.resolve(CmsModelFieldValidatorRegistry);
140
+ const validators = registry.getAll();
141
+ for (const validator of validators) {
142
+ const name = validator.name;
146
143
  if (!validatorList[name]) {
147
144
  validatorList[name] = [];
148
145
  }
149
- const isSkipped = isValidatorSkipped(plugin);
146
+ const isSkipped = isValidatorSkipped(validator);
150
147
  if (isSkipped) {
151
148
  skippedValidators.add(name);
149
+ validatorList[name].push(async () => {
150
+ return true;
151
+ });
152
+ continue;
152
153
  }
153
- validatorList[name].push(isSkipped ? async () => true : plugin.validator.validate);
154
+ validatorList[name].push(params => {
155
+ return validator.validate(params);
156
+ });
154
157
  }
155
158
  /**
156
159
  * No point in continuing if all validators are skipped.
@@ -163,7 +166,7 @@ export const validateModelEntryData = async params => {
163
166
  validatorList,
164
167
  context,
165
168
  model,
166
- entry: entry,
169
+ entry,
167
170
  parents: [],
168
171
  fields: model.fields,
169
172
  values: {
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","EntryValidationError","validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","undefined","predefinedValue","getFieldValidation","listValidation","filter","item","runFieldMultipleValuesValidations","initialValues","fieldId","valuesError","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","list","validateModelEntryData","skipValidators","isValidatorSkipped","plugin","includes","skippedValidators","Set","validators","plugins","byType","isSkipped","add","push","keys","Object","size","parents","fields","validateModelEntryDataOrThrow","invalidFields","executeFieldValidation","type","settings","id","storageId","objectValue","index","childField","errors","concat","templates","template","fieldData","templateValue","gqlTypeName","results","Promise","all","map"],"sources":["entryDataValidation.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation,\n CmsModelFieldValidatorPlugin,\n CmsModelFieldValidatorValidateParams\n} from \"~/types/index.js\";\nimport camelCase from \"lodash/camelCase.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\n\ntype PluginValidationCallable = (params: CmsModelFieldValidatorValidateParams) => Promise<boolean>;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\n\ninterface ExecuteValidationParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\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 } else if (value === \"\" || value === null || value === undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\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\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n return listValidation.filter(item => item.name !== \"dynamicZone\");\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 <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { field, values: initialValues } = params;\n const values = initialValues[field.fieldId as keyof TValues] as\n | PossibleValue[]\n | null\n | undefined;\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const valueError = await validateValue(params, getFieldValidation(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 <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { values, field } = params;\n const value = values[field.fieldId as keyof TValues] as PossibleValue | null | undefined;\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.list) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\ninterface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n context: CmsContext;\n model: CmsModel;\n values: TValues;\n entry?: CmsEntry<TValues>;\n skipValidators?: string[];\n}\n\nexport const validateModelEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: IValidateModelEntryDataParams\n) => {\n const { context, model, entry, values, skipValidators } = params;\n\n const isValidatorSkipped = (plugin: CmsModelFieldValidatorPlugin) => {\n if (!skipValidators) {\n return false;\n }\n return skipValidators.includes(camelCase(plugin.validator.name));\n };\n\n const skippedValidators = new Set<string>();\n\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 = {};\n const validators = context.plugins.byType<CmsModelFieldValidatorPlugin>(\n \"cms-model-field-validator\"\n );\n for (const plugin of validators) {\n const name = plugin.validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n const isSkipped = isValidatorSkipped(plugin);\n if (isSkipped) {\n skippedValidators.add(name);\n }\n validatorList[name].push(isSkipped ? async () => true : plugin.validator.validate);\n }\n /**\n * No point in continuing if all validators are skipped.\n */\n const keys = Object.keys(validatorList);\n if (keys.length === skippedValidators.size) {\n return [];\n }\n\n return await validate<TValues>({\n validatorList,\n context,\n model,\n entry: entry as CmsEntry<TValues>,\n parents: [],\n fields: model.fields,\n values: {\n ...(entry?.values as TValues),\n ...values\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async <\n TValues extends CmsEntryValues = CmsEntryValues\n>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new EntryValidationError(\"Validation failed.\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateFieldParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n field: CmsModelField;\n entry?: CmsEntry<TValues>;\n}\n\nconst executeFieldValidation = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldParams<TValues>\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.values[field.fieldId as keyof TValues];\n if (!objectValue) {\n return validations;\n }\n const values = (Array.isArray(objectValue) ? objectValue : [objectValue]) as TValues[];\n for (const index in values) {\n const parents = field.list ? [field.fieldId, index] : [field.fieldId];\n const value = values[index] as TValues;\n for (const childField of fields) {\n const errors = await executeFieldValidation<typeof value>({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.values[field.fieldId as keyof TValues];\n if (!fieldData) {\n continue;\n }\n const values: TValues[keyof TValues][] = Array.isArray(fieldData)\n ? fieldData\n : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.list) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\ninterface ValidateFieldsParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n fields: CmsModelField[];\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\nconst validate = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldsParams<TValues>\n): Promise<FieldError[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n\n const results = await Promise.all(\n fields.map(async field => {\n return await executeFieldValidation<TValues>({\n ...params,\n field\n });\n })\n );\n\n for (const result of results) {\n if (result.length === 0) {\n continue;\n }\n errors.push(...result);\n }\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["camelCase","EntryValidationError","CmsModelFieldValidatorRegistry","validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","length","validate","result","validator","message","ex","validatePredefinedValue","enabled","values","predefinedValues","Array","isArray","undefined","predefinedValue","getFieldValidation","listValidation","filter","item","runFieldMultipleValuesValidations","initialValues","fieldId","valuesError","valueError","validation","predefinedValueError","runFieldValueValidations","error","execValidation","list","validateModelEntryData","skipValidators","isValidatorSkipped","includes","skippedValidators","Set","registry","container","resolve","validators","getAll","isSkipped","add","push","keys","Object","size","parents","fields","validateModelEntryDataOrThrow","invalidFields","executeFieldValidation","type","settings","id","storageId","objectValue","index","childField","errors","concat","templates","template","fieldData","templateValue","gqlTypeName","results","Promise","all","map"],"sources":["entryDataValidation.ts"],"sourcesContent":["import type {\n CmsContext,\n CmsDynamicZoneTemplate,\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CmsModelField,\n CmsModelFieldValidation\n} from \"~/types/index.js\";\nimport camelCase from \"lodash/camelCase.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport {\n type CmsModelFieldValidator,\n CmsModelFieldValidatorRegistry\n} from \"~/features/validation/index.js\";\n\ntype PluginValidationCallable = (\n params: CmsModelFieldValidator.Params\n) => CmsModelFieldValidator.Response;\ntype PluginValidationList = Record<string, PluginValidationCallable[]>;\n\ninterface ExecuteValidationParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n field: CmsModelField;\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\ntype PossibleValue = boolean | number | string | null | undefined;\n\nconst validateValue = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>,\n fieldValidators: CmsModelFieldValidation[],\n value: PossibleValue | PossibleValue[]\n): Promise<string | null> => {\n if (!fieldValidators) {\n return null;\n }\n const { validatorList, context, field, model, entry } = params;\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 } else if (value === \"\" || value === null || value === undefined) {\n return null;\n }\n for (const predefinedValue of predefinedValues) {\n /**\n * No strict compare because the value sent can be 12345 (number) and predefinedValue can be \"12345\" (string),\n * and we want it to match.\n */\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\nconst getFieldValidation = (\n listValidation?: CmsModelFieldValidation[]\n): CmsModelFieldValidation[] => {\n if (!listValidation?.length) {\n return [];\n }\n return listValidation.filter(item => item.name !== \"dynamicZone\");\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 <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { field, values: initialValues } = params;\n const values = initialValues[field.fieldId as keyof TValues] as\n | PossibleValue[]\n | null\n | undefined;\n const valuesError = await validateValue(\n params,\n getFieldValidation(field.listValidation),\n values\n );\n if (valuesError) {\n return valuesError;\n }\n if (values === null || values === undefined) {\n return null;\n }\n for (const value of values) {\n const valueError = await validateValue(params, getFieldValidation(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 <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ExecuteValidationParams<TValues>\n): Promise<string | null> => {\n const { values, field } = params;\n const value = values[field.fieldId as keyof TValues];\n const error = await validateValue(params, field.validation || [], value);\n if (error) {\n return error;\n }\n return validatePredefinedValue(field, value);\n};\n\nconst execValidation = async (params: ExecuteValidationParams): Promise<string | null> => {\n const { field } = params;\n if (field.list) {\n return await runFieldMultipleValuesValidations(params);\n }\n return await runFieldValueValidations(params);\n};\n\ninterface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntryValues> {\n context: CmsContext;\n model: CmsModel;\n values: TValues;\n entry?: CmsEntry<TValues>;\n skipValidators?: string[];\n}\n\nexport const validateModelEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const { context, model, entry, values, skipValidators } = params;\n\n const isValidatorSkipped = (validator: CmsModelFieldValidator.Interface) => {\n if (!skipValidators) {\n return false;\n }\n return skipValidators.includes(camelCase(validator.name));\n };\n\n const skippedValidators = new Set<string>();\n\n const validatorList: PluginValidationList = {};\n const registry = context.container.resolve(CmsModelFieldValidatorRegistry);\n const validators = registry.getAll();\n for (const validator of validators) {\n const name = validator.name;\n if (!validatorList[name]) {\n validatorList[name] = [];\n }\n const isSkipped = isValidatorSkipped(validator);\n if (isSkipped) {\n skippedValidators.add(name);\n validatorList[name].push(async () => {\n return true;\n });\n continue;\n }\n validatorList[name].push(params => {\n return validator.validate(params);\n });\n }\n /**\n * No point in continuing if all validators are skipped.\n */\n const keys = Object.keys(validatorList);\n if (keys.length === skippedValidators.size) {\n return [];\n }\n\n return await validate<TValues>({\n validatorList,\n context,\n model,\n entry,\n parents: [],\n fields: model.fields,\n values: {\n ...entry?.values,\n ...values\n }\n });\n};\n\nexport const validateModelEntryDataOrThrow = async <\n TValues extends CmsEntryValues = CmsEntryValues\n>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const invalidFields = await validateModelEntryData(params);\n if (invalidFields.length === 0) {\n return;\n }\n throw new EntryValidationError(\"Validation failed.\", invalidFields);\n};\n\n/**\n *\n */\ninterface FieldError {\n id: string;\n fieldId: string;\n storageId: string;\n error: any;\n parents: string[];\n}\n\ninterface ValidateFieldParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n context: CmsContext;\n field: CmsModelField;\n entry?: CmsEntry<TValues>;\n}\n\nconst executeFieldValidation = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldParams<TValues>\n): Promise<FieldError[]> => {\n // TODO put per-field validation into plugins.\n const { field } = params;\n /**\n * Object field.\n */\n if (field.type === \"object\") {\n const fields = field.settings?.fields;\n if (!Array.isArray(fields)) {\n return [];\n }\n const validations: FieldError[] = [];\n /**\n * We need to validate the object field as well.\n */\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n const objectValue = params.values[field.fieldId as keyof TValues];\n if (!objectValue) {\n return validations;\n }\n const values = (Array.isArray(objectValue) ? objectValue : [objectValue]) as TValues[];\n for (const index in values) {\n const parents = field.list ? [field.fieldId, index] : [field.fieldId];\n const value = values[index] as TValues;\n for (const childField of fields) {\n const errors = await executeFieldValidation<typeof value>({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: value\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n return validations;\n }\n /**\n * Dynamic Zone Field\n */\n //\n else if (field.type === \"dynamicZone\") {\n const validations: FieldError[] = [];\n\n const error = await execValidation({\n ...params,\n field\n });\n if (error) {\n validations.push({\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n });\n }\n\n const templates = (field.settings?.templates || []) as CmsDynamicZoneTemplate[];\n for (const template of templates) {\n const fields = template.fields;\n const fieldData = params.values[field.fieldId as keyof TValues];\n if (!fieldData) {\n continue;\n }\n const values: TValues[keyof TValues][] = Array.isArray(fieldData)\n ? fieldData\n : [fieldData];\n for (const index in values) {\n const templateValue = values[index]?.[template.gqlTypeName];\n if (!templateValue) {\n continue;\n }\n /**\n * Order of the parents must be\n * - fieldId\n * - index (if multiple values)\n * - gqlTypeName\n */\n const parents = [field.fieldId];\n if (field.list) {\n parents.push(index);\n }\n parents.push(template.gqlTypeName);\n for (const childField of fields) {\n const errors = await executeFieldValidation({\n ...params,\n parents: params.parents.concat(parents),\n field: childField,\n values: templateValue\n });\n if (errors.length === 0) {\n continue;\n }\n validations.push(...errors);\n }\n }\n }\n\n return validations;\n }\n const error = await execValidation({\n ...params\n });\n if (!error) {\n return [];\n }\n return [\n {\n id: field.id,\n fieldId: field.fieldId,\n storageId: field.storageId,\n error,\n parents: params.parents\n }\n ];\n};\n\ninterface ValidateFieldsParams<TValues extends CmsEntryValues = CmsEntryValues> {\n validatorList: PluginValidationList;\n parents: string[];\n model: CmsModel;\n values: TValues;\n fields: CmsModelField[];\n context: CmsContext;\n entry?: CmsEntry<TValues>;\n}\n\nconst validate = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: ValidateFieldsParams<TValues>\n): Promise<FieldError[]> => {\n const { fields } = params;\n const errors: FieldError[] = [];\n\n const results = await Promise.all(\n fields.map(async field => {\n return await executeFieldValidation<TValues>({\n ...params,\n field\n });\n })\n );\n\n for (const result of results) {\n if (result.length === 0) {\n continue;\n }\n errors.push(...result);\n }\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,8 @@
1
- import type { CmsModelField } from "../../types/index.js";
2
- import type { PluginsContainer } from "@webiny/plugins";
1
+ import type { CmsContext, CmsModelField } from "../../types/index.js";
3
2
  interface Params {
4
3
  input: string[];
5
4
  fields: CmsModelField[];
6
- plugins: PluginsContainer;
5
+ context: Pick<CmsContext, "container">;
7
6
  }
8
7
  export declare const getSearchableFields: (params: Params) => string[];
9
8
  export {};
@@ -1,16 +1,14 @@
1
+ import { CmsModelFieldToGraphQLRegistry } from "../../features/graphql/index.js";
1
2
  const buildSearchableFieldList = params => {
2
3
  const {
3
4
  input,
4
- plugins,
5
+ registry,
5
6
  fields,
6
7
  parents
7
8
  } = params;
8
9
  return fields.reduce((result, field) => {
9
- /**
10
- * We need to check if the field is full text searchable, and for that we need a plugin for the field type.
11
- */
12
- const plugin = plugins[field.type];
13
- if (!plugin) {
10
+ const fieldImpl = registry.get(field.type);
11
+ if (!fieldImpl) {
14
12
  return result;
15
13
  }
16
14
  /**
@@ -18,13 +16,10 @@ const buildSearchableFieldList = params => {
18
16
  */
19
17
  const childFields = field.settings?.fields || [];
20
18
  if (childFields.length > 0) {
21
- /**
22
- * So we build a list of searchable child fields and push it into the main result set.
23
- */
24
19
  const childResults = buildSearchableFieldList({
25
20
  fields: childFields,
26
21
  parents: [...parents, field.fieldId],
27
- plugins,
22
+ registry,
28
23
  input
29
24
  });
30
25
  result.push(...childResults);
@@ -33,7 +28,7 @@ const buildSearchableFieldList = params => {
33
28
  /**
34
29
  * If not searchable, continue further.
35
30
  */
36
- if (!plugin.fullTextSearch || field.settings?.disableFullTextSearch === true) {
31
+ if (!fieldImpl.isFullTextSearchable || field.settings?.disableFullTextSearch === true) {
37
32
  return result;
38
33
  }
39
34
 
@@ -45,24 +40,21 @@ const buildSearchableFieldList = params => {
45
40
  return result;
46
41
  },
47
42
  /**
48
- * We always add id and entry id
43
+ * We always add id and entry id.
49
44
  */
50
45
  ["id", "entryId"]);
51
46
  };
52
47
  export const getSearchableFields = params => {
53
48
  const {
54
- plugins,
49
+ context,
55
50
  input,
56
51
  fields
57
52
  } = params;
58
- const fieldPluginMap = plugins.byType("cms-model-field-to-graphql").reduce((collection, field) => {
59
- collection[field.fieldType] = field;
60
- return collection;
61
- }, {});
53
+ const registry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
62
54
  return buildSearchableFieldList({
63
55
  fields,
64
56
  input,
65
- plugins: fieldPluginMap,
57
+ registry,
66
58
  parents: ["values"]
67
59
  });
68
60
  };
@@ -1 +1 @@
1
- {"version":3,"names":["buildSearchableFieldList","params","input","plugins","fields","parents","reduce","result","field","plugin","type","childFields","settings","length","childResults","fieldId","push","fullTextSearch","disableFullTextSearch","path","join","getSearchableFields","fieldPluginMap","byType","collection","fieldType"],"sources":["searchableFields.ts"],"sourcesContent":["import type { CmsModelField, CmsModelFieldToGraphQLPlugin } from \"~/types/index.js\";\nimport type { PluginsContainer } from \"@webiny/plugins\";\n\ninterface BuildParams {\n input: string[];\n fields: CmsModelField[];\n plugins: Record<string, CmsModelFieldToGraphQLPlugin>;\n parents: string[];\n}\nconst buildSearchableFieldList = (params: BuildParams): string[] => {\n const { input, plugins, fields, parents } = params;\n return fields.reduce<string[]>(\n (result, field) => {\n /**\n * We need to check if the field is full text searchable, and for that we need a plugin for the field type.\n */\n const plugin = plugins[field.type];\n if (!plugin) {\n return result;\n }\n /**\n * There is a possibility that searchable fields exist in nested object field, so check that as well.\n */\n const childFields = field.settings?.fields || [];\n if (childFields.length > 0) {\n /**\n * So we build a list of searchable child fields and push it into the main result set.\n */\n const childResults = buildSearchableFieldList({\n fields: childFields,\n parents: [...parents, field.fieldId],\n plugins,\n input\n });\n\n result.push(...childResults);\n return result;\n }\n /**\n * If not searchable, continue further.\n */\n if (!plugin.fullTextSearch || field.settings?.disableFullTextSearch === true) {\n return result;\n }\n\n /**\n * Combine all parent paths with the current one and push it.\n */\n const path = [...parents, field.fieldId].join(\".\");\n result.push(path);\n\n return result;\n },\n /**\n * We always add id and entry id\n */\n [\"id\", \"entryId\"]\n );\n};\n\ninterface Params {\n input: string[];\n fields: CmsModelField[];\n plugins: PluginsContainer;\n}\nexport const getSearchableFields = (params: Params): string[] => {\n const { plugins, input, fields } = params;\n const fieldPluginMap = plugins\n .byType<CmsModelFieldToGraphQLPlugin>(\"cms-model-field-to-graphql\")\n .reduce<Record<string, CmsModelFieldToGraphQLPlugin>>((collection, field) => {\n collection[field.fieldType] = field;\n return collection;\n }, {});\n\n return buildSearchableFieldList({\n fields,\n input,\n plugins: fieldPluginMap,\n parents: [\"values\"]\n });\n};\n"],"mappings":"AASA,MAAMA,wBAAwB,GAAIC,MAAmB,IAAe;EAChE,MAAM;IAAEC,KAAK;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EAClD,OAAOG,MAAM,CAACE,MAAM,CAChB,CAACC,MAAM,EAAEC,KAAK,KAAK;IACf;AACZ;AACA;IACY,MAAMC,MAAM,GAAGN,OAAO,CAACK,KAAK,CAACE,IAAI,CAAC;IAClC,IAAI,CAACD,MAAM,EAAE;MACT,OAAOF,MAAM;IACjB;IACA;AACZ;AACA;IACY,MAAMI,WAAW,GAAGH,KAAK,CAACI,QAAQ,EAAER,MAAM,IAAI,EAAE;IAChD,IAAIO,WAAW,CAACE,MAAM,GAAG,CAAC,EAAE;MACxB;AAChB;AACA;MACgB,MAAMC,YAAY,GAAGd,wBAAwB,CAAC;QAC1CI,MAAM,EAAEO,WAAW;QACnBN,OAAO,EAAE,CAAC,GAAGA,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC;QACpCZ,OAAO;QACPD;MACJ,CAAC,CAAC;MAEFK,MAAM,CAACS,IAAI,CAAC,GAAGF,YAAY,CAAC;MAC5B,OAAOP,MAAM;IACjB;IACA;AACZ;AACA;IACY,IAAI,CAACE,MAAM,CAACQ,cAAc,IAAIT,KAAK,CAACI,QAAQ,EAAEM,qBAAqB,KAAK,IAAI,EAAE;MAC1E,OAAOX,MAAM;IACjB;;IAEA;AACZ;AACA;IACY,MAAMY,IAAI,GAAG,CAAC,GAAGd,OAAO,EAAEG,KAAK,CAACO,OAAO,CAAC,CAACK,IAAI,CAAC,GAAG,CAAC;IAClDb,MAAM,CAACS,IAAI,CAACG,IAAI,CAAC;IAEjB,OAAOZ,MAAM;EACjB,CAAC;EACD;AACR;AACA;EACQ,CAAC,IAAI,EAAE,SAAS,CACpB,CAAC;AACL,CAAC;AAOD,OAAO,MAAMc,mBAAmB,GAAIpB,MAAc,IAAe;EAC7D,MAAM;IAAEE,OAAO;IAAED,KAAK;IAAEE;EAAO,CAAC,GAAGH,MAAM;EACzC,MAAMqB,cAAc,GAAGnB,OAAO,CACzBoB,MAAM,CAA+B,4BAA4B,CAAC,CAClEjB,MAAM,CAA+C,CAACkB,UAAU,EAAEhB,KAAK,KAAK;IACzEgB,UAAU,CAAChB,KAAK,CAACiB,SAAS,CAAC,GAAGjB,KAAK;IACnC,OAAOgB,UAAU;EACrB,CAAC,EAAE,CAAC,CAAC,CAAC;EAEV,OAAOxB,wBAAwB,CAAC;IAC5BI,MAAM;IACNF,KAAK;IACLC,OAAO,EAAEmB,cAAc;IACvBjB,OAAO,EAAE,CAAC,QAAQ;EACtB,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["CmsModelFieldToGraphQLRegistry","buildSearchableFieldList","params","input","registry","fields","parents","reduce","result","field","fieldImpl","get","type","childFields","settings","length","childResults","fieldId","push","isFullTextSearchable","disableFullTextSearch","path","join","getSearchableFields","context","container","resolve"],"sources":["searchableFields.ts"],"sourcesContent":["import type { CmsContext, CmsModelField } from \"~/types/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"~/features/graphql/index.js\";\n\ninterface BuildParams {\n input: string[];\n fields: CmsModelField[];\n registry: CmsModelFieldToGraphQLRegistry.Interface;\n parents: string[];\n}\nconst buildSearchableFieldList = (params: BuildParams): string[] => {\n const { input, registry, fields, parents } = params;\n return fields.reduce<string[]>(\n (result, field) => {\n const fieldImpl = registry.get(field.type);\n if (!fieldImpl) {\n return result;\n }\n /**\n * There is a possibility that searchable fields exist in nested object field, so check that as well.\n */\n const childFields = field.settings?.fields || [];\n if (childFields.length > 0) {\n const childResults = buildSearchableFieldList({\n fields: childFields,\n parents: [...parents, field.fieldId],\n registry,\n input\n });\n\n result.push(...childResults);\n return result;\n }\n /**\n * If not searchable, continue further.\n */\n if (!fieldImpl.isFullTextSearchable || field.settings?.disableFullTextSearch === true) {\n return result;\n }\n\n /**\n * Combine all parent paths with the current one and push it.\n */\n const path = [...parents, field.fieldId].join(\".\");\n result.push(path);\n\n return result;\n },\n /**\n * We always add id and entry id.\n */\n [\"id\", \"entryId\"]\n );\n};\n\ninterface Params {\n input: string[];\n fields: CmsModelField[];\n context: Pick<CmsContext, \"container\">;\n}\nexport const getSearchableFields = (params: Params): string[] => {\n const { context, input, fields } = params;\n\n const registry = context.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n return buildSearchableFieldList({\n fields,\n input,\n registry,\n parents: [\"values\"]\n });\n};\n"],"mappings":"AACA,SAASA,8BAA8B;AAQvC,MAAMC,wBAAwB,GAAIC,MAAmB,IAAe;EAChE,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EACnD,OAAOG,MAAM,CAACE,MAAM,CAChB,CAACC,MAAM,EAAEC,KAAK,KAAK;IACf,MAAMC,SAAS,GAAGN,QAAQ,CAACO,GAAG,CAACF,KAAK,CAACG,IAAI,CAAC;IAC1C,IAAI,CAACF,SAAS,EAAE;MACZ,OAAOF,MAAM;IACjB;IACA;AACZ;AACA;IACY,MAAMK,WAAW,GAAGJ,KAAK,CAACK,QAAQ,EAAET,MAAM,IAAI,EAAE;IAChD,IAAIQ,WAAW,CAACE,MAAM,GAAG,CAAC,EAAE;MACxB,MAAMC,YAAY,GAAGf,wBAAwB,CAAC;QAC1CI,MAAM,EAAEQ,WAAW;QACnBP,OAAO,EAAE,CAAC,GAAGA,OAAO,EAAEG,KAAK,CAACQ,OAAO,CAAC;QACpCb,QAAQ;QACRD;MACJ,CAAC,CAAC;MAEFK,MAAM,CAACU,IAAI,CAAC,GAAGF,YAAY,CAAC;MAC5B,OAAOR,MAAM;IACjB;IACA;AACZ;AACA;IACY,IAAI,CAACE,SAAS,CAACS,oBAAoB,IAAIV,KAAK,CAACK,QAAQ,EAAEM,qBAAqB,KAAK,IAAI,EAAE;MACnF,OAAOZ,MAAM;IACjB;;IAEA;AACZ;AACA;IACY,MAAMa,IAAI,GAAG,CAAC,GAAGf,OAAO,EAAEG,KAAK,CAACQ,OAAO,CAAC,CAACK,IAAI,CAAC,GAAG,CAAC;IAClDd,MAAM,CAACU,IAAI,CAACG,IAAI,CAAC;IAEjB,OAAOb,MAAM;EACjB,CAAC;EACD;AACR;AACA;EACQ,CAAC,IAAI,EAAE,SAAS,CACpB,CAAC;AACL,CAAC;AAOD,OAAO,MAAMe,mBAAmB,GAAIrB,MAAc,IAAe;EAC7D,MAAM;IAAEsB,OAAO;IAAErB,KAAK;IAAEE;EAAO,CAAC,GAAGH,MAAM;EAEzC,MAAME,QAAQ,GAAGoB,OAAO,CAACC,SAAS,CAACC,OAAO,CAAC1B,8BAA8B,CAAC;EAE1E,OAAOC,wBAAwB,CAAC;IAC5BI,MAAM;IACNF,KAAK;IACLC,QAAQ;IACRE,OAAO,EAAE,CAAC,QAAQ;EACtB,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -7,6 +7,7 @@ import { GetModelUseCase } from "../features/contentModel/GetModel/index.js";
7
7
  import { ListModelsUseCase } from "../features/contentModel/ListModels/index.js";
8
8
  import { createMemoryCache } from "../utils/index.js";
9
9
  import { CmsModelFieldToAstConverterFromPlugins, CmsModelToAstConverter } from "../utils/contentModelAst/index.js";
10
+ import { CmsModelFieldToGraphQLRegistry } from "../features/graphql/index.js";
10
11
  export const createModelsCrud = params => {
11
12
  const {
12
13
  context
@@ -17,7 +18,7 @@ export const createModelsCrud = params => {
17
18
  listDatabaseModelsCache.clear();
18
19
  listFilteredModelsCache.clear();
19
20
  };
20
- const fieldTypePlugins = context.plugins.byType("cms-model-field-to-graphql");
21
+ const fieldTypePlugins = context.container.resolve(CmsModelFieldToGraphQLRegistry).getAll();
21
22
  const getModelToAstConverter = () => {
22
23
  return new CmsModelToAstConverter(new CmsModelFieldToAstConverterFromPlugins(fieldTypePlugins));
23
24
  };
@@ -1 +1 @@
1
- {"version":3,"names":["WebinyError","CreateModelUseCase","CreateModelFromUseCase","UpdateModelUseCase","DeleteModelUseCase","GetModelUseCase","ListModelsUseCase","createMemoryCache","CmsModelFieldToAstConverterFromPlugins","CmsModelToAstConverter","createModelsCrud","params","context","listFilteredModelsCache","listDatabaseModelsCache","clearModelsCache","clear","fieldTypePlugins","plugins","byType","getModelToAstConverter","listModels","input","benchmark","measure","useCase","container","resolve","result","execute","isFail","error","message","code","data","value","getModel","modelId","createModel","updateModel","createModelFrom","deleteModel","userInput"],"sources":["contentModel.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type {\n CmsContext,\n CmsModel,\n CmsModelContext,\n CmsModelFieldToGraphQLPlugin,\n ICmsModelListParams\n} from \"~/types/index.js\";\nimport { CreateModelUseCase } from \"~/features/contentModel/CreateModel/index.js\";\nimport { CreateModelFromUseCase } from \"~/features/contentModel/CreateModelFrom/index.js\";\nimport { UpdateModelUseCase } from \"~/features/contentModel/UpdateModel/index.js\";\nimport { DeleteModelUseCase } from \"~/features/contentModel/DeleteModel/index.js\";\nimport { GetModelUseCase } from \"~/features/contentModel/GetModel/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { createMemoryCache } from \"~/utils/index.js\";\nimport {\n CmsModelFieldToAstConverterFromPlugins,\n CmsModelToAstConverter\n} from \"~/utils/contentModelAst/index.js\";\n\nexport interface CreateModelsCrudParams {\n context: CmsContext;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { context } = params;\n\n const listFilteredModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listDatabaseModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n listDatabaseModelsCache.clear();\n listFilteredModelsCache.clear();\n };\n\n const fieldTypePlugins = context.plugins.byType<CmsModelFieldToGraphQLPlugin>(\n \"cms-model-field-to-graphql\"\n );\n\n const getModelToAstConverter = () => {\n return new CmsModelToAstConverter(\n new CmsModelFieldToAstConverterFromPlugins(fieldTypePlugins)\n );\n };\n\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n *\n * We always fetch the plugins and database models separately.\n * Then we combine them and run access filtering on them\n */\n const listModels = async (input?: ICmsModelListParams) => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n // Delegate to new ListModels use case\n const useCase = context.container.resolve(ListModelsUseCase);\n const result = await useCase.execute(input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n // Delegate to new GetModel use case\n const useCase = context.container.resolve(GetModelUseCase);\n const result = await useCase.execute(modelId);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n });\n };\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n // Delegate to new CreateModel use case\n const useCase = context.container.resolve(CreateModelUseCase);\n const result = await useCase.execute(input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n // Delegate to new UpdateModel use case\n const useCase = context.container.resolve(UpdateModelUseCase);\n const result = await useCase.execute(modelId, input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n // Delegate to new CreateModelFrom use case\n const useCase = context.container.resolve(CreateModelFromUseCase);\n const result = await useCase.execute(modelId, input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n // Delegate to new DeleteModel use case\n const useCase = context.container.resolve(DeleteModelUseCase);\n const result = await useCase.execute(modelId);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n };\n\n return {\n clearModelsCache,\n getModel,\n getModelToAstConverter,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebinyError","CreateModelUseCase","CreateModelFromUseCase","UpdateModelUseCase","DeleteModelUseCase","GetModelUseCase","ListModelsUseCase","createMemoryCache","CmsModelFieldToAstConverterFromPlugins","CmsModelToAstConverter","CmsModelFieldToGraphQLRegistry","createModelsCrud","params","context","listFilteredModelsCache","listDatabaseModelsCache","clearModelsCache","clear","fieldTypePlugins","container","resolve","getAll","getModelToAstConverter","listModels","input","benchmark","measure","useCase","result","execute","isFail","error","message","code","data","value","getModel","modelId","createModel","updateModel","createModelFrom","deleteModel","userInput"],"sources":["contentModel.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type { CmsContext, CmsModel, CmsModelContext, ICmsModelListParams } from \"~/types/index.js\";\nimport { CreateModelUseCase } from \"~/features/contentModel/CreateModel/index.js\";\nimport { CreateModelFromUseCase } from \"~/features/contentModel/CreateModelFrom/index.js\";\nimport { UpdateModelUseCase } from \"~/features/contentModel/UpdateModel/index.js\";\nimport { DeleteModelUseCase } from \"~/features/contentModel/DeleteModel/index.js\";\nimport { GetModelUseCase } from \"~/features/contentModel/GetModel/index.js\";\nimport { ListModelsUseCase } from \"~/features/contentModel/ListModels/index.js\";\nimport { createMemoryCache } from \"~/utils/index.js\";\nimport {\n CmsModelFieldToAstConverterFromPlugins,\n CmsModelToAstConverter\n} from \"~/utils/contentModelAst/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"~/features/graphql/index.js\";\n\nexport interface CreateModelsCrudParams {\n context: CmsContext;\n}\n\nexport const createModelsCrud = (params: CreateModelsCrudParams): CmsModelContext => {\n const { context } = params;\n\n const listFilteredModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const listDatabaseModelsCache = createMemoryCache<Promise<CmsModel[]>>();\n const clearModelsCache = (): void => {\n listDatabaseModelsCache.clear();\n listFilteredModelsCache.clear();\n };\n\n const fieldTypePlugins = context.container.resolve(CmsModelFieldToGraphQLRegistry).getAll();\n\n const getModelToAstConverter = () => {\n return new CmsModelToAstConverter(\n new CmsModelFieldToAstConverterFromPlugins(fieldTypePlugins)\n );\n };\n\n /**\n * The list models cache is a key -> Promise pair so it the listModels() can be called multiple times but executed only once.\n *\n * We always fetch the plugins and database models separately.\n * Then we combine them and run access filtering on them\n */\n const listModels = async (input?: ICmsModelListParams) => {\n return context.benchmark.measure(\"headlessCms.crud.models.listModels\", async () => {\n // Delegate to new ListModels use case\n const useCase = context.container.resolve(ListModelsUseCase);\n const result = await useCase.execute(input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n });\n };\n\n const getModel = async (modelId: string): Promise<CmsModel> => {\n return context.benchmark.measure(\"headlessCms.crud.models.getModel\", async () => {\n // Delegate to new GetModel use case\n const useCase = context.container.resolve(GetModelUseCase);\n const result = await useCase.execute(modelId);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n });\n };\n\n /**\n * CRUD methods\n */\n const createModel: CmsModelContext[\"createModel\"] = async input => {\n // Delegate to new CreateModel use case\n const useCase = context.container.resolve(CreateModelUseCase);\n const result = await useCase.execute(input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n const updateModel: CmsModelContext[\"updateModel\"] = async (modelId, input) => {\n // Delegate to new UpdateModel use case\n const useCase = context.container.resolve(UpdateModelUseCase);\n const result = await useCase.execute(modelId, input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n\n const createModelFrom: CmsModelContext[\"createModelFrom\"] = async (modelId, input) => {\n // Delegate to new CreateModelFrom use case\n const useCase = context.container.resolve(CreateModelFromUseCase);\n const result = await useCase.execute(modelId, input);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n\n return result.value;\n };\n const deleteModel: CmsModelContext[\"deleteModel\"] = async modelId => {\n // Delegate to new DeleteModel use case\n const useCase = context.container.resolve(DeleteModelUseCase);\n const result = await useCase.execute(modelId);\n\n if (result.isFail()) {\n throw new WebinyError(result.error.message, result.error.code, result.error.data);\n }\n };\n\n return {\n clearModelsCache,\n getModel,\n getModelToAstConverter,\n listModels,\n async createModel(input) {\n return context.benchmark.measure(\"headlessCms.crud.models.createModel\", async () => {\n return createModel(input);\n });\n },\n\n async createModelFrom(modelId, userInput) {\n return context.benchmark.measure(\n \"headlessCms.crud.models.createModelFrom\",\n async () => {\n return createModelFrom(modelId, userInput);\n }\n );\n },\n async updateModel(modelId, input) {\n return context.benchmark.measure(\"headlessCms.crud.models.updateModel\", async () => {\n return updateModel(modelId, input);\n });\n },\n async deleteModel(modelId) {\n return context.benchmark.measure(\"headlessCms.crud.models.deleteModel\", async () => {\n return deleteModel(modelId);\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -7,9 +7,10 @@ import { getBaseFieldType } from "../../../utils/getBaseFieldType.js";
7
7
  import { getContentModelTitleFieldId } from "./fields/titleField.js";
8
8
  import { getContentModelDescriptionFieldId } from "./fields/descriptionField.js";
9
9
  import { getContentModelImageFieldId } from "./fields/imageField.js";
10
- import { CmsGraphQLSchemaPlugin, CmsGraphQLSchemaSorterPlugin } from "../../../plugins/index.js";
10
+ import { CmsGraphQLSchemaPlugin } from "../../../plugins/index.js";
11
11
  import { buildSchemaPlugins } from "../../../graphql/buildSchemaPlugins.js";
12
12
  import { createExecutableSchema } from "../../../graphql/createExecutableSchema.js";
13
+ import { CmsGraphQLSchemaSorter, CmsModelFieldToGraphQLRegistry } from "../../../features/graphql/index.js";
13
14
  const extractInvalidField = (model, err) => {
14
15
  const sdl = err.source?.body || "";
15
16
 
@@ -53,7 +54,7 @@ const extractInvalidField = (model, err) => {
53
54
  message: [`Model "${model.modelId}" was not saved!`, message].join("\n")
54
55
  };
55
56
  };
56
- const createValidateChildFields = plugins => {
57
+ const createValidateChildFields = registry => {
57
58
  return ({
58
59
  fields,
59
60
  originalFields
@@ -64,13 +65,13 @@ const createValidateChildFields = plugins => {
64
65
  validateFields({
65
66
  fields,
66
67
  originalFields,
67
- plugins
68
+ registry
68
69
  });
69
70
  };
70
71
  };
71
72
  const validateFields = params => {
72
73
  const {
73
- plugins,
74
+ registry,
74
75
  fields,
75
76
  originalFields
76
77
  } = params;
@@ -79,8 +80,8 @@ const validateFields = params => {
79
80
  const storageIdList = [];
80
81
  for (const field of fields) {
81
82
  const baseType = getBaseFieldType(field);
82
- const plugin = plugins.find(plugin => plugin.fieldType === baseType);
83
- if (!plugin) {
83
+ const fieldImpl = registry.get(baseType);
84
+ if (!fieldImpl) {
84
85
  throw new Error(`Cannot update content model because of the unknown "${baseType}" field.`);
85
86
  }
86
87
  /**
@@ -143,11 +144,11 @@ const validateFields = params => {
143
144
  * There might be some plugins which allow child fields.
144
145
  * We use this method to validate them as well.
145
146
  */
146
- if (!plugin.validateChildFields) {
147
+ if (!fieldImpl.validateChildFields) {
147
148
  continue;
148
149
  }
149
- const validateChildFields = createValidateChildFields(plugins);
150
- plugin.validateChildFields({
150
+ const validateChildFields = createValidateChildFields(registry);
151
+ fieldImpl.validateChildFields({
151
152
  field,
152
153
  originalField,
153
154
  validate: validateChildFields
@@ -205,9 +206,6 @@ export const validateModelFields = async params => {
205
206
  descriptionFieldId,
206
207
  imageFieldId
207
208
  } = model;
208
- const {
209
- plugins
210
- } = context;
211
209
 
212
210
  /**
213
211
  * There should be fields/locked fields in either model or data to be updated.
@@ -220,25 +218,22 @@ export const validateModelFields = async params => {
220
218
  * Let's inspect the fields of the received content model. We prevent saving of a content model if it
221
219
  * contains a field for which a "cms-model-field-to-graphql" plugin does not exist on the backend.
222
220
  */
223
- const fieldTypePlugins = plugins.byType("cms-model-field-to-graphql");
221
+ const fieldRegistry = context.container.resolve(CmsModelFieldToGraphQLRegistry);
222
+ const sorters = context.container.resolveAll(CmsGraphQLSchemaSorter);
224
223
  validateFields({
225
224
  fields,
226
225
  originalFields: original?.fields || [],
227
- plugins: fieldTypePlugins
226
+ registry: fieldRegistry
228
227
  });
229
228
  if (fields.length) {
230
- const sorterPlugins = plugins.byType(CmsGraphQLSchemaSorterPlugin.type);
231
229
  /**
232
230
  * Make sure that this model can be safely converted to a GraphQL SDL
233
231
  */
234
232
  const schema = createManageSDL({
235
233
  models,
236
234
  model,
237
- fieldTypePlugins: fieldTypePlugins.reduce((acc, pl) => ({
238
- ...acc,
239
- [pl.fieldType]: pl
240
- }), {}),
241
- sorterPlugins
235
+ fieldRegistry,
236
+ sorters
242
237
  });
243
238
  try {
244
239
  gql(schema);