@webiny/api-headless-cms 6.4.5-beta.0 → 6.6.0-alpha.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 (666) hide show
  1. package/HeadlessCmsContextualSchema.d.ts +16 -0
  2. package/HeadlessCmsContextualSchema.js +32 -0
  3. package/HeadlessCmsContextualSchema.js.map +1 -0
  4. package/HeadlessCmsEndpointConfig.d.ts +10 -0
  5. package/HeadlessCmsEndpointConfig.js +5 -0
  6. package/HeadlessCmsEndpointConfig.js.map +1 -0
  7. package/HeadlessCmsFeature.d.ts +10 -0
  8. package/HeadlessCmsFeature.js +192 -0
  9. package/HeadlessCmsFeature.js.map +1 -0
  10. package/createCmsRoute.d.ts +21 -0
  11. package/createCmsRoute.js +49 -0
  12. package/createCmsRoute.js.map +1 -0
  13. package/crud/contentEntry/entryDataValidation.d.ts +1 -1
  14. package/crud/contentEntry/entryDataValidation.js +2 -15
  15. package/crud/contentEntry/entryDataValidation.js.map +1 -1
  16. package/crud/contentEntry/references/validateEntries.d.ts +1 -1
  17. package/crud/contentEntry/references/validateEntries.js +17 -7
  18. package/crud/contentEntry/references/validateEntries.js.map +1 -1
  19. package/crud/contentEntry.crud.js +22 -20
  20. package/crud/contentEntry.crud.js.map +1 -1
  21. package/crud/contentModel.crud.js +8 -6
  22. package/crud/contentModel.crud.js.map +1 -1
  23. package/crud/contentModelGroup.crud.js +7 -5
  24. package/crud/contentModelGroup.crud.js.map +1 -1
  25. package/domain/contentModel/schemas.d.ts +6 -6
  26. package/domain/contentModel/schemas.js +1 -1
  27. package/domain/contentModel/schemas.js.map +1 -1
  28. package/domain/contentModel/validation/modelFields.js +21 -15
  29. package/domain/contentModel/validation/modelFields.js.map +1 -1
  30. package/export/abstractions.d.ts +9 -0
  31. package/export/abstractions.js +6 -0
  32. package/export/abstractions.js.map +1 -0
  33. package/export/crud/exporting.js +8 -2
  34. package/export/crud/exporting.js.map +1 -1
  35. package/export/crud/importing.js +13 -4
  36. package/export/crud/importing.js.map +1 -1
  37. package/export/crud/imports/importGroups.js +23 -23
  38. package/export/crud/imports/importGroups.js.map +1 -1
  39. package/export/crud/imports/importModels.js +25 -22
  40. package/export/crud/imports/importModels.js.map +1 -1
  41. package/export/graphql/index.d.ts +2 -3
  42. package/export/graphql/index.js +6 -10
  43. package/export/graphql/index.js.map +1 -1
  44. package/exports/api/cms/storage.d.ts +0 -1
  45. package/exports/api/cms/storage.js +0 -1
  46. package/features/contentEntry/CreateEntry/CreateEntryRepository.d.ts +6 -4
  47. package/features/contentEntry/CreateEntry/CreateEntryRepository.js +7 -8
  48. package/features/contentEntry/CreateEntry/CreateEntryRepository.js.map +1 -1
  49. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +3 -1
  50. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +2 -3
  51. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  52. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.d.ts +6 -4
  53. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js +7 -8
  54. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js.map +1 -1
  55. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +3 -1
  56. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +2 -3
  57. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  58. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.d.ts +6 -4
  59. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js +7 -8
  60. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js.map +1 -1
  61. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +3 -1
  62. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +2 -3
  63. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  64. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.d.ts +6 -4
  65. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js +7 -8
  66. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js.map +1 -1
  67. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +3 -1
  68. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -3
  69. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  70. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.d.ts +3 -3
  71. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.js +5 -5
  72. package/features/contentEntry/DeleteEntry/decorators/ForceDeleteDecorator.js.map +1 -1
  73. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.d.ts +6 -4
  74. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +7 -8
  75. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
  76. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +3 -1
  77. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +2 -3
  78. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  79. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.d.ts +6 -4
  80. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js +7 -8
  81. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js.map +1 -1
  82. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +3 -1
  83. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +2 -3
  84. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  85. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.d.ts +6 -4
  86. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js +7 -8
  87. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js.map +1 -1
  88. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.d.ts +3 -1
  89. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.js +2 -3
  90. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsUseCase.js.map +1 -1
  91. package/features/contentEntry/GetEntry/GetEntryUseCase.d.ts +3 -1
  92. package/features/contentEntry/GetEntry/GetEntryUseCase.js +2 -3
  93. package/features/contentEntry/GetEntry/GetEntryUseCase.js.map +1 -1
  94. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.d.ts +3 -1
  95. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.js +2 -3
  96. package/features/contentEntry/GetEntryById/GetEntryByIdUseCase.js.map +1 -1
  97. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.d.ts +6 -4
  98. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js +7 -8
  99. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js.map +1 -1
  100. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.d.ts +3 -1
  101. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.js +2 -3
  102. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsUseCase.js.map +1 -1
  103. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.d.ts +3 -1
  104. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.js +2 -3
  105. package/features/contentEntry/GetLatestRevisionByEntryId/BaseUseCase.js.map +1 -1
  106. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.d.ts +6 -4
  107. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js +7 -8
  108. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js.map +1 -1
  109. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.d.ts +3 -1
  110. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.js +2 -3
  111. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestDeletedRevisionByEntryIdUseCase.js.map +1 -1
  112. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.d.ts +3 -1
  113. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.js +1 -3
  114. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdIncludingDeletedUseCase.js.map +1 -1
  115. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.d.ts +3 -1
  116. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.js +2 -3
  117. package/features/contentEntry/GetLatestRevisionByEntryId/variations/GetLatestRevisionByEntryIdUseCase.js.map +1 -1
  118. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.d.ts +3 -1
  119. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.js +2 -3
  120. package/features/contentEntry/GetPreviousRevisionByEntryId/BaseUseCase.js.map +1 -1
  121. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.d.ts +6 -4
  122. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js +7 -8
  123. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js.map +1 -1
  124. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.d.ts +3 -1
  125. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.js +2 -3
  126. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdUseCase.js.map +1 -1
  127. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.d.ts +6 -4
  128. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js +7 -8
  129. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js.map +1 -1
  130. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.d.ts +3 -1
  131. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.js +2 -3
  132. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsUseCase.js.map +1 -1
  133. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.d.ts +6 -4
  134. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js +7 -8
  135. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js.map +1 -1
  136. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.d.ts +3 -1
  137. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.js +2 -3
  138. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdUseCase.js.map +1 -1
  139. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.d.ts +6 -4
  140. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js +7 -8
  141. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js.map +1 -1
  142. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.d.ts +3 -1
  143. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.js +1 -3
  144. package/features/contentEntry/GetRevisionById/GetRevisionByIdUseCase.js.map +1 -1
  145. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.d.ts +6 -4
  146. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js +7 -8
  147. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js.map +1 -1
  148. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.d.ts +3 -1
  149. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.js +2 -3
  150. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdUseCase.js.map +1 -1
  151. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js +1 -3
  152. package/features/contentEntry/GetSingletonEntry/GetSingletonEntryUseCase.js.map +1 -1
  153. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.d.ts +6 -4
  154. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js +7 -8
  155. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js.map +1 -1
  156. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +6 -2
  157. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +8 -6
  158. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  159. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.d.ts +3 -1
  160. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.js +1 -3
  161. package/features/contentEntry/ListEntries/ListDeletedEntriesUseCase.js.map +1 -1
  162. package/features/contentEntry/ListEntries/ListEntriesRepository.d.ts +6 -4
  163. package/features/contentEntry/ListEntries/ListEntriesRepository.js +7 -8
  164. package/features/contentEntry/ListEntries/ListEntriesRepository.js.map +1 -1
  165. package/features/contentEntry/ListEntries/ListEntriesUseCase.d.ts +3 -1
  166. package/features/contentEntry/ListEntries/ListEntriesUseCase.js +2 -3
  167. package/features/contentEntry/ListEntries/ListEntriesUseCase.js.map +1 -1
  168. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.d.ts +3 -1
  169. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.js +1 -3
  170. package/features/contentEntry/ListEntries/ListLatestEntriesUseCase.js.map +1 -1
  171. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.d.ts +3 -1
  172. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.js +1 -3
  173. package/features/contentEntry/ListEntries/ListPublishedEntriesUseCase.js.map +1 -1
  174. package/features/contentEntry/MoveEntry/MoveEntryRepository.d.ts +6 -4
  175. package/features/contentEntry/MoveEntry/MoveEntryRepository.js +7 -8
  176. package/features/contentEntry/MoveEntry/MoveEntryRepository.js.map +1 -1
  177. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +3 -1
  178. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +2 -3
  179. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  180. package/features/contentEntry/PublishEntry/PublishEntryRepository.d.ts +6 -4
  181. package/features/contentEntry/PublishEntry/PublishEntryRepository.js +7 -8
  182. package/features/contentEntry/PublishEntry/PublishEntryRepository.js.map +1 -1
  183. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +3 -1
  184. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -3
  185. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  186. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.d.ts +8 -4
  187. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js +11 -9
  188. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js.map +1 -1
  189. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +3 -1
  190. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -3
  191. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  192. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.d.ts +6 -4
  193. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js +7 -8
  194. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js.map +1 -1
  195. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +3 -1
  196. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -3
  197. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  198. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.d.ts +6 -4
  199. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js +7 -8
  200. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js.map +1 -1
  201. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +3 -1
  202. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -3
  203. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  204. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.d.ts +6 -4
  205. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js +7 -8
  206. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js.map +1 -1
  207. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +3 -1
  208. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +2 -3
  209. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  210. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +3 -1
  211. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -3
  212. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  213. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.d.ts +3 -1
  214. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.js +2 -3
  215. package/features/contentEntry/ValidateEntry/ValidateEntryUseCase.js.map +1 -1
  216. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
  217. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +2 -4
  218. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  219. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +4 -4
  220. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +4 -8
  221. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  222. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.d.ts +3 -1
  223. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js +1 -3
  224. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js.map +1 -1
  225. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.d.ts +3 -1
  226. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js +1 -3
  227. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js.map +1 -1
  228. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.d.ts +3 -1
  229. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js +1 -3
  230. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js.map +1 -1
  231. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +3 -1
  232. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +2 -4
  233. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  234. package/features/contentModel/ContentModelFeature.js +2 -0
  235. package/features/contentModel/ContentModelFeature.js.map +1 -1
  236. package/features/contentModel/CreateModel/CreateModelRepository.d.ts +4 -3
  237. package/features/contentModel/CreateModel/CreateModelRepository.js +6 -5
  238. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  239. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +4 -3
  240. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +6 -5
  241. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  242. package/features/contentModel/DeleteModel/DeleteModelRepository.d.ts +3 -3
  243. package/features/contentModel/DeleteModel/DeleteModelRepository.js +5 -5
  244. package/features/contentModel/DeleteModel/DeleteModelRepository.js.map +1 -1
  245. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.d.ts +1 -0
  246. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js +11 -8
  247. package/features/contentModel/DeleteModel/DeleteModelWithEntryCleanup.js.map +1 -1
  248. package/features/contentModel/UpdateModel/UpdateModelRepository.d.ts +6 -3
  249. package/features/contentModel/UpdateModel/UpdateModelRepository.js +11 -7
  250. package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
  251. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.d.ts +16 -0
  252. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +51 -0
  253. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -0
  254. package/features/contentModel/ValuesSelectionGenerator/abstractions.d.ts +8 -0
  255. package/features/contentModel/ValuesSelectionGenerator/abstractions.js +5 -0
  256. package/features/contentModel/ValuesSelectionGenerator/abstractions.js.map +1 -0
  257. package/features/contentModel/ValuesSelectionGenerator/feature.d.ts +4 -0
  258. package/features/contentModel/ValuesSelectionGenerator/feature.js +11 -0
  259. package/features/contentModel/ValuesSelectionGenerator/feature.js.map +1 -0
  260. package/features/contentModel/ValuesSelectionGenerator/index.d.ts +1 -0
  261. package/features/contentModel/ValuesSelectionGenerator/index.js +1 -0
  262. package/features/contentModel/shared/ModelsFetcher.d.ts +3 -3
  263. package/features/contentModel/shared/ModelsFetcher.js +5 -5
  264. package/features/contentModel/shared/ModelsFetcher.js.map +1 -1
  265. package/features/contentModel/shared/PluginModelsProvider.d.ts +5 -4
  266. package/features/contentModel/shared/PluginModelsProvider.js +11 -8
  267. package/features/contentModel/shared/PluginModelsProvider.js.map +1 -1
  268. package/features/contentModel/shared/abstractions.d.ts +10 -0
  269. package/features/contentModel/shared/abstractions.js +2 -1
  270. package/features/contentModel/shared/abstractions.js.map +1 -1
  271. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +8 -4
  272. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +13 -11
  273. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
  274. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +3 -1
  275. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +2 -3
  276. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
  277. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.d.ts +8 -4
  278. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js +11 -9
  279. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js.map +1 -1
  280. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.d.ts +3 -1
  281. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js +2 -3
  282. package/features/contentModelGroup/DeleteGroup/DeleteGroupUseCase.js.map +1 -1
  283. package/features/contentModelGroup/GetGroup/GetGroupRepository.d.ts +6 -4
  284. package/features/contentModelGroup/GetGroup/GetGroupRepository.js +9 -9
  285. package/features/contentModelGroup/GetGroup/GetGroupRepository.js.map +1 -1
  286. package/features/contentModelGroup/GetGroup/GetGroupUseCase.d.ts +3 -1
  287. package/features/contentModelGroup/GetGroup/GetGroupUseCase.js +2 -3
  288. package/features/contentModelGroup/GetGroup/GetGroupUseCase.js.map +1 -1
  289. package/features/contentModelGroup/ListGroups/ListGroupsRepository.d.ts +6 -4
  290. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js +9 -9
  291. package/features/contentModelGroup/ListGroups/ListGroupsRepository.js.map +1 -1
  292. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.d.ts +3 -1
  293. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.js +2 -3
  294. package/features/contentModelGroup/ListGroups/ListGroupsUseCase.js.map +1 -1
  295. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.d.ts +6 -4
  296. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js +7 -8
  297. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js.map +1 -1
  298. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.d.ts +3 -1
  299. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -3
  300. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
  301. package/features/contentModelGroup/shared/PluginGroupsProvider.d.ts +6 -4
  302. package/features/contentModelGroup/shared/PluginGroupsProvider.js +13 -11
  303. package/features/contentModelGroup/shared/PluginGroupsProvider.js.map +1 -1
  304. package/features/contentModelGroup/shared/abstractions.d.ts +10 -0
  305. package/features/contentModelGroup/shared/abstractions.js +2 -1
  306. package/features/contentModelGroup/shared/abstractions.js.map +1 -1
  307. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.d.ts +2 -2
  308. package/features/graphql/fields/abstractions/CmsModelFieldToGraphQL.js.map +1 -1
  309. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
  310. package/features/graphql/fields/base/RefToGraphQL.d.ts +1 -1
  311. package/features/graphql/fields/base/RefToGraphQL.js +3 -1
  312. package/features/graphql/fields/base/RefToGraphQL.js.map +1 -1
  313. package/features/graphql/fields/base/richText/richTextResolver.d.ts +1 -1
  314. package/features/graphql/fields/base/richText/richTextResolver.js.map +1 -1
  315. package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +1 -3
  316. package/features/modelBuilder/fields/BaseFieldBuilder.js +0 -4
  317. package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -1
  318. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +12 -18
  319. package/features/modelBuilder/fields/DataFieldBuilder.js +1 -2
  320. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -1
  321. package/features/modelBuilder/fields/DynamicZoneFieldType.js +3 -8
  322. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  323. package/features/modelBuilder/fields/TextFieldType.d.ts +3 -1
  324. package/features/modelBuilder/fields/TextFieldType.js +1 -3
  325. package/features/modelBuilder/fields/TextFieldType.js.map +1 -1
  326. package/features/modelBuilder/fields/UiAlertFieldType.js +1 -2
  327. package/features/modelBuilder/fields/UiAlertFieldType.js.map +1 -1
  328. package/features/modelBuilder/fields/UiSeparatorFieldType.js +1 -2
  329. package/features/modelBuilder/fields/UiSeparatorFieldType.js.map +1 -1
  330. package/features/modelBuilder/fields/UiTabsFieldType.d.ts +1 -2
  331. package/features/modelBuilder/fields/UiTabsFieldType.js +3 -6
  332. package/features/modelBuilder/fields/UiTabsFieldType.js.map +1 -1
  333. package/features/shared/abstractions.d.ts +11 -15
  334. package/features/shared/abstractions.js +3 -3
  335. package/features/shared/abstractions.js.map +1 -1
  336. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.d.ts +8 -0
  337. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js +5 -0
  338. package/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js.map +1 -0
  339. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.d.ts +8 -0
  340. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.js +5 -0
  341. package/features/shared/storageOperations/entry/CreateEntryStorageOperation.js.map +1 -0
  342. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.d.ts +8 -0
  343. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js +5 -0
  344. package/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js.map +1 -0
  345. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.d.ts +8 -0
  346. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js +5 -0
  347. package/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js.map +1 -0
  348. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.d.ts +8 -0
  349. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js +5 -0
  350. package/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js.map +1 -0
  351. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.d.ts +8 -0
  352. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.js +5 -0
  353. package/features/shared/storageOperations/entry/GetEntriesByIdsStorageOperation.js.map +1 -0
  354. package/features/shared/storageOperations/entry/GetEntryStorageOperation.d.ts +8 -0
  355. package/features/shared/storageOperations/entry/GetEntryStorageOperation.js +5 -0
  356. package/features/shared/storageOperations/entry/GetEntryStorageOperation.js.map +1 -0
  357. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.d.ts +8 -0
  358. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.js +5 -0
  359. package/features/shared/storageOperations/entry/GetLatestEntriesByIdsStorageOperation.js.map +1 -0
  360. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.d.ts +8 -0
  361. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.js +5 -0
  362. package/features/shared/storageOperations/entry/GetLatestRevisionByEntryIdStorageOperation.js.map +1 -0
  363. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.d.ts +8 -0
  364. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.js +5 -0
  365. package/features/shared/storageOperations/entry/GetPreviousRevisionStorageOperation.js.map +1 -0
  366. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.d.ts +8 -0
  367. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.js +5 -0
  368. package/features/shared/storageOperations/entry/GetPublishedEntriesByIdsStorageOperation.js.map +1 -0
  369. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.d.ts +8 -0
  370. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.js +5 -0
  371. package/features/shared/storageOperations/entry/GetPublishedRevisionByEntryIdStorageOperation.js.map +1 -0
  372. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.d.ts +8 -0
  373. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.js +5 -0
  374. package/features/shared/storageOperations/entry/GetRevisionByIdStorageOperation.js.map +1 -0
  375. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.d.ts +8 -0
  376. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.js +5 -0
  377. package/features/shared/storageOperations/entry/GetRevisionsStorageOperation.js.map +1 -0
  378. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.d.ts +8 -0
  379. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js +5 -0
  380. package/features/shared/storageOperations/entry/GetUniqueFieldValuesStorageOperation.js.map +1 -0
  381. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.d.ts +8 -0
  382. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.js +5 -0
  383. package/features/shared/storageOperations/entry/ListEntriesStorageOperation.js.map +1 -0
  384. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.d.ts +8 -0
  385. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.js +5 -0
  386. package/features/shared/storageOperations/entry/MoveEntryStorageOperation.js.map +1 -0
  387. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.d.ts +8 -0
  388. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.js +5 -0
  389. package/features/shared/storageOperations/entry/MoveToBinStorageOperation.js.map +1 -0
  390. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.d.ts +8 -0
  391. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.js +5 -0
  392. package/features/shared/storageOperations/entry/PublishEntryStorageOperation.js.map +1 -0
  393. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.d.ts +8 -0
  394. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js +5 -0
  395. package/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js.map +1 -0
  396. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.d.ts +8 -0
  397. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js +5 -0
  398. package/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js.map +1 -0
  399. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.d.ts +8 -0
  400. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js +5 -0
  401. package/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js.map +1 -0
  402. package/features/shared/storageOperations/group/CreateGroupStorageOperation.d.ts +8 -0
  403. package/features/shared/storageOperations/group/CreateGroupStorageOperation.js +5 -0
  404. package/features/shared/storageOperations/group/CreateGroupStorageOperation.js.map +1 -0
  405. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.d.ts +8 -0
  406. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.js +5 -0
  407. package/features/shared/storageOperations/group/DeleteGroupStorageOperation.js.map +1 -0
  408. package/features/shared/storageOperations/group/GetGroupStorageOperation.d.ts +8 -0
  409. package/features/shared/storageOperations/group/GetGroupStorageOperation.js +5 -0
  410. package/features/shared/storageOperations/group/GetGroupStorageOperation.js.map +1 -0
  411. package/features/shared/storageOperations/group/ListGroupsStorageOperation.d.ts +8 -0
  412. package/features/shared/storageOperations/group/ListGroupsStorageOperation.js +5 -0
  413. package/features/shared/storageOperations/group/ListGroupsStorageOperation.js.map +1 -0
  414. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.d.ts +8 -0
  415. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.js +5 -0
  416. package/features/shared/storageOperations/group/UpdateGroupStorageOperation.js.map +1 -0
  417. package/features/shared/storageOperations/index.d.ts +32 -0
  418. package/features/shared/storageOperations/index.js +32 -0
  419. package/features/shared/storageOperations/model/CreateModelStorageOperation.d.ts +8 -0
  420. package/features/shared/storageOperations/model/CreateModelStorageOperation.js +5 -0
  421. package/features/shared/storageOperations/model/CreateModelStorageOperation.js.map +1 -0
  422. package/features/shared/storageOperations/model/DeleteModelStorageOperation.d.ts +8 -0
  423. package/features/shared/storageOperations/model/DeleteModelStorageOperation.js +5 -0
  424. package/features/shared/storageOperations/model/DeleteModelStorageOperation.js.map +1 -0
  425. package/features/shared/storageOperations/model/GetModelStorageOperation.d.ts +8 -0
  426. package/features/shared/storageOperations/model/GetModelStorageOperation.js +5 -0
  427. package/features/shared/storageOperations/model/GetModelStorageOperation.js.map +1 -0
  428. package/features/shared/storageOperations/model/ListModelsStorageOperation.d.ts +8 -0
  429. package/features/shared/storageOperations/model/ListModelsStorageOperation.js +5 -0
  430. package/features/shared/storageOperations/model/ListModelsStorageOperation.js.map +1 -0
  431. package/features/shared/storageOperations/model/UpdateModelStorageOperation.d.ts +8 -0
  432. package/features/shared/storageOperations/model/UpdateModelStorageOperation.js +5 -0
  433. package/features/shared/storageOperations/model/UpdateModelStorageOperation.js.map +1 -0
  434. package/fieldConverters/abstractions.d.ts +14 -0
  435. package/fieldConverters/abstractions.js +13 -0
  436. package/fieldConverters/abstractions.js.map +1 -0
  437. package/fieldConverters/index.d.ts +1 -1
  438. package/graphql/CmsGraphQLSchemaFactory.d.ts +8 -0
  439. package/graphql/CmsGraphQLSchemaFactory.js +5 -0
  440. package/graphql/CmsGraphQLSchemaFactory.js.map +1 -0
  441. package/graphql/CmsSchemaExecutor.d.ts +10 -0
  442. package/graphql/CmsSchemaExecutor.js +5 -0
  443. package/graphql/CmsSchemaExecutor.js.map +1 -0
  444. package/graphql/buildSchemaPlugins.d.ts +2 -1
  445. package/graphql/buildSchemaPlugins.js +1 -3
  446. package/graphql/buildSchemaPlugins.js.map +1 -1
  447. package/graphql/checkEndpointAccess.js +5 -2
  448. package/graphql/checkEndpointAccess.js.map +1 -1
  449. package/graphql/createExecutableSchema.d.ts +1 -1
  450. package/graphql/createExecutableSchema.js +1 -1
  451. package/graphql/createExecutableSchema.js.map +1 -1
  452. package/graphql/generateSchema.d.ts +2 -1
  453. package/graphql/generateSchema.js +14 -5
  454. package/graphql/generateSchema.js.map +1 -1
  455. package/graphql/getSchema.js +7 -2
  456. package/graphql/getSchema.js.map +1 -1
  457. package/graphql/scalars/RevisionIdScalarPlugin.d.ts +1 -1
  458. package/graphql/scalars/RevisionIdScalarPlugin.js.map +1 -1
  459. package/graphql/schema/baseContentSchema.d.ts +1 -6
  460. package/graphql/schema/baseContentSchema.js +5 -8
  461. package/graphql/schema/baseContentSchema.js.map +1 -1
  462. package/graphql/schema/baseSchema.d.ts +2 -2
  463. package/graphql/schema/baseSchema.js +6 -41
  464. package/graphql/schema/baseSchema.js.map +1 -1
  465. package/graphql/schema/cms/CmsBaseErrorTypeFactory.d.ts +14 -0
  466. package/graphql/schema/cms/CmsBaseErrorTypeFactory.js +21 -0
  467. package/graphql/schema/cms/CmsBaseErrorTypeFactory.js.map +1 -0
  468. package/graphql/schema/cms/createEntryResolver.js +2 -2
  469. package/graphql/schema/cms/createEntryResolver.js.map +1 -1
  470. package/graphql/schema/cms/deleteEntryResolver.js +2 -2
  471. package/graphql/schema/cms/deleteEntryResolver.js.map +1 -1
  472. package/graphql/schema/cms/getEntryResolver.js +2 -2
  473. package/graphql/schema/cms/getEntryResolver.js.map +1 -1
  474. package/graphql/schema/cms/helpers/getModel.d.ts +0 -3
  475. package/graphql/schema/cms/helpers/getModel.js +5 -3
  476. package/graphql/schema/cms/helpers/getModel.js.map +1 -1
  477. package/graphql/schema/cms/helpers/transformWhereToNested.js +17 -39
  478. package/graphql/schema/cms/helpers/transformWhereToNested.js.map +1 -1
  479. package/graphql/schema/cms/listEntriesResolver.js +2 -2
  480. package/graphql/schema/cms/listEntriesResolver.js.map +1 -1
  481. package/graphql/schema/cms/publishEntryResolver.js +2 -2
  482. package/graphql/schema/cms/publishEntryResolver.js.map +1 -1
  483. package/graphql/schema/cms/resolvers/createEntry.d.ts +2 -2
  484. package/graphql/schema/cms/resolvers/createEntry.js +1 -1
  485. package/graphql/schema/cms/resolvers/createEntry.js.map +1 -1
  486. package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +2 -2
  487. package/graphql/schema/cms/resolvers/deleteEntryRevision.js +1 -1
  488. package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -1
  489. package/graphql/schema/cms/resolvers/getEntry.d.ts +2 -2
  490. package/graphql/schema/cms/resolvers/getEntry.js +1 -1
  491. package/graphql/schema/cms/resolvers/getEntry.js.map +1 -1
  492. package/graphql/schema/cms/resolvers/listEntries.d.ts +2 -2
  493. package/graphql/schema/cms/resolvers/listEntries.js +1 -1
  494. package/graphql/schema/cms/resolvers/listEntries.js.map +1 -1
  495. package/graphql/schema/cms/resolvers/mutationCms.d.ts +2 -2
  496. package/graphql/schema/cms/resolvers/mutationCms.js +1 -1
  497. package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -1
  498. package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +2 -2
  499. package/graphql/schema/cms/resolvers/publishEntryRevision.js +1 -1
  500. package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -1
  501. package/graphql/schema/cms/resolvers/queryCms.d.ts +2 -2
  502. package/graphql/schema/cms/resolvers/queryCms.js +1 -1
  503. package/graphql/schema/cms/resolvers/queryCms.js.map +1 -1
  504. package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +2 -2
  505. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +1 -1
  506. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -1
  507. package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +2 -2
  508. package/graphql/schema/cms/resolvers/updateEntryRevision.js +1 -1
  509. package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -1
  510. package/graphql/schema/cms/typeDefs/mutation.d.ts +2 -2
  511. package/graphql/schema/cms/typeDefs/mutation.js +1 -1
  512. package/graphql/schema/cms/typeDefs/mutation.js.map +1 -1
  513. package/graphql/schema/cms/typeDefs/query.d.ts +2 -2
  514. package/graphql/schema/cms/typeDefs/query.js +1 -1
  515. package/graphql/schema/cms/typeDefs/query.js.map +1 -1
  516. package/graphql/schema/cms/typeDefs/responses.d.ts +2 -2
  517. package/graphql/schema/cms/typeDefs/responses.js +1 -1
  518. package/graphql/schema/cms/typeDefs/responses.js.map +1 -1
  519. package/graphql/schema/cms/unpublishEntryResolver.js +2 -2
  520. package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -1
  521. package/graphql/schema/cms/updateEntryResolver.js +2 -2
  522. package/graphql/schema/cms/updateEntryResolver.js.map +1 -1
  523. package/graphql/schema/contentEntries.js +43 -32
  524. package/graphql/schema/contentEntries.js.map +1 -1
  525. package/graphql/schema/contentModelGroups.js +39 -18
  526. package/graphql/schema/contentModelGroups.js.map +1 -1
  527. package/graphql/schema/contentModels.js +37 -16
  528. package/graphql/schema/contentModels.js.map +1 -1
  529. package/graphql/schema/createFieldResolvers.d.ts +1 -1
  530. package/graphql/schema/createFieldResolvers.js.map +1 -1
  531. package/graphql/schema/createManageResolvers.js +4 -2
  532. package/graphql/schema/createManageResolvers.js.map +1 -1
  533. package/graphql/schema/resolvers/manage/resolveCreate.js +5 -3
  534. package/graphql/schema/resolvers/manage/resolveCreate.js.map +1 -1
  535. package/graphql/schema/resolvers/manage/resolveCreateFrom.js +5 -3
  536. package/graphql/schema/resolvers/manage/resolveCreateFrom.js.map +1 -1
  537. package/graphql/schema/resolvers/manage/resolveDelete.js +9 -4
  538. package/graphql/schema/resolvers/manage/resolveDelete.js.map +1 -1
  539. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js +5 -3
  540. package/graphql/schema/resolvers/manage/resolveDeleteMultiple.js.map +1 -1
  541. package/graphql/schema/resolvers/manage/resolveGet.js +11 -6
  542. package/graphql/schema/resolvers/manage/resolveGet.js.map +1 -1
  543. package/graphql/schema/resolvers/manage/resolveGetByIds.js +5 -3
  544. package/graphql/schema/resolvers/manage/resolveGetByIds.js.map +1 -1
  545. package/graphql/schema/resolvers/manage/resolveGetRevisions.js +5 -3
  546. package/graphql/schema/resolvers/manage/resolveGetRevisions.js.map +1 -1
  547. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js +5 -3
  548. package/graphql/schema/resolvers/manage/resolveGetUniqueFieldValues.js.map +1 -1
  549. package/graphql/schema/resolvers/manage/resolveList.js +5 -3
  550. package/graphql/schema/resolvers/manage/resolveList.js.map +1 -1
  551. package/graphql/schema/resolvers/manage/resolveListDeleted.js +5 -3
  552. package/graphql/schema/resolvers/manage/resolveListDeleted.js.map +1 -1
  553. package/graphql/schema/resolvers/manage/resolveMove.js +4 -2
  554. package/graphql/schema/resolvers/manage/resolveMove.js.map +1 -1
  555. package/graphql/schema/resolvers/manage/resolvePublish.js +5 -3
  556. package/graphql/schema/resolvers/manage/resolvePublish.js.map +1 -1
  557. package/graphql/schema/resolvers/manage/resolveRepublish.js +5 -3
  558. package/graphql/schema/resolvers/manage/resolveRepublish.js.map +1 -1
  559. package/graphql/schema/resolvers/manage/resolveRestoreFromBin.js +5 -3
  560. package/graphql/schema/resolvers/manage/resolveRestoreFromBin.js.map +1 -1
  561. package/graphql/schema/resolvers/manage/resolveUnpublish.js +5 -3
  562. package/graphql/schema/resolvers/manage/resolveUnpublish.js.map +1 -1
  563. package/graphql/schema/resolvers/manage/resolveUpdate.js +5 -3
  564. package/graphql/schema/resolvers/manage/resolveUpdate.js.map +1 -1
  565. package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js +5 -3
  566. package/graphql/schema/resolvers/manage/resolveUpdateRevisionDescription.js.map +1 -1
  567. package/graphql/schema/resolvers/manage/resolveValidate.js +5 -3
  568. package/graphql/schema/resolvers/manage/resolveValidate.js.map +1 -1
  569. package/graphql/schema/resolvers/preview/resolveGet.js +6 -3
  570. package/graphql/schema/resolvers/preview/resolveGet.js.map +1 -1
  571. package/graphql/schema/resolvers/preview/resolveList.js +5 -3
  572. package/graphql/schema/resolvers/preview/resolveList.js.map +1 -1
  573. package/graphql/schema/resolvers/read/resolveGet.js +5 -2
  574. package/graphql/schema/resolvers/read/resolveGet.js.map +1 -1
  575. package/graphql/schema/resolvers/read/resolveList.js +5 -3
  576. package/graphql/schema/resolvers/read/resolveList.js.map +1 -1
  577. package/graphql/schema/resolvers/singular/resolveGet.js +1 -1
  578. package/graphql/schema/resolvers/singular/resolveGet.js.map +1 -1
  579. package/graphql/schema/resolvers/singular/resolveUpdate.js +1 -1
  580. package/graphql/schema/resolvers/singular/resolveUpdate.js.map +1 -1
  581. package/graphql/schema/schemaPlugins.d.ts +2 -1
  582. package/graphql/schema/schemaPlugins.js +2 -4
  583. package/graphql/schema/schemaPlugins.js.map +1 -1
  584. package/index.d.ts +7 -6
  585. package/index.js +4 -22
  586. package/legacy/abstractions.js.map +1 -1
  587. package/package.json +22 -27
  588. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.d.ts +2 -2
  589. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.js +1 -1
  590. package/plugins/CmsGraphQLSchemaPlugin/CmsGraphQLSchemaPlugin.js.map +1 -1
  591. package/plugins/index.d.ts +0 -1
  592. package/plugins/index.js +0 -1
  593. package/types/fields/dynamicZoneField.d.ts +2 -2
  594. package/types/modelField.d.ts +1 -1
  595. package/types/types.d.ts +10 -183
  596. package/types/types.js.map +1 -1
  597. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.d.ts +28 -0
  598. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js +324 -0
  599. package/utils/contentModelToJsonSchema/CmsModelToJsonSchemaConverter.js.map +1 -0
  600. package/utils/contentModelToJsonSchema/index.d.ts +2 -0
  601. package/utils/contentModelToJsonSchema/index.js +1 -0
  602. package/utils/contentModelToJsonSchema/types.d.ts +24 -0
  603. package/utils/contentModelToJsonSchema/types.js +0 -0
  604. package/utils/converters/ConverterCollection.d.ts +2 -2
  605. package/utils/converters/ConverterCollection.js +1 -3
  606. package/utils/converters/ConverterCollection.js.map +1 -1
  607. package/utils/converters/valueKeyFromStorageConverter.d.ts +2 -2
  608. package/utils/converters/valueKeyFromStorageConverter.js +2 -2
  609. package/utils/converters/valueKeyFromStorageConverter.js.map +1 -1
  610. package/utils/converters/valueKeyStorageConverter.js +4 -2
  611. package/utils/converters/valueKeyStorageConverter.js.map +1 -1
  612. package/utils/converters/valueKeyToStorageConverter.d.ts +2 -2
  613. package/utils/converters/valueKeyToStorageConverter.js +2 -2
  614. package/utils/converters/valueKeyToStorageConverter.js.map +1 -1
  615. package/utils/getSchemaFromFieldPlugins.d.ts +2 -2
  616. package/utils/getSchemaFromFieldPlugins.js.map +1 -1
  617. package/utils/index.d.ts +1 -0
  618. package/utils/index.js +1 -0
  619. package/utils/isHeadlessCmsReady.d.ts +1 -1
  620. package/utils/isHeadlessCmsReady.js +3 -2
  621. package/utils/isHeadlessCmsReady.js.map +1 -1
  622. package/abstractions/entryHooks/OnEntryBeforeCreate.d.ts +0 -8
  623. package/abstractions/entryHooks/OnEntryBeforeCreate.js +0 -5
  624. package/abstractions/entryHooks/OnEntryBeforeCreate.js.map +0 -1
  625. package/abstractions/entryHooks/index.d.ts +0 -1
  626. package/abstractions/entryHooks/index.js +0 -1
  627. package/abstractions/index.d.ts +0 -1
  628. package/abstractions/index.js +0 -1
  629. package/context.d.ts +0 -3
  630. package/context.js +0 -131
  631. package/context.js.map +0 -1
  632. package/extensions/entryHooks/OnEntryBeforeCreate.d.ts +0 -4
  633. package/extensions/entryHooks/OnEntryBeforeCreate.js +0 -21
  634. package/extensions/entryHooks/OnEntryBeforeCreate.js.map +0 -1
  635. package/extensions/entryHooks/index.d.ts +0 -1
  636. package/extensions/entryHooks/index.js +0 -1
  637. package/extensions/index.d.ts +0 -5
  638. package/extensions/index.js +0 -7
  639. package/extensions/index.js.map +0 -1
  640. package/graphql/graphQLHandlerFactory.d.ts +0 -5
  641. package/graphql/graphQLHandlerFactory.js +0 -22
  642. package/graphql/graphQLHandlerFactory.js.map +0 -1
  643. package/graphql/handleRequest.d.ts +0 -11
  644. package/graphql/handleRequest.js +0 -62
  645. package/graphql/handleRequest.js.map +0 -1
  646. package/graphql/index.d.ts +0 -4
  647. package/graphql/index.js +0 -11
  648. package/graphql/index.js.map +0 -1
  649. package/graphql/schema/cms/index.d.ts +0 -2
  650. package/graphql/schema/cms/index.js +0 -24
  651. package/graphql/schema/cms/index.js.map +0 -1
  652. package/index.js.map +0 -1
  653. package/parameters/context.d.ts +0 -2
  654. package/parameters/context.js +0 -7
  655. package/parameters/context.js.map +0 -1
  656. package/parameters/header.d.ts +0 -2
  657. package/parameters/header.js +0 -13
  658. package/parameters/header.js.map +0 -1
  659. package/parameters/index.d.ts +0 -3
  660. package/parameters/index.js +0 -3
  661. package/parameters/path.d.ts +0 -2
  662. package/parameters/path.js +0 -12
  663. package/parameters/path.js.map +0 -1
  664. package/plugins/CmsParametersPlugin.d.ts +0 -18
  665. package/plugins/CmsParametersPlugin.js +0 -16
  666. package/plugins/CmsParametersPlugin.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ import type { IGraphQLContextualSchema } from "@webiny/api-graphql";
2
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
+ import type { IHeadlessCmsEndpointConfig } from "./HeadlessCmsEndpointConfig.js";
5
+ import type { GraphQLSchema } from "graphql";
6
+ declare class HeadlessCmsContextualSchemaImpl implements IGraphQLContextualSchema {
7
+ private tenantContext;
8
+ private identityContext;
9
+ private config;
10
+ constructor(tenantContext: TenantContext.Interface, identityContext: IdentityContext.Interface, config: IHeadlessCmsEndpointConfig);
11
+ build(ctx: Record<string, any>): Promise<GraphQLSchema>;
12
+ }
13
+ export declare const HeadlessCmsContextualSchema: typeof HeadlessCmsContextualSchemaImpl & {
14
+ __abstraction: import("@webiny/di").Abstraction<IGraphQLContextualSchema>;
15
+ };
16
+ export {};
@@ -0,0 +1,32 @@
1
+ import { GraphQLContextualSchema } from "@webiny/api-graphql";
2
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
+ import { getSchema } from "./graphql/getSchema.js";
5
+ import { HeadlessCmsEndpointConfig } from "./HeadlessCmsEndpointConfig.js";
6
+ class HeadlessCmsContextualSchemaImpl {
7
+ constructor(tenantContext, identityContext, config){
8
+ this.tenantContext = tenantContext;
9
+ this.identityContext = identityContext;
10
+ this.config = config;
11
+ }
12
+ async build(ctx) {
13
+ const cmsCtx = ctx;
14
+ const getTenant = ()=>this.tenantContext.getTenant();
15
+ return this.identityContext.withoutAuthorization(()=>getSchema({
16
+ context: cmsCtx,
17
+ getTenant,
18
+ type: this.config.type
19
+ }));
20
+ }
21
+ }
22
+ const HeadlessCmsContextualSchema = GraphQLContextualSchema.createImplementation({
23
+ implementation: HeadlessCmsContextualSchemaImpl,
24
+ dependencies: [
25
+ TenantContext,
26
+ IdentityContext,
27
+ HeadlessCmsEndpointConfig
28
+ ]
29
+ });
30
+ export { HeadlessCmsContextualSchema };
31
+
32
+ //# sourceMappingURL=HeadlessCmsContextualSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessCmsContextualSchema.js","sources":["../src/HeadlessCmsContextualSchema.ts"],"sourcesContent":["import { GraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport type { IGraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { HeadlessCmsEndpointConfig } from \"~/HeadlessCmsEndpointConfig.js\";\nimport type { IHeadlessCmsEndpointConfig } from \"~/HeadlessCmsEndpointConfig.js\";\nimport type { CmsContext } from \"~/types/index.js\";\nimport type { GraphQLSchema } from \"graphql\";\n\nclass HeadlessCmsContextualSchemaImpl implements IGraphQLContextualSchema {\n constructor(\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface,\n private config: IHeadlessCmsEndpointConfig\n ) {}\n\n async build(ctx: Record<string, any>): Promise<GraphQLSchema> {\n const cmsCtx = ctx as CmsContext;\n const getTenant = () => this.tenantContext.getTenant();\n\n return this.identityContext.withoutAuthorization(() => {\n return getSchema({ context: cmsCtx, getTenant, type: this.config.type });\n });\n }\n}\n\nexport const HeadlessCmsContextualSchema = GraphQLContextualSchema.createImplementation({\n implementation: HeadlessCmsContextualSchemaImpl,\n dependencies: [TenantContext, IdentityContext, HeadlessCmsEndpointConfig]\n});\n"],"names":["HeadlessCmsContextualSchemaImpl","tenantContext","identityContext","config","ctx","cmsCtx","getTenant","getSchema","HeadlessCmsContextualSchema","GraphQLContextualSchema","TenantContext","IdentityContext","HeadlessCmsEndpointConfig"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,eAA0C,EAC1CC,MAAkC,CAC5C;aAHUF,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,MAAMC,GAAwB,EAA0B;QAC1D,MAAMC,SAASD;QACf,MAAME,YAAY,IAAM,IAAI,CAAC,aAAa,CAAC,SAAS;QAEpD,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IACtCC,UAAU;gBAAE,SAASF;gBAAQC;gBAAW,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;YAAC;IAE9E;AACJ;AAEO,MAAME,8BAA8BC,wBAAwB,oBAAoB,CAAC;IACpF,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAiBC;KAA0B;AAC7E"}
@@ -0,0 +1,10 @@
1
+ import { Abstraction } from "@webiny/di";
2
+ import type { ApiEndpoint } from "./types/index.js";
3
+ /**
4
+ * The CMS endpoint type ("manage" | "read" | "preview") for the current handler, set in
5
+ * HeadlessCmsFeature.register() and read by the schema builders / contextual schema.
6
+ */
7
+ export interface IHeadlessCmsEndpointConfig {
8
+ type: ApiEndpoint;
9
+ }
10
+ export declare const HeadlessCmsEndpointConfig: Abstraction<IHeadlessCmsEndpointConfig>;
@@ -0,0 +1,5 @@
1
+ import { Abstraction } from "@webiny/di";
2
+ const HeadlessCmsEndpointConfig = new Abstraction("HeadlessCmsEndpointConfig");
3
+ export { HeadlessCmsEndpointConfig };
4
+
5
+ //# sourceMappingURL=HeadlessCmsEndpointConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessCmsEndpointConfig.js","sources":["../src/HeadlessCmsEndpointConfig.ts"],"sourcesContent":["import { Abstraction } from \"@webiny/di\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\n\n/**\n * The CMS endpoint type (\"manage\" | \"read\" | \"preview\") for the current handler, set in\n * HeadlessCmsFeature.register() and read by the schema builders / contextual schema.\n */\nexport interface IHeadlessCmsEndpointConfig {\n type: ApiEndpoint;\n}\n\nexport const HeadlessCmsEndpointConfig = new Abstraction<IHeadlessCmsEndpointConfig>(\n \"HeadlessCmsEndpointConfig\"\n);\n"],"names":["HeadlessCmsEndpointConfig","Abstraction"],"mappings":";AAWO,MAAMA,4BAA4B,IAAIC,YACzC"}
@@ -0,0 +1,10 @@
1
+ import type { ApiEndpoint } from "./types/index.js";
2
+ export interface HeadlessCmsConfig {
3
+ type: ApiEndpoint;
4
+ /** Extra plugins (e.g. CmsGraphQLSchemaPlugin) to register in ctx.plugins at runtime. */
5
+ extraPlugins?: any[];
6
+ }
7
+ export declare const HeadlessCmsFeature: {
8
+ name: string;
9
+ register(container: import("@webiny/di").Container, context: HeadlessCmsConfig): void;
10
+ };
@@ -0,0 +1,192 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
3
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/abstractions.js";
4
+ import { HeadlessCmsEndpointConfig } from "./HeadlessCmsEndpointConfig.js";
5
+ import { createCmsRoute } from "./createCmsRoute.js";
6
+ import { createRequestBody, processRequestBody } from "@webiny/api-graphql";
7
+ import { BenchmarkAbstraction } from "@webiny/api";
8
+ import { Benchmark } from "@webiny/api/Benchmark.js";
9
+ import { PluginsContainer } from "@webiny/plugins";
10
+ import { CompressionFeature } from "@webiny/utils/features/compression/feature.js";
11
+ import { GraphQLFeature } from "./features/graphql/index.js";
12
+ import { ValidationFeature } from "./features/validation/index.js";
13
+ import { StorageFeature } from "./features/storage/index.js";
14
+ import { CmsInstallerFeature } from "./features/installer/feature.js";
15
+ import { ContentEntriesFeature } from "./features/contentEntry/ContentEntriesFeature.js";
16
+ import { ContentModelFeature } from "./features/contentModel/ContentModelFeature.js";
17
+ import { ContentModelGroupFeature } from "./features/contentModelGroup/ContentModelGroupFeature.js";
18
+ import { ModelBuilderFeature } from "./features/modelBuilder/index.js";
19
+ import { CmsWhereMapperFeature } from "./features/whereMapper/feature.js";
20
+ import { CmsSortMapperFeature } from "./features/sortMapper/feature.js";
21
+ import { CmsWebhooksFeature } from "./features/webhooks/feature.js";
22
+ import { CmsBaseErrorTypeFactory } from "./graphql/schema/cms/CmsBaseErrorTypeFactory.js";
23
+ import { CmsSchemaExecutor } from "./graphql/CmsSchemaExecutor.js";
24
+ import { CmsMutationTypeDefsImpl, CmsQueryTypeDefsImpl, CmsResponseTypeDefsImpl } from "./graphql/schema/cms/typeDefs/index.js";
25
+ import { CreateEntryResolverImpl, DeleteEntryRevisionResolverImpl, GetEntryResolverImpl, ListEntriesResolverImpl, MutationCmsResolverImpl, PublishEntryRevisionResolverImpl, QueryCmsResolverImpl, UnpublishEntryRevisionResolverImpl, UpdateEntryRevisionResolverImpl } from "./graphql/schema/cms/resolvers/index.js";
26
+ import { AccessControl } from "./crud/AccessControl/AccessControl.js";
27
+ import { createModelGroupsCrud } from "./crud/contentModelGroup.crud.js";
28
+ import { createModelsCrud } from "./crud/contentModel.crud.js";
29
+ import { createContentEntryCrud } from "./crud/contentEntry.crud.js";
30
+ import { CmsGraphQLSchemaPlugin, CmsGroupPlugin, CmsModelPlugin, StorageOperationsCmsModelPlugin } from "./plugins/index.js";
31
+ import { createCmsModelFieldConvertersAttachFactory } from "./utils/converters/valueKeyStorageConverter.js";
32
+ import { registerFieldConverters } from "./fieldConverters/abstractions.js";
33
+ import { CmsModelPluginInstance } from "./features/contentModel/shared/abstractions.js";
34
+ import { CmsGroupPluginInstance } from "./features/contentModelGroup/shared/abstractions.js";
35
+ import { createExportCrud } from "./export/index.js";
36
+ import { createImportCrud } from "./export/crud/importing.js";
37
+ import { getSchema } from "./graphql/getSchema.js";
38
+ import { createBaseSchemaPlugins } from "./graphql/schema/baseSchema.js";
39
+ import { exportPlugin } from "./export/graphql/index.js";
40
+ import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
41
+ import { CmsGraphQLSchemaFactory } from "./graphql/CmsGraphQLSchemaFactory.js";
42
+ import { CmsExport, CmsImport } from "./export/abstractions.js";
43
+ import { ListGroupsUseCase } from "./features/contentModelGroup/ListGroups/index.js";
44
+ import { RevisionIdScalar } from "./graphql/scalars/RevisionId.js";
45
+ import { AccessControl as abstractions_js_AccessControl, CmsContext, CmsStorageModelProvider, HeadlessCms } from "./features/shared/abstractions.js";
46
+ import { EntryFromStorageTransform, EntryToStorageTransform, PluginsContainer as abstractions_js_PluginsContainer, SearchableFieldsProvider } from "./legacy/abstractions.js";
47
+ import { entryFromStorageTransform, entryToStorageTransform } from "./utils/entryStorage.js";
48
+ import { getSearchableFields } from "./crud/contentEntry/searchableFields.js";
49
+ const HeadlessCmsFeature = createFeature({
50
+ name: "HeadlessCms",
51
+ register (container, config) {
52
+ const { type } = config;
53
+ container.register(CmsBaseErrorTypeFactory);
54
+ container.register(CmsResponseTypeDefsImpl);
55
+ container.register(CmsQueryTypeDefsImpl);
56
+ container.register(CmsMutationTypeDefsImpl);
57
+ container.register(QueryCmsResolverImpl);
58
+ container.register(MutationCmsResolverImpl);
59
+ container.register(GetEntryResolverImpl);
60
+ container.register(ListEntriesResolverImpl);
61
+ container.register(CreateEntryResolverImpl);
62
+ container.register(UpdateEntryRevisionResolverImpl);
63
+ container.register(DeleteEntryRevisionResolverImpl);
64
+ container.register(PublishEntryRevisionResolverImpl);
65
+ container.register(UnpublishEntryRevisionResolverImpl);
66
+ container.registerInstance(HeadlessCmsEndpointConfig, {
67
+ type: config.type
68
+ });
69
+ CompressionFeature.register(container);
70
+ GraphQLFeature.register(container);
71
+ ValidationFeature.register(container);
72
+ StorageFeature.register(container);
73
+ CmsInstallerFeature.register(container);
74
+ ContentEntriesFeature.register(container);
75
+ ContentModelFeature.register(container);
76
+ ContentModelGroupFeature.register(container);
77
+ ModelBuilderFeature.register(container);
78
+ CmsWhereMapperFeature.register(container);
79
+ CmsSortMapperFeature.register(container);
80
+ CmsWebhooksFeature.register(container);
81
+ registerFieldConverters(container);
82
+ const pluginsContainer = new PluginsContainer([
83
+ ...config.extraPlugins ?? []
84
+ ]);
85
+ container.registerInstance(abstractions_js_PluginsContainer, pluginsContainer);
86
+ for (const plugin of pluginsContainer.byType(CmsModelPlugin.type))container.registerInstance(CmsModelPluginInstance, plugin);
87
+ for (const plugin of pluginsContainer.byType(CmsGroupPlugin.type))container.registerInstance(CmsGroupPluginInstance, plugin);
88
+ const userSchemaPlugins = pluginsContainer.byType(CmsGraphQLSchemaPlugin.type);
89
+ if (userSchemaPlugins.length > 0) container.registerInstance(CmsGraphQLSchemaFactory, {
90
+ execute: ()=>userSchemaPlugins
91
+ });
92
+ for (const plugin of config.extraPlugins ?? [])if (plugin && "function" == typeof plugin.apply) plugin.apply({
93
+ container
94
+ });
95
+ const benchmark = new Benchmark();
96
+ container.registerInstance(BenchmarkAbstraction, benchmark);
97
+ const cmsContext = {
98
+ container,
99
+ plugins: pluginsContainer,
100
+ benchmark
101
+ };
102
+ container.registerInstance(CmsContext, cmsContext);
103
+ container.registerInstance(CoreGraphQLSchemaFactory, {
104
+ execute: async (builder)=>{
105
+ builder.addTypeDefs("scalar RevisionId");
106
+ builder.addLegacyResolvers({
107
+ RevisionId: RevisionIdScalar
108
+ });
109
+ return builder;
110
+ }
111
+ });
112
+ container.registerInstance(CmsStorageModelProvider, new StorageOperationsCmsModelPlugin(createCmsModelFieldConvertersAttachFactory(cmsContext)));
113
+ const identityContext = container.resolve(IdentityContext);
114
+ const tenantContext = container.resolve(TenantContext);
115
+ const getTenant = ()=>tenantContext.getTenant();
116
+ let accessControlInstance;
117
+ const getAccessControl = ()=>{
118
+ if (!accessControlInstance) accessControlInstance = new AccessControl({
119
+ getIdentity: async ()=>identityContext.getIdentity(),
120
+ getGroupsPermissions: ()=>identityContext.getPermissions("cms.contentModelGroup"),
121
+ getModelsPermissions: ()=>identityContext.getPermissions("cms.contentModel"),
122
+ getEntriesPermissions: ()=>identityContext.getPermissions("cms.contentEntry"),
123
+ listAllGroups: async ()=>{
124
+ const result = await identityContext.withoutAuthorization(()=>container.resolve(ListGroupsUseCase).execute());
125
+ if (result.isFail()) throw result.error;
126
+ return result.value;
127
+ }
128
+ });
129
+ return accessControlInstance;
130
+ };
131
+ container.registerFactory(abstractions_js_AccessControl, ()=>getAccessControl());
132
+ let cmsFacade;
133
+ container.registerFactory(HeadlessCms, ()=>{
134
+ if (!cmsFacade) cmsFacade = {
135
+ type,
136
+ READ: "read" === type,
137
+ PREVIEW: "preview" === type,
138
+ MANAGE: "manage" === type,
139
+ accessControl: getAccessControl(),
140
+ ...createModelGroupsCrud({
141
+ context: cmsContext
142
+ }),
143
+ ...createModelsCrud({
144
+ context: cmsContext
145
+ }),
146
+ ...createContentEntryCrud({
147
+ context: cmsContext
148
+ }),
149
+ export: {
150
+ ...createExportCrud(cmsContext)
151
+ },
152
+ importing: {
153
+ ...createImportCrud(cmsContext)
154
+ }
155
+ };
156
+ return cmsFacade;
157
+ });
158
+ container.registerFactory(CmsExport, ()=>container.resolve(HeadlessCms).export);
159
+ container.registerFactory(CmsImport, ()=>container.resolve(HeadlessCms).importing);
160
+ container.registerInstance(CmsSchemaExecutor, {
161
+ execute: async (schemaType, body)=>{
162
+ const bm = container.resolve(BenchmarkAbstraction);
163
+ const schema = await bm.measure("headlessCms.graphql.getSchema", ()=>identityContext.withoutAuthorization(()=>getSchema({
164
+ context: cmsContext,
165
+ getTenant,
166
+ type: schemaType
167
+ })));
168
+ const requestBody = await bm.measure("headlessCms.graphql.createRequestBody", async ()=>createRequestBody(body));
169
+ return bm.measure("headlessCms.graphql.processRequestBody", ()=>processRequestBody(requestBody, schema, cmsContext));
170
+ }
171
+ });
172
+ container.registerInstance(CmsGraphQLSchemaFactory, {
173
+ execute: ()=>createBaseSchemaPlugins(cmsContext)
174
+ });
175
+ if ("manage" === type) container.registerInstance(CmsGraphQLSchemaFactory, {
176
+ execute: ()=>[
177
+ exportPlugin
178
+ ]
179
+ });
180
+ container.registerInstance(EntryToStorageTransform, (model, entry)=>entryToStorageTransform(cmsContext, model, entry));
181
+ container.registerInstance(EntryFromStorageTransform, (model, entry)=>entryFromStorageTransform(cmsContext, model, entry));
182
+ container.registerInstance(SearchableFieldsProvider, (params)=>getSearchableFields({
183
+ context: cmsContext,
184
+ fields: params.fields,
185
+ input: []
186
+ }));
187
+ container.register(createCmsRoute(config.type));
188
+ }
189
+ });
190
+ export { HeadlessCmsFeature };
191
+
192
+ //# sourceMappingURL=HeadlessCmsFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadlessCmsFeature.js","sources":["../src/HeadlessCmsFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/abstractions.js\";\nimport { HeadlessCmsEndpointConfig } from \"./HeadlessCmsEndpointConfig.js\";\nimport { createCmsRoute } from \"./createCmsRoute.js\";\nimport { createRequestBody, processRequestBody } from \"@webiny/api-graphql\";\nimport { BenchmarkAbstraction } from \"@webiny/api\";\nimport { Benchmark } from \"@webiny/api/Benchmark.js\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { CompressionFeature } from \"@webiny/utils/features/compression/feature.js\";\nimport { GraphQLFeature } from \"~/features/graphql/index.js\";\nimport { ValidationFeature } from \"~/features/validation/index.js\";\nimport { StorageFeature } from \"~/features/storage/index.js\";\nimport { CmsInstallerFeature } from \"~/features/installer/feature.js\";\nimport { ContentEntriesFeature } from \"~/features/contentEntry/ContentEntriesFeature.js\";\nimport { ContentModelFeature } from \"~/features/contentModel/ContentModelFeature.js\";\nimport { ContentModelGroupFeature } from \"~/features/contentModelGroup/ContentModelGroupFeature.js\";\nimport { ModelBuilderFeature } from \"~/features/modelBuilder/index.js\";\nimport { CmsWhereMapperFeature } from \"~/features/whereMapper/feature.js\";\nimport { CmsSortMapperFeature } from \"~/features/sortMapper/feature.js\";\nimport { CmsWebhooksFeature } from \"~/features/webhooks/feature.js\";\nimport type { ApiEndpoint, CmsContext } from \"~/types/index.js\";\nimport { CmsBaseErrorTypeFactory } from \"~/graphql/schema/cms/CmsBaseErrorTypeFactory.js\";\nimport { CmsSchemaExecutor } from \"~/graphql/CmsSchemaExecutor.js\";\nimport {\n CmsResponseTypeDefsImpl,\n CmsQueryTypeDefsImpl,\n CmsMutationTypeDefsImpl\n} from \"~/graphql/schema/cms/typeDefs/index.js\";\nimport {\n QueryCmsResolverImpl,\n MutationCmsResolverImpl,\n GetEntryResolverImpl,\n ListEntriesResolverImpl,\n CreateEntryResolverImpl,\n UpdateEntryRevisionResolverImpl,\n DeleteEntryRevisionResolverImpl,\n PublishEntryRevisionResolverImpl,\n UnpublishEntryRevisionResolverImpl\n} from \"~/graphql/schema/cms/resolvers/index.js\";\n// Facade wiring (moved here from HeadlessCmsInitializer so the facade can be a lazy DI factory).\nimport { AccessControl } from \"~/crud/AccessControl/AccessControl.js\";\nimport { createModelGroupsCrud } from \"~/crud/contentModelGroup.crud.js\";\nimport { createModelsCrud } from \"~/crud/contentModel.crud.js\";\nimport { createContentEntryCrud } from \"~/crud/contentEntry.crud.js\";\nimport type { ICmsGraphQLSchemaPlugin } from \"~/plugins/index.js\";\nimport {\n CmsGraphQLSchemaPlugin,\n CmsGroupPlugin,\n CmsModelPlugin,\n StorageOperationsCmsModelPlugin\n} from \"~/plugins/index.js\";\nimport { createCmsModelFieldConvertersAttachFactory } from \"~/utils/converters/valueKeyStorageConverter.js\";\nimport { registerFieldConverters } from \"~/fieldConverters/abstractions.js\";\nimport { CmsModelPluginInstance } from \"~/features/contentModel/shared/abstractions.js\";\nimport { CmsGroupPluginInstance } from \"~/features/contentModelGroup/shared/abstractions.js\";\nimport { createExportCrud } from \"~/export/index.js\";\nimport { createImportCrud } from \"~/export/crud/importing.js\";\nimport { getSchema } from \"~/graphql/getSchema.js\";\nimport { createBaseSchemaPlugins } from \"~/graphql/schema/baseSchema.js\";\nimport { exportPlugin } from \"~/export/graphql/index.js\";\nimport { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { CmsGraphQLSchemaFactory } from \"~/graphql/CmsGraphQLSchemaFactory.js\";\nimport { CmsExport, CmsImport } from \"~/export/abstractions.js\";\nimport { ListGroupsUseCase } from \"~/features/contentModelGroup/ListGroups/index.js\";\nimport { RevisionIdScalar } from \"~/graphql/scalars/RevisionId.js\";\nimport {\n AccessControl as AccessControlAbstraction,\n CmsContext as CmsContextAbstraction,\n CmsStorageModelProvider,\n HeadlessCms\n} from \"~/features/shared/abstractions.js\";\n\nimport {\n EntryFromStorageTransform,\n EntryToStorageTransform,\n PluginsContainer as PluginsContainerAbstraction,\n SearchableFieldsProvider\n} from \"~/legacy/abstractions.js\";\nimport { entryFromStorageTransform, entryToStorageTransform } from \"~/utils/entryStorage.js\";\nimport { getSearchableFields } from \"~/crud/contentEntry/searchableFields.js\";\nexport interface HeadlessCmsConfig {\n type: ApiEndpoint;\n /** Extra plugins (e.g. CmsGraphQLSchemaPlugin) to register in ctx.plugins at runtime. */\n extraPlugins?: any[];\n}\n\nexport const HeadlessCmsFeature = createFeature<HeadlessCmsConfig>({\n name: \"HeadlessCms\",\n register(container, config) {\n const { type } = config;\n\n // Pre-register the CMS SDK namespace schema (Query.cms / Mutation.cms) so it is\n // available when GraphQLSchemaComposer is constructed (before context enhancement).\n // All these implementations have zero DI dependencies and are safe to register early.\n container.register(CmsBaseErrorTypeFactory); // CmsError must come first\n container.register(CmsResponseTypeDefsImpl);\n container.register(CmsQueryTypeDefsImpl);\n container.register(CmsMutationTypeDefsImpl);\n container.register(QueryCmsResolverImpl);\n container.register(MutationCmsResolverImpl);\n container.register(GetEntryResolverImpl);\n container.register(ListEntriesResolverImpl);\n container.register(CreateEntryResolverImpl);\n container.register(UpdateEntryRevisionResolverImpl);\n container.register(DeleteEntryRevisionResolverImpl);\n container.register(PublishEntryRevisionResolverImpl);\n container.register(UnpublishEntryRevisionResolverImpl);\n\n container.registerInstance(HeadlessCmsEndpointConfig, {\n type: config.type\n });\n\n // Register CMS DI features statically so they are available before any enhancers run.\n // All these are pure class registrations (no eager instantiation) so they are safe\n // to register here before any request-time context is available.\n CompressionFeature.register(container);\n GraphQLFeature.register(container);\n ValidationFeature.register(container);\n StorageFeature.register(container);\n CmsInstallerFeature.register(container);\n ContentEntriesFeature.register(container);\n ContentModelFeature.register(container);\n ContentModelGroupFeature.register(container);\n ModelBuilderFeature.register(container);\n CmsWhereMapperFeature.register(container);\n CmsSortMapperFeature.register(container);\n CmsWebhooksFeature.register(container);\n\n // ============================================================================\n // Synchronous per-request wiring (moved out of HeadlessCmsInitializer.init).\n // register() runs per request, pre-auth — correct for pure wiring and closures.\n // ============================================================================\n\n // Field value converters are resolved from the DI container.\n registerFieldConverters(container);\n\n // PluginsContainer still carries legacy extension plugins (e.g. CmsGraphQLSchemaPlugin)\n // until those remaining consumers are migrated to DI.\n const pluginsContainer = new PluginsContainer([...(config.extraPlugins ?? [])]);\n container.registerInstance(PluginsContainerAbstraction, pluginsContainer);\n\n // Code-defined model/group plugins are exposed via DI tokens so the\n // Plugin{Models,Groups}Provider can resolve them without the plugins container.\n for (const plugin of pluginsContainer.byType<CmsModelPlugin>(CmsModelPlugin.type)) {\n container.registerInstance(CmsModelPluginInstance, plugin);\n }\n for (const plugin of pluginsContainer.byType<CmsGroupPlugin>(CmsGroupPlugin.type)) {\n container.registerInstance(CmsGroupPluginInstance, plugin);\n }\n\n // User-provided GraphQL schema extension plugins (added via extraPlugins) are bridged\n // to the CmsGraphQLSchemaFactory DI token so generateSchema includes them.\n const userSchemaPlugins = pluginsContainer.byType<ICmsGraphQLSchemaPlugin>(\n CmsGraphQLSchemaPlugin.type\n );\n if (userSchemaPlugins.length > 0) {\n container.registerInstance(CmsGraphQLSchemaFactory, {\n execute: () => userSchemaPlugins\n });\n }\n\n // RegisterExtensionPlugins supplied via extraPlugins (test infra) only do DI registration\n // via their apply(). Apply them here at register() time — matching the app's registerExtensions\n // and the storage presets above — so code-defined models are present before per-request model\n // listing runs.\n for (const plugin of config.extraPlugins ?? []) {\n if (plugin && typeof (plugin as any).apply === \"function\") {\n (plugin as any).apply({ container });\n }\n }\n\n const benchmark = new Benchmark();\n container.registerInstance(BenchmarkAbstraction, benchmark);\n\n // The CmsContext \"shim\": the request-scoped context object the facade builders, transforms\n // and getSchema operate on. They only read `.container` (+ plugins/benchmark), so this is\n // all they need — there is no legacy bag.\n const cmsContext = {\n container,\n plugins: pluginsContainer,\n benchmark\n } as unknown as CmsContext;\n container.registerInstance(CmsContextAbstraction, cmsContext);\n\n container.registerInstance(CoreGraphQLSchemaFactory, {\n execute: async builder => {\n builder.addTypeDefs(\"scalar RevisionId\");\n builder.addLegacyResolvers({ RevisionId: RevisionIdScalar });\n return builder;\n }\n });\n\n container.registerInstance(\n CmsStorageModelProvider,\n new StorageOperationsCmsModelPlugin(\n createCmsModelFieldConvertersAttachFactory(cmsContext)\n )\n );\n\n // Entry storage operations are registered by each adapter's feature at app-scope.\n // HeadlessCmsFeature no longer manages entry storage registration.\n\n const identityContext = container.resolve(IdentityContext);\n const tenantContext = container.resolve(TenantContext);\n const getTenant = () => tenantContext.getTenant();\n\n // AccessControl is identity-dependent; build it lazily and memoise per request container.\n let accessControlInstance: AccessControl | undefined;\n const getAccessControl = (): AccessControl => {\n if (!accessControlInstance) {\n accessControlInstance = new AccessControl({\n getIdentity: async () => identityContext.getIdentity(),\n getGroupsPermissions: () =>\n identityContext.getPermissions(\"cms.contentModelGroup\"),\n getModelsPermissions: () => identityContext.getPermissions(\"cms.contentModel\"),\n getEntriesPermissions: () => identityContext.getPermissions(\"cms.contentEntry\"),\n listAllGroups: async () => {\n const result = await identityContext.withoutAuthorization(() =>\n container.resolve(ListGroupsUseCase).execute()\n );\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n }\n });\n }\n return accessControlInstance;\n };\n container.registerFactory(AccessControlAbstraction, () => getAccessControl());\n\n // The HeadlessCms facade — a LAZY factory built on first resolve (post-auth), memoised per\n // request container.\n let cmsFacade: HeadlessCms.Interface | undefined;\n container.registerFactory(HeadlessCms, () => {\n if (!cmsFacade) {\n cmsFacade = {\n type,\n READ: type === \"read\",\n PREVIEW: type === \"preview\",\n MANAGE: type === \"manage\",\n accessControl: getAccessControl(),\n ...createModelGroupsCrud({ context: cmsContext }),\n ...createModelsCrud({ context: cmsContext }),\n ...createContentEntryCrud({ context: cmsContext }),\n export: { ...createExportCrud(cmsContext) },\n importing: { ...createImportCrud(cmsContext) }\n } as HeadlessCms.Interface;\n }\n return cmsFacade;\n });\n container.registerFactory(CmsExport, () => container.resolve(HeadlessCms).export);\n container.registerFactory(CmsImport, () => container.resolve(HeadlessCms).importing);\n\n // Register CmsSchemaExecutor so proxy resolvers can build and execute the CMS sub-schema.\n container.registerInstance(CmsSchemaExecutor, {\n execute: async (schemaType: ApiEndpoint, body: any) => {\n const bm = container.resolve(BenchmarkAbstraction);\n const schema = await bm.measure(\"headlessCms.graphql.getSchema\", () =>\n identityContext.withoutAuthorization(() =>\n getSchema({ context: cmsContext, getTenant, type: schemaType })\n )\n );\n const requestBody = await bm.measure(\n \"headlessCms.graphql.createRequestBody\",\n async () => createRequestBody(body)\n );\n return bm.measure(\"headlessCms.graphql.processRequestBody\", () =>\n processRequestBody(requestBody, schema, cmsContext)\n );\n }\n });\n\n // Register CMS sub-schema factories: base types (CmsError, CmsIdentity, etc.)\n // and, for manage endpoints, the import/export operations.\n container.registerInstance(CmsGraphQLSchemaFactory, {\n execute: () => createBaseSchemaPlugins(cmsContext)\n });\n if (type === \"manage\") {\n container.registerInstance(CmsGraphQLSchemaFactory, {\n execute: () => [exportPlugin]\n });\n }\n\n container.registerInstance(EntryToStorageTransform, (model, entry) => {\n return entryToStorageTransform(cmsContext, model, entry);\n });\n container.registerInstance(EntryFromStorageTransform, (model, entry) => {\n return entryFromStorageTransform(cmsContext, model, entry);\n });\n container.registerInstance(SearchableFieldsProvider, params => {\n return getSearchableFields({\n context: cmsContext,\n fields: params.fields,\n input: []\n });\n });\n\n container.register(createCmsRoute(config.type));\n }\n});\n"],"names":["HeadlessCmsFeature","createFeature","container","config","type","CmsBaseErrorTypeFactory","CmsResponseTypeDefsImpl","CmsQueryTypeDefsImpl","CmsMutationTypeDefsImpl","QueryCmsResolverImpl","MutationCmsResolverImpl","GetEntryResolverImpl","ListEntriesResolverImpl","CreateEntryResolverImpl","UpdateEntryRevisionResolverImpl","DeleteEntryRevisionResolverImpl","PublishEntryRevisionResolverImpl","UnpublishEntryRevisionResolverImpl","HeadlessCmsEndpointConfig","CompressionFeature","GraphQLFeature","ValidationFeature","StorageFeature","CmsInstallerFeature","ContentEntriesFeature","ContentModelFeature","ContentModelGroupFeature","ModelBuilderFeature","CmsWhereMapperFeature","CmsSortMapperFeature","CmsWebhooksFeature","registerFieldConverters","pluginsContainer","PluginsContainer","PluginsContainerAbstraction","plugin","CmsModelPlugin","CmsModelPluginInstance","CmsGroupPlugin","CmsGroupPluginInstance","userSchemaPlugins","CmsGraphQLSchemaPlugin","CmsGraphQLSchemaFactory","benchmark","Benchmark","BenchmarkAbstraction","cmsContext","CmsContextAbstraction","CoreGraphQLSchemaFactory","builder","RevisionIdScalar","CmsStorageModelProvider","StorageOperationsCmsModelPlugin","createCmsModelFieldConvertersAttachFactory","identityContext","IdentityContext","tenantContext","TenantContext","getTenant","accessControlInstance","getAccessControl","AccessControl","result","ListGroupsUseCase","AccessControlAbstraction","cmsFacade","HeadlessCms","createModelGroupsCrud","createModelsCrud","createContentEntryCrud","createExportCrud","createImportCrud","CmsExport","CmsImport","CmsSchemaExecutor","schemaType","body","bm","schema","getSchema","requestBody","createRequestBody","processRequestBody","createBaseSchemaPlugins","exportPlugin","EntryToStorageTransform","model","entry","entryToStorageTransform","EntryFromStorageTransform","entryFromStorageTransform","SearchableFieldsProvider","params","getSearchableFields","createCmsRoute"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Container } from "@webiny/di";
2
+ import type { IHttpRequest, IHttpResponse } from "@webiny/event-handler-core";
3
+ import type { IGraphQLContextualSchema } from "@webiny/api-graphql";
4
+ import type { ApiEndpoint } from "./types/index.js";
5
+ /**
6
+ * The HTTP route for a CMS GraphQL endpoint (manage/read/preview). Per request it runs the
7
+ * contextual schemas, then executes the CMS sub-schema via CmsSchemaExecutor. The post-auth
8
+ * RequestContextInitializers are run once per request by the HTTP layer
9
+ * (RequestContextInitializerDecorator) before the router dispatches, so they cover every route.
10
+ */
11
+ export declare function createCmsRoute(type: ApiEndpoint): {
12
+ new (container: Container, contextualSchemas: IGraphQLContextualSchema[]): {
13
+ readonly method: "POST";
14
+ readonly path: string;
15
+ container: Container;
16
+ contextualSchemas: IGraphQLContextualSchema[];
17
+ handle(request: IHttpRequest): Promise<IHttpResponse>;
18
+ };
19
+ } & {
20
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-core").IHttpRoute>;
21
+ };
@@ -0,0 +1,49 @@
1
+ import { HttpRoute, RequestContainer } from "@webiny/event-handler-core";
2
+ import { GraphQLContextualSchema } from "@webiny/api-graphql";
3
+ import { BenchmarkAbstraction } from "@webiny/api";
4
+ import { CmsSchemaExecutor } from "./graphql/CmsSchemaExecutor.js";
5
+ const CMS_PATHS = {
6
+ manage: "/cms/manage",
7
+ read: "/cms/read",
8
+ preview: "/cms/preview"
9
+ };
10
+ function createCmsRoute(type) {
11
+ class CmsGraphQLRoute {
12
+ constructor(container, contextualSchemas){
13
+ this.container = container;
14
+ this.contextualSchemas = contextualSchemas;
15
+ this.method = "POST";
16
+ this.path = CMS_PATHS[type];
17
+ }
18
+ async handle(request) {
19
+ const ctx = {
20
+ container: this.container
21
+ };
22
+ for (const schema of this.contextualSchemas)await schema.build(ctx);
23
+ const result = await this.container.resolve(CmsSchemaExecutor).execute(type, request.body);
24
+ await this.container.resolve(BenchmarkAbstraction).output();
25
+ return {
26
+ statusCode: 200,
27
+ headers: {
28
+ "Content-Type": "application/json"
29
+ },
30
+ body: result
31
+ };
32
+ }
33
+ }
34
+ return HttpRoute.createImplementation({
35
+ implementation: CmsGraphQLRoute,
36
+ dependencies: [
37
+ RequestContainer,
38
+ [
39
+ GraphQLContextualSchema,
40
+ {
41
+ multiple: true
42
+ }
43
+ ]
44
+ ]
45
+ });
46
+ }
47
+ export { createCmsRoute };
48
+
49
+ //# sourceMappingURL=createCmsRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCmsRoute.js","sources":["../src/createCmsRoute.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport { HttpRoute, RequestContainer } from \"@webiny/event-handler-core\";\nimport type { IHttpRequest, IHttpResponse } from \"@webiny/event-handler-core\";\nimport { GraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport type { IGraphQLContextualSchema } from \"@webiny/api-graphql\";\nimport { BenchmarkAbstraction } from \"@webiny/api\";\nimport { CmsSchemaExecutor } from \"~/graphql/CmsSchemaExecutor.js\";\nimport type { ApiEndpoint } from \"~/types/index.js\";\n\nconst CMS_PATHS: Record<ApiEndpoint, string> = {\n manage: \"/cms/manage\",\n read: \"/cms/read\",\n preview: \"/cms/preview\"\n};\n\n/**\n * The HTTP route for a CMS GraphQL endpoint (manage/read/preview). Per request it runs the\n * contextual schemas, then executes the CMS sub-schema via CmsSchemaExecutor. The post-auth\n * RequestContextInitializers are run once per request by the HTTP layer\n * (RequestContextInitializerDecorator) before the router dispatches, so they cover every route.\n */\nexport function createCmsRoute(type: ApiEndpoint) {\n class CmsGraphQLRoute implements HttpRoute.Interface {\n readonly method = \"POST\";\n readonly path = CMS_PATHS[type];\n\n // public (not private): this class is returned from an exported factory, so its members\n // must be declarable in the emitted .d.ts — private parameter-properties on an exported\n // anonymous class type are a TS4094 error.\n constructor(\n public container: Container,\n public contextualSchemas: IGraphQLContextualSchema[]\n ) {}\n\n async handle(request: IHttpRequest): Promise<IHttpResponse> {\n const ctx: Record<string, any> = { container: this.container };\n for (const schema of this.contextualSchemas) {\n await schema.build(ctx);\n }\n const result = await this.container\n .resolve(CmsSchemaExecutor)\n .execute(type, request.body);\n // Flush benchmark measurements (no-op unless benchmarking was enabled for the request).\n await this.container.resolve(BenchmarkAbstraction).output();\n return {\n statusCode: 200,\n headers: { \"Content-Type\": \"application/json\" },\n body: result\n };\n }\n }\n\n return HttpRoute.createImplementation({\n implementation: CmsGraphQLRoute,\n dependencies: [RequestContainer, [GraphQLContextualSchema, { multiple: true }]]\n });\n}\n"],"names":["CMS_PATHS","createCmsRoute","type","CmsGraphQLRoute","container","contextualSchemas","request","ctx","schema","result","CmsSchemaExecutor","BenchmarkAbstraction","HttpRoute","RequestContainer","GraphQLContextualSchema"],"mappings":";;;;AASA,MAAMA,YAAyC;IAC3C,QAAQ;IACR,MAAM;IACN,SAAS;AACb;AAQO,SAASC,eAAeC,IAAiB;IAC5C,MAAMC;QAOF,YACWC,SAAoB,EACpBC,iBAA6C,CACtD;iBAFSD,SAAS,GAATA;iBACAC,iBAAiB,GAAjBA;iBARF,MAAM,GAAG;iBACT,IAAI,GAAGL,SAAS,CAACE,KAAK;QAQ5B;QAEH,MAAM,OAAOI,OAAqB,EAA0B;YACxD,MAAMC,MAA2B;gBAAE,WAAW,IAAI,CAAC,SAAS;YAAC;YAC7D,KAAK,MAAMC,UAAU,IAAI,CAAC,iBAAiB,CACvC,MAAMA,OAAO,KAAK,CAACD;YAEvB,MAAME,SAAS,MAAM,IAAI,CAAC,SAAS,CAC9B,OAAO,CAACC,mBACR,OAAO,CAACR,MAAMI,QAAQ,IAAI;YAE/B,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACK,sBAAsB,MAAM;YACzD,OAAO;gBACH,YAAY;gBACZ,SAAS;oBAAE,gBAAgB;gBAAmB;gBAC9C,MAAMF;YACV;QACJ;IACJ;IAEA,OAAOG,UAAU,oBAAoB,CAAC;QAClC,gBAAgBT;QAChB,cAAc;YAACU;YAAkB;gBAACC;gBAAyB;oBAAE,UAAU;gBAAK;aAAE;SAAC;IACnF;AACJ"}
@@ -4,7 +4,7 @@ interface IValidateModelEntryDataParams<TValues extends CmsEntryValues = CmsEntr
4
4
  model: CmsModel;
5
5
  values: TValues;
6
6
  entry?: CmsEntry<TValues>;
7
- skipValidators?: string[];
7
+ skipValidation?: boolean;
8
8
  }
9
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>;
@@ -1,4 +1,3 @@
1
- import camelCase from "lodash/camelCase.js";
2
1
  import { EntryValidationError } from "../../domain/contentEntry/errors.js";
3
2
  import { CmsModelFieldValidatorRegistry } from "../../features/validation/index.js";
4
3
  const validateValue = async (params, fieldValidators, value)=>{
@@ -65,28 +64,16 @@ const execValidation = async (params)=>{
65
64
  return await runFieldValueValidations(params);
66
65
  };
67
66
  const validateModelEntryData = async (params)=>{
68
- const { context, model, entry, values, skipValidators } = params;
69
- const isValidatorSkipped = (validator)=>{
70
- if (!skipValidators) return false;
71
- return skipValidators.includes(camelCase(validator.name));
72
- };
73
- const skippedValidators = new Set();
67
+ const { context, model, entry, values, skipValidation } = params;
68
+ if (skipValidation) return [];
74
69
  const validatorList = {};
75
70
  const registry = context.container.resolve(CmsModelFieldValidatorRegistry);
76
71
  const validators = registry.getAll();
77
72
  for (const validator of validators){
78
73
  const name = validator.name;
79
74
  if (!validatorList[name]) validatorList[name] = [];
80
- const isSkipped = isValidatorSkipped(validator);
81
- if (isSkipped) {
82
- skippedValidators.add(name);
83
- validatorList[name].push(async ()=>true);
84
- continue;
85
- }
86
75
  validatorList[name].push((params)=>validator.validate(params));
87
76
  }
88
- const keys = Object.keys(validatorList);
89
- if (keys.length === skippedValidators.size) return [];
90
77
  return await entryDataValidation_validate({
91
78
  validatorList,
92
79
  context,
@@ -1 +1 @@
1
- {"version":3,"file":"crud/contentEntry/entryDataValidation.js","sources":["../../../src/crud/contentEntry/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"],"names":["validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","validate","result","ex","validatePredefinedValue","enabled","predefinedValues","Array","predefinedValue","getFieldValidation","listValidation","item","runFieldMultipleValuesValidations","initialValues","values","valuesError","valueError","predefinedValueError","runFieldValueValidations","error","execValidation","validateModelEntryData","skipValidators","isValidatorSkipped","validator","camelCase","skippedValidators","Set","registry","CmsModelFieldValidatorRegistry","validators","isSkipped","keys","Object","validateModelEntryDataOrThrow","invalidFields","EntryValidationError","executeFieldValidation","fields","objectValue","index","parents","childField","errors","templates","template","fieldData","templateValue","results","Promise"],"mappings":"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"}
1
+ {"version":3,"file":"crud/contentEntry/entryDataValidation.js","sources":["../../../src/crud/contentEntry/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 { 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 skipValidation?: boolean;\n}\n\nexport const validateModelEntryData = async <TValues extends CmsEntryValues = CmsEntryValues>(\n params: IValidateModelEntryDataParams<TValues>\n) => {\n const { context, model, entry, values, skipValidation } = params;\n\n if (skipValidation) {\n return [];\n }\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 validatorList[name].push(params => {\n return validator.validate(params);\n });\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"],"names":["validateValue","params","fieldValidators","value","validatorList","context","field","model","entry","fieldValidator","name","validations","validate","result","ex","validatePredefinedValue","enabled","predefinedValues","Array","predefinedValue","getFieldValidation","listValidation","item","runFieldMultipleValuesValidations","initialValues","values","valuesError","valueError","predefinedValueError","runFieldValueValidations","error","execValidation","validateModelEntryData","skipValidation","registry","CmsModelFieldValidatorRegistry","validators","validator","validateModelEntryDataOrThrow","invalidFields","EntryValidationError","executeFieldValidation","fields","objectValue","index","parents","childField","errors","templates","template","fieldData","templateValue","results","Promise"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { CmsContext } from "../../../types/index.js";
2
2
  interface ValidateReferencedEntriesParams {
3
3
  output: Record<string, any>;
4
- context: Pick<CmsContext, "cms" | "security">;
4
+ context: Pick<CmsContext, "container">;
5
5
  referenceFieldPaths: string[];
6
6
  }
7
7
  export declare const validateReferencedEntries: ({ output, context, referenceFieldPaths }: ValidateReferencedEntriesParams) => Promise<void>;
@@ -1,5 +1,8 @@
1
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
1
2
  import dot_prop_immutable from "dot-prop-immutable";
2
3
  import { WebinyError } from "@webiny/error";
4
+ import { ListModelsUseCase } from "../../../features/contentModel/ListModels/index.js";
5
+ import { GetEntriesByIdsUseCase } from "../../../features/contentEntry/GetEntriesByIds/index.js";
3
6
  const getReferenceFieldValue = (ref)=>{
4
7
  if (!ref?.id || !ref.modelId) return null;
5
8
  return ref;
@@ -15,14 +18,21 @@ const validateReferencedEntries = async ({ output, context, referenceFieldPaths
15
18
  referencesByModel.set(result.modelId, refs);
16
19
  }
17
20
  if (0 === referencesByModel.size) return;
18
- const models = await context.security.withoutAuthorization(async ()=>(await context.cms.listModels()).filter((model)=>{
19
- const entries = referencesByModel.get(model.modelId) || [];
20
- if (0 === entries.length) return false;
21
- return true;
22
- }));
21
+ const modelsResult = await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>context.container.resolve(ListModelsUseCase).execute());
22
+ if (modelsResult.isFail()) throw modelsResult.error;
23
+ const models = modelsResult.value.filter((model)=>{
24
+ const entries = referencesByModel.get(model.modelId) || [];
25
+ return entries.length > 0;
26
+ });
23
27
  if (!models.length) return;
24
- const promises = await context.security.withoutAuthorization(async ()=>models.map((model)=>context.cms.getEntriesByIds(model, referencesByModel.get(model.modelId) || [])));
25
- const allEntries = await Promise.all(promises).then((res)=>res.flat());
28
+ const allEntries = await context.container.resolve(IdentityContext).withoutAuthorization(async ()=>{
29
+ const fetches = models.map(async (model)=>{
30
+ const result = await context.container.resolve(GetEntriesByIdsUseCase).execute(model, referencesByModel.get(model.modelId) || []);
31
+ if (result.isFail()) throw result.error;
32
+ return result.value;
33
+ });
34
+ return (await Promise.all(fetches)).flat();
35
+ });
26
36
  const entriesByModel = allEntries.reduce((acc, entry)=>({
27
37
  ...acc,
28
38
  [entry.modelId]: [